Merge remote-tracking branch 'origin/feature/REQ-3300' into feature/REQ-3300
# Conflicts: # visa/visa-server/src/main/java/cn/axzo/nanopart/visa/server/service/impl/ChangeRecordServiceImpl.java
This commit is contained in:
commit
a918d028bb
@ -2,7 +2,7 @@ package cn.axzo.nanopart.visa.api.changerecord;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiPageResult;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
||||
import cn.axzo.nanopart.visa.api.request.FetchVisaAllConfirmReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||
@ -112,7 +112,7 @@ public interface ChangeRecordApi {
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/visa/change/approve/only/create")
|
||||
ApiResult<Long> approveExistsVisaChangeRecord(@Validated @RequestBody VisaChangeApproveOnlyReq req);
|
||||
ApiResult<Long> approveCreateOnlyVisaChangeRecord(@Validated @RequestBody VisaChangeApproveOnlyReq req);
|
||||
|
||||
/**
|
||||
* IM 变洽签群,“废止”按钮
|
||||
@ -120,5 +120,20 @@ public interface ChangeRecordApi {
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/visa/change/record/forbid")
|
||||
ApiResult<Void> forbidChangeRecord(@Validated @RequestBody ChangeRecordForbidReq req);
|
||||
ApiResult<Void> forbidChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req);
|
||||
|
||||
/**
|
||||
* IM 变洽签群,“重新发起”按钮
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/visa/change/reDecision")
|
||||
ApiResult<Void> reDecisionChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req);
|
||||
|
||||
/**
|
||||
* IM 变洽签全,“发起执行”按钮
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/api/visa/change/execute")
|
||||
ApiResult<Void> executeChangeRecord(@Validated @RequestBody ChangeRecordButtonOperationReq req);
|
||||
}
|
||||
|
||||
@ -24,9 +24,10 @@ public interface ChangeRecordRelationApi {
|
||||
@PostMapping("/api/visa/relation/list")
|
||||
ApiResult<List<VisaRelationResp>> listByVisaId(@Validated @RequestBody VisaRelationReq req) ;
|
||||
|
||||
@PostMapping("/api/visa/relation/add")
|
||||
ApiResult<Boolean> relationAdd(@Validated @RequestBody ImGroupOperationReq req);
|
||||
@PostMapping("/api/visa/relation/im/operation")
|
||||
ApiResult<Boolean> saveImOperationParticipate(@Validated @RequestBody ImGroupOperationReq req);
|
||||
|
||||
@PostMapping("/api/visa/relation/im/tips")
|
||||
ApiResult<ImGroupTipsResp> queryImGroupTips(@Validated @RequestBody ImGroupTipsQueryReq req);
|
||||
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ import javax.validation.constraints.NotNull;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public class ChangeRecordForbidReq {
|
||||
public class ChangeRecordButtonOperationReq {
|
||||
|
||||
/**
|
||||
* 变洽签主键 ID
|
||||
@ -25,6 +25,12 @@ public class ChangeRecordForbidReq {
|
||||
@NotNull(message = "变洽签 ID 不能为空")
|
||||
private Long visaId;
|
||||
|
||||
/**
|
||||
* IM 群 ID
|
||||
*/
|
||||
@NotNull(message = "IM 群 ID 不能为空")
|
||||
private Long imGroupId;
|
||||
|
||||
/**
|
||||
* 操作人 personId
|
||||
*/
|
||||
@ -38,4 +38,10 @@ public class VisaChangeApproveOnlyReq {
|
||||
*/
|
||||
private List<VisaChangeApproveCreateReq.ApprovePersonInfo> approvePersonInfoList;
|
||||
|
||||
private Long operatorPersonId;
|
||||
|
||||
private Long operatorOuId;
|
||||
|
||||
private Long operatorWorkspaceId;
|
||||
|
||||
}
|
||||
|
||||
@ -64,6 +64,11 @@ public class VisaChangeTempCreateReq {
|
||||
@NotNull(message = "请选择工程")
|
||||
@Min(value = 1, message = "请选择工程")
|
||||
private Long relationProject;
|
||||
/**
|
||||
* 工程名称
|
||||
*/
|
||||
@NotBlank(message = "工程名称不能为空")
|
||||
private String relationProjectName;
|
||||
|
||||
/**
|
||||
* 区域集合
|
||||
@ -108,6 +113,7 @@ public class VisaChangeTempCreateReq {
|
||||
/**
|
||||
* 有符号的变更金额
|
||||
*/
|
||||
@NotNull(message = "变更金额不能为空")
|
||||
private BigDecimal amountChange;
|
||||
|
||||
/**
|
||||
|
||||
@ -5,7 +5,7 @@ import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.framework.domain.web.result.PageData;
|
||||
import cn.axzo.nanopart.visa.api.changerecord.ChangeRecordApi;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaButtonTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
||||
import cn.axzo.nanopart.visa.api.request.FetchVisaAllConfirmReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||
@ -21,6 +21,7 @@ import cn.axzo.nanopart.visa.api.response.VisaChangePageSearchResp;
|
||||
import cn.axzo.nanopart.visa.api.response.VisaDetailByIdResponse;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordConfirmService;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||
import io.swagger.annotations.Api;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -103,13 +104,25 @@ public class ChangeRecordController implements ChangeRecordApi {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Long> approveExistsVisaChangeRecord(VisaChangeApproveOnlyReq req) {
|
||||
return null;
|
||||
public ApiResult<Long> approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req) {
|
||||
return ApiResult.ok(changeRecordService.approveCreateOnlyVisaChangeRecord(req));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> forbidChangeRecord(ChangeRecordForbidReq req) {
|
||||
public ApiResult<Void> forbidChangeRecord(ChangeRecordButtonOperationReq req) {
|
||||
changeRecordService.forbid(req);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> reDecisionChangeRecord(ChangeRecordButtonOperationReq req) {
|
||||
changeRecordService.reDecision(req);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> executeChangeRecord(ChangeRecordButtonOperationReq req) {
|
||||
changeRecordService.doExecute(req);
|
||||
return ApiResult.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@ public class ChangeRecordRelationController implements ChangeRecordRelationApi {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Boolean> relationAdd(ImGroupOperationReq req) {
|
||||
public ApiResult<Boolean> saveImOperationParticipate(ImGroupOperationReq req) {
|
||||
return ApiResult.ok(changeRecordRelationService.saveImOperationParticipate(req));
|
||||
}
|
||||
|
||||
|
||||
@ -58,8 +58,29 @@ public class ChangeRecord extends BaseEntity<ChangeRecord> {
|
||||
|
||||
/**
|
||||
* 区域集合
|
||||
* <pre>
|
||||
* [
|
||||
* {
|
||||
* "areaId": 249556,
|
||||
* "childrenAreaList": [
|
||||
* {
|
||||
* "areaId": 249739,
|
||||
* "childrenAreaList": []
|
||||
* }
|
||||
* ]
|
||||
* },
|
||||
* {
|
||||
* "areaId": 249556,
|
||||
* "childrenAreaList": [
|
||||
* {
|
||||
* "areaId": 249739,
|
||||
* "childrenAreaList": []
|
||||
* }
|
||||
* ]
|
||||
* }
|
||||
* ]
|
||||
* </pre>
|
||||
*/
|
||||
|
||||
@TableField(value = "relation_area", typeHandler = FastjsonTypeHandler.class)
|
||||
private JSONArray relationArea;
|
||||
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package cn.axzo.nanopart.visa.server.mq.listener.workflow.process;
|
||||
|
||||
import cn.axzo.framework.rocketmq.EventProducer;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordLog;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
||||
@ -16,6 +18,7 @@ import cn.axzo.workflow.starter.handler.ProcessInstanceEventHandler;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
||||
import static cn.axzo.nanopart.visa.api.constant.VisaConstant.WORKFLOW_VAR_VISA_TYPE_KEY;
|
||||
import static cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum.APPROVE_COMPLETED;
|
||||
@ -133,8 +136,9 @@ public class ProcessInstanceAllEventHandler extends BasicLogSupport implements P
|
||||
|
||||
private void updateChangeRecordApprovalStatus(ProcessInstanceDTO dto, BpmnProcessInstanceResultEnum resultEnum) {
|
||||
// 更新主表审批信息
|
||||
Long visaId = Long.valueOf(dto.getBusinessKey());
|
||||
changeRecordService.lambdaQuery()
|
||||
.eq(ChangeRecord::getId, Long.valueOf(dto.getBusinessKey()))
|
||||
.eq(ChangeRecord::getId, visaId)
|
||||
.eq(ChangeRecord::getApprovalId, dto.getProcessInstanceId())
|
||||
.eq(ChangeRecord::getIsDelete, 0)
|
||||
.oneOpt()
|
||||
@ -146,7 +150,7 @@ public class ProcessInstanceAllEventHandler extends BasicLogSupport implements P
|
||||
|
||||
// 更新关联表审批信息
|
||||
changeRecordRelationService.lambdaQuery()
|
||||
.eq(ChangeRecordRelation::getVisaId, Long.valueOf(dto.getBusinessKey()))
|
||||
.eq(ChangeRecordRelation::getVisaId, visaId)
|
||||
.eq(ChangeRecordRelation::getVarName, PROCESS_INSTANCE.getCode())
|
||||
.eq(ChangeRecordRelation::getContent, dto.getProcessInstanceId())
|
||||
.oneOpt()
|
||||
@ -155,5 +159,14 @@ public class ProcessInstanceAllEventHandler extends BasicLogSupport implements P
|
||||
changeRecordRelationService.updateById(changeRecordRelation);
|
||||
});
|
||||
|
||||
if (Objects.equals(resultEnum, BpmnProcessInstanceResultEnum.APPROVED)) {
|
||||
return;
|
||||
}
|
||||
// 回退到待提报或决策中
|
||||
ChangeRecord visa = changeRecordService.getById(visaId);
|
||||
changeRecordService.changeStatus(ChangeStatusRequest.builder()
|
||||
.visaId(visaId)
|
||||
.updateStatus(Objects.isNull(visa.getImGroupId()) ? VisaStatusEnum.REPORT_FROM_APPROVE : VisaStatusEnum.DECIDING_FROM_APPROVE)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,6 +40,13 @@ public interface ChangeRecordRelationService extends IService<ChangeRecordRelati
|
||||
*/
|
||||
Boolean saveImOperationParticipate(ImGroupOperationReq req);
|
||||
|
||||
/**
|
||||
* IM 群聊中,群主操作重新发起,清空所有人的操作信息
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
Boolean clearImOperationParticipate(ImGroupOperationReq req);
|
||||
|
||||
/**
|
||||
* IM 群聊界面,查询当前人的 tips 横条
|
||||
*
|
||||
|
||||
@ -2,9 +2,10 @@ package cn.axzo.nanopart.visa.server.service;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.PageData;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveOnlyReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
||||
@ -103,5 +104,17 @@ public interface ChangeRecordService extends IService<ChangeRecord> {
|
||||
*
|
||||
* @param req
|
||||
*/
|
||||
void forbid(ChangeRecordForbidReq req);
|
||||
void forbid(ChangeRecordButtonOperationReq req);
|
||||
|
||||
/**
|
||||
* IM 群聊中提交审批
|
||||
*
|
||||
* @param req
|
||||
* @return
|
||||
*/
|
||||
Long approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req);
|
||||
|
||||
void reDecision(ChangeRecordButtonOperationReq req);
|
||||
|
||||
void doExecute(ChangeRecordButtonOperationReq req);
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaAddLogContext;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaLogParam;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
||||
@ -37,7 +37,6 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@ -355,8 +354,16 @@ public class ChangeRecordConfirmServiceImpl extends ServiceImpl<ChangeRecordConf
|
||||
Map<Long, PersonProfileDto> personMap = buildPersonDtoMap(list.stream()
|
||||
.map(ChangeRecordConfirm::getPersonId)
|
||||
.collect(Collectors.toSet()));
|
||||
list.stream().map(i-> VisaChangeApproveCreateReq.ApprovePersonInfo.builder().build())
|
||||
return list.stream().map(i -> VisaChangeApproveCreateReq.ApprovePersonInfo.builder()
|
||||
.workspaceId(i.getWorkspaceId())
|
||||
.ouId(i.getOuId())
|
||||
.nodeId(i.getNodeId())
|
||||
.personId(i.getPersonId())
|
||||
.realName(personMap.getOrDefault(i.getPersonId(), new PersonProfileDto())
|
||||
.getRealName())
|
||||
.avatarUrl(personMap.getOrDefault(i.getPersonId(), new PersonProfileDto())
|
||||
.getAvatarUrl())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,10 +23,10 @@ import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
@ -134,9 +134,11 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean saveImOperationParticipate(ImGroupOperationReq req) {
|
||||
ChangeRecord record = changeRecordService.getById(req.getVisaId());
|
||||
AssertUtil.notNull(record, "未找到变洽签记录");
|
||||
AssertUtil.isTrue(Objects.equals(record.getImGroupId(), req.getImGroupId()), "IM群信息不匹配");
|
||||
|
||||
ChangeRecordRelation relation = new ChangeRecordRelation();
|
||||
relation.setVisaId(req.getVisaId());
|
||||
@ -152,6 +154,17 @@ public class ChangeRecordRelationServiceImpl extends ServiceImpl<ChangeRecordRel
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean clearImOperationParticipate(ImGroupOperationReq req) {
|
||||
ChangeRecord record = changeRecordService.getById(req.getVisaId());
|
||||
AssertUtil.notNull(record, "未找到变洽签记录");
|
||||
AssertUtil.isTrue(Objects.equals(record.getImGroupId(), req.getImGroupId()), "IM 群信息不匹配");
|
||||
|
||||
deleteByVisaId(req.getVisaId(), Lists.newArrayList(VisaRelationFieldEnum.IM_GROUP_PARTICIPATE));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImGroupTipsResp queryImGroupTips(ImGroupTipsQueryReq req) {
|
||||
ChangeRecord record = changeRecordService.getById(req.getVisaId());
|
||||
|
||||
@ -28,9 +28,12 @@ import cn.axzo.nanopart.visa.api.enums.VisaLogTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaRelationVarTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaStatusEnum;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordForbidReq;
|
||||
import cn.axzo.nanopart.visa.api.enums.VisaTypeEnum;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeRecordButtonOperationReq;
|
||||
import cn.axzo.nanopart.visa.api.request.ChangeStatusRequest;
|
||||
import cn.axzo.nanopart.visa.api.request.ImGroupOperationReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeApproveOnlyReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeDiscussCreateReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangeExportReq;
|
||||
import cn.axzo.nanopart.visa.api.request.VisaChangePageSearchReq;
|
||||
@ -152,9 +155,6 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
@Resource
|
||||
private VisaProjectApiGateway visaProjectApiGateway;
|
||||
|
||||
@Resource
|
||||
private VisaCooperateShipGateway visaCooperateShipGateway;
|
||||
|
||||
@Resource
|
||||
private VisaOrganizationalNodeUserGateway nodeUserGateway;
|
||||
|
||||
@ -170,6 +170,12 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
*/
|
||||
@Value("${visa.verifyPersonLimit: 8}")
|
||||
private Integer verifyPersonLimit;
|
||||
|
||||
/**
|
||||
* 关联变更单个数限制
|
||||
*/
|
||||
@Value("${visa.verifyVisaLimit: 5}")
|
||||
private Integer verifyVisaLimit;
|
||||
/**
|
||||
* 最大变化金额
|
||||
*/
|
||||
@ -606,7 +612,25 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
/*保存签证信息*/
|
||||
Long visaId = tempCreateVisaChangeRecord(req);
|
||||
|
||||
/*提交审批 TODO 应该可以抽取,在IM 中“重新发起”可复用*/
|
||||
/*提交审批*/
|
||||
String processInstanceId = createProcessInstance(req, visaId);
|
||||
AssertUtil.isTrue(StringUtils.hasText(processInstanceId), "创建审批异常");
|
||||
|
||||
// 更新主表中的审批字段,记录变量表的审批的信息
|
||||
updateApprovalInfo(visaId, processInstanceId);
|
||||
|
||||
// 更新主表状态
|
||||
changeStatus(ChangeStatusRequest.builder()
|
||||
.visaId(visaId)
|
||||
.updateStatus(VisaStatusEnum.APPROVING)
|
||||
.personId(req.getOperatorPersonId())
|
||||
.ouId(req.getOperatorOuId())
|
||||
.workspaceId(req.getRelationWorkspaceId())
|
||||
.build());
|
||||
return visaId;
|
||||
}
|
||||
|
||||
private String createProcessInstance(VisaChangeApproveCreateReq req, Long visaId) {
|
||||
BpmnProcessInstanceCreateDTO processDto = new BpmnProcessInstanceCreateDTO();
|
||||
// 发起时指定审批人
|
||||
processDto.setSpecifyAssignerMap(ImmutableMap.of(req.getActivityId(), buildApprovers(req.getApprovePersonInfoList())));
|
||||
@ -628,12 +652,17 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
formVariables.put(FORM_FIELD_HAPPEN_TIME, req.getHappenTime());
|
||||
formVariables.put(FORM_FIELD_TOPIC, req.getTopic());
|
||||
formVariables.put(FORM_FIELD_RELATION_PROJECT, req.getRelationProject());
|
||||
formVariables.put(FORM_FIELD_RELATION_PROFESSIONAL, req.getRelationProject());
|
||||
formVariables.put(FORM_FIELD_RELATION_PROFESSIONAL, req.getRelationProfessional());
|
||||
formVariables.put(FORM_FIELD_REASON, req.getReason());
|
||||
formVariables.put(FORM_FIELD_RELATION_AREA, req.getRelationArea());
|
||||
formVariables.put(FORM_FIELD_CONTEXT_DESCRIPTION, req.getChangeContextAndDescriptionList());
|
||||
// TODO 变更金额
|
||||
formVariables.put(FORM_FIELD_AMOUNT_CHANGE, "");
|
||||
String amountDesc = "不变";
|
||||
if (req.getAmountChange().compareTo(BigDecimal.ZERO) > 0) {
|
||||
amountDesc = "增加" + req.getAmountChange().toPlainString() + "元";
|
||||
} else if (req.getAmountChange().compareTo(BigDecimal.ZERO) < 0) {
|
||||
amountDesc = "减少" + req.getAmountChange().toPlainString() + "元";
|
||||
}
|
||||
formVariables.put(FORM_FIELD_AMOUNT_CHANGE, amountDesc);
|
||||
|
||||
// 三种单据
|
||||
if (MapUtils.isNotEmpty(req.getRelationOrderMap())) {
|
||||
@ -658,20 +687,7 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
Map<String, Object> pendingVariables = new HashMap<>();
|
||||
pendingVariables.put(WORKFLOW_PENDING_TOPIC, req.getTopic());
|
||||
processDto.setPendingVariables(pendingVariables);
|
||||
String processInstanceId = workflowGateway.processInstanceCreate(processDto);
|
||||
|
||||
// 更新主表中的审批字段,记录变量表的审批的信息
|
||||
updateApprovalInfo(visaId, processInstanceId);
|
||||
|
||||
// 更新主表状态
|
||||
changeStatus(ChangeStatusRequest.builder()
|
||||
.visaId(visaId)
|
||||
.updateStatus(VisaStatusEnum.APPROVING)
|
||||
.personId(req.getOperatorPersonId())
|
||||
.ouId(req.getOperatorOuId())
|
||||
.workspaceId(req.getRelationWorkspaceId())
|
||||
.build());
|
||||
return visaId;
|
||||
return workflowGateway.processInstanceCreate(processDto);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -958,34 +974,30 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
});
|
||||
}
|
||||
// 相关单位及人员存在性
|
||||
// if (CollectionUtils.isNotEmpty(req.getRelationUnitAndPersonList())) {
|
||||
// List<VisaChangeTempCreateReq.RelationUnitAndPerson> team = req.getRelationUnitAndPersonList().stream()
|
||||
// .filter(r -> {
|
||||
// AssertUtil.notNull(r.getType(), "相关单位类型错误");
|
||||
// AssertUtil.isTrue(NumberUtil.isPositiveNumber(r.getOuId()), "请选择" + r.getType().getDesc());
|
||||
// AssertUtil.isTrue(NumberUtil.isPositiveNumber(r.getNodeId()), "请选择" + r.getType().getDesc());
|
||||
//// AssertUtil.isTrue(r.getPersonId().size() <= verifyPersonLimit, String.format(r.getType().getDesc() + "确认人,最多支持{}个", verifyPersonLimit));
|
||||
// return Objects.equals(SaasCooperateShipCooperateTypeEnum.PROJ_TEAM, r.getType());
|
||||
// })
|
||||
// .collect(Collectors.toList());
|
||||
// List<VisaChangeTempCreateReq.RelationUnitAndPerson> unit = req.getRelationUnitAndPersonList();
|
||||
// if (CollectionUtils.isNotEmpty(team)) {
|
||||
// // 去除班组
|
||||
// List<Long> teamNodeId = team.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getOuIdOrTeamNodeId).distinct().collect(Collectors.toList());
|
||||
// unit = unit.stream().filter(o -> !teamNodeId.contains(o.getOuIdOrTeamNodeId())).collect(Collectors.toList());
|
||||
// }
|
||||
// TODO 相关单位退场状态校验
|
||||
// CooperateShipQueryReq shipQueryReq = CooperateShipQueryReq.builder()
|
||||
// .workspaceId(req.getRelationWorkspaceId())
|
||||
// .workspaceType(WorkspaceTypeEnum.PROJECT.getType())
|
||||
// .organizationNodeIds(unit.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getOuIdOrTeamNodeId).collect(Collectors.toList()))
|
||||
// .nodeIds(team.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getOuIdOrTeamNodeId).collect(Collectors.toList()))
|
||||
// .parentNodeIds(unit.stream().map())
|
||||
// .build();
|
||||
// cooperateShipGateway.genericQuery()
|
||||
// 班组存在性及状态
|
||||
|
||||
// }
|
||||
if (CollectionUtils.isNotEmpty(req.getRelationUnitAndPersonList())) {
|
||||
Map<SaasCooperateShipCooperateTypeEnum, List<VisaChangeTempCreateReq.RelationUnitAndPerson>> cooperateTypeMap = req.getRelationUnitAndPersonList().stream()
|
||||
.peek(r -> {
|
||||
AssertUtil.notNull(r.getType(), "相关单位类型错误");
|
||||
AssertUtil.isTrue(NumberUtil.isPositiveNumber(r.getOuId()), "请选择" + r.getType().getDesc());
|
||||
AssertUtil.isTrue(NumberUtil.isPositiveNumber(r.getNodeId()), "请选择" + r.getType().getDesc());
|
||||
AssertUtil.isTrue(NumberUtil.isPositiveNumber(r.getPersonId()), "请选择" + r.getType().getDesc() + "确认人");
|
||||
})
|
||||
.collect(Collectors.groupingBy(VisaChangeTempCreateReq.RelationUnitAndPerson::getType));
|
||||
// 获取项目下所有为退场人员
|
||||
OrgNodeUserBriefInfoListReq infoListReq = OrgNodeUserBriefInfoListReq.builder()
|
||||
.workspaceId(req.getRelationWorkspaceId())
|
||||
.orgNodeIds(req.getRelationUnitAndPersonList().stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getNodeId).collect(Collectors.toList()))
|
||||
.build();
|
||||
List<OrgNodeUserBriefInfoResp> nodeUserBriefInfoResps = nodeUserGateway.listOrgNodeUsers(infoListReq);
|
||||
AssertUtil.notEmpty(nodeUserBriefInfoResps, "所有单位确认人均已退场");
|
||||
cooperateTypeMap.forEach((k, v) -> {
|
||||
AssertUtil.isTrue(v.size() <= verifyPersonLimit, String.format(k.getDesc() + "确认人,最多支持%d个", verifyPersonLimit));
|
||||
boolean noExit = v.stream().map(VisaChangeTempCreateReq.RelationUnitAndPerson::getPersonId)
|
||||
.anyMatch(p -> nodeUserBriefInfoResps.stream().anyMatch(u -> Objects.equals(u.getPersonId(), p)));
|
||||
AssertUtil.isTrue(noExit, String.format(k.getDesc() + "确认人,存在已退场人员,请重新选择"));
|
||||
});
|
||||
}
|
||||
// 金额变化合法性
|
||||
AssertUtil.isTrue(req.getAmountChange().compareTo(maxAmount) <= 0 && req.getAmountChange().compareTo(minAmount) >= 0, "金额变化超出范围");
|
||||
// 关联单据合法性
|
||||
if (CollUtil.isNotEmpty(req.getRelationOrderMap())) {
|
||||
@ -995,7 +1007,10 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
} else if (Objects.equals(VisaRelationFieldEnum.RECTIFICATION_ORDER.name(), key)) {
|
||||
// 整改单 TODO
|
||||
} else if (Objects.equals(VisaRelationFieldEnum.VISA_ORDER.name(), key)) {
|
||||
// 变更单 TODO
|
||||
// 变更单
|
||||
AssertUtil.isTrue(VisaTypeEnum.TECHNOLOGY_APPROVED.equals(req.getType()) || VisaTypeEnum.PROJECT_VISA.equals(req.getType()), "变更单关联单据仅支持技术核定/工程签证");
|
||||
AssertUtil.isTrue(value.size() <= verifyVisaLimit, String.format("最多可关联%d个变更单,请重新选择", verifyVisaLimit));
|
||||
List<ChangeRecordBill> mainBill = changeRecordBillService.findMainBill(VisaRelationFieldEnum.VISA_ORDER, value);
|
||||
} else {
|
||||
throw new ServiceException("不支持的关联单据类型");
|
||||
}
|
||||
@ -1071,9 +1086,12 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void forbid(ChangeRecordForbidReq req) {
|
||||
public void forbid(ChangeRecordButtonOperationReq req) {
|
||||
ChangeRecord record = getById(req.getVisaId());
|
||||
|
||||
//校验操作人
|
||||
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
|
||||
|
||||
ChangeStatusRequest changeStatusRequest = new ChangeStatusRequest();
|
||||
changeStatusRequest.setVisaId(req.getVisaId());
|
||||
changeStatusRequest.setUpdateStatus(VisaStatusEnum.FORBIDED);
|
||||
@ -1099,4 +1117,63 @@ public class ChangeRecordServiceImpl extends ServiceImpl<ChangeRecordDao, Change
|
||||
workflowGateway.processInstanceAbort(abort);
|
||||
}
|
||||
}
|
||||
|
||||
private void validOperationPermission(Long visaId, Long personId, Long ouId, Long workspaceId) {
|
||||
List<ChangeRecordConfirm> confirmUsers = changeRecordConfirmService.findByCondition(VisaConfirmDto.builder()
|
||||
.visaId(visaId)
|
||||
.bizType(VisaConfirmBizTypeEnum.CREATE)
|
||||
.build());
|
||||
|
||||
AssertUtil.isTrue(CollectionUtils.isNotEmpty(confirmUsers) && confirmUsers.size() == 1, "单据发起人信息数据异常");
|
||||
|
||||
ChangeRecordConfirm creator = confirmUsers.get(0);
|
||||
AssertUtil.isTrue(Objects.equals(creator.getPersonId(), personId)
|
||||
&& Objects.equals(creator.getOuId(), ouId)
|
||||
&& Objects.equals(creator.getWorkspaceId(), workspaceId), "不是单据发起人,不能操作");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long approveCreateOnlyVisaChangeRecord(VisaChangeApproveOnlyReq req) {
|
||||
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
|
||||
|
||||
VisaChangeApproveCreateReq createReq = buildVisaChangeApproveCreateReqByVisaId(req.getVisaId());
|
||||
AssertUtil.notNull(createReq, "未找到变洽签单据");
|
||||
createReq.setApprovePersonInfoList(req.getApprovePersonInfoList());
|
||||
createReq.setOperatorOuId(req.getOperatorOuId());
|
||||
createReq.setOperatorPersonId(req.getOperatorPersonId());
|
||||
createReq.setRelationWorkspaceId(req.getOperatorWorkspaceId());
|
||||
createProcessInstance(createReq, req.getVisaId());
|
||||
return req.getVisaId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reDecision(ChangeRecordButtonOperationReq req) {
|
||||
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
|
||||
|
||||
changeRecordRelationService.clearImOperationParticipate(ImGroupOperationReq.builder()
|
||||
.visaId(req.getVisaId())
|
||||
.imGroupId(req.getImGroupId())
|
||||
.build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doExecute(ChangeRecordButtonOperationReq req) {
|
||||
validOperationPermission(req.getVisaId(), req.getOperatorPersonId(), req.getOperatorOuId(), req.getOperatorWorkspaceId());
|
||||
|
||||
changeStatus(ChangeStatusRequest.builder()
|
||||
.visaId(req.getVisaId())
|
||||
.updateStatus(VisaStatusEnum.EXECUTING)
|
||||
.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过变更单id构建审批提交对象
|
||||
*
|
||||
* @param visaId 变更单id
|
||||
* @return VisaChangeApproveCreateReq
|
||||
*/
|
||||
private VisaChangeApproveCreateReq buildVisaChangeApproveCreateReqByVisaId(Long visaId) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user