feat(REQ-3300) - 细化单据创建流程的逻辑

This commit is contained in:
wangli 2025-02-15 00:38:21 +08:00
parent ff35b74ef0
commit 7f7eb28317
2 changed files with 89 additions and 3 deletions

View File

@ -45,8 +45,14 @@ public interface VisaConstant {
String FORM_FIELD_REASON = "reason";
// 发生区域
String FORM_FIELD_RELATION_AREA = "relationArea";
// 发生内容
// 发生内容及说明
String FORM_FIELD_CONTEXT_DESCRIPTION = "contextDescription";
String FORM_FIELD_CONTEXT = "context";
String FORM_FIELD_DESCRIPTION = "description";
// 相关单位和人员
String FORM_FIELD_UNIT_PERSON = "unitPerson";
String FORM_FIELD_UNIT = "unit";
String FORM_FIELD_PERSON = "person";
// 变更金额
String FORM_FIELD_AMOUNT_CHANGE = "amountChange";
// 关联的任务单单据

View File

@ -6,6 +6,7 @@ import cn.axzo.apollo.workspace.api.workspace.res.GetDetailRes;
import cn.axzo.apollo.workspace.api.workspace.res.ProjectBriefResp;
import cn.axzo.apollo.workspace.api.workspace.res.ProjectDetailRes;
import cn.axzo.basics.common.constant.enums.OrganizationalNodeTypeEnum;
import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.basics.common.util.NumberUtil;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
@ -26,6 +27,7 @@ import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.GroupType;
import cn.axzo.maokai.api.vo.request.CooperateShipQueryReq;
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
import cn.axzo.maokai.api.vo.request.OrganizationalUnitQuery;
import cn.axzo.maokai.api.vo.response.CooperateShipResp;
import cn.axzo.maokai.api.vo.response.OrgNodeUserBriefInfoResp;
import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO;
@ -135,9 +137,12 @@ import java.util.stream.Collectors;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_AMOUNT_CHANGE;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_ATTACH;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_CONTEXT;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_CONTEXT_DESCRIPTION;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_DESCRIPTION;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_HAPPEN_TIME;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_NO;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_PERSON;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_REASON;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_AREA;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_PROFESSIONAL;
@ -146,6 +151,8 @@ import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATIO
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_TASK_ORDER;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_VISA_ORDER;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_TOPIC;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_UNIT;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_UNIT_PERSON;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_INITIATOR_WORKSPACE_ID;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_VISA_ID;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.IM_GROUP_BIZ_INFO_VISA_TYPE;
@ -714,11 +721,13 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
formVariables.put(FORM_FIELD_HAPPEN_TIME, sdf.format(req.getHappenTime()));
formVariables.put(FORM_FIELD_TOPIC, req.getTopic());
formVariables.put(FORM_FIELD_RELATION_PROJECT, req.getRelationProject());
ProjectDetailRes projectDetailRes = visaProjectApiGateway.getProjectById(req.getRelationProject());
formVariables.put(FORM_FIELD_RELATION_PROJECT, projectDetailRes.getProjectInfo().getName());
formVariables.put(FORM_FIELD_RELATION_PROFESSIONAL, visaHelper.buildProfessionalName(req.getRelationProject(), req.getRelationProfessional()));
formVariables.put(FORM_FIELD_REASON, req.getReason());
formVariables.put(FORM_FIELD_RELATION_AREA, visaHelper.buildAreaName(req.getRelationArea()));
formVariables.put(FORM_FIELD_CONTEXT_DESCRIPTION, req.getChangeContextAndDescriptionList());
formVariables.put(FORM_FIELD_CONTEXT_DESCRIPTION, buildContextDescription(req.getChangeContextAndDescriptionList()));
formVariables.put(FORM_FIELD_UNIT_PERSON, buildUnitPerson(req.getRelationUnitAndPersonList(), req.getRelationWorkspaceId()));
// 非必填项
if (Objects.nonNull(req.getAmountChange())) {
@ -765,6 +774,76 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
return workflowGateway.processInstanceCreate(processDto);
}
private List<Map<String, Object>> buildUnitPerson(List<VisaChangeTempCreateReq.RelationUnitAndPerson> list, Long workspaceId) {
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
List<Long> ouIds = list.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getOuId).distinct().collect(Collectors.toList());
Map<Long, OrganizationalUnitVO> unitMap = organizationalUnitGateway.list(OrganizationalUnitQuery.builder().unitIds(ouIds).build())
.stream().collect(Collectors.toMap(OrganizationalUnitVO::getId, Function.identity(), (s, t) -> s));
Map<Long, List<VisaChangeTempCreateReq.RelationUnitAndPerson>> unitGroupBy = list.stream().collect(Collectors.groupingBy(VisaChangeTempCreateReq.RelationUnitAndPerson::getOuId, Collectors.toList()));
List<Map<String, Object>> unitPersons = new ArrayList<>();
unitGroupBy.forEach((unitId, persons) -> {
Map<String, Object> unitPerson = new HashMap<>();
OrganizationalUnitVO unitVo = unitMap.get(unitId);
unitPerson.put(FORM_FIELD_UNIT, Objects.isNull(unitVo) ? "" : unitVo.getName() + "(" + OrganizationalUnitTypeEnum.getByType(unitVo.getType()).getDesc() + ")");
List<OrgNodeUserDTO> personInfos = getPersonInfos(workspaceId, unitId, persons);
unitPerson.put(FORM_FIELD_PERSON, buildPersonInfosStr(personInfos));
unitPersons.add(unitPerson);
});
return unitPersons;
}
private String buildPersonInfosStr(List<OrgNodeUserDTO> personInfos) {
StringBuilder personInfosStr = new StringBuilder();
if (CollectionUtils.isEmpty(personInfos)) {
return personInfosStr.toString();
}
for (OrgNodeUserDTO info : personInfos) {
if (personInfosStr.length() > 0) {
personInfosStr.append(",");
}
personInfosStr.append(info.getPersonProfile().getRealName())
.append("-")
.append(info.getJob().getName());
}
return personInfosStr.toString();
}
private List<OrgNodeUserDTO> getPersonInfos(Long workspaceId, Long unitId, List<VisaChangeTempCreateReq.RelationUnitAndPerson> persons) {
PageResp<OrgNodeUserDTO> pageResp = visaOrganizationalNodeUserGateway.list(ListOrgNodeUserReq.builder()
.personIds(persons.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getPersonId).collect(Collectors.toList()))
.organizationalUnitId(unitId)
.workspaceId(workspaceId)
.needs(ListNodeUserReq.Needs.builder().job(true).personProfile(true).build()).build());
if (Objects.isNull(pageResp) || CollectionUtils.isEmpty(pageResp.getData())) {
return Collections.emptyList();
}
return pageResp.getData();
}
private List<Map<String, Object>> buildContextDescription(List<VisaChangeTempCreateReq.ChangeContextAndDescription> list) {
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
List<Map<String, Object>> contextDescriptions = new ArrayList<>();
list.forEach(i -> {
Map<String, Object> contextDescription = new HashMap<>();
UploadFieldDTO uploadFieldDTO = new UploadFieldDTO();
uploadFieldDTO.setFileKey(i.getFileKey());
uploadFieldDTO.setFileName(i.getFileName());
uploadFieldDTO.setFileUrl(i.getFileUrl());
contextDescription.put(FORM_FIELD_CONTEXT, uploadFieldDTO);
contextDescription.put(FORM_FIELD_DESCRIPTION, i.getText());
contextDescriptions.add(contextDescription);
});
return contextDescriptions;
}
/**
* 更新
*
@ -1381,6 +1460,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req) {
ChangeRecord visa = getById(req.getVisaId());
req.setOperatorWorkspaceId(visa.getRelationWorkspaceId());