Merge branch 'feature/REQ-3300' into feature/REQ-3581

This commit is contained in:
wangli 2025-02-21 09:46:58 +08:00
commit 2ed1b5d079
8 changed files with 74 additions and 8 deletions

View File

@ -173,4 +173,5 @@ public interface ChangeRecordApi {
*/ */
@PostMapping("/api/visa/change/list") @PostMapping("/api/visa/change/list")
ApiPageResult<VisaSearchResp> list(@RequestBody @Validated VisaSearchReq req); ApiPageResult<VisaSearchResp> list(@RequestBody @Validated VisaSearchReq req);
} }

View File

@ -36,4 +36,6 @@ public class ChangeRecordAppendAttachReq {
private Long operatorOuId; private Long operatorOuId;
private Long operatorWorkspaceId;
} }

View File

@ -180,4 +180,5 @@ public class ChangeRecordController implements ChangeRecordApi {
public ApiResult<Map<String, Boolean>> getBillIfRelated(GetBillIfRelatedReq req) { public ApiResult<Map<String, Boolean>> getBillIfRelated(GetBillIfRelatedReq req) {
return ApiResult.ok(changeRecordBillService.getBillIfRelated(req)); return ApiResult.ok(changeRecordBillService.getBillIfRelated(req));
} }
} }

View File

@ -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.VisaDetailByIdResponse;
import cn.axzo.nanopart.visa.api.response.VisaSearchResp; import cn.axzo.nanopart.visa.api.response.VisaSearchResp;
import cn.axzo.nanopart.visa.server.domain.ChangeRecord; import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List; import java.util.List;
@ -56,6 +57,16 @@ public interface ChangeRecordService extends IService<ChangeRecord> {
*/ */
VisaDetailByIdResponse detailById(Long visaId); VisaDetailByIdResponse detailById(Long visaId);
/**
* 附件对象转换
*/
List<VisaDetailByIdResponse.VisaUploadFile> buildAttachUploadFileByRelation(List<ChangeRecordRelation> attachList);
/**
* 构建上传文件对象集合
*/
List<VisaDetailByIdResponse.VisaUploadFile> buildAttachUploadFile(Long visaId);
/** /**
* 创建变更签证 * 创建变更签证
* *

View File

@ -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.VisaButtonTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaConfirmBizTypeEnum; 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.enums.VisaStatusEnum;
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest; import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse; import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
@ -86,7 +87,22 @@ public class VisaHelper {
// [决策中执行中] -> [审批中] 执行变更签证属性变更 // [决策中执行中] -> [审批中] 执行变更签证属性变更
if (Objects.nonNull(oldContext.getStatus()) && Objects.nonNull(newContext.getStatus()) if (Objects.nonNull(oldContext.getStatus()) && Objects.nonNull(newContext.getStatus())
&& VisaStatusEnum.isEditForm(oldContext.getStatus()) && VisaStatusEnum.isEditForm(oldContext.getStatus())
&& newContext.getStatus().equals(VisaStatusEnum.APPROVING)) { && VisaStatusEnum.isEditForm(newContext.getStatus())) {
List<VisaDetailByIdResponse.VisaUploadFile> oldUploadFiles = this.changeRecordService.buildAttachUploadFileByRelation(oldContext.getRelationList());
List<VisaDetailByIdResponse.VisaUploadFile> 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 logApiGateway.addLog(Constants.VISA_LOG_SNAPSHOT_SCENE
, Constants.VISA_LOG_SNAPSHOT_LEVEL , Constants.VISA_LOG_SNAPSHOT_LEVEL
, Lists.newArrayList(Constants.VISA_LOG_SNAPSHOT_TAG_SNAPSHOT) , Lists.newArrayList(Constants.VISA_LOG_SNAPSHOT_TAG_SNAPSHOT)

View File

@ -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.dto.OrgNodeUserDTO;
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq; import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq; import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@ -114,7 +115,9 @@ public class ChangeRecordLogServiceImpl extends ServiceImpl<ChangeRecordLogDao,
logList.add(ChangeRecordLog.builder().visaId(visaId) logList.add(ChangeRecordLog.builder().visaId(visaId)
.action(VisaLogTypeEnum.EDIT_AMOUNT.name()) .action(VisaLogTypeEnum.EDIT_AMOUNT.name())
.title(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getTitle(),userName )) .title(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getTitle(),userName ))
.content(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getContent(), param.getOldAmountChange().toPlainString(), param.getNewAmountChange().toPlainString())) .content(String.format(VisaLogTypeEnum.EDIT_AMOUNT.getContent()
, NumberUtil.roundDown(param.getOldAmountChange(), 2).toPlainString()
, NumberUtil.roundDown(param.getNewAmountChange(), 2).toPlainString()))
.orderBy(Constants.AMOUNT_CHANGE_ORDER_BY).build()); .orderBy(Constants.AMOUNT_CHANGE_ORDER_BY).build());
} }
case UPLOAD_FILE: case UPLOAD_FILE:

View File

@ -8,6 +8,7 @@ import cn.axzo.im.center.api.vo.PersonAccountAttribute;
import cn.axzo.im.center.api.vo.req.SendChatMessageRequest; import cn.axzo.im.center.api.vo.req.SendChatMessageRequest;
import cn.axzo.im.center.common.enums.AppTypeEnum; import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum; import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum; import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum; import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum; import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
@ -21,11 +22,13 @@ import cn.axzo.nanopart.visa.api.response.ImGroupButton;
import cn.axzo.nanopart.visa.api.response.ImGroupTipsResp; import cn.axzo.nanopart.visa.api.response.ImGroupTipsResp;
import cn.axzo.nanopart.visa.server.domain.ChangeRecord; import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation; import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
import cn.axzo.nanopart.visa.server.dto.VisaLogParam;
import cn.axzo.nanopart.visa.server.dto.VisaRelationDto; import cn.axzo.nanopart.visa.server.dto.VisaRelationDto;
import cn.axzo.nanopart.visa.server.mapper.ChangeRecordRelationDao; import cn.axzo.nanopart.visa.server.mapper.ChangeRecordRelationDao;
import cn.axzo.nanopart.visa.server.rpc.MsgCenterGateway; import cn.axzo.nanopart.visa.server.rpc.MsgCenterGateway;
import cn.axzo.nanopart.visa.server.rpc.VisaProfileGateway; import cn.axzo.nanopart.visa.server.rpc.VisaProfileGateway;
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway; import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
import cn.axzo.nanopart.visa.server.service.ChangeRecordLogService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService; import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
import cn.axzo.nanopart.visa.server.service.ChangeRecordService; import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO; import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
@ -74,6 +77,7 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
private final VisaProfileGateway visaProfileGateway; private final VisaProfileGateway visaProfileGateway;
private final MsgCenterGateway msgCenterGateway; private final MsgCenterGateway msgCenterGateway;
private final WorkflowGateway workflowGateway; private final WorkflowGateway workflowGateway;
private final ChangeRecordLogService changeRecordLogService;
/** /**
* 保存 * 保存
@ -225,6 +229,11 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
AssertUtil.notNull(record, "未找到变洽签记录"); AssertUtil.notNull(record, "未找到变洽签记录");
ImGroupTipsResp resp = new ImGroupTipsResp(); ImGroupTipsResp resp = new ImGroupTipsResp();
if (Objects.equals(record.getStatus(), VisaStatusEnum.DECIDING_FROM_APPROVE)) {
record.setStatus(VisaStatusEnum.DECIDING);
} else if (Objects.equals(record.getStatus(), VisaStatusEnum.REPORT_FROM_APPROVE)) {
record.setStatus(VisaStatusEnum.TO_REPORT);
}
resp.setStatus(record.getStatus()); resp.setStatus(record.getStatus());
resp.setStatusText(record.getStatus().getDesc()); resp.setStatusText(record.getStatus().getDesc());
resp.setVisaType(record.getType()); resp.setVisaType(record.getType());
@ -354,6 +363,19 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
formUpdateDto.setFormVariables(Maps.of(FORM_FIELD_ATTACH, req.getAttach())); formUpdateDto.setFormVariables(Maps.of(FORM_FIELD_ATTACH, req.getAttach()));
workflowGateway.updateInstanceFormData(formUpdateDto); workflowGateway.updateInstanceFormData(formUpdateDto);
} }
if (CollectionUtils.isNotEmpty(req.getAttach())) {
List<String> 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());
}
}
} }

View File

@ -486,11 +486,20 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
/** /**
* 构建上传文件对象集合 * 构建上传文件对象集合
*/ */
private List<VisaDetailByIdResponse.VisaUploadFile> buildAttachUploadFile(Long visaId) { @Override
public List<VisaDetailByIdResponse.VisaUploadFile> buildAttachUploadFile(Long visaId) {
if (Objects.isNull(visaId)) { if (Objects.isNull(visaId)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
List<ChangeRecordRelation> attachList = changeRecordRelationService.findByVisaAndVarName(visaId, VisaRelationFieldEnum.ATTACHMENT.name()); List<ChangeRecordRelation> attachList = changeRecordRelationService.findByVisaAndVarName(visaId, VisaRelationFieldEnum.ATTACHMENT.name());
return this.buildAttachUploadFileByRelation(attachList);
}
/**
* 附件对象转换
*/
@Override
public List<VisaDetailByIdResponse.VisaUploadFile> buildAttachUploadFileByRelation(List<ChangeRecordRelation> attachList) {
if (CollectionUtils.isEmpty(attachList)) { if (CollectionUtils.isEmpty(attachList)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
@ -736,9 +745,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
/** /**
* 更改状态-申请审批时 * 更改状态-申请审批时
* @param visaId 变更签证id *
* @param req 请求主要是获取最新的属性比如变更金额/附件 * @param visaId 变更签证id
* @param changeRecord 变更签证对象主要获取老的属性比如变更金额 * @param req 请求主要是获取最新的属性比如变更金额/附件
* @param changeRecord 变更签证对象主要获取老的属性比如变更金额
* @param visaUploadFiles 上传附件主要是老的属性 * @param visaUploadFiles 上传附件主要是老的属性
*/ */
public void changeStatusWhenApproveCreate(Long visaId, VisaChangeApproveCreateReq req, ChangeRecord changeRecord, List<VisaDetailByIdResponse.VisaUploadFile> visaUploadFiles) { public void changeStatusWhenApproveCreate(Long visaId, VisaChangeApproveCreateReq req, ChangeRecord changeRecord, List<VisaDetailByIdResponse.VisaUploadFile> visaUploadFiles) {
@ -879,6 +889,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
.personIds(persons.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getPersonId).collect(Collectors.toList())) .personIds(persons.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getPersonId).collect(Collectors.toList()))
.organizationalUnitId(unitId) .organizationalUnitId(unitId)
.workspaceId(workspaceId) .workspaceId(workspaceId)
.organizationalNodeIds(persons.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getNodeId).collect(Collectors.toList()))
.needs(ListNodeUserReq.Needs.builder().job(true).personProfile(true).build()).build()); .needs(ListNodeUserReq.Needs.builder().job(true).personProfile(true).build()).build());
if (Objects.isNull(pageResp) || CollectionUtils.isEmpty(pageResp.getData())) { if (Objects.isNull(pageResp) || CollectionUtils.isEmpty(pageResp.getData())) {
return Collections.emptyList(); return Collections.emptyList();
@ -1434,7 +1445,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
AssertUtil.isFalse(Objects.equals(r.getStatus(), VisaStatusEnum.TO_REPORT) || Objects.equals(r.getStatus(), VisaStatusEnum.FORBIDED), String.format("单据%s状态为%s不允许被关联", r.getNo(), r.getStatus().getDesc())); AssertUtil.isFalse(Objects.equals(r.getStatus(), VisaStatusEnum.TO_REPORT) || Objects.equals(r.getStatus(), VisaStatusEnum.FORBIDED), String.format("单据%s状态为%s不允许被关联", r.getNo(), r.getStatus().getDesc()));
}); });
validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, billIds, req.getType()); validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, billIds, req.getType());
}else { } else {
throw new ServiceException("不支持的关联单据类型"); throw new ServiceException("不支持的关联单据类型");
} }
} }
@ -1910,5 +1921,4 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
return visaIds; return visaIds;
} }
} }