feat(REQ-3581) - 申请用印逻辑完善,增加移除上一次操作的逻辑,以及审批人设置

This commit is contained in:
wangli 2025-02-25 18:48:01 +08:00
parent ef59830bc6
commit 4322137f97

View File

@ -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<ChangeRecordRel
// 拉取单位类型
Map<Long, String> ouTypeMap = listCooperateShipTypes(req, visa);
// 拉取模型可设置审批人的节点
NodesByModelVO specifyAssigneeActivity = getSpecifyAssigneeActivity(visa);
// 或者指定单位下的签章人作为审批人
Map<Long, List<BpmnTaskDelegateAssigner>> stampUserMap = listOuAssignees(req);
// 用印申请信息
String uuid = UUID.fastUUID().toString(true);
List<ChangeRecordRelation> relations = req.getRequestStamps().stream().map(i -> {
@ -476,7 +487,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
.stampType(i.getSealType())
.cooperationShipType(ouTypeMap.getOrDefault(i.getOuId(), ""))
// 发起用印的审批
.approvalId(createEssProcessInstance(i, visa, req, essRecipientIdMap))
.approvalId(createEssProcessInstance(i, visa, req, essRecipientIdMap, specifyAssigneeActivity, stampUserMap))
.uniqueId(uuid)
.build()));
stamp.setContentExt(PROCESSING.getStatus());
@ -509,6 +520,43 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
saveBatch(relations);
}
private Map<Long, List<BpmnTaskDelegateAssigner>> listOuAssignees(VisaRequestStampReq req) {
// 构建印章类型映射
Map<Long, EssSealType> 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<EssOrgAndSealInfo> sealInfos = essGateway.getOrgEnabledSeals(sealsRequest);
// 构建印章用户映射
Map<Long, List<EssSealPersonInfo>> 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<Long, List<BpmnTaskDelegateAssigner>> 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<ChangeRecordRel
private String createEssProcessInstance(VisaRequestStampReq.RequestStampModel model,
ChangeRecord visa,
VisaRequestStampReq req,
Map<Long, String> essRecipientIdMap) {
Map<Long, String> essRecipientIdMap,
NodesByModelVO specifyAssigneeActivity, Map<Long, List<BpmnTaskDelegateAssigner>> 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<ChangeRecordRel
return workflowGateway.processInstanceCreate(create);
}
private Optional<NodesByModelVO> getSpecifyAssigneeActivity(ChangeRecord visa) {
private NodesByModelVO getSpecifyAssigneeActivity(ChangeRecord visa) {
BeforeProcessInstanceCreateDTO beforeCreateDto = new BeforeProcessInstanceCreateDTO();
beforeCreateDto.setProcessDefinitionKey(refreshableConfiguration.getStampProcessDefinitionKey());
beforeCreateDto.setTenantId(String.valueOf(visa.getRelationWorkspaceId()));
Optional<NodesByModelVO> optActivity = workflowGateway.nodesBeforeCreateProcessInstance(beforeCreateDto).stream().filter(NodesByModelVO::getSupportSpecify).findFirst();
AssertUtil.isTrue(optActivity.isPresent(), "审批模板未找到可设置审批人的节点");
return optActivity;
return optActivity.get();
}
}