Merge remote-tracking branch 'origin/feature/REQ-3581' into feature/REQ-3581
This commit is contained in:
commit
8f61e4ed02
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -211,6 +211,11 @@ public class VisaDetailByIdResponse {
|
||||
*/
|
||||
private String approvalStatus;
|
||||
|
||||
/**
|
||||
* 当前登录人的personId
|
||||
*/
|
||||
private Long currentPersonId;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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,38 +1377,53 @@ 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());
|
||||
// 存在性
|
||||
QueryOrderToBasicReq queryOrderToBasicReq = new QueryOrderToBasicReq();
|
||||
queryOrderToBasicReq.setWorkspaceId(req.getRelationWorkspaceId());
|
||||
queryOrderToBasicReq.setTaskNos(taskNos);
|
||||
queryOrderToBasicReq.setPage(1);
|
||||
queryOrderToBasicReq.setPageSize(taskNos.size());
|
||||
List<TaskOrderToBasicRes> taskOrders = taskOrderApiGateway.pageOrderByForBasic(queryOrderToBasicReq).getData();
|
||||
AssertUtil.isTrue(taskOrders.size() == taskNos.size(), "关联任务单单据不存在,请检查后重试");
|
||||
validTaskBillIfRelated(taskNos, req.getType());
|
||||
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());
|
||||
queryOrderToBasicReq.setTaskNos(taskNos);
|
||||
queryOrderToBasicReq.setPage(1);
|
||||
queryOrderToBasicReq.setPageSize(taskNos.size());
|
||||
List<TaskOrderToBasicRes> taskOrders = taskOrderApiGateway.pageOrderByForBasic(queryOrderToBasicReq).getData();
|
||||
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());
|
||||
// 存在性
|
||||
ListRectifyOrderReq rectifyOrderReq = ListRectifyOrderReq.builder()
|
||||
.ids(value.stream().map(VisaChangeTempCreateReq.OrderSimpleModel::getId).collect(Collectors.toSet()))
|
||||
.build();
|
||||
List<RectifyOrderResp> rectifyOrders = rectifyApiGateway.listRectifyOrders(rectifyOrderReq);
|
||||
AssertUtil.isTrue(CollectionUtils.isNotEmpty(rectifyOrders) && rectifyOrders.size() == billIds.size(), "关联整改单单据不存在,请检查后重试");
|
||||
validBillIfRelated(VisaBillTypeEnum.RECTIFY, billIds, req.getType());
|
||||
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()))
|
||||
.build();
|
||||
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<ChangeRecord> relationVisa = listByIds(billIds);
|
||||
AssertUtil.isTrue(CollectionUtils.isNotEmpty(relationVisa) && relationVisa.size() == billIds.size(), "关联的变更单单据不存在,请检查后重试");
|
||||
relationVisa.forEach(r -> {
|
||||
AssertUtil.isTrue(Objects.equals(r.getRelationWorkspaceId(), req.getRelationWorkspaceId()), "关联的单据所属项目不匹配");
|
||||
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());
|
||||
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 -> {
|
||||
AssertUtil.isTrue(Objects.equals(r.getRelationWorkspaceId(), req.getRelationWorkspaceId()), "关联的单据所属项目不匹配");
|
||||
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())));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user