diff --git a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java index 6804110b..426ae9b0 100644 --- a/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java +++ b/visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordRelationServiceImpl.java @@ -11,9 +11,14 @@ import cn.axzo.maokai.api.vo.request.CooperateShipQueryReq; import cn.axzo.maokai.api.vo.response.CooperateShipResp; import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum; import cn.axzo.nanopart.ess.api.domain.CreateContractByFile; +import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo; +import cn.axzo.nanopart.ess.api.domain.EssSealInfo; +import cn.axzo.nanopart.ess.api.domain.EssSealPersonInfo; import cn.axzo.nanopart.ess.api.domain.OperatorInfo; import cn.axzo.nanopart.ess.api.domain.contract.Approver; +import cn.axzo.nanopart.ess.api.enums.EssSealType; import cn.axzo.nanopart.ess.api.request.CreateContractByFileRequest; +import cn.axzo.nanopart.ess.api.request.GetSealsRequest; import cn.axzo.nanopart.ess.api.response.CreateContractByFileResponse; import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum; import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum; @@ -98,6 +103,7 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_STAMP import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.ESS_RECIPIENT_ID_MAP; import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PRINT_PDF_FILE; import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS; +import static cn.axzo.workflow.common.constant.BpmnConstants.NO_TENANT_ID; import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING; /** @@ -463,6 +469,11 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl ouTypeMap = listCooperateShipTypes(req, visa); + // 拉取模型可设置审批人的节点 + NodesByModelVO specifyAssigneeActivity = getSpecifyAssigneeActivity(visa); + // 或者指定单位下的签章人作为审批人 + Map> stampUserMap = listOuAssignees(req); + // 用印申请信息 String uuid = UUID.fastUUID().toString(true); List relations = req.getRequestStamps().stream().map(i -> { @@ -476,7 +487,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl> listOuAssignees(VisaRequestStampReq req) { + // 构建印章类型映射 + Map stampMap = req.getRequestStamps().stream() + .collect(Collectors.toMap( + VisaRequestStampReq.RequestStampModel::getOuId, + VisaRequestStampReq.RequestStampModel::getSealType, + (existing, replacement) -> existing // 处理键冲突 + )); + GetSealsRequest sealsRequest = new GetSealsRequest(); + sealsRequest.setOuIds(req.getRequestStamps().stream().map(VisaRequestStampReq.RequestStampModel::getOuId).collect(Collectors.toSet())); + List sealInfos = essGateway.getOrgEnabledSeals(sealsRequest); + // 构建印章用户映射 + Map> stampUserMap = sealInfos.stream() + .collect(Collectors.toMap( + info -> info.getOrg().getOuId(), + info -> { + EssSealType sealType = stampMap.get(info.getOrg().getOuId()); + return info.getSeals().stream() + .filter(seal -> Objects.equals(seal.getType(), sealType)) + .findFirst() + .orElse(new EssSealInfo()).getSealPersons(); + }, + (existing, replacement) -> existing // 处理键冲突 + )); + Map> result = new HashMap<>(); + stampUserMap.forEach((key, value) -> { + if (CollectionUtils.isNotEmpty(value)) { + result.put(key, value.stream().map(u -> BpmnTaskDelegateAssigner.builder() + .personId(String.valueOf(u.getPersonId())) + .ouId(String.valueOf(u.getOuId())) + .tenantId(NO_TENANT_ID) + .build()).collect(Collectors.toList())); + } + }); + return result; + } + private void removeLastRequest(ChangeRecord visa) { if (!StringUtils.hasText(visa.getContractId())) { return; @@ -581,11 +629,13 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl essRecipientIdMap) { + Map essRecipientIdMap, + NodesByModelVO specifyAssigneeActivity, Map> stampUserMap) { BpmnProcessInstanceCreateDTO create = new BpmnProcessInstanceCreateDTO(); create.setBusinessKey(String.valueOf(model.getOuId())); create.setProcessDefinitionKey(refreshableConfiguration.getStampProcessDefinitionKey()); - create.setSpecifyAssignerMap(Maps.of(getSpecifyAssigneeActivity(visa).get().getActivityId(), Lists.newArrayList())); + // 指定审批人 + create.setSpecifyAssignerMap(Maps.of(specifyAssigneeActivity.getActivityId(), stampUserMap.getOrDefault(model.getOuId(), Lists.newArrayList()))); create.setTenantId(String.valueOf(visa.getRelationWorkspaceId())); create.setInitiator(BpmnTaskDelegateAssigner.builder() .personId(String.valueOf(req.getOperatorPersonId())) @@ -612,12 +662,12 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl getSpecifyAssigneeActivity(ChangeRecord visa) { + private NodesByModelVO getSpecifyAssigneeActivity(ChangeRecord visa) { BeforeProcessInstanceCreateDTO beforeCreateDto = new BeforeProcessInstanceCreateDTO(); beforeCreateDto.setProcessDefinitionKey(refreshableConfiguration.getStampProcessDefinitionKey()); beforeCreateDto.setTenantId(String.valueOf(visa.getRelationWorkspaceId())); Optional optActivity = workflowGateway.nodesBeforeCreateProcessInstance(beforeCreateDto).stream().filter(NodesByModelVO::getSupportSpecify).findFirst(); AssertUtil.isTrue(optActivity.isPresent(), "审批模板未找到可设置审批人的节点"); - return optActivity; + return optActivity.get(); } }