Commit 7ff2de81 authored by suhuiguang's avatar suhuiguang

1.使用登记增加限制

parent 48b901aa
...@@ -19,9 +19,7 @@ import org.springframework.stereotype.Component; ...@@ -19,9 +19,7 @@ import org.springframework.stereotype.Component;
public class ApplicationRunnerImpl implements ApplicationRunner { public class ApplicationRunnerImpl implements ApplicationRunner {
@Autowired @Autowired
private IEquipmentHandlerService equipmentHandlerService; IC
@Autowired
private IContingencyPlanService contingencyPlanService;
@Override @Override
public void run(ApplicationArguments args) throws Exception { public void run(ApplicationArguments args) throws Exception {
......
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author Administrator
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class InstanceRuntimeData implements Serializable {
/**
* 下一个执行节点id
*/
private String nextTaskId;
/**
* 最近流程执行人
*/
private String promoter;
/**
* 下一节点执行人
*/
private String nextExecuteUserIds;
}
...@@ -29,6 +29,8 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> { ...@@ -29,6 +29,8 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
String selectBusinessData(String tableName, String instanceId); String selectBusinessData(String tableName, String instanceId);
String selectPromoterData(String tableName, String instanceId);
void updateBusinessData(String tableName,String assignee, String transferToUserIds, String instanceId,String nextTaskId); void updateBusinessData(String tableName,String assignee, String transferToUserIds, String instanceId,String nextTaskId);
Map<String, Object> getUserPhone(String name ,String companyCode); Map<String, Object> getUserPhone(String name ,String companyCode);
......
...@@ -69,10 +69,11 @@ ...@@ -69,10 +69,11 @@
</select> </select>
<select id="selectBusinessData" resultType="java.lang.String"> <select id="selectBusinessData" resultType="java.lang.String">
select transfer_to_user_ids select
transfer_to_user_ids
from ${tableName} from ${tableName}
where instance_id = #{instanceId} where instance_id = #{instanceId}
</select> </select>
<update id="updateBusinessData"> <update id="updateBusinessData">
update ${tableName} update ${tableName}
...@@ -89,5 +90,13 @@ ...@@ -89,5 +90,13 @@
and name = #{name} and name = #{name}
AND is_delete = 0 AND is_delete = 0
</select> </select>
<select id="selectPromoterData" resultType="java.lang.String">
select
promoter
from
${tableName}
where
instance_id = #{instanceId}
</select>
</mapper> </mapper>
package com.yeejoin.amos.boot.module.jg.biz.config;
import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class RedissonManager {
/**
* 集群环境使用-节点信息
*/
@Value("${spring.redis.cluster.nodes:default}")
private String clusterNodes;
/**
* 公共-密码
*/
@Value("${spring.redis.password}")
private String password;
/**
* 单机环境使用
*/
@Value("${spring.redis.host:default}")
private String host;
/**
* 单机环境使用
*/
@Value("${spring.redis.port:default}")
private String port;
/**
* 单机环境使用
*/
@Value("${spring.redis.database:0}")
private int database;
@Bean
@ConditionalOnProperty(name = "spring.redis.mode", havingValue = "cluster")
public RedissonClient redissonClient() {
// 集群环境使用
Config config = new Config();
config.useClusterServers()
.addNodeAddress(clusterNodes.split(","))
.setPassword(password);
return Redisson.create(config);
}
@Bean
@ConditionalOnProperty(name = "spring.redis.mode", havingValue = "singleton", matchIfMissing = true)
public RedissonClient redissonSingletonClient() {
// 单机环境使用
Config config = new Config();
config.useSingleServer().setAddress(host + ":" + port).setPassword(password).setDatabase(database);
return Redisson.create(config);
}
}
...@@ -87,7 +87,7 @@ public class JgChangeRegistrationNameController extends BaseController { ...@@ -87,7 +87,7 @@ public class JgChangeRegistrationNameController extends BaseController {
@PostMapping(value = "/withdraw") @PostMapping(value = "/withdraw")
@ApiOperation(httpMethod = "POST", value = "撤回", notes = "撤回") @ApiOperation(httpMethod = "POST", value = "撤回", notes = "撤回")
public ResponseModel<Object> revocation(@RequestBody JSONObject map) { public ResponseModel<Object> revocation(@RequestBody JSONObject map) {
jgChangeRegistrationNameService.revocation(String.valueOf(map.get("instanceId"))); jgChangeRegistrationNameService.revocation(String.valueOf(map.get("instanceId")), String.valueOf(map.get("nextTaskId")));
return ResponseHelper.buildResponse("ok"); return ResponseHelper.buildResponse("ok");
} }
......
...@@ -53,7 +53,8 @@ public class JgUseRegistrationController extends BaseController { ...@@ -53,7 +53,8 @@ public class JgUseRegistrationController extends BaseController {
String.valueOf(map.get("instanceId")), String.valueOf(map.get("instanceId")),
String.valueOf(map.get("operate")), String.valueOf(map.get("operate")),
String.valueOf(map.get("comment")), String.valueOf(map.get("comment")),
String.valueOf(map.getOrDefault("carNumber",""))); String.valueOf(map.getOrDefault("carNumber","")),
String.valueOf(map.get("nextTaskId")));
return ResponseHelper.buildResponse("ok"); return ResponseHelper.buildResponse("ok");
} }
...@@ -62,7 +63,7 @@ public class JgUseRegistrationController extends BaseController { ...@@ -62,7 +63,7 @@ public class JgUseRegistrationController extends BaseController {
@PostMapping(value = "/withdraw") @PostMapping(value = "/withdraw")
@ApiOperation(httpMethod = "POST", value = "撤回", notes = "撤回") @ApiOperation(httpMethod = "POST", value = "撤回", notes = "撤回")
public ResponseModel<Object> withdraw(@RequestBody JSONObject map) { public ResponseModel<Object> withdraw(@RequestBody JSONObject map) {
jgUseRegistrationServiceImpl.withdraw(String.valueOf(map.get("instanceId"))); jgUseRegistrationServiceImpl.withdraw(String.valueOf(map.get("instanceId")), String.valueOf(map.get("nextTaskId")) );
return ResponseHelper.buildResponse("ok"); return ResponseHelper.buildResponse("ok");
} }
......
package com.yeejoin.amos.boot.module.jg.biz.init;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.jg.biz.service.impl.JgUseRegistrationServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
private JgUseRegistrationServiceImpl useRegistrationService;
private CommonServiceImpl commonService;
public ApplicationRunnerImpl(JgUseRegistrationServiceImpl useRegistrationService, CommonServiceImpl commonService) {
this.commonService = commonService;
this.useRegistrationService = useRegistrationService;
}
@Override
public void run(ApplicationArguments args) {
// TODO 增加删除启动时, 完成时
List<JgUseRegistration> jgUseRegistrations = useRegistrationService.list(new LambdaQueryWrapper<JgUseRegistration>().ne(JgUseRegistration::getStatus, FlowStatusEnum.TO_BE_FINISHED.getName()));
jgUseRegistrations.forEach(jgUseRegistration -> {
commonService.saveExecuteFlowData2Redis(jgUseRegistration.getInstanceId(), useRegistrationService.buildInstanceRuntimeData(jgUseRegistration));
});
}
}
...@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jg.biz.service; ...@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jg.biz.service;
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.module.jg.api.dto.InstanceRuntimeData;
import com.yeejoin.amos.boot.module.jg.api.dto.UseFlagParamDto; import com.yeejoin.amos.boot.module.jg.api.dto.UseFlagParamDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory; import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
...@@ -80,4 +81,26 @@ public interface ICommonService { ...@@ -80,4 +81,26 @@ public interface ICommonService {
void useFlagGenerate(UseFlagParamDto useFlagParamDto, HttpServletResponse response); void useFlagGenerate(UseFlagParamDto useFlagParamDto, HttpServletResponse response);
Map<String, Object> getUserPhone(String name); Map<String, Object> getUserPhone(String name);
/**
* 执行流程时前置校验
* @param taskId 任务id
* @param instanceId 实例id
*/
void checkForExecuteFlow(String taskId, String instanceId);
/**
* 最新流程数据缓存
* @param instanceId 实例id
* @param instanceData 流程数据
*/
void saveExecuteFlowData2Redis(String instanceId, InstanceRuntimeData instanceData);
/**
* 撤回时校验
* @param taskId 任务id
* @param instanceId 实例id
*/
void checkForRevocationFlow(String taskId, String instanceId);
} }
...@@ -57,6 +57,9 @@ import com.yeejoin.amos.feign.workflow.model.FlowTaskVo; ...@@ -57,6 +57,9 @@ import com.yeejoin.amos.feign.workflow.model.FlowTaskVo;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO; import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RBucket;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
...@@ -212,6 +215,9 @@ public class CommonServiceImpl implements ICommonService { ...@@ -212,6 +215,9 @@ public class CommonServiceImpl implements ICommonService {
@Autowired @Autowired
private IJgTransferNoticeService jgTransferNoticeService; private IJgTransferNoticeService jgTransferNoticeService;
@Autowired
RedissonClient redissonClient;
public static byte[] file2byte(File file) { public static byte[] file2byte(File file) {
try { try {
FileInputStream in = new FileInputStream(file); FileInputStream in = new FileInputStream(file);
...@@ -954,45 +960,65 @@ public class CommonServiceImpl implements ICommonService { ...@@ -954,45 +960,65 @@ public class CommonServiceImpl implements ICommonService {
String instanceId = map.get("instanceId").toString(); String instanceId = map.get("instanceId").toString();
String tableName = map.get("tableName").toString(); String tableName = map.get("tableName").toString();
String assignee = map.get("assignee").toString(); String assignee = map.get("assignee").toString();
String lockKey = buildJgExecuteLockKey(instanceId);
FlowTaskVo flowTaskVo = new FlowTaskVo(); RLock lock = redissonClient.getLock(lockKey);
flowTaskVo.setTaskId(taskId); boolean isLocked = lock.tryLock();
flowTaskVo.setAssignee(assignee); try {
ProcessTaskDTO processTaskDTO = cmWorkflowService.assign(flowTaskVo); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
// 修改待办 if(!isLocked){
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(instanceId).getResult(); throw new BadRequest("当前流程已经被执行!");
List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList()); }
if (collect == null || collect.size() == 0) { // 流程执行前置校验
return null; this.checkForExecuteFlow(taskId, instanceId);
FlowTaskVo flowTaskVo = new FlowTaskVo();
flowTaskVo.setTaskId(taskId);
flowTaskVo.setAssignee(assignee);
ProcessTaskDTO processTaskDTO = cmWorkflowService.assign(flowTaskVo);
// 修改待办
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(instanceId).getResult();
List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList());
if (collect.size() == 0) {
return null;
}
TaskV2Model taskV2Model = collect.get(0);
taskV2Model.setExecuteUserIds(RequestContext.getExeUserId());
taskV2Model.setTaskStatus(FlowStatusEnum.TO_BE_TRANSFER.getCode());
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_TRANSFER.getName());
taskV2Model.setEndUserId(RequestContext.getExeUserId());
taskV2Model.setEndDate(new Date());
String routhPath = taskV2Model.getRoutePath().replace("nextExecuteUserIds", "executeUserId") + "&nextExecuteUserIds=" + assignee;
taskV2Model.setRoutePath(routhPath);
Systemctl.taskV2Client.update(taskV2Model, taskV2Model.getSequenceNbr());
// 创建新待办
taskV2Model.setExecuteUserIds(assignee);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId();
taskV2Model.setFlowCode(nextTaskId);
String routhPath1 = routhPath.replace("nextTaskId", "nextTask") + "&nextTaskId=" + nextTaskId;
taskV2Model.setCreateDate(new Date());
taskV2Model.setRoutePath(routhPath1);
taskV2Model.setTaskStatus(0);
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_PROCESSED.getName());
taskV2Model.setEndUserId(null);
taskV2Model.setEndDate(null);
taskV2Model.setSequenceNbr(null);
Systemctl.taskV2Client.create(taskV2Model);
String id = commonMapper.selectBusinessData(tableName, instanceId);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
// 修改业务数据
commonMapper.updateBusinessData(tableName, assignee, id, instanceId, nextTaskId);
this.saveExecuteFlowData2Redis(instanceId, InstanceRuntimeData.builder()
.nextExecuteUserIds(assignee)
.nextTaskId(nextTaskId)
.promoter(commonMapper.selectPromoterData(tableName, instanceId)).build());
return Boolean.TRUE;
} finally {
if(isLocked){
lock.unlock();
}
} }
TaskV2Model taskV2Model = collect.get(0);
taskV2Model.setExecuteUserIds(RequestContext.getExeUserId());
taskV2Model.setTaskStatus(FlowStatusEnum.TO_BE_TRANSFER.getCode());
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_TRANSFER.getName());
taskV2Model.setEndUserId(RequestContext.getExeUserId());
taskV2Model.setEndDate(new Date());
String routhPath = taskV2Model.getRoutePath().replace("nextExecuteUserIds", "executeUserId") + "&nextExecuteUserIds=" + assignee;
taskV2Model.setRoutePath(routhPath);
Systemctl.taskV2Client.update(taskV2Model, taskV2Model.getSequenceNbr());
// 创建新待办
taskV2Model.setExecuteUserIds(assignee);
String nextTaskId = processTaskDTO.getNextTask().get(0).getId();
taskV2Model.setFlowCode(nextTaskId);
String routhPath1 = routhPath.replace("nextTaskId", "nextTask") + "&nextTaskId=" + nextTaskId;
taskV2Model.setCreateDate(new Date());
taskV2Model.setRoutePath(routhPath1);
taskV2Model.setTaskStatus(0);
taskV2Model.setTaskStatusLabel(FlowStatusEnum.TO_BE_PROCESSED.getName());
taskV2Model.setEndUserId(null);
taskV2Model.setEndDate(null);
taskV2Model.setSequenceNbr(null);
Systemctl.taskV2Client.create(taskV2Model);
String id = commonMapper.selectBusinessData(tableName, instanceId);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
// 修改业务数据
commonMapper.updateBusinessData(tableName, assignee, id, instanceId, nextTaskId);
return Boolean.TRUE;
} }
public void deleteTaskModel(String id) { public void deleteTaskModel(String id) {
...@@ -1391,6 +1417,7 @@ public class CommonServiceImpl implements ICommonService { ...@@ -1391,6 +1417,7 @@ public class CommonServiceImpl implements ICommonService {
return workflowResultDtoList; return workflowResultDtoList;
} }
@Override
public List<LinkedHashMap> getCompanyUser(Long companyId) { public List<LinkedHashMap> getCompanyUser(Long companyId) {
FeignClientResult result = privilegeFeginService.getCompanyUser(companyId); FeignClientResult result = privilegeFeginService.getCompanyUser(companyId);
List<LinkedHashMap> list = (List<LinkedHashMap>) result.getResult(); List<LinkedHashMap> list = (List<LinkedHashMap>) result.getResult();
...@@ -1446,13 +1473,67 @@ public class CommonServiceImpl implements ICommonService { ...@@ -1446,13 +1473,67 @@ public class CommonServiceImpl implements ICommonService {
/** /**
* 检查实际状态是否不等于期望状态 * 检查实际状态是否不等于期望状态
*
* @param latestStatus 业务最新状态 * @param latestStatus 业务最新状态
*/ */
public void checkExpectedStatus(String latestStatus){ public void checkExpectedStatus(String latestStatus) {
String expectedStatus = String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()); String expectedStatus = String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode());
// 检查实际状态是否不等于期望状态 // 检查实际状态是否不等于期望状态
if (!expectedStatus.equals(latestStatus)) { if (!expectedStatus.equals(latestStatus)) {
throw new BadRequest("当前业务状态已更新,请返回工作台后重新打开!"); throw new BadRequest("当前业务状态已更新,请返回工作台后重新打开!");
} }
}
public static String buildJgExecuteLockKey(String instanceId) {
return "JG_INSTANCE_LOCK:" + instanceId;
}
public static String buildJgInstanceDataKey(String instanceId) {
return "JG_INSTANCE_DATA:" + instanceId;
}
@Override
public void checkForExecuteFlow(String taskId, String instanceId) {
InstanceRuntimeData instanceRuntimeData = getInstanceRuntimeData(instanceId);
if(instanceRuntimeData == null){
throw new BadRequest("当前流程已经被执行!");
}
// 当前任务id与当前任务id不一致时,不让操作,解决老页面没关闭,但是流程已经被被人执行(通过、驳回、撤回),工作流未限制错误
String currentTaskId = instanceRuntimeData.getNextTaskId();
if (!taskId.equals(currentTaskId)) {
throw new BadRequest("当前流程已经被执行!");
}
// 当前流程已经被转办给其他人或者页面按钮问题导致的权限未控制
String nextExecuteUserIds = instanceRuntimeData.getNextExecuteUserIds();
if (!nextExecuteUserIds.contains(RequestContext.getExeUserId())) {
throw new BadRequest("当前登录人无执行权限!");
}
}
private InstanceRuntimeData getInstanceRuntimeData(String instanceId) {
RBucket<InstanceRuntimeData> rBucket = redissonClient.getBucket(CommonServiceImpl.buildJgInstanceDataKey(instanceId));
return rBucket.get();
}
@Override
public void saveExecuteFlowData2Redis(String instanceId, InstanceRuntimeData instanceData) {
redissonClient.getBucket(CommonServiceImpl.buildJgInstanceDataKey(instanceId)).set(instanceData);
}
@Override
public void checkForRevocationFlow(String taskId, String instanceId) {
InstanceRuntimeData instanceRuntimeData = getInstanceRuntimeData(instanceId);
if(instanceRuntimeData == null){
throw new BadRequest("当前流程已经被执行!");
}
// 当前任务id与当前任务id不一致时,不让操作,解决老页面没关闭,但是流程已经被被人执行(通过、驳回、撤回),工作流未限制错误
String currentTaskId = instanceRuntimeData.getNextTaskId();
if (!taskId.equals(currentTaskId)) {
throw new BadRequest("当前流程已经被执行!");
}
if(!instanceRuntimeData.getPromoter().equals(RequestContext.getExeUserId())){
throw new BadRequest("无权限执行该任务");
}
} }
} }
\ No newline at end of file
...@@ -11,10 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -11,10 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.JgChangeRegistrationNameDto; import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.dto.TaskMessageDto;
import com.yeejoin.amos.boot.module.jg.api.dto.TaskModelDto;
import com.yeejoin.amos.boot.module.jg.api.dto.WorkflowResultDto;
import com.yeejoin.amos.boot.module.jg.api.entity.*; import com.yeejoin.amos.boot.module.jg.api.entity.*;
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.enums.WorkFlowStatusEnum; import com.yeejoin.amos.boot.module.jg.api.enums.WorkFlowStatusEnum;
...@@ -37,6 +34,8 @@ import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO; ...@@ -37,6 +34,8 @@ import com.yeejoin.amos.feign.workflow.model.ActWorkflowBatchDTO;
import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO; import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO; import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import com.yeejoin.amos.feign.workflow.model.TaskResultDTO; import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import org.redisson.api.RLock;
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.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -48,6 +47,7 @@ import org.springframework.util.StringUtils; ...@@ -48,6 +47,7 @@ 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.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
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.*;
...@@ -107,6 +107,9 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg ...@@ -107,6 +107,9 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
@Autowired @Autowired
ICmWorkflowService cmWorkflowService; ICmWorkflowService cmWorkflowService;
@Autowired
private RedissonClient redissonClient;
private static String template = "来自企业(%s)的业务办理,【申请单号:%s】"; private static String template = "来自企业(%s)的业务办理,【申请单号:%s】";
...@@ -446,7 +449,15 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg ...@@ -446,7 +449,15 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
} }
public void revocation(String instanceId) { public void revocation(String instanceId, String taskId) {
String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
boolean isLocked = lock.tryLock();
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回)
if(!isLocked){
throw new BadRequest("当前流程已经被执行!");
}
commonService.checkForRevocationFlow(taskId, instanceId);
// 执行流程 // 执行流程
String taskCode = FlowStatusEnum.TO_BE_FINISHED.getName(); String taskCode = FlowStatusEnum.TO_BE_FINISHED.getName();
JgChangeRegistrationName jgChangeRegistrationName = new JgChangeRegistrationName(); JgChangeRegistrationName jgChangeRegistrationName = new JgChangeRegistrationName();
...@@ -498,29 +509,45 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg ...@@ -498,29 +509,45 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
public void flowExecute(Long id, String instanceId, String operate, String comment) { public void flowExecute(Long id, String instanceId, String operate, String comment) {
String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
JgChangeRegistrationName jgChangeRegistrationName = this.getBaseMapper().selectById(id); RLock lock = redissonClient.getLock(lockKey);
String taskId = jgChangeRegistrationName.getNextTaskId(); boolean isLocked = lock.tryLock();
//组装信息 try {
TaskResultDTO dto = new TaskResultDTO(); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回)
dto.setResultCode("approvalStatus"); if(!isLocked){
dto.setTaskId(taskId); throw new BadRequest("当前流程已经被执行!");
dto.setComment(comment); }
dto.setNextExecuteUserCompanyCode(this.getNextUserOrgCode(operate, jgChangeRegistrationName)); JgChangeRegistrationName jgChangeRegistrationName = this.getBaseMapper().selectById(id);
HashMap<String, Object> map = new HashMap<>(); String taskId = jgChangeRegistrationName.getNextTaskId();
map.put("approvalStatus", operate); // 流程执行时,状态及权限校验
if (!ObjectUtils.isEmpty(jgChangeRegistrationName.getInstanceStatus()) && commonService.checkForExecuteFlow(taskId, instanceId);
(jgChangeRegistrationName.getAuditStatus().equals(WorkFlowStatusEnum.UNIT_RENAME_SUBMIT.getReject()) || // 组装信息
jgChangeRegistrationName.getAuditStatus().equals(WorkFlowStatusEnum.UNIT_RENAME_SUBMIT.getRollBack()))) { TaskResultDTO dto = new TaskResultDTO();
map.put("approvalStatus", "提交"); dto.setResultCode("approvalStatus");
dto.setTaskId(taskId);
dto.setComment(comment);
dto.setNextExecuteUserCompanyCode(this.getNextUserOrgCode(operate, jgChangeRegistrationName));
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", operate);
if (!ObjectUtils.isEmpty(jgChangeRegistrationName.getInstanceStatus()) &&
(jgChangeRegistrationName.getAuditStatus().equals(WorkFlowStatusEnum.UNIT_RENAME_SUBMIT.getReject()) ||
jgChangeRegistrationName.getAuditStatus().equals(WorkFlowStatusEnum.UNIT_RENAME_SUBMIT.getRollBack()))) {
map.put("approvalStatus", "提交");
}
dto.setVariable(map);
//执行流程
ProcessTaskDTO processTaskDTO = cmWorkflowService.completeOrReject(taskId, dto, operate);
// 更新下一步执行人、创建待办
updateExecuteIds(instanceId, id, operate, processTaskDTO);
} finally {
if(isLocked){
lock.unlock();
}
} }
dto.setVariable(map);
//执行流程
ProcessTaskDTO processTaskDTO = cmWorkflowService.completeOrReject(taskId, dto, operate);
// 更新下一步执行人、创建待办
updateExecuteIds(instanceId, id, operate, processTaskDTO);
} }
private String getNextUserOrgCode(String operate, JgChangeRegistrationName jgChangeRegistrationName) { private String getNextUserOrgCode(String operate, JgChangeRegistrationName jgChangeRegistrationName) {
if ("0".equals(operate)) { if ("0".equals(operate)) {
// 执行通过节点,单位code为接收机构单位信息 // 执行通过节点,单位code为接收机构单位信息
...@@ -583,9 +610,19 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg ...@@ -583,9 +610,19 @@ public class JgChangeRegistrationNameServiceImpl extends BaseService<JgChangeReg
// 更新代办 // 更新代办
updateTaskModel(jgChangeRegistrationName, operate); updateTaskModel(jgChangeRegistrationName, operate);
} }
// 保存redis最新流程数据
commonService.saveExecuteFlowData2Redis(jgChangeRegistrationName.getInstanceId(), this.buildInstanceRuntimeData(jgChangeRegistrationName));
this.getBaseMapper().updateById(jgChangeRegistrationName); this.getBaseMapper().updateById(jgChangeRegistrationName);
} }
private InstanceRuntimeData buildInstanceRuntimeData(JgChangeRegistrationName jgChangeRegistrationName) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jgChangeRegistrationName.getNextExecuteUserIds())
.promoter(jgChangeRegistrationName.getPromoter())
.nextTaskId(jgChangeRegistrationName.getNextTaskId())
.build();
}
private TaskV2Model updateTaskModel(JgChangeRegistrationName jgChangeRegistrationName, String operate) { private TaskV2Model updateTaskModel(JgChangeRegistrationName jgChangeRegistrationName, String operate) {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
FlowStatusEnum flowStatusEnum = this.getTaskStatus(operate); FlowStatusEnum flowStatusEnum = this.getTaskStatus(operate);
......
...@@ -13,10 +13,7 @@ import com.yeejoin.amos.boot.biz.common.entity.DataDictionary; ...@@ -13,10 +13,7 @@ import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl; import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
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.JgUseRegistrationDto; import com.yeejoin.amos.boot.module.jg.api.dto.*;
import com.yeejoin.amos.boot.module.jg.api.dto.TaskMessageDto;
import com.yeejoin.amos.boot.module.jg.api.dto.TaskModelDto;
import com.yeejoin.amos.boot.module.jg.api.dto.WorkflowResultDto;
import com.yeejoin.amos.boot.module.jg.api.entity.JgRegistrationHistory; import com.yeejoin.amos.boot.module.jg.api.entity.JgRegistrationHistory;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration; import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistration;
import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationEq; import com.yeejoin.amos.boot.module.jg.api.entity.JgUseRegistrationEq;
...@@ -40,6 +37,8 @@ import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO; ...@@ -40,6 +37,8 @@ import com.yeejoin.amos.feign.workflow.model.ActWorkflowStartDTO;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO; import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import com.yeejoin.amos.feign.workflow.model.TaskResultDTO; import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RLock;
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.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -100,6 +99,9 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -100,6 +99,9 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
@Autowired @Autowired
private IdxBizJgFactoryInfoServiceImpl idxBizJgFactoryInfoService; private IdxBizJgFactoryInfoServiceImpl idxBizJgFactoryInfoService;
@Autowired
private RedissonClient redissonClient;
public Page<Map<String, Object>> getList(JgUseRegistrationDto dto, Page<Map<String, Object>> page, List<String> roleIds) { public Page<Map<String, Object>> getList(JgUseRegistrationDto dto, Page<Map<String, Object>> page, List<String> roleIds) {
Page<Map<String, Object>> listPage = this.baseMapper.getListPage(page, dto, roleIds); Page<Map<String, Object>> listPage = this.baseMapper.getListPage(page, dto, roleIds);
return listPage; return listPage;
...@@ -403,7 +405,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -403,7 +405,7 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
if (!ObjectUtils.isEmpty(instanceId)) { if (!ObjectUtils.isEmpty(instanceId)) {
// 执行流程 // 执行流程
flowExecute(jgUseRegistration.getSequenceNbr(), instanceId, "0", "",""); flowExecute(jgUseRegistration.getSequenceNbr(), instanceId, "0", "","", String.valueOf(map.get("nextTaskId")));
} }
} else { } else {
ArrayList<TaskModelDto> list = new ArrayList<>(); ArrayList<TaskModelDto> list = new ArrayList<>();
...@@ -555,9 +557,9 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -555,9 +557,9 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
params.put("model", taskMessageDto); params.put("model", taskMessageDto);
commonServiceImpl.updateTaskModel(params); commonServiceImpl.updateTaskModel(params);
} }
commonServiceImpl.saveExecuteFlowData2Redis(jgUseRegistration.getInstanceId(), this.buildInstanceRuntimeData(jgUseRegistration));
this.getBaseMapper().updateById(jgUseRegistration); this.getBaseMapper().updateById(jgUseRegistration);
return jgUseRegistration; return jgUseRegistration;
} }
public void updateEsData(String usePlace, JSONObject dataMap, IdxBizJgOtherInfo otherInfo, JgUseRegistration jgUseRegistration) { public void updateEsData(String usePlace, JSONObject dataMap, IdxBizJgOtherInfo otherInfo, JgUseRegistration jgUseRegistration) {
...@@ -582,6 +584,14 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -582,6 +584,14 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
tzsServiceFeignClient.commonUpdateEsDataByIds(objMap); tzsServiceFeignClient.commonUpdateEsDataByIds(objMap);
} }
public InstanceRuntimeData buildInstanceRuntimeData(JgUseRegistration jgUseRegistration) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jgUseRegistration.getNextExecuteUserIds())
.promoter(jgUseRegistration.getPromoter())
.nextTaskId(jgUseRegistration.getNextTaskId())
.build();
}
public void buildTask(JgUseRegistration jgUseRegistration, WorkflowResultDto workflowResultDto) { public void buildTask(JgUseRegistration jgUseRegistration, WorkflowResultDto workflowResultDto) {
// 代办消息 // 代办消息
ArrayList<TaskModelDto> list = new ArrayList<>(); ArrayList<TaskModelDto> list = new ArrayList<>();
...@@ -619,79 +629,111 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD ...@@ -619,79 +629,111 @@ public class JgUseRegistrationServiceImpl extends BaseService<JgUseRegistrationD
} }
public void flowExecute(Long id, String instanceId, String operate, String comment,String carNumber) { public void flowExecute(Long id, String instanceId, String operate, String comment, String carNumber, String nextTaskId) {
JgUseRegistration jgUseRegistration = this.getBaseMapper().selectById(id); String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
// 组装信息 RLock lock = redissonClient.getLock(lockKey);
TaskResultDTO dto = new TaskResultDTO(); boolean isLocked = lock.tryLock();
dto.setResultCode("approvalStatus"); try {
dto.setTaskId(jgUseRegistration.getNextTaskId()); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回)
dto.setComment(comment); if(!isLocked){
HashMap<String, Object> map = new HashMap<>(); throw new BadRequest("当前流程已经被执行!");
map.put("approvalStatus", operate); }
if (jgUseRegistration.getStatus().equals(WorkFlowStatusEnum.USE_SUBMIT.getReject()) || jgUseRegistration.getStatus().equals(WorkFlowStatusEnum.USE_SUBMIT.getRollBack())) { // 流程执行时,状态及权限校验
map.put("approvalStatus", "提交"); commonService.checkForExecuteFlow(nextTaskId, instanceId);
} JgUseRegistration jgUseRegistration = this.getBaseMapper().selectById(id);
dto.setVariable(map); // 组装信息
// 接受机构 TaskResultDTO dto = new TaskResultDTO();
if ("1".equals(operate) && WorkFlowStatusEnum.USE_RECEIVE.getPass().equals(jgUseRegistration.getStatus())) { dto.setResultCode("approvalStatus");
// 驳回到使用单位 dto.setTaskId(jgUseRegistration.getNextTaskId());
dto.setNextExecuteUserCompanyCode(jgUseRegistration.getUseUnitCreditCode()); dto.setComment(comment);
} else { HashMap<String, Object> map = new HashMap<>();
dto.setNextExecuteUserCompanyCode(jgUseRegistration.getReceiveCompanyCode()); map.put("approvalStatus", operate);
} if (jgUseRegistration.getStatus().equals(WorkFlowStatusEnum.USE_SUBMIT.getReject()) || jgUseRegistration.getStatus().equals(WorkFlowStatusEnum.USE_SUBMIT.getRollBack())) {
ProcessTaskDTO complete = cmWorkflowService.completeOrReject(jgUseRegistration.getNextTaskId(), dto, operate); map.put("approvalStatus", "提交");
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>(); }
processTaskDTOS.add(complete); dto.setVariable(map);
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS); // 接受机构
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) { if ("1".equals(operate) && WorkFlowStatusEnum.USE_RECEIVE.getPass().equals(jgUseRegistration.getStatus())) {
WorkflowResultDto workflowResultDto = resultDto.get(0); // 驳回到使用单位
updateData(jgUseRegistration.getSequenceNbr(), operate, workflowResultDto, Boolean.FALSE,carNumber); dto.setNextExecuteUserCompanyCode(jgUseRegistration.getUseUnitCreditCode());
} else {
dto.setNextExecuteUserCompanyCode(jgUseRegistration.getReceiveCompanyCode());
}
ProcessTaskDTO complete = cmWorkflowService.completeOrReject(jgUseRegistration.getNextTaskId(), dto, operate);
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(complete);
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
updateData(jgUseRegistration.getSequenceNbr(), operate, workflowResultDto, Boolean.FALSE,carNumber);
}
} finally {
if(isLocked){
lock.unlock();
}
} }
} }
public void withdraw(String instanceId) { public void withdraw(String instanceId, String nextTaskId) {
JgUseRegistration jgUseRegistration = new JgUseRegistration(); String lockKey = CommonServiceImpl.buildJgExecuteLockKey(instanceId);
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class); RLock lock = redissonClient.getLock(lockKey);
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(instanceId); boolean isLocked = lock.tryLock();
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>(); try {
processTaskDTOS.add(processTaskDTO); // 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS); if(!isLocked){
String taskCode = ""; throw new BadRequest("当前流程已经被执行!");
String roles = ""; }
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) { // 撤回校验
taskCode = resultDto.get(0).getNextTaskCode(); commonServiceImpl.checkForRevocationFlow(nextTaskId, instanceId);
roles = resultDto.get(0).getNextExecutorRoleIds(); JgUseRegistration jgUseRegistration = new JgUseRegistration();
jgUseRegistration.setNextTaskId(resultDto.get(0).getNextTaskId()); ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
jgUseRegistration.setNextExecuteUserIds(resultDto.get(0).getNextExecutorUserIds()); ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(instanceId);
} ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
LambdaQueryWrapper<JgUseRegistration> lambda = new QueryWrapper<JgUseRegistration>().lambda(); processTaskDTOS.add(processTaskDTO);
lambda.eq(JgUseRegistration::getInstanceId, instanceId); List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(taskCode)) { String taskCode = "";
jgUseRegistration.setStatus(WorkFlowStatusEnum.getMessage(taskCode).getRollBack()); String roles = "";
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
taskCode = resultDto.get(0).getNextTaskCode();
roles = resultDto.get(0).getNextExecutorRoleIds();
jgUseRegistration.setNextTaskId(resultDto.get(0).getNextTaskId());
jgUseRegistration.setNextExecuteUserIds(resultDto.get(0).getNextExecutorUserIds());
}
LambdaQueryWrapper<JgUseRegistration> lambda = new QueryWrapper<JgUseRegistration>().lambda();
lambda.eq(JgUseRegistration::getInstanceId, instanceId);
if (!ObjectUtils.isEmpty(taskCode)) {
jgUseRegistration.setStatus(WorkFlowStatusEnum.getMessage(taskCode).getRollBack());
}
jgUseRegistration.setPromoter(reginParams.getUserModel().getUserId());
jgUseRegistration.setNextExecuteIds(roles);
this.update(jgUseRegistration, lambda);
LambdaQueryWrapper<JgUseRegistration> queryWrapper = new QueryWrapper<JgUseRegistration>().lambda();
queryWrapper.eq(JgUseRegistration::getInstanceId, instanceId);
JgUseRegistration data = this.baseMapper.selectOne(queryWrapper);
// 设备信息
LambdaQueryWrapper<JgUseRegistrationEq> lambda1 = new QueryWrapper<JgUseRegistrationEq>().lambda();
lambda1.eq(JgUseRegistrationEq::getEquipTransferId, String.valueOf(data.getSequenceNbr()));
JgUseRegistrationEq jgUseRegistrationEq = jgRelationEquipMapper.selectOne(lambda1);
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(data));
jsonObject.put("nextTaskId", data.getNextTaskId());
jsonObject.put("nextExecuteUser", data.getNextExecuteIds());
jsonObject.put("taskType", BusinessTypeEnum.JG_USAGE_REGISTRATION.getCode());
jsonObject.put("equipId", jgUseRegistrationEq.getEquId());
jsonObject.put("flowStatus", commonServiceImpl.getDictionaryCodeByName(jgUseRegistration.getStatus()));
jsonObject.put("flowStatusLabel", jgUseRegistration.getStatus());
if (!WorkFlowStatusEnum.USE_SUBMIT.getCode().equals(taskCode)) {
jsonObject.put("pageType", "look");
}
// 撤回删除代办
commonServiceImpl.rollbackTask(instanceId, jsonObject);
// redis流程实时数据更新
commonServiceImpl.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(data));
} finally {
if(isLocked){
lock.unlock();
}
} }
jgUseRegistration.setPromoter(reginParams.getUserModel().getUserId());
jgUseRegistration.setNextExecuteIds(roles);
this.update(jgUseRegistration, lambda);
LambdaQueryWrapper<JgUseRegistration> queryWrapper = new QueryWrapper<JgUseRegistration>().lambda();
queryWrapper.eq(JgUseRegistration::getInstanceId, instanceId);
JgUseRegistration data = this.baseMapper.selectOne(queryWrapper);
// 设备信息
LambdaQueryWrapper<JgUseRegistrationEq> lambda1 = new QueryWrapper<JgUseRegistrationEq>().lambda();
lambda1.eq(JgUseRegistrationEq::getEquipTransferId, String.valueOf(data.getSequenceNbr()));
JgUseRegistrationEq jgUseRegistrationEq = jgRelationEquipMapper.selectOne(lambda1);
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(data));
jsonObject.put("nextTaskId", data.getNextTaskId());
jsonObject.put("nextExecuteUser", data.getNextExecuteIds());
jsonObject.put("taskType", BusinessTypeEnum.JG_USAGE_REGISTRATION.getCode());
jsonObject.put("equipId", jgUseRegistrationEq.getEquId());
jsonObject.put("flowStatus", commonServiceImpl.getDictionaryCodeByName(jgUseRegistration.getStatus()));
jsonObject.put("flowStatusLabel", jgUseRegistration.getStatus());
if (!WorkFlowStatusEnum.USE_SUBMIT.getCode().equals(taskCode)) {
jsonObject.put("pageType", "look");
}
// 撤回删除代办
commonServiceImpl.rollbackTask(instanceId, jsonObject);
} }
public void deleteBatch(List<Long> ids) { public void deleteBatch(List<Long> ids) {
......
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