Merge remote-tracking branch 'origin/feature/REQ-3581' into feature/REQ-3581

This commit is contained in:
yanglin 2025-02-26 15:17:20 +08:00
commit 8f61e4ed02
5 changed files with 84 additions and 75 deletions

View File

@ -2,6 +2,7 @@ package cn.axzo.nanopart.config.exception;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.pokonyan.exception.BusinessException;
import cn.axzo.workflow.common.exception.WorkflowEngineException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.util.CollectionUtils;
@ -37,13 +38,13 @@ public class ExceptionAdviceHandler {
}
@ExceptionHandler(cn.axzo.framework.domain.ServiceException.class)
public ApiResult<Void> domainServiceExceptionHandler(cn.axzo.framework.domain.ServiceException e){
public ApiResult<Void> domainServiceExceptionHandler(cn.axzo.framework.domain.ServiceException e) {
log.warn("业务异常", e);
return ApiResult.err(e.getMessage());
}
@ExceptionHandler(BusinessException.class)
public ApiResult<Void> businessExceptionHandler(BusinessException e){
public ApiResult<Void> businessExceptionHandler(BusinessException e) {
log.warn("业务异常", e);
return ApiResult.err(e.getErrorMsg());
}
@ -65,4 +66,10 @@ public class ExceptionAdviceHandler {
log.warn("业务异常", e);
return ApiResult.err(e.getErrorMsg());
}
@ExceptionHandler(WorkflowEngineException.class)
public ApiResult<Void> workflowExceptionHandler(WorkflowEngineException e) {
log.warn("业务异常", e);
return ApiResult.err(e.getMessage());
}
}

View File

@ -211,6 +211,11 @@ public class VisaDetailByIdResponse {
*/
private String approvalStatus;
/**
* 当前登录人的personId
*/
private Long currentPersonId;
@Data
@Builder
@NoArgsConstructor

View File

@ -46,10 +46,16 @@ public class VisaExportDto {
private String topic;
/**
* 工程
* 有符号的变更金额
*/
@ExcelProperty("所属工程")
private String relationProject;
@ExcelProperty("金额变化")
private BigDecimal amountChange;
/**
* 发起人
*/
@ExcelProperty("发起人")
private String initiator;
/**
* 提出时间
@ -57,12 +63,6 @@ public class VisaExportDto {
@ExcelProperty("提出时间")
private Date happenTime;
/**
* 有符号的变更金额
*/
@ExcelProperty("金额变化")
private BigDecimal amountChange;
/**
* 最终审批时间
*/
@ -70,8 +70,8 @@ public class VisaExportDto {
private Date approvalCompleteTime;
/**
* 发起人
* 工程
*/
@ExcelProperty("发起人")
private String initiator;
@ExcelProperty("所属工程")
private String relationProject;
}

View File

@ -1,9 +1,11 @@
package cn.axzo.nanopart.visa.server.rpc;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.karma.client.feign.tyr.DataObjectApi;
import cn.axzo.karma.client.feign.tyr.request.MatchDataObjectReq;
import cn.axzo.karma.client.feign.tyr.response.MatchDataObjectResp;
import cn.axzo.karma.client.feign.tyr.response.MergeMatchDataResp;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -27,11 +29,11 @@ public class DataObjectApiGateway {
return MatchDataObjectResp.builder().build();
}
try {
// log.info("DataObjectApiGateway match, params:{}", JSON.toJSONString(req));
// ApiResult<MatchDataObjectResp> match = dataObjectApi.match(req);
// log.info("DataObjectApiGateway match, result:{}", JSON.toJSONString(match));
// return match.getData();
return mockDataObject();
log.info("DataObjectApiGateway match, params:{}", JSON.toJSONString(req));
ApiResult<MatchDataObjectResp> match = dataObjectApi.match(req);
log.info("DataObjectApiGateway match, result:{}", JSON.toJSONString(match));
return match.getData();
// return mockDataObject();
} catch (Exception e) {
log.warn("DataObjectApiGateway match exception", e);
throw e;

View File

@ -7,7 +7,6 @@ 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;
@ -30,7 +29,6 @@ import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.GroupType;
import cn.axzo.log.platform.client.model.req.LogAddReq;
import cn.axzo.maokai.api.vo.request.OrgNodeUserBriefInfoListReq;
import cn.axzo.maokai.api.vo.request.OrganizationalUnitQuery;
import cn.axzo.maokai.api.vo.response.OrgNodeUserBriefInfoResp;
import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO;
import cn.axzo.maokai.common.enums.SaasCooperateShipCooperateTypeEnum;
@ -101,7 +99,6 @@ import cn.axzo.orggateway.api.nodeuser.dto.OrgNodeUserDTO;
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
import cn.axzo.orgmanax.dto.nodeuser.req.ListNodeUserReq;
import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
import cn.axzo.workflow.common.model.dto.UploadFieldDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
@ -119,7 +116,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.groovy.util.Maps;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -130,7 +126,6 @@ import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -141,30 +136,10 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
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;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_PROJECT;
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.FORM_FIELD_RELATION_RECTIFICATION_ORDER;
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.FORM_FIELD_WORKSPACE_NAME;
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;
@ -176,7 +151,6 @@ import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAct
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.CANCEL;
import static cn.axzo.nanopart.visa.api.request.UpdateVisaChangeReq.VisaStampAction.COMPLETE;
import static cn.axzo.nanopart.visa.server.config.BizResultCode.CHANGE_RECORD_NOT_FOUND;
import static cn.axzo.nanopart.visa.server.service.VisaHelper.buildPersonInfosStr;
import static cn.axzo.nanopart.visa.server.utils.Constants.DATE_FORMAT;
import static cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum.PROCESSING;
@ -836,6 +810,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
PersonProfileDto profile = visaProfileGateway.getProfile(req.getOperatorPersonId());
pendingVariables.put(WORKFLOW_PENDING_INITIATOR_NAME, profile.getRealName());
pendingVariables.put(WORKFLOW_PENDING_TOPIC, req.getTopic());
pendingVariables.put(IM_GROUP_BIZ_INFO_VISA_ID, visaId);
pendingVariables.put(IM_GROUP_BIZ_INFO_INITIATOR_WORKSPACE_ID, req.getRelationWorkspaceId());
processDto.setPendingVariables(pendingVariables);
processDto.setCooperationOrg(new CooperationOrgDTO());
return workflowGateway.processInstanceCreate(processDto);
@ -1049,10 +1025,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
String scene = "变更签证表";
String fileName = String.format("变更签证单%s", DateUtil.format(new Date(), "yyyyMMddHHmmss"));
String sheetName = "变更签证表";
String headerName = "变更签证单";
// String headerName = "变更签证单"; // 不同版本office打开表头合并单元格存在样式问题暂不设置
SheetWrapper sheetWrapper = SheetWrapper.builder()
.headClass(VisaExportDto.class)
.title(headerName)
// .title(headerName)
.sheetName(sheetName)
.includeColumnFieldNames(fields.stream()
.map(VisaChangeFieldEnum::getValue)
@ -1401,7 +1377,11 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
String.format("最多可关联%d个%s单请重新选择", refreshableConfiguration.getVerifyVisaLimit(), VisaBillTypeEnum.valueOf(key).getDesc()));
if (Objects.equals(VisaBillTypeEnum.TASK.name(), key)) {
/*任务单*/
List<String> taskNos = value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getNo).collect(Collectors.toList());
List<String> taskNos = value.stream()
.map(VisaChangeTempCreateReq.OrderSimpleModel::getNo)
.filter(StringUtils::hasText)
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(taskNos)) {
// 存在性
QueryOrderToBasicReq queryOrderToBasicReq = new QueryOrderToBasicReq();
queryOrderToBasicReq.setWorkspaceId(req.getRelationWorkspaceId());
@ -1409,11 +1389,16 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
queryOrderToBasicReq.setPage(1);
queryOrderToBasicReq.setPageSize(taskNos.size());
List<TaskOrderToBasicRes> taskOrders = taskOrderApiGateway.pageOrderByForBasic(queryOrderToBasicReq).getData();
AssertUtil.isTrue(taskOrders.size() == taskNos.size(), "关联任务单单据不存在,请检查后重试");
AssertUtil.isTrue(CollectionUtils.isNotEmpty(taskOrders) && taskOrders.size() == taskNos.size(), "关联任务单单据不存在,请检查后重试");
validTaskBillIfRelated(taskNos, req.getType());
}
} else if (Objects.equals(VisaBillTypeEnum.RECTIFY.name(), key)) {
/*整改单*/
List<String> billIds = value.stream().map(v -> String.valueOf(v.getId())).collect(Collectors.toList());
List<String> billIds = value.stream()
.map(v -> String.valueOf(v.getId()))
.filter(StringUtils::hasText)
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(billIds)) {
// 存在性
ListRectifyOrderReq rectifyOrderReq = ListRectifyOrderReq.builder()
.ids(value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getId).collect(Collectors.toSet()))
@ -1421,11 +1406,16 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
List<RectifyOrderResp> rectifyOrders = rectifyApiGateway.listRectifyOrders(rectifyOrderReq);
AssertUtil.isTrue(CollectionUtils.isNotEmpty(rectifyOrders) && rectifyOrders.size() == billIds.size(), "关联整改单单据不存在,请检查后重试");
validBillIfRelated(VisaBillTypeEnum.RECTIFY, billIds, req.getType());
}
} else if (Objects.equals(VisaBillTypeEnum.DESIGN_VISA.name(), key)) {
/*变更单*/
AssertUtil.isTrue(VisaTypeEnum.TECHNOLOGY_APPROVED.equals(req.getType()) || VisaTypeEnum.PROJECT_VISA.equals(req.getType()), "变更单关联单据仅支持技术核定/工程签证");
// 关联单据合法性是否存在状态是否合法
List<String> billIds = value.stream().map(v -> String.valueOf(v.getId())).collect(Collectors.toList());
List<String> billIds = value.stream()
.map(v -> String.valueOf(v.getId()))
.filter(StringUtils::hasText)
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(billIds)) {
List<ChangeRecord> relationVisa = listByIds(billIds);
AssertUtil.isTrue(CollectionUtils.isNotEmpty(relationVisa) && relationVisa.size() == billIds.size(), "关联的变更单单据不存在,请检查后重试");
relationVisa.forEach(r -> {
@ -1433,6 +1423,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
AssertUtil.isTrue(VisaStatusEnum.COMPLETED.equals(r.getStatus()), String.format("%s单据%s状态为%s不允许被关联", VisaBillTypeEnum.DESIGN_VISA.getDesc(), r.getNo(), r.getStatus().getDesc()));
});
validBillIfRelated(VisaBillTypeEnum.DESIGN_VISA, billIds, req.getType());
}
} else {
throw new ServiceException("不支持的关联单据类型");
}
@ -1469,6 +1460,9 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
AssertUtil.notEmpty(taskNos, "关联单据Id不能为空");
AssertUtil.notNull(visaType, "单据类型不能为空");
List<ChangeRecordBill> mainBill = changeRecordBillService.getRelatedMainBill(VisaBillTypeEnum.TASK, taskNos);
if (CollectionUtils.isEmpty(mainBill)) {
return;
}
mainBill.stream()
.collect(Collectors.groupingBy(ChangeRecordBill::getBillNo))
.forEach((k, v) -> v.stream()
@ -1699,7 +1693,8 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
public void doExecute(ChangeRecordButtonOperationReq req) {
ChangeRecord visa = changeRecordService.getById(req.getVisaId());
AssertUtil.notNull(visa, "未找到变洽签单据");
AssertUtil.isTrue(Objects.equals(visa.getStatus(), VisaStatusEnum.DECIDING), "单据未在决策中,不支持该操作");
AssertUtil.isTrue(Objects.equals(visa.getStatus(), VisaStatusEnum.DECIDING)
|| Objects.equals(visa.getStatus(), VisaStatusEnum.DECIDING_FROM_APPROVE), "单据未在决策中,不支持该操作");
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
changeStatus(ChangeStatusRequest.builder()
@ -1745,7 +1740,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
public void checkVisaWithVisaId(CheckVisaWithVisaIdReq req) {
VisaDetailByIdResponse response = this.detailById(req.getVisaId());
req.check(response);
// this.validVisaChangeForm(this.buildVisaChangeApproveCreateReqByVisaId(req.getVisaId()));
this.validVisaChangeForm(Objects.requireNonNull(visaHelper.buildVisaChangeApproveCreateReqByVisaId(req.getVisaId())));
}
/**