diff --git a/visa/visa-api/pom.xml b/visa/visa-api/pom.xml index f61c301c..ff6ba36d 100644 --- a/visa/visa-api/pom.xml +++ b/visa/visa-api/pom.xml @@ -45,6 +45,11 @@ workflow-engine-common ${workflow-engine.version} + + cn.axzo.nanopart + ess-api + ${project.version} + diff --git a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordApi.java b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordApi.java index fadb3718..4d02ef5e 100644 --- a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordApi.java +++ b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordApi.java @@ -173,4 +173,5 @@ public interface ChangeRecordApi { */ @PostMapping("/api/visa/change/list") ApiPageResult list(@RequestBody @Validated VisaSearchReq req); + } diff --git a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordRelationApi.java b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordRelationApi.java index e6f09f10..c4b03bd8 100644 --- a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordRelationApi.java +++ b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/changerecord/ChangeRecordRelationApi.java @@ -5,6 +5,7 @@ import cn.axzo.nanopart.visa.api.request.ChangeRecordAppendAttachReq; import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq; import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq; import cn.axzo.nanopart.visa.api.request.VisaRelationReq; +import cn.axzo.nanopart.visa.api.request.VisaRequestStampReq; import cn.axzo.nanopart.visa.api.response.ImGroupTipsResp; import cn.axzo.nanopart.visa.api.response.VisaRelationResp; import org.springframework.cloud.openfeign.FeignClient; @@ -39,4 +40,12 @@ public interface ChangeRecordRelationApi { */ @PostMapping("/api/visa/relation/attach/append") ApiResult appendAttachment(@Validated @RequestBody ChangeRecordAppendAttachReq req); + + /** + * 用印申请提交 + * @param req + * @return + */ + @PostMapping("/api/visa/stamp/request") + ApiResult requestStamp(@Validated @RequestBody VisaRequestStampReq req); } diff --git a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/enums/VisaRelationFieldEnum.java b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/enums/VisaRelationFieldEnum.java index c05d9322..b34209ad 100644 --- a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/enums/VisaRelationFieldEnum.java +++ b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/enums/VisaRelationFieldEnum.java @@ -24,6 +24,7 @@ public enum VisaRelationFieldEnum { PROCESS_INSTANCE_OF_ESS("process_instance_of_ess", "用印审批实例"), ORDER("order", "单据"), IM_GROUP_PARTICIPATE("im_group_participate", "im群聊参与人"), + PRINT_PDF_FILE("print_pdf_file", "打印生成的PDF文件"), ; private final String code; private final String desc; diff --git a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/request/ChangeRecordAppendAttachReq.java b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/request/ChangeRecordAppendAttachReq.java index 5e82d694..6949d3b3 100644 --- a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/request/ChangeRecordAppendAttachReq.java +++ b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/request/ChangeRecordAppendAttachReq.java @@ -36,4 +36,6 @@ public class ChangeRecordAppendAttachReq { private Long operatorOuId; + private Long operatorWorkspaceId; + } diff --git a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/request/VisaRequestStampReq.java b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/request/VisaRequestStampReq.java new file mode 100644 index 00000000..540638a5 --- /dev/null +++ b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/request/VisaRequestStampReq.java @@ -0,0 +1,79 @@ +package cn.axzo.nanopart.visa.api.request; + +import cn.axzo.nanopart.ess.api.enums.EssSealType; +import cn.axzo.workflow.common.model.dto.UploadFieldDTO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * 用印申请入参模型 + * + * @author wangli + * @since 2025-02-20 22:10 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VisaRequestStampReq { + + /** + * 变洽签单据 ID + */ + @NotNull(message = "变洽签单据 ID 不能为空") + private Long visaId; + + /** + * 变洽签打印 PDF 附件信息 + */ + @NotNull(message = "PDF附件信息不能为空") + private UploadFieldDTO pdfFile; + + /** + * 各单位申请印章信息 + */ + @Valid + @NotEmpty(message = "申请用印单位不能为空") + private List requestStamps; + + @NotNull(message = "操作人 personId 不能为空") + private Long operatorPersonId; + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class RequestStampModel { + + /** + * 单位 ID + */ + @NotNull(message = "单位 ID 不能为空") + private Long ouId; + + /** + * 印章类型 + *

+ * OFFICIAL("公章"), + * CONTRACT("合同专用章"), + * FINANCE("财务专用章"), + * PERSONNEL("人事专用章"), + * INVOICE("发票专用章"), + * LEGAL_PERSON_SEAL("法定代表人章"), + * OTHER("其他"); + */ + @NotNull(message = "印章类型不能为空") + private EssSealType sealType; + + /** + * 审批实例 ID,前端不关心 + */ + private String processInstanceId; + } +} diff --git a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/response/VisaChangePageSearchResp.java b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/response/VisaChangePageSearchResp.java index bf04fc09..e5577610 100644 --- a/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/response/VisaChangePageSearchResp.java +++ b/visa/visa-api/src/main/java/cn/axzo/nanopart/visa/api/response/VisaChangePageSearchResp.java @@ -57,6 +57,10 @@ public class VisaChangePageSearchResp { */ private Date happenTime; + /** + * 审批实例 ID + */ + private String approvalId; /** * 最终审批时间 diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordController.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordController.java index 3d16ecc4..d126bd6c 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordController.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordController.java @@ -180,4 +180,5 @@ public class ChangeRecordController implements ChangeRecordApi { public ApiResult> getBillIfRelated(GetBillIfRelatedReq req) { return ApiResult.ok(changeRecordBillService.getBillIfRelated(req)); } + } diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordRelationController.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordRelationController.java index ef800c87..e6c6f3a9 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordRelationController.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/controller/ChangeRecordRelationController.java @@ -6,6 +6,7 @@ import cn.axzo.nanopart.visa.api.request.ChangeRecordAppendAttachReq; import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq; import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq; import cn.axzo.nanopart.visa.api.request.VisaRelationReq; +import cn.axzo.nanopart.visa.api.request.VisaRequestStampReq; import cn.axzo.nanopart.visa.api.response.ImGroupTipsResp; import cn.axzo.nanopart.visa.api.response.VisaRelationResp; import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation; @@ -70,4 +71,10 @@ public class ChangeRecordRelationController implements ChangeRecordRelationApi { changeRecordRelationService.appendAttachment(req); return ApiResult.ok(); } + + @Override + public ApiResult requestStamp(VisaRequestStampReq req) { + changeRecordRelationService.requestStamp(req); + return ApiResult.ok(); + } } diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordRelationService.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordRelationService.java index b0cb25c9..8cb6a9d7 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordRelationService.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordRelationService.java @@ -6,6 +6,7 @@ import cn.axzo.nanopart.visa.api.request.ImGroupOperationClearReq; import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq; import cn.axzo.nanopart.visa.api.request.ImGroupTipsQueryReq; import cn.axzo.nanopart.visa.api.request.VisaChangeTempCreateReq; +import cn.axzo.nanopart.visa.api.request.VisaRequestStampReq; import cn.axzo.nanopart.visa.api.response.ImGroupTipsResp; import cn.axzo.nanopart.visa.server.domain.ChangeRecord; import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation; @@ -67,4 +68,10 @@ public interface ChangeRecordRelationService extends IService ids); + + /** + * 用印申请 + * @param req + */ + void requestStamp(VisaRequestStampReq req); } diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordService.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordService.java index cf46aa92..93630cde 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordService.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/ChangeRecordService.java @@ -19,6 +19,7 @@ import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp; import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse; import cn.axzo.nanopart.visa.api.response.VisaSearchResp; import cn.axzo.nanopart.visa.server.domain.ChangeRecord; +import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -56,6 +57,16 @@ public interface ChangeRecordService extends IService { */ VisaDetailByIdResponse detailById(Long visaId); + /** + * 附件对象转换 + */ + List buildAttachUploadFileByRelation(List attachList); + + /** + * 构建上传文件对象集合 + */ + List buildAttachUploadFile(Long visaId); + /** * 创建变更签证 * diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/VisaHelper.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/VisaHelper.java index becc462d..4365d1c1 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/VisaHelper.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/VisaHelper.java @@ -2,6 +2,7 @@ package cn.axzo.nanopart.visa.server.service; import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum; import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum; +import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum; import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum; import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest; import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse; @@ -86,7 +87,22 @@ public class VisaHelper { // 由[决策中|执行中] -> [审批中] 执行变更签证属性变更 if (Objects.nonNull(oldContext.getStatus()) && Objects.nonNull(newContext.getStatus()) && VisaStatusEnum.isEditForm(oldContext.getStatus()) - && newContext.getStatus().equals(VisaStatusEnum.APPROVING)) { + && VisaStatusEnum.isEditForm(newContext.getStatus())) { + + List oldUploadFiles = this.changeRecordService.buildAttachUploadFileByRelation(oldContext.getRelationList()); + List newUploadFiles = this.changeRecordService.buildAttachUploadFile(newContext.getChangeRecord().getId()); + + + changeRecordLogService.batchAddLog(newContext.getChangeRecord().getId(), VisaLogTypeEnum.EDIT_FORM, VisaLogParam.builder() + .personId(newContext.getPersonId()) + .ouId(newContext.getOuId()) + .workspaceId(newContext.getWorkspaceId()) + .newAmountChange(newContext.getChangeRecord().getAmountChange()) + .oldAmountChange(oldContext.getChangeRecord().getAmountChange()) + .uploadAttach(VisaLogParam.uploadAttachWithObject(newUploadFiles, oldUploadFiles)) + .deleteAttach(VisaLogParam.deleteAttachWithObject(oldUploadFiles, newUploadFiles)) + .build()); + logApiGateway.addLog(Constants.VISA_LOG_SNAPSHOT_SCENE , Constants.VISA_LOG_SNAPSHOT_LEVEL , Lists.newArrayList(Constants.VISA_LOG_SNAPSHOT_TAG_SNAPSHOT) diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordLogServiceImpl.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordLogServiceImpl.java index c8b15987..6a1c55ef 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordLogServiceImpl.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordLogServiceImpl.java @@ -16,6 +16,7 @@ import cn.axzo.nanopart.visa.server.utils.Constants; import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO; import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; +import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; @@ -114,7 +115,9 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl uploadAttachFileNameList = req.getAttach().stream().map(item -> item.getFileName()).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(uploadAttachFileNameList)) { + changeRecordLogService.batchAddLog(req.getVisaId(), VisaLogTypeEnum.UPLOAD_FILE + , VisaLogParam.builder().personId(req.getOperatorPersonId()) + .ouId(req.getOperatorOuId()) + .workspaceId(req.getOperatorWorkspaceId()) + .uploadAttach(uploadAttachFileNameList).build()); + } + + } + + } @@ -360,4 +388,49 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl relations = req.getRequestStamps().stream().map(i -> { + ChangeRecordRelation stamp = new ChangeRecordRelation(); + stamp.setVisaId(req.getVisaId()); + stamp.setVarName(PROCESS_INSTANCE_OF_ESS.name()); + stamp.setVarType(VisaRelationVarTypeEnum.JSON.getType()); + // 发起用印的审批 + i.setProcessInstanceId(createEssProcessInstance(i, visa)); + stamp.setContent(JSON.toJSONString(i)); + stamp.setCreateBy(req.getOperatorPersonId()); + stamp.setUpdateBy(req.getOperatorPersonId()); + return stamp; + }).collect(Collectors.toList()); + + ChangeRecordRelation relation = new ChangeRecordRelation(); + relation.setVisaId(req.getVisaId()); + relation.setVarName(PRINT_PDF_FILE.name()); + relation.setVarType(VisaRelationVarTypeEnum.JSON.getType()); + relation.setContent(JSON.toJSONString(req.getPdfFile())); + relation.setCreateBy(req.getOperatorPersonId()); + relation.setUpdateBy(req.getOperatorPersonId()); + relations.add(relation); + saveBatch(relations); + + } + + private String createEssProcessInstance(VisaRequestStampReq.RequestStampModel model, ChangeRecord visa) { + BpmnProcessInstanceCreateDTO create = new BpmnProcessInstanceCreateDTO(); + create.setBusinessKey(String.valueOf(model.getOuId())); + // TODO + create.setSpecifyAssignerMap(Maps.of("", Lists.newArrayList())); + create.setTenantId(String.valueOf(visa.getRelationWorkspaceId())); + create.setProcessDefinitionKey(""); + create.setInitiator(BpmnTaskDelegateAssigner.builder() + // TODO + .build()); + create.setCooperationOrg(new CooperationOrgDTO()); + return workflowGateway.processInstanceCreate(create); + } } diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java index da06caa5..57e91114 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java @@ -486,11 +486,20 @@ public class ChangeRecordServiceImpl extends ServiceImpl buildAttachUploadFile(Long visaId) { + @Override + public List buildAttachUploadFile(Long visaId) { if (Objects.isNull(visaId)) { return Lists.newArrayList(); } List attachList = changeRecordRelationService.findByVisaAndVarName(visaId, VisaRelationFieldEnum.ATTACHMENT.name()); + return this.buildAttachUploadFileByRelation(attachList); + } + + /** + * 附件对象转换 + */ + @Override + public List buildAttachUploadFileByRelation(List attachList) { if (CollectionUtils.isEmpty(attachList)) { return Lists.newArrayList(); } @@ -736,9 +745,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl visaUploadFiles) { @@ -879,6 +889,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl