feat(REQ-3300) - 细化单据创建流程的逻辑
This commit is contained in:
parent
ff35b74ef0
commit
7f7eb28317
@ -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";
|
||||
// 关联的任务单单据
|
||||
|
||||
@ -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());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user