Commit 5c01536e authored by suhuiguang's avatar suhuiguang

1.设备移交并发修改

parent 7995e161
package com.yeejoin.amos.boot.module.jg.api.dto; package com.yeejoin.amos.boot.module.jg.api.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -19,10 +19,10 @@ import java.util.Map; ...@@ -19,10 +19,10 @@ import java.util.Map;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value="JgEquipTransferDto", description="设备移交") @ApiModel(value = "JgEquipTransferDto", description = "设备移交")
public class JgEquipTransferDto extends BaseDto { public class JgEquipTransferDto extends BaseDto {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "申请编号") @ApiModelProperty(value = "申请编号")
private String applyNo; private String applyNo;
...@@ -91,7 +91,6 @@ public class JgEquipTransferDto extends BaseDto { ...@@ -91,7 +91,6 @@ public class JgEquipTransferDto extends BaseDto {
@ApiModelProperty(value = "流程执行角色") @ApiModelProperty(value = "流程执行角色")
private String instanceRoles; private String instanceRoles;
@TableField(exist = false)
@ApiModelProperty(value = "告知设备列表") @ApiModelProperty(value = "告知设备列表")
private List<Map<String, Object>> deviceList; private List<Map<String, Object>> deviceList;
...@@ -138,5 +137,9 @@ public class JgEquipTransferDto extends BaseDto { ...@@ -138,5 +137,9 @@ public class JgEquipTransferDto extends BaseDto {
private String nextExecuteUserIds; private String nextExecuteUserIds;
@ApiModelProperty(value = "转办人") @ApiModelProperty(value = "转办人")
private String transferToUserIds; private String transferToUserIds;
@ApiModelProperty(value = "工作流下一节点任务id")
private String nextTaskId;
} }
...@@ -5,12 +5,16 @@ import cn.hutool.core.map.MapBuilder; ...@@ -5,12 +5,16 @@ import cn.hutool.core.map.MapBuilder;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.util.StringUtil;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo; import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey; import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.jg.api.dto.*; import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.entity.*; import com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransfer;
import com.yeejoin.amos.boot.module.jg.api.entity.JgEquipTransferEq;
import com.yeejoin.amos.boot.module.jg.api.entity.JgMaintainNotice;
import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum; import com.yeejoin.amos.boot.module.jg.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferEqMapper; import com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferEqMapper;
import com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferMapper; import com.yeejoin.amos.boot.module.jg.api.mapper.JgEquipTransferMapper;
...@@ -22,24 +26,30 @@ import com.yeejoin.amos.boot.module.ymt.api.common.BaseException; ...@@ -22,24 +26,30 @@ import com.yeejoin.amos.boot.module.ymt.api.common.BaseException;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.feign.systemctl.model.TaskV2Model; import com.yeejoin.amos.feign.systemctl.model.TaskV2Model;
import com.yeejoin.amos.feign.workflow.model.*; import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.context.annotation.Lazy; import org.redisson.api.RLock;
import org.springframework.util.StringUtils; import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext; import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest; import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -66,6 +76,10 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -66,6 +76,10 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
@Lazy @Lazy
private final CommonServiceImpl commonService; private final CommonServiceImpl commonService;
@Autowired
private RedissonClient redissonClient;
/** /**
* 保存和保存并提交 * 保存和保存并提交
* *
...@@ -101,15 +115,15 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -101,15 +115,15 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
JgEquipTransferEq jgEquipTransferEq = buildJgEquipTransferEq(obj, applyNo); JgEquipTransferEq jgEquipTransferEq = buildJgEquipTransferEq(obj, applyNo);
JgEquipTransfer transfer = buildJgEquipTransfer(model, applyNo, reginParams, submitType, workflowResultList, i); JgEquipTransfer transfer = buildJgEquipTransfer(model, applyNo, reginParams, submitType, workflowResultList, i);
transfer.setSupervisoryCode(String.valueOf(obj.get("SUPERVISORY_CODE"))); transfer.setSupervisoryCode(String.valueOf(obj.get("SUPERVISORY_CODE")));
transfer.setEquList(Objects.toString(obj.get("EQU_LIST"),"")); transfer.setEquList(Objects.toString(obj.get("EQU_LIST"), ""));
transfer.setEquDefine(Objects.toString(obj.get("EQU_DEFINE"),"")); transfer.setEquDefine(Objects.toString(obj.get("EQU_DEFINE"), ""));
transfer.setEquCategory(Objects.toString(obj.get("EQU_CATEGORY"),"")); transfer.setEquCategory(Objects.toString(obj.get("EQU_CATEGORY"), ""));
transfer.setProductName(Objects.toString(obj.get("PRODUCT_NAME"),"")); transfer.setProductName(Objects.toString(obj.get("PRODUCT_NAME"), ""));
transfer.setUseRegistCode(Objects.toString(obj.get("USE_ORG_CODE"),""));
transfer.setUseRegistCode(Objects.toString(obj.get("USE_ORG_CODE"), "")); transfer.setUseRegistCode(Objects.toString(obj.get("USE_ORG_CODE"), ""));
transfer.setUseInnerCode(Objects.toString(obj.get("USE_INNER_CODE"),"")); transfer.setUseRegistCode(Objects.toString(obj.get("USE_ORG_CODE"), ""));
transfer.setEquAddress(Objects.toString(obj.get("ADDRESS"),"")); transfer.setUseInnerCode(Objects.toString(obj.get("USE_INNER_CODE"), ""));
transfer.setEquCode(Objects.toString(obj.get("EQU_CODE"),"")); transfer.setEquAddress(Objects.toString(obj.get("ADDRESS"), ""));
transfer.setEquCode(Objects.toString(obj.get("EQU_CODE"), ""));
transferList.add(transfer); transferList.add(transfer);
equipTransferEqList.add(jgEquipTransferEq); equipTransferEqList.add(jgEquipTransferEq);
}); });
...@@ -117,18 +131,27 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -117,18 +131,27 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
baseMapper.insertBatchSomeColumn(transferList); baseMapper.insertBatchSomeColumn(transferList);
if (SUBMIT_TYPE_FLOW.equals(submitType)) { if (SUBMIT_TYPE_FLOW.equals(submitType)) {
this.buildTask(transferList, workflowResultList); this.buildTask(transferList, workflowResultList);
} else{ } else {
//批量暂存 //批量暂存
this.saveTempTransfer(transferList); this.saveTempTransfer(transferList);
} }
List<JgEquipTransferEq> jgEquipTransferEqList = this.buildJgEquipTransferEqList(equipTransferEqList, transferList); List<JgEquipTransferEq> jgEquipTransferEqList = this.buildJgEquipTransferEqList(equipTransferEqList, transferList);
jgEquipTransferEqMapper.insertBatchSomeColumn(jgEquipTransferEqList); jgEquipTransferEqMapper.insertBatchSomeColumn(jgEquipTransferEqList);
this.updateRedisBatch(transferList);
return transferList; return transferList;
} }
private void updateRedisBatch(List<JgEquipTransfer> transferList) {
transferList.stream().filter(n -> StringUtil.isNotEmpty(n.getInstanceId())).forEach(jgEquipTransfer -> {
commonService.saveExecuteFlowData2Redis(jgEquipTransfer.getInstanceId(), this.buildInstanceRuntimeData(jgEquipTransfer));
});
}
/** /**
* 批量暂存 * 批量暂存
*
* @param transferList 移交信息 * @param transferList 移交信息
*/ */
private void saveTempTransfer(List<JgEquipTransfer> transferList) { private void saveTempTransfer(List<JgEquipTransfer> transferList) {
...@@ -146,7 +169,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -146,7 +169,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
.taskContent(String.format("来自%s【%s】的业务办理,【申请单号:%s】", item.getEquList(), Objects.toString(item.getSupervisoryCode(), ""), item.getApplyNo())) .taskContent(String.format("来自%s【%s】的业务办理,【申请单号:%s】", item.getEquList(), Objects.toString(item.getSupervisoryCode(), ""), item.getApplyNo()))
.taskCode(item.getApplyNo()) .taskCode(item.getApplyNo())
.taskType(BusinessTypeEnum.JG_EQUIPMENT_HANDOVER.getCode()) .taskType(BusinessTypeEnum.JG_EQUIPMENT_HANDOVER.getCode())
.relationId(item.getSequenceNbr()+"") .relationId(item.getSequenceNbr() + "")
.build(); .build();
} }
...@@ -163,7 +186,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -163,7 +186,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
.put("flowStatus", statusEnum.getCode()) .put("flowStatus", statusEnum.getCode())
.put("flowStatusLabel", statusEnum.getName()) .put("flowStatusLabel", statusEnum.getName())
.put("relationId", transfer.getInstanceId()) .put("relationId", transfer.getInstanceId())
.put("model",transfer) .put("model", transfer)
.build()); .build());
} }
...@@ -248,8 +271,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -248,8 +271,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
*/ */
@Transactional(rollbackFor = {Exception.class, BaseException.class}) @Transactional(rollbackFor = {Exception.class, BaseException.class})
public JgEquipTransferDto updateEquipTransfer(String submitType, JgEquipTransferDto equipTransferDto, String op) { public JgEquipTransferDto updateEquipTransfer(String submitType, JgEquipTransferDto equipTransferDto, String op) {
if (Objects.isNull(equipTransferDto) || StringUtils.isEmpty(submitType)) if (Objects.isNull(equipTransferDto) || StringUtils.isEmpty(submitType)) {
throw new IllegalArgumentException("参数不能为空"); throw new IllegalArgumentException("参数不能为空");
}
this.convertField(equipTransferDto); this.convertField(equipTransferDto);
JgEquipTransfer transfer = this.getById(equipTransferDto.getSequenceNbr()); JgEquipTransfer transfer = this.getById(equipTransferDto.getSequenceNbr());
...@@ -284,7 +308,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -284,7 +308,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
updateById(transfer); updateById(transfer);
//删除暂存 //删除暂存
commonService.deleteTaskModel(transfer.getSequenceNbr()+""); commonService.deleteTaskModel(transfer.getSequenceNbr() + "");
// 如果为保存并提交,则创建代办 // 如果为保存并提交,则创建代办
this.buildTask(Collections.singletonList(transfer), Collections.singletonList(workflowResultDto)); this.buildTask(Collections.singletonList(transfer), Collections.singletonList(workflowResultDto));
...@@ -323,6 +347,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -323,6 +347,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
// 创建新的代办 // 创建新的代办
this.createNewTodo(transfer, workflowResultDto, taskV2Model, FlowStatusEnum.TO_BE_PROCESSED); this.createNewTodo(transfer, workflowResultDto, taskV2Model, FlowStatusEnum.TO_BE_PROCESSED);
} }
commonService.saveExecuteFlowData2Redis(transfer.getInstanceId(),this.buildInstanceRuntimeData(transfer));
} else { } else {
JgEquipTransfer equipTransfer = new JgEquipTransfer(); JgEquipTransfer equipTransfer = new JgEquipTransfer();
BeanUtils.copyProperties(equipTransferDto, equipTransfer); BeanUtils.copyProperties(equipTransferDto, equipTransfer);
...@@ -338,79 +363,105 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -338,79 +363,105 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
* @param op 通过或驳回 * @param op 通过或驳回
*/ */
public void accept(JgEquipTransferDto jgEquipTransferDto, String op) { public void accept(JgEquipTransferDto jgEquipTransferDto, String op) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class); String instanceId = jgEquipTransferDto.getInstanceId();
JgEquipTransfer jgEquipTransfer = baseMapper.selectById(jgEquipTransferDto.getSequenceNbr()); String nextTaskId = jgEquipTransferDto.getNextTaskId();
// 检查实际状态是否不等于期望状态 String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
commonService.checkExpectedStatus(jgEquipTransfer.getApplyStatus()); RLock lock = redissonClient.getLock(lockKey);
try {
TaskResultDTO workDto = new TaskResultDTO(); boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
workDto.setResultCode("approvalStatus"); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
workDto.setTaskId(jgEquipTransfer.getNextTaskId()); if (!isLocked) {
HashMap<String, Object> commMap = new HashMap<>(); throw new BadRequest("当前流程已经被执行!");
if (jgEquipTransfer.getApplyStatus().equals("6614") || jgEquipTransfer.getApplyStatus().equals("6615")) { }
commMap.put("approvalStatus", "提交"); // 流程执行时,状态及权限校验
} else { commonService.checkForExecuteFlow(nextTaskId, instanceId);
commMap.put("approvalStatus", op); ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
} JgEquipTransfer jgEquipTransfer = baseMapper.selectById(jgEquipTransferDto.getSequenceNbr());
workDto.setNextExecuteUserCompanyCode("1".equals(op) ? jgEquipTransfer.getUseUnitCreditCode() : jgEquipTransfer.getInstallUnitCreditCode());
workDto.setVariable(commMap); TaskResultDTO workDto = new TaskResultDTO();
workDto.setComment(jgEquipTransferDto.getProcessAdvice()); workDto.setResultCode("approvalStatus");
ProcessTaskDTO processTaskDTO = cmWorkflowService.completeOrReject(jgEquipTransfer.getNextTaskId(), workDto, op); workDto.setTaskId(jgEquipTransfer.getNextTaskId());
// 提取节点等信息 HashMap<String, Object> commMap = new HashMap<>();
WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0); if (jgEquipTransfer.getApplyStatus().equals("6614") || jgEquipTransfer.getApplyStatus().equals("6615")) {
jgEquipTransfer.setPromoter(reginParams.getUserModel().getUserId()); commMap.put("approvalStatus", "提交");
jgEquipTransfer.setProcessAdvice(jgEquipTransferDto.getProcessAdvice());
JgEquipTransferEq jgEquipTransferEq = jgEquipTransferEqMapper.selectOne(Wrappers.<JgEquipTransferEq>lambdaQuery().select(JgEquipTransferEq::getEquId)
.eq(JgEquipTransferEq::getEquipTransferId, jgEquipTransferDto.getSequenceNbr()));
TaskV2Model taskV2Model;
if ("0".equals(op)) {
if (StringUtils.isEmpty(workflowResultDto.getNextExecutorRoleIds())) {
jgEquipTransfer.setApplyStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
jgEquipTransfer.setPromoter("");
jgEquipTransfer.setAcceptDate(new Date());
if (jgEquipTransferEq != null) {
Map<String, Map<String, Object>> resultMap = MapBuilder.<String, Map<String, Object>>create()
.put(jgEquipTransferEq.getEquId(), MapBuilder.<String, Object>create()
.put("USC_UNIT_NAME", jgEquipTransfer.getInstallUnitName())
.put("USC_UNIT_CREDIT_CODE", jgEquipTransfer.getInstallUnitCreditCode())
.build())
.build();
tzsServiceFeignClient.commonUpdateEsDataByIds(resultMap);
}
// 上个代办改为已办
this.updateLastTodo(jgEquipTransfer, FlowStatusEnum.TO_BE_FINISHED);
} else { } else {
jgEquipTransfer.setNextExecuteIds(workflowResultDto.getNextExecutorRoleIds()); commMap.put("approvalStatus", op);
if (!ObjectUtils.isEmpty(jgEquipTransfer.getInstanceStatus())) { }
jgEquipTransfer.setInstanceStatus(jgEquipTransfer.getInstanceStatus() + "," + workflowResultDto.getNextExecutorRoleIds()); workDto.setNextExecuteUserCompanyCode("1".equals(op) ? jgEquipTransfer.getUseUnitCreditCode() : jgEquipTransfer.getInstallUnitCreditCode());
workDto.setVariable(commMap);
workDto.setComment(jgEquipTransferDto.getProcessAdvice());
ProcessTaskDTO processTaskDTO = cmWorkflowService.completeOrReject(jgEquipTransfer.getNextTaskId(), workDto, op);
// 提取节点等信息
WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0);
jgEquipTransfer.setPromoter(reginParams.getUserModel().getUserId());
jgEquipTransfer.setProcessAdvice(jgEquipTransferDto.getProcessAdvice());
JgEquipTransferEq jgEquipTransferEq = jgEquipTransferEqMapper.selectOne(Wrappers.<JgEquipTransferEq>lambdaQuery().select(JgEquipTransferEq::getEquId)
.eq(JgEquipTransferEq::getEquipTransferId, jgEquipTransferDto.getSequenceNbr()));
TaskV2Model taskV2Model;
if ("0".equals(op)) {
if (StringUtils.isEmpty(workflowResultDto.getNextExecutorRoleIds())) {
jgEquipTransfer.setApplyStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
jgEquipTransfer.setPromoter("");
jgEquipTransfer.setAcceptDate(new Date());
if (jgEquipTransferEq != null) {
Map<String, Map<String, Object>> resultMap = MapBuilder.<String, Map<String, Object>>create()
.put(jgEquipTransferEq.getEquId(), MapBuilder.<String, Object>create()
.put("USC_UNIT_NAME", jgEquipTransfer.getInstallUnitName())
.put("USC_UNIT_CREDIT_CODE", jgEquipTransfer.getInstallUnitCreditCode())
.build())
.build();
tzsServiceFeignClient.commonUpdateEsDataByIds(resultMap);
}
// 上个代办改为已办
this.updateLastTodo(jgEquipTransfer, FlowStatusEnum.TO_BE_FINISHED);
} else { } else {
jgEquipTransfer.setInstanceStatus(workflowResultDto.getNextExecutorRoleIds()); jgEquipTransfer.setNextExecuteIds(workflowResultDto.getNextExecutorRoleIds());
if (!ObjectUtils.isEmpty(jgEquipTransfer.getInstanceStatus())) {
jgEquipTransfer.setInstanceStatus(jgEquipTransfer.getInstanceStatus() + "," + workflowResultDto.getNextExecutorRoleIds());
} else {
jgEquipTransfer.setInstanceStatus(workflowResultDto.getNextExecutorRoleIds());
}
jgEquipTransfer.setPromoter(RequestContext.getExeUserId());
jgEquipTransfer.setApplyStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
jgEquipTransfer.setNextTaskId(workflowResultDto.getNextTaskId());
jgEquipTransfer.setInstanceId(workflowResultDto.getInstanceId());
// 上个代办改为已办
taskV2Model = this.updateLastTodo(jgEquipTransfer, FlowStatusEnum.TO_BE_FINISHED);
// 创建新的代办
this.createNewTodo(jgEquipTransfer, workflowResultDto, taskV2Model, FlowStatusEnum.TO_BE_PROCESSED);
} }
jgEquipTransfer.setPromoter(RequestContext.getExeUserId()); } else {
jgEquipTransfer.setApplyStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode())); //驳回
jgEquipTransfer.setPromoter("");
jgEquipTransfer.setApplyStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
jgEquipTransfer.setSupervisoryCode(jgEquipTransferDto.getSupervisoryCode());
jgEquipTransfer.setEquList(jgEquipTransferDto.getEquList());
jgEquipTransfer.setNextTaskId(workflowResultDto.getNextTaskId()); jgEquipTransfer.setNextTaskId(workflowResultDto.getNextTaskId());
jgEquipTransfer.setInstanceId(workflowResultDto.getInstanceId()); jgEquipTransfer.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 上个代办改为已办 //jgEquipTransfer.setInstanceId(workflowResultDto.getInstanceId());
taskV2Model = this.updateLastTodo(jgEquipTransfer, FlowStatusEnum.TO_BE_FINISHED); // 上个代办改为驳回
// 创建新的代办 taskV2Model = this.updateLastTodo(jgEquipTransfer, FlowStatusEnum.REJECTED);
this.createNewTodo(jgEquipTransfer, workflowResultDto, taskV2Model, FlowStatusEnum.TO_BE_PROCESSED); this.createNewTodo(jgEquipTransfer, workflowResultDto, taskV2Model, FlowStatusEnum.REJECTED);
}
updateById(jgEquipTransfer);
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jgEquipTransfer));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
} }
} else {
//驳回
jgEquipTransfer.setPromoter("");
jgEquipTransfer.setApplyStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
jgEquipTransfer.setSupervisoryCode(jgEquipTransferDto.getSupervisoryCode());
jgEquipTransfer.setEquList(jgEquipTransferDto.getEquList());
jgEquipTransfer.setNextTaskId(workflowResultDto.getNextTaskId());
jgEquipTransfer.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
//jgEquipTransfer.setInstanceId(workflowResultDto.getInstanceId());
// 上个代办改为驳回
taskV2Model = this.updateLastTodo(jgEquipTransfer, FlowStatusEnum.REJECTED);
this.createNewTodo(jgEquipTransfer, workflowResultDto, taskV2Model, FlowStatusEnum.REJECTED);
} }
updateById(jgEquipTransfer); }
public InstanceRuntimeData buildInstanceRuntimeData(JgEquipTransfer jgEquipTransfer) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jgEquipTransfer.getNextExecuteUserIds())
.promoter(jgEquipTransfer.getPromoter())
.nextTaskId(jgEquipTransfer.getNextTaskId())
.build();
} }
/** /**
...@@ -419,11 +470,21 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -419,11 +470,21 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
* @param equipTransferInfo 设备移交信息 * @param equipTransferInfo 设备移交信息
*/ */
public void cancel(JgEquipTransferDto equipTransferInfo) { public void cancel(JgEquipTransferDto equipTransferInfo) {
// 查询装备移交信息 String instanceId = equipTransferInfo.getInstanceId();
JgEquipTransfer equipTransfer = baseMapper.selectById(equipTransferInfo.getSequenceNbr()); String nextTaskId = equipTransferInfo.getNextTaskId();
if (equipTransfer != null) { String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
// 检查实际状态是否不等于期望状态 RLock lock = redissonClient.getLock(lockKey);
commonService.checkExpectedStatus(equipTransfer.getApplyStatus()); try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForRevocationFlow(nextTaskId, instanceId);
// 查询装备移交信息
JgEquipTransfer equipTransfer = baseMapper.selectById(equipTransferInfo.getSequenceNbr());
// 回滚工作流 // 回滚工作流
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(equipTransferInfo.getInstanceId()); ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(equipTransferInfo.getInstanceId());
WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0); WorkflowResultDto workflowResultDto = commonService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO)).get(0);
...@@ -439,8 +500,16 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -439,8 +500,16 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode()); jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName()); jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
commonService.rollbackTask(equipTransfer.getInstanceId(), jsonObject); commonService.rollbackTask(equipTransfer.getInstanceId(), jsonObject);
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(equipTransfer));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
} }
} }
private String getStringFromMap(Map<String, Object> map, String key) { private String getStringFromMap(Map<String, Object> map, String key) {
return map.getOrDefault(key, "").toString(); return map.getOrDefault(key, "").toString();
} }
...@@ -481,8 +550,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -481,8 +550,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
public Map<String, Object> queryBySequenceNbr(Long sequenceNbr) { public Map<String, Object> queryBySequenceNbr(Long sequenceNbr) {
JgEquipTransfer equipTransfer = baseMapper.selectById(sequenceNbr); JgEquipTransfer equipTransfer = baseMapper.selectById(sequenceNbr);
if (Objects.isNull(equipTransfer)) if (Objects.isNull(equipTransfer)) {
return null; return null;
}
String[] fields = {"productPhoto", "designDoc", "designStandard", "factoryStandard", String[] fields = {"productPhoto", "designDoc", "designStandard", "factoryStandard",
"productQualityYieldProve", "insUseMaintainExplain", "inspectReport", "productQualityYieldProve", "insUseMaintainExplain", "inspectReport",
...@@ -503,7 +573,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -503,7 +573,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
handleJsonArrayFields(equipMap, fields); handleJsonArrayFields(equipMap, fields);
return Stream.concat(equipTransferInfo.entrySet().stream(), return Stream.concat(equipTransferInfo.entrySet().stream(),
equipMap.entrySet().stream()) equipMap.entrySet().stream())
.filter(entry -> entry.getValue() != null) .filter(entry -> entry.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (existing, replacement) -> existing)); .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (existing, replacement) -> existing));
} }
...@@ -562,8 +632,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -562,8 +632,9 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
* @param model 设备信息 * @param model 设备信息
*/ */
private void convertField(JgEquipTransferDto model) { private void convertField(JgEquipTransferDto model) {
if (null == model) if (null == model) {
return; return;
}
String installUnitId = model.getInstallUnitCreditCode(); String installUnitId = model.getInstallUnitCreditCode();
if (!ObjectUtils.isEmpty(installUnitId)) { if (!ObjectUtils.isEmpty(installUnitId)) {
String[] installUnitIdList = installUnitId.split("_"); String[] installUnitIdList = installUnitId.split("_");
...@@ -598,7 +669,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto, ...@@ -598,7 +669,7 @@ public class JgEquipTransferServiceImpl extends BaseService<JgEquipTransferDto,
dto.setPromoter(reginParams.getUserModel().getUserId()); dto.setPromoter(reginParams.getUserModel().getUserId());
dto.setNextTaskId(workflowResult.getNextTaskId()); dto.setNextTaskId(workflowResult.getNextTaskId());
dto.setNextExecuteUserIds(workflowResult.getNextExecutorUserIds()); dto.setNextExecuteUserIds(workflowResult.getNextExecutorUserIds());
}else{ } else {
dto.setNextExecuteUserIds(RequestContext.getExeUserId()); dto.setNextExecuteUserIds(RequestContext.getExeUserId());
} }
if (!CollectionUtils.isEmpty(workflowResultList)) { if (!CollectionUtils.isEmpty(workflowResultList)) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment