Commit 38ed946d authored by suhuiguang's avatar suhuiguang

1.增加并发控制所

parent 4ca58000
......@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jyjc.biz.job.InspectionExpireRemindJob;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonserviceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
......@@ -36,7 +36,7 @@ import java.util.stream.Collectors;
public class CommonController extends BaseController {
@Autowired
CommonserviceImpl commonserviceImpl;
CommonServiceImpl commonserviceImpl;
@Autowired
TaskModelServiceImpl taskModelService;
......
......@@ -56,7 +56,7 @@ public class JyjcInspectionApplicationController extends BaseController {
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
@ApiOperation(httpMethod = "POST", value = "暂存、提交", notes = "新增")
public ResponseModel<List<JyjcInspectionApplicationModel>> save(@RequestBody JSONObject model) {
if (model.containsKey(basic)) {
JSONObject finallyJson = new JSONObject();
......@@ -69,7 +69,7 @@ public class JyjcInspectionApplicationController extends BaseController {
finallyJson.putAll(filePageDataObj);
model = finallyJson;
}
// operationType: 1-暂存
// operationType: 1-暂存 0-提交
ReginParams selectedOrgInfo = getSelectedOrgInfo();
model.put("applicationUnitCode", selectedOrgInfo.getCompany().getCompanyCode());
......@@ -124,67 +124,6 @@ public class JyjcInspectionApplicationController extends BaseController {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.selectBySeq(sequenceNbr));
}
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/pageByInstitution")
@ApiOperation(httpMethod = "GET", value = "分页查询(检验机构)", notes = "分页查询(检验机构)")
public ResponseModel<Page<JyjcInspectionApplicationModel>> queryForPageByInstitution(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(required = false) String applicationNo,
@RequestParam(required = false) String inspectionClassify,
@RequestParam(required = false) String applicationUnitCode,
@RequestParam(required = false) String applicationUnitName,
@RequestParam(required = false) String inspectionUnitName,
@RequestParam(required = false) String equipClassify,
@RequestParam(required = false) String inspectionUnitCode,
@RequestParam(required = false) String applicationDate,
@RequestParam(required = false) String acceptDate,
@RequestParam(required = false) String inspectionChargePerson,
@RequestParam(required = false) String status,
@RequestParam(required = false) String roles, String bizType) {
Page<JyjcInspectionApplication> page = new Page<JyjcInspectionApplication>();
page.setCurrent(current);
page.setSize(size);
ReginParams reginParams = getSelectedOrgInfo();
inspectionUnitCode = reginParams.getCompany().getCompanyCode();
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.queryForJyjcInspectionApplicationPage(page, applicationNo, inspectionClassify, applicationUnitCode, equipClassify, inspectionUnitCode, applicationUnitName, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/pageByCompany")
@ApiOperation(httpMethod = "GET", value = "分页查询(报检单位)", notes = "分页查询(报检单位)")
public ResponseModel<Page<JyjcInspectionApplicationModel>> queryForPageByCompany(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(required = false) String applicationNo,
@RequestParam(required = false) String inspectionClassify,
@RequestParam(required = false) String applicationUnitCode,
@RequestParam(required = false) String equipClassify,
@RequestParam(required = false) String inspectionUnitCode,
@RequestParam(required = false) String applicationUnitName,
@RequestParam(required = false) String inspectionUnitName,
@RequestParam(required = false) String applicationDate,
@RequestParam(required = false) String acceptDate,
@RequestParam(required = false) String inspectionChargePerson,
@RequestParam(required = false) String roles,
@RequestParam(required = false) String status, String bizType) {
Page<JyjcInspectionApplication> page = new Page<JyjcInspectionApplication>();
page.setCurrent(current);
page.setSize(size);
ReginParams reginParams = getSelectedOrgInfo();
applicationUnitCode = reginParams.getCompany().getCompanyCode();
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.queryForJyjcInspectionApplicationPage(page, applicationNo, inspectionClassify, applicationUnitCode, equipClassify, inspectionUnitCode, applicationUnitName, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/pageList")
......@@ -226,11 +165,7 @@ public class JyjcInspectionApplicationController extends BaseController {
@PostMapping(value = "/flow/{type}/receive")
public ResponseModel executeFlow(@PathVariable(value = "type") String type, @RequestBody Map<String, Object> params) {
params.put("type", type);
try {
jyjcInspectionApplicationServiceImpl.doReceive(params);
} catch (Exception e) {
return CommonResponseUtil.failure("该项流程发生变化,请返回列表刷新查看状态后重试");
}
jyjcInspectionApplicationServiceImpl.doReceive(params);
HashMap<String, String> result = new HashMap<>();
result.put("result", "success");
return ResponseHelper.buildResponse(result);
......@@ -264,12 +199,13 @@ public class JyjcInspectionApplicationController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "撤回", notes = "撤回")
@GetMapping(value = "/flow/rollback")
public ResponseModel<Boolean> doRollbackFlow(@RequestParam("sequenceNbr") String sequenceNbr) {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.doRollback(sequenceNbr));
public ResponseModel<Boolean> doRollbackFlow(@RequestParam("sequenceNbr") String sequenceNbr,
@RequestParam("instanceId") String instanceId,
@RequestParam("nextTaskId") String nextTaskId) {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.doRollback(sequenceNbr, instanceId, nextTaskId));
}
/**
* 查询指定设备种类的设备列表
*
* @return
*/
......
......@@ -48,7 +48,7 @@ public class JyjcOpeningApplicationController extends BaseController {
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增", notes = "新增")
@ApiOperation(httpMethod = "POST", value = "新增、编辑的保存", notes = "新增、编辑的保存")
public ResponseModel<JyjcOpeningApplicationModel> save(@RequestBody JSONObject model) {
JyjcOpeningApplicationModel jyjcOpeningApplicationModel = new JyjcOpeningApplicationModel();
// 兼容工作台暂存逻辑、编辑时报错逻辑
......@@ -59,26 +59,13 @@ public class JyjcOpeningApplicationController extends BaseController {
// 详情保存逻辑
BeanUtil.copyProperties(model, jyjcOpeningApplicationModel);
}
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.saveOrUpdateModel(jyjcOpeningApplicationModel, false));
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.saveOrUpdate(jyjcOpeningApplicationModel));
}
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "更新", notes = "更新")
public ResponseModel<JyjcOpeningApplicationModel> updateBySequenceNbrJyjcOpeningApplication(@RequestBody JyjcOpeningApplicationModel model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.saveOrUpdateModel(model, false));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/submit")
@ApiOperation(httpMethod = "PUT", value = "保存并提交", notes = "保存并提交")
@ApiOperation(httpMethod = "PUT", value = "保存并提交、提交", notes = "保存并提交")
public ResponseModel<List<JyjcOpeningApplicationModel>> updateBySequenceNbrAndStartFlow(@RequestBody JSONObject jsonObject, @RequestParam(value = "sequenceNbr", required = false) Long sequenceNbr) {
JyjcOpeningApplicationModel model = new JyjcOpeningApplicationModel();
if (jsonObject.containsKey("applyInfo")) {
......@@ -93,18 +80,10 @@ public class JyjcOpeningApplicationController extends BaseController {
throw new BadRequest("企业资质信息和检验人员信息为空,无法提交!");
}
}
JyjcOpeningApplicationModel data = jyjcOpeningApplicationServiceImpl.saveOrUpdateModel(model, true);
JyjcOpeningApplicationModel data = jyjcOpeningApplicationServiceImpl.submitApplication(model);
return ResponseHelper.buildResponse(Collections.singletonList(data));
}
@Deprecated
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/startFlow/{sequenceNbr}")
@ApiOperation(httpMethod = "POST", value = "重新提交开通申请", notes = "重新提交开通申请")
public ResponseModel<JyjcOpeningApplicationModel> resubmitJyjcOpeningApplication(@RequestBody JyjcOpeningApplicationModel model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.resubmit(model));
}
/**
* 根据sequenceNbr删除
......@@ -200,8 +179,10 @@ public class JyjcOpeningApplicationController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "撤回业务开通申请", notes = "撤回业务开通申请")
@GetMapping(value = "/rollBackFlow")
public ResponseModel<Object> overflow(@RequestParam("sequenceNbr") String sequenceNbr) {
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.stopFlow(sequenceNbr));
public ResponseModel<Object> overflow(@RequestParam("sequenceNbr") String sequenceNbr,
@RequestParam("instanceId") String instanceId,
@RequestParam("nextTaskId") String nextTaskId) {
return ResponseHelper.buildResponse(jyjcOpeningApplicationServiceImpl.stopFlow(sequenceNbr, instanceId, nextTaskId));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
......
......@@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Sequence;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionResult;
import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionDetectionSaveToDbEvent;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.BizEmqPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonserviceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.entity.InspectionDetectionInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzsUserInfo;
import com.yeejoin.amos.boot.module.ymt.api.mapper.InspectionDetectionInfoMapper;
......@@ -37,7 +37,7 @@ public class InspectionDetectionSaveToDbEventListener implements ApplicationList
private int threadNumber;
@Autowired
CommonserviceImpl commonService;
CommonServiceImpl commonService;
@Autowired
private Sequence sequence;
......
package com.yeejoin.amos.boot.module.jyjc.biz.runner;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicationServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcOpeningApplicationServiceImpl;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* @author Administrator
*/
@Component
public class ApplicationRunnerImpl implements ApplicationRunner {
private JyjcInspectionApplicationServiceImpl inspectionApplicationService;
private JyjcOpeningApplicationServiceImpl openingApplicationService;
public ApplicationRunnerImpl(JyjcInspectionApplicationServiceImpl inspectionApplicationService,
JyjcOpeningApplicationServiceImpl openingApplicationService) {
this.inspectionApplicationService = inspectionApplicationService;
this.openingApplicationService = openingApplicationService;
}
@Override
public void run(ApplicationArguments args) {
inspectionApplicationService.initFlowData2Redis();
openingApplicationService.initFlowData2Redis();
}
}
......@@ -11,9 +11,11 @@ import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.InstanceRuntimeData;
import com.yeejoin.amos.boot.module.jyjc.api.model.TaskModelDto;
import com.yeejoin.amos.boot.module.jyjc.api.model.WorkflowResultDto;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CmWorkflowServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.CommonServiceImpl;
import com.yeejoin.amos.boot.module.jyjc.biz.util.JsonUtils;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
......@@ -23,6 +25,8 @@ import com.yeejoin.amos.feign.workflow.model.ActTaskDTO;
import com.yeejoin.amos.feign.workflow.model.FlowTaskVo;
import com.yeejoin.amos.feign.workflow.model.ProcessTaskDTO;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
......@@ -37,6 +41,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
......@@ -46,6 +51,9 @@ public class TaskModelServiceImpl {
private RedisUtils redisUtils;
@Autowired
CommonServiceImpl commonService;
@Autowired
IDataDictionaryService iDataDictionaryService;
@Value("classpath:/json/bizTypeInfo.json")
......@@ -57,11 +65,14 @@ public class TaskModelServiceImpl {
@Autowired
JyjcBaseMapper jyjcBaseMapper;
@Autowired
RedissonClient redissonClient;
public void deleteTaskModel(String id) {
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(id).getResult();
if (result.size() >0 ){
List<Long> idList= result.stream().map(TaskV2Model::getSequenceNbr).collect(Collectors.toList());
if (result.size() > 0) {
List<Long> idList = result.stream().map(TaskV2Model::getSequenceNbr).collect(Collectors.toList());
String ids = idList.stream().map(Object::toString).collect(Collectors.joining(","));
Systemctl.taskV2Client.delete(ids);
}
......@@ -75,13 +86,13 @@ public class TaskModelServiceImpl {
List<TaskV2Model> taskV2Models = new ArrayList<>();
for (TaskModelDto obj : list) {
//判断是否是暂存 新增若无下一节点执行人即为暂存
boolean flag = StringUtils.isEmpty(obj.getNextExecuteUser())? true:false;
if (flag){
boolean flag = StringUtils.isEmpty(obj.getNextExecuteUser()) ? true : false;
if (flag) {
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(obj.getRelationId()).getResult();
if (CollectionUtil.isNotEmpty(result) && result.size() > 0){
if (CollectionUtil.isNotEmpty(result) && result.size() > 0) {
TaskV2Model taskV2Model = result.get(0);
taskV2Model.setTaskContent(obj.getTaskContent());
Systemctl.taskV2Client.update(taskV2Model,taskV2Model.getSequenceNbr());
Systemctl.taskV2Client.update(taskV2Model, taskV2Model.getSequenceNbr());
break;
}
}
......@@ -98,19 +109,19 @@ public class TaskModelServiceImpl {
for (Map map : urlList) {
//获取暂存的可编辑页面url
if (flag && map.get("type").equals(obj.getTaskType())
&& map.get("pageType").equals("draft")){
model.setRoutePath(map.get("url").toString()+ urlParams );
&& map.get("pageType").equals("draft")) {
model.setRoutePath(map.get("url").toString() + urlParams);
break;
}
//其他逻辑均按详情页面获取
else if (map.get("type").equals(obj.getTaskType())
&& map.get("pageType").equals(null == obj.getPageType()?"look":obj.getPageType())) {
&& map.get("pageType").equals(null == obj.getPageType() ? "look" : obj.getPageType())) {
model.setRoutePath(map.get("url").toString().replace("{roleIds}", obj.getNextExecuteUser()) + urlParams + "&nextExecuteUserIds=" + model.getExecuteUserIds());
break;
}
}
//是true则为暂存 除公共部分统一处理
if (flag){
if (flag) {
model.setFlowStatus(FlowStatusEnum.TO_BE_SUBMITTED.getCode());
model.setFlowStatusLabel(FlowStatusEnum.TO_BE_SUBMITTED.getName());
model.setStartUserId(RequestContext.getExeUserId());
......@@ -124,14 +135,13 @@ public class TaskModelServiceImpl {
model.setTaskName(BizTypeEnum.getNameByNum(obj.getTaskType()));
model.setTaskTypeLabel(BizTypeEnum.getNameByCode(obj.getTaskType()));
// model.setTaskContent("【申请单号:"+obj.getTaskCode()+"】待提交");
}else {
} else {
model.setTaskStatus(0);
model.setTaskTitle(obj.getStartUser() + "发起了" + obj.getTaskName());
}
model.setFlowInstanceId(model.getRelationId());
model.setTaskSource("workFlow");
model.setExtras(JSON.toJSONString(obj.getModel()));
// model.setTerminal(params.getOrDefault("terminal","WEB").toString());
model.setCreateDate(new Date());
model.setRecUserId(RequestContext.getExeUserId());
model.setAgencyCode(RequestContext.getAgencyCode());
......@@ -142,7 +152,7 @@ public class TaskModelServiceImpl {
}
public void updateTaskContentById(Map<String, Object> params){
public void updateTaskContentById(Map<String, Object> params) {
List<TaskV2Model> result = Systemctl.taskV2Client.selectListByRelationId(params.get("relationId").toString()).getResult();
List<TaskV2Model> collect = result.stream().sorted((r1, r2) -> r2.getSequenceNbr().compareTo(r1.getSequenceNbr())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(collect)) {
......@@ -318,13 +328,13 @@ public class TaskModelServiceImpl {
}
for (Map map : urlList) {
if (map.get("type").equals(obj.get("taskType")) && map.get("pageType").equals(obj.getOrDefault("pageType","edit"))) {
if (map.get("type").equals(obj.get("taskType")) && map.get("pageType").equals(obj.getOrDefault("pageType", "edit"))) {
lastTaskModel.setRoutePath(map.get("url").toString().replace("{roleIds}", obj.get("nextExecuteUser").toString()) + urlParams);
break;
}
}
Systemctl.taskV2Client.update(lastTaskModel, lastTaskModel.getSequenceNbr());
}else if (list.size() == 1) {
} else if (list.size() == 1) {
model.setExecuteUserIds(model.getStartUserId());
model.setTaskStatusLabel("重新提交");
model.setTaskStatus(FlowStatusEnum.TO_SUBMITTED.getCode());
......@@ -348,13 +358,13 @@ public class TaskModelServiceImpl {
private static String toQueryParams2(JSONObject jsonObject) {
StringBuilder sb = new StringBuilder();
Set<String> keys = jsonObject.keySet();
keys.forEach(key->{
keys.forEach(key -> {
Object value = jsonObject.get(key);
if (sb.length() > 0) {
sb.append('&');
}
try {
if(value != null && !"".equals(value)){
if (value != null && !"".equals(value)) {
sb.append(URLEncoder.encode(key, "UTF-8"))
.append('=')
.append(URLEncoder.encode(value.toString(), "UTF-8"));
......@@ -367,8 +377,6 @@ public class TaskModelServiceImpl {
}
public <T> String toQueryParams(T obj) throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
......@@ -397,8 +405,6 @@ public class TaskModelServiceImpl {
}
/**
* 根据流程状态name 获取流程状态code
*
......@@ -469,48 +475,76 @@ public class TaskModelServiceImpl {
}
String taskId = map.get("nextTaskId").toString();
String instanceId = map.get("instanceId").toString();
String tableName = map.get("tableName").toString();
String assignee = map.get("assignee").toString();
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 == null || collect.size() == 0) {
return null;
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(taskId, instanceId);
String tableName = map.get("tableName").toString();
String assignee = map.get("assignee").toString();
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 key = map.get("key").toString();
String id = jyjcBaseMapper.selectBusinessData(tableName, instanceId, key);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
//修改业务数据
jyjcBaseMapper.updateBusinessData(tableName, assignee, id, instanceId, nextTaskId, key);
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(assignee, "", nextTaskId));
return Boolean.TRUE;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
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 key = map.get("key").toString();
String id = jyjcBaseMapper.selectBusinessData(tableName, instanceId,key);
id = ObjectUtils.isEmpty(id) ? assignee : id + "," + assignee;
//修改业务数据
jyjcBaseMapper.updateBusinessData(tableName, assignee, id, instanceId,nextTaskId,key);
return Boolean.TRUE;
return Boolean.FALSE;
}
public InstanceRuntimeData buildInstanceRuntimeData(String executeUserIds, String promoter, String nextTaskId) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(executeUserIds)
.promoter(promoter)
.nextTaskId(nextTaskId)
.build();
}
}
......@@ -25,8 +25,11 @@ import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.List;
/**
* @author Administrator
*/
@Service
public class CommonserviceImpl {
public class CommonServiceImpl {
@Value("${jyjc.user-post:6615}")
private String jyjcUserPost;
......@@ -138,14 +141,18 @@ public class CommonserviceImpl {
}
private InstanceRuntimeData getInstanceRuntimeData(String instanceId) {
RBucket<InstanceRuntimeData> rBucket = redissonClient.getBucket(buildJgInstanceDataKey(instanceId));
RBucket<InstanceRuntimeData> rBucket = redissonClient.getBucket(buildJcInstanceDataKey(instanceId));
return rBucket.get();
}
private static String buildJgInstanceDataKey(String instanceId) {
private String buildJcInstanceDataKey(String instanceId) {
return "JC_INSTANCE_DATA:" + instanceId;
}
public static String buildJcExecuteLockKey(String instanceId) {
return "JC_INSTANCE_LOCK:" + instanceId;
}
/**
* 最新流程数据缓存
......@@ -154,7 +161,7 @@ public class CommonserviceImpl {
* @param instanceData 流程数据
*/
public void saveExecuteFlowData2Redis(String instanceId, InstanceRuntimeData instanceData) {
redissonClient.getBucket(buildJgInstanceDataKey(instanceId)).set(instanceData);
redissonClient.getBucket(buildJcInstanceDataKey(instanceId)).set(instanceData);
}
......
......@@ -7,7 +7,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
......@@ -40,6 +39,8 @@ import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -51,8 +52,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
......@@ -72,8 +75,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
private JyjcInspectionApplicationEquipServiceImpl applicationEquipService;
@Autowired
TzsServiceFeignClient tzsServiceFeignClient;
@Autowired
private WorkflowHelper workflowHelper;
@Autowired
EventPublisher eventPublisher;
......@@ -97,7 +98,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired
WorkflowFeignService workflowFeignService;
@Autowired
CommonserviceImpl commonservice;
CommonServiceImpl commonService;
@Autowired
CmWorkflowServiceImpl cmWorkflowService;
@Value("classpath:/json/bizTypeInfo.json")
......@@ -108,6 +109,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired
JgFeignClient jgFeignClient;
@Autowired
private RedisUtils redisUtils;
......@@ -123,6 +125,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired
JyjcOpeningApplicationServiceImpl openingApplicationService;
@Autowired
RedissonClient redissonClient;
@Transactional(rollbackFor = Exception.class)
public JyjcInspectionApplicationModel save(@RequestBody JSONObject obj) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
......@@ -172,8 +177,10 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
model.setNextExecuteIds(nextExcuteIds);
model.setNextTaskId(nextTaskId);
model.setNextTaskName(taskName);
model.setPromoter(RequestContext.getExeUserId());
model.setNextExecuteUserIds(nextUserIds);
model.setStatus(String.valueOf(FlowStatusEnum.TO_SUBMITTED.getCode())); //6611 对应数据字典 检验流程状态 待受理
commonService.saveExecuteFlowData2Redis(model.getInstanceId(),this.buildInstanceRuntimeData(model));
} else if (model.getOperationType().equals("1")) { // 工作台暂存、详情保存逻辑
String[] inspectionUnit = model.getInspectionUnitCode().split("_");
if (inspectionUnit.length == 2) {
......@@ -268,7 +275,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
applicationEquipService.saveBatch(equipInfos);
// 附件保存
List<String> enumNameList = DocumentEnum.getEnumNameList();
List<JyjcInspectionApplicationAttachmentModel> attachmentModels = new ArrayList<>();
for (String code : enumNameList) {
if (obj.containsKey(code)) {
JyjcInspectionApplicationAttachment attachments = new JyjcInspectionApplicationAttachment();
......@@ -363,6 +369,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
model.setNextExecuteIds(executorRoleIds);
model.setNextExecuteUserIds(nextUserIds);
executeOneStep(model, taskName1, nextUserIds);
commonService.saveExecuteFlowData2Redis(model.getInstanceId(),this.buildInstanceRuntimeData(model));
this.updateWithModel(model);
}
return this.buildRedundancyField(model);
......@@ -384,17 +391,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Override
public Boolean deleteBatchData(List<Long> sequenceNbr) {
// List<JyjcInspectionApplication> jyjcInspectionApplications = this.getBaseMapper().selectBatchIds(sequenceNbr);
//// long count = jyjcInspectionApplications.stream().filter(e ->
//// e.getStatus().equals(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()))
//// || e.getStatus().equals(String.valueOf(FlowStatusEnum.TO_SUBMITTED.getCode()))
//// ).count();
////
//// if (count > 0) {
//// throw new BadRequest("存在 已完成、待受理状态的报检单 不可删除!");
//// }
this.deleteBatchSeq(sequenceNbr);
for (Long seq : sequenceNbr) {
jyjcInspectionApplicationEquipService.getBaseMapper().deleteByApplicationSeq(seq);
......@@ -423,7 +419,6 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
String inspectionChargePerson,
String status, String bizType) {
// return this.getBaseMapper().queryForDataList(page, applicationNo, inspectionClassify, applicationUnitCode, applicationUnitName, equipClassify, inspectionUnitCode, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType,roleIds);
return this.getBaseMapper().queryForDataList(page, applicationNo, inspectionClassify, applicationUnitCode, applicationUnitName, equipClassify, inspectionUnitCode, inspectionUnitName, applicationDate, acceptDate, inspectionChargePerson, status, bizType);
}
......@@ -544,73 +539,88 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
*/
@Transactional(rollbackFor = Exception.class)
public void doReceive(Map<String, Object> params) {
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
LambdaQueryWrapper<JyjcInspectionApplication> lambda = new QueryWrapper<JyjcInspectionApplication>().lambda();
lambda.eq(JyjcInspectionApplication::getSequenceNbr, sequenceNbr);
JyjcInspectionApplication entity = this.getBaseMapper().selectOne(lambda);
String taskId = entity.getNextTaskId();
//组装信息
TaskResultDTO task = new TaskResultDTO();
task.setResultCode("approvalStatus");
task.setTaskId(taskId);
task.setComment(params.getOrDefault("comments", "").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "0");
task.setVariable(map);
//执行流程
task.setNextExecuteUserCompanyCode(entity.getInspectionUnitCode());
cmWorkflowService.complete(taskId, task);
entity.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
JyjcInspectionApplicationModel model = new JyjcInspectionApplicationModel();
model.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName());
entity.setAcceptDate(new Date());
entity.setInnerPersonCode(params.getOrDefault("innerPersonCode", "").toString());
String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
entity.setProcessDescription(processDescription);
}
this.updateById(entity);
BeanUtils.copyProperties(entity, model);
updateTaskModel(model);
// 执行接收业务
JyjcInspectionApplicationModel inspectionApplicationModel = this.queryBySeq(sequenceNbr);
List<JyjcInspectionApplicationEquipModel> applicationEquipModels = applicationEquipService.listApplicationEquipByApplicationSeq(sequenceNbr);
if (inspectionApplicationModel == null || ValidationUtil.isEmpty(applicationEquipModels)) {
log.warn("JyjcInspectionApplicationModel Not Found!");
return;
}
List<JyjcInspectionResult> resultModels = new ArrayList<>();
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JG.getCode(), applicationEquipModels.size()).getResult();
for (int i = 0; i < applicationEquipModels.size(); i++) {
JyjcInspectionResult resultModel = new JyjcInspectionResult();
resultModel.setInspectionUnitCode(inspectionApplicationModel.getInspectionUnitCode());
resultModel.setInspectionUnitName(inspectionApplicationModel.getInspectionUnitName());
resultModel.setApplicationNo(inspectionApplicationModel.getApplicationNo());
resultModel.setApplicationUnitCode(inspectionApplicationModel.getApplicationUnitCode());
resultModel.setApplicationUnitName(inspectionApplicationModel.getApplicationUnitName());
resultModel.setResultStatus(ResultStatusEnum.NO_RESULT.getCode());
resultModel.setApplicationDate(inspectionApplicationModel.getApplicationDate());
resultModel.setInspectionType(inspectionApplicationModel.getInspectionType());
resultModel.setInspectionTypeName(this.getDictNameByCode(inspectionApplicationModel.getInspectionType()));
// 解析设备
resultModel.setBizType(inspectionApplicationModel.getBizType());
resultModel.setResultNo(codes.get(i));
//设备唯一标识
resultModel.setEquipUnicode(applicationEquipModels.get(i).getEquipUnicode());
resultModel.setSupervisoryCode(applicationEquipModels.get(i).getSupervisoryCode());
resultModel.setEquDefine(applicationEquipModels.get(i).getEquDefine());
resultModel.setEquCategory(applicationEquipModels.get(i).getEquCategory());
resultModel.setEquList(applicationEquipModels.get(i).getEquList());
resultModel.setIsExistNc(false);
this.setResultTypeByBizType(resultModel, inspectionApplicationModel.getBizType());
resultModels.add(resultModel);
String instanceId = params.get("instanceId").toString();
String nextTaskId = params.get("nextTaskId").toString();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(nextTaskId, instanceId);
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
JyjcInspectionApplication entity = this.getBaseMapper().selectById(sequenceNbr);
//组装信息
TaskResultDTO task = new TaskResultDTO();
task.setResultCode("approvalStatus");
task.setTaskId(nextTaskId);
task.setComment(params.getOrDefault("comments", "").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "0");
task.setVariable(map);
//执行流程
task.setNextExecuteUserCompanyCode(entity.getInspectionUnitCode());
cmWorkflowService.complete(nextTaskId, task);
entity.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
JyjcInspectionApplicationModel model = new JyjcInspectionApplicationModel();
model.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName());
entity.setAcceptDate(new Date());
entity.setInnerPersonCode(params.getOrDefault("innerPersonCode", "").toString());
String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
entity.setProcessDescription(processDescription);
}
entity.setNextExecuteUserIds("");
entity.setPromoter("");
entity.setNextExecuteIds("");
entity.setNextTaskId("");
this.updateById(entity);
BeanUtils.copyProperties(entity, model);
updateTaskModel(model);
List<JyjcInspectionApplicationEquipModel> applicationEquipModels = applicationEquipService.listApplicationEquipByApplicationSeq(sequenceNbr);
List<JyjcInspectionResult> resultModels = new ArrayList<>();
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JG.getCode(), applicationEquipModels.size()).getResult();
for (int i = 0; i < applicationEquipModels.size(); i++) {
JyjcInspectionResult resultModel = new JyjcInspectionResult();
resultModel.setInspectionUnitCode(model.getInspectionUnitCode());
resultModel.setInspectionUnitName(model.getInspectionUnitName());
resultModel.setApplicationNo(model.getApplicationNo());
resultModel.setApplicationUnitCode(model.getApplicationUnitCode());
resultModel.setApplicationUnitName(model.getApplicationUnitName());
resultModel.setResultStatus(ResultStatusEnum.NO_RESULT.getCode());
resultModel.setApplicationDate(model.getApplicationDate());
resultModel.setInspectionType(model.getInspectionType());
resultModel.setInspectionTypeName(this.getDictNameByCode(model.getInspectionType()));
// 解析设备
resultModel.setBizType(model.getBizType());
resultModel.setResultNo(codes.get(i));
//设备唯一标识
resultModel.setEquipUnicode(applicationEquipModels.get(i).getEquipUnicode());
resultModel.setSupervisoryCode(applicationEquipModels.get(i).getSupervisoryCode());
resultModel.setEquDefine(applicationEquipModels.get(i).getEquDefine());
resultModel.setEquCategory(applicationEquipModels.get(i).getEquCategory());
resultModel.setEquList(applicationEquipModels.get(i).getEquList());
resultModel.setIsExistNc(false);
this.setResultTypeByBizType(resultModel, model.getBizType());
resultModels.add(resultModel);
}
inspectionResultService.saveOrUpdateBatch(resultModels);
// 报检信息推送
this.pushInspectionApplication(model);
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(model.getInstanceId(), this.buildInstanceRuntimeData(entity));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
inspectionResultService.saveOrUpdateBatch(resultModels);
this.pushInspectionApplication(inspectionApplicationModel);
}
private void setResultTypeByBizType(JyjcInspectionResult resultModel, String bizType) {
......@@ -665,59 +675,75 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
*/
@Transactional(rollbackFor = Exception.class)
public Boolean doReject(Map<String, Object> params) {
String instanceId = params.get("instanceId").toString();
String nextTaskId = params.get("nextTaskId").toString();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(nextTaskId, instanceId);
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
JyjcInspectionApplication entity = this.getBaseMapper().selectById(sequenceNbr);
ArrayList<String> roleListAll = new ArrayList<>();
ArrayList<String> roleList = new ArrayList<>();
String taskId = entity.getNextTaskId();
//组装信息
TaskResultDTO task = new TaskResultDTO();
task.setResultCode("approvalStatus");
task.setTaskId(taskId);
task.setComment(params.getOrDefault("comments", "").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "1");
task.setVariable(map);
//执行流程
task.setNextExecuteUserCompanyCode(entity.getInspectionUnitCode());
ProcessTaskDTO processTaskDTO = cmWorkflowService.reject(taskId, task);
String taskName1 = "";
this.buildRoleList(Collections.singletonList(processTaskDTO), roleList, roleListAll);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
LambdaQueryWrapper<JyjcInspectionApplication> lambda = new QueryWrapper<JyjcInspectionApplication>().lambda();
lambda.eq(JyjcInspectionApplication::getSequenceNbr, sequenceNbr);
JyjcInspectionApplication entity = this.getBaseMapper().selectOne(lambda);
ArrayList<String> roleListAll = new ArrayList<>();
ArrayList<String> roleListNext = new ArrayList<>();
ArrayList<String> roleList = new ArrayList<>();
String taskId = entity.getNextTaskId();
//组装信息
TaskResultDTO task = new TaskResultDTO();
task.setResultCode("approvalStatus");
task.setTaskId(taskId);
task.setComment(params.getOrDefault("comments", "").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "1");
task.setVariable(map);
//执行流程
task.setNextExecuteUserCompanyCode(entity.getInspectionUnitCode());
ProcessTaskDTO processTaskDTO = cmWorkflowService.reject(taskId, task);
String taskName1 = "";
String nextTaskId = "";
this.buildRoleList(Collections.singletonList(processTaskDTO), roleList, roleListAll);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
entity.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
JyjcInspectionApplicationModel model = new JyjcInspectionApplicationModel();
BeanUtils.copyProperties(entity, model);
model.setStatusName(FlowStatusEnum.REJECTED.getName());
String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
entity.setProcessDescription(processDescription);
}
String nextUserIds = workflowResultDtos.get(0).getNextExecutorUserIds();
String executorRoleIds = workflowResultDtos.get(0).getExecutorRoleIds();
if (processTaskDTO != null && processTaskDTO.getNextTask() != null && processTaskDTO.getNextTask().size() > 0) {
taskName1 = processTaskDTO.getNextTask().get(0).getName();
nextTaskId = processTaskDTO.getNextTask().get(0).getId();
}
model.setNextExecuteIds(String.join(",", roleList));
if (!org.springframework.util.ObjectUtils.isEmpty(model.getWorkflowRole())) {
model.setWorkflowRole(model.getWorkflowRole() + "," + String.join(",", roleList));
} else {
model.setWorkflowRole(String.join(",", roleList));
entity.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
JyjcInspectionApplicationModel model = new JyjcInspectionApplicationModel();
BeanUtils.copyProperties(entity, model);
model.setStatusName(FlowStatusEnum.REJECTED.getName());
String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
entity.setProcessDescription(processDescription);
}
String nextUserIds = workflowResultDtos.get(0).getNextExecutorUserIds();
String executorRoleIds = workflowResultDtos.get(0).getExecutorRoleIds();
if (processTaskDTO != null && processTaskDTO.getNextTask() != null && processTaskDTO.getNextTask().size() > 0) {
taskName1 = processTaskDTO.getNextTask().get(0).getName();
nextTaskId = processTaskDTO.getNextTask().get(0).getId();
}
model.setNextExecuteIds(String.join(",", roleList));
if (!org.springframework.util.ObjectUtils.isEmpty(model.getWorkflowRole())) {
model.setWorkflowRole(model.getWorkflowRole() + "," + String.join(",", roleList));
} else {
model.setWorkflowRole(String.join(",", roleList));
}
model.setNextTaskId(nextTaskId);
model.setPromoter(RequestContext.getExeUserId());
model.setNextTaskName(taskName1);
model.setNextExecuteIds(executorRoleIds);
model.setNextExecuteUserIds(nextUserIds);
executeOneStep(model, taskName1, nextUserIds);
BeanUtils.copyProperties(model, entity);
this.updateById(entity);
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(model.getInstanceId(), this.buildInstanceRuntimeData(entity));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
model.setNextTaskId(nextTaskId);
model.setPromoter(RequestContext.getExeUserId());
model.setNextTaskName(taskName1);
model.setNextExecuteIds(executorRoleIds);
model.setNextExecuteUserIds(nextUserIds);
executeOneStep(model, taskName1, nextUserIds);
BeanUtils.copyProperties(model, entity);
this.updateById(entity);
return true;
}
......@@ -725,100 +751,79 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
/**
* 撤回流程办理单
*/
public Boolean doRollback(String sequenceNbr) {
JyjcInspectionApplicationModel inspectionApplicationModel = this.queryBySeq(Long.valueOf(sequenceNbr));
if (inspectionApplicationModel == null) {
log.warn("JyjcInspectionApplicationModel Not Found!sequenceNbr => " + sequenceNbr);
return false;
}
String taskCode = FlowStatusEnum.TO_BE_FINISHED.getName();
String[] taskName = new String[]{"流程结束"};
List<String> roleListNext = new ArrayList<>();
List<String> roleListAll = new ArrayList<>();
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(inspectionApplicationModel.getProcessInstanceId());
String nextTaskId = processTaskDTO.getNextTask().get(0).getId();
this.buildRoleList(Collections.singletonList(processTaskDTO), roleListNext, roleListAll);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
if (!org.springframework.util.ObjectUtils.isEmpty(inspectionApplicationModel.getWorkflowRole())) {
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole() + "," + roleListAll);
} else {
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole());
public Boolean doRollback(String sequenceNbr, String instanceId, String nextTaskId) {
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForRevocationFlow(nextTaskId, instanceId);
JyjcInspectionApplicationModel inspectionApplicationModel = this.queryBySeq(Long.valueOf(sequenceNbr));
if (inspectionApplicationModel == null) {
log.warn("JyjcInspectionApplicationModel Not Found!sequenceNbr => " + sequenceNbr);
return false;
}
List<String> roleListNext = new ArrayList<>();
List<String> roleListAll = new ArrayList<>();
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(inspectionApplicationModel.getProcessInstanceId());
this.buildRoleList(Collections.singletonList(processTaskDTO), roleListNext, roleListAll);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
if (!org.springframework.util.ObjectUtils.isEmpty(inspectionApplicationModel.getWorkflowRole())) {
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole() + "," + roleListAll);
} else {
inspectionApplicationModel.setWorkflowRole(inspectionApplicationModel.getWorkflowRole());
}
inspectionApplicationModel.setNextTaskId(processTaskDTO.getNextTask().get(0).getId());
inspectionApplicationModel.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode()));
inspectionApplicationModel.setStatusName(FlowStatusEnum.ROLLBACK.getName());
inspectionApplicationModel.setPromoter("");
inspectionApplicationModel.setNextExecuteUserIds(workflowResultDtos.get(0).getNextExecutorUserIds());
inspectionApplicationModel.setNextExecuteIds(String.join(",", roleListNext));
JyjcInspectionApplication jyjcInspectionApplication = new JyjcInspectionApplication();
BeanUtils.copyProperties(inspectionApplicationModel, jyjcInspectionApplication);
this.getBaseMapper().updateById(jyjcInspectionApplication);
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(inspectionApplicationModel));
jsonObject.put("nextTaskId", inspectionApplicationModel.getNextTaskId());
jsonObject.put("nextExecuteUser", inspectionApplicationModel.getNextExecuteIds());
jsonObject.put("taskType", BizTypeEnum.getNumByCode(inspectionApplicationModel.getBizType()));
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
taskModelService.rollbackTask(inspectionApplicationModel.getProcessInstanceId(), jsonObject);
// 缓存下一个任务id,再任务进行时,用来校验数据,不再进行数据库查询
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jyjcInspectionApplication));
return true;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
// 待调整
taskCode = processTaskDTO.getNextTask().get(0).getKey();
inspectionApplicationModel.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode()));
inspectionApplicationModel.setStatusName(FlowStatusEnum.ROLLBACK.getName());
inspectionApplicationModel.setPromoter("");
inspectionApplicationModel.setNextTaskId(nextTaskId);
inspectionApplicationModel.setNextExecuteUserIds(workflowResultDtos.get(0).getNextExecutorUserIds());
inspectionApplicationModel.setNextExecuteIds(String.join(",", roleListNext));
JyjcInspectionApplication jyjcInspectionApplication = new JyjcInspectionApplication();
BeanUtils.copyProperties(inspectionApplicationModel, jyjcInspectionApplication);
this.getBaseMapper().updateById(jyjcInspectionApplication);
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(inspectionApplicationModel));
jsonObject.put("nextTaskId", inspectionApplicationModel.getNextTaskId());
jsonObject.put("nextExecuteUser", inspectionApplicationModel.getNextExecuteIds());
jsonObject.put("taskType", BizTypeEnum.getNumByCode(inspectionApplicationModel.getBizType()));
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
taskModelService.rollbackTask(inspectionApplicationModel.getProcessInstanceId(), jsonObject);
return true;
return Boolean.FALSE;
}
public void updateModelByInstanceId(Long sequenceNbr, String instanceId, Map<String, Object> params, Boolean rollBack) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
LambdaQueryWrapper<JyjcInspectionApplication> lambda = new QueryWrapper<JyjcInspectionApplication>().lambda();
lambda.eq(JyjcInspectionApplication::getSequenceNbr, sequenceNbr);
JyjcInspectionApplication entity = this.getBaseMapper().selectOne(lambda);
if (entity == null) {
return;
}
String status = (String) params.get("status");
List<String> persons = JSONArray.parseArray(JSON.toJSONString(params.get("inspectionChargePerson")), String.class);
String inspectionChargePerson = persons == null ? "" : String.join(",", persons);
if (StringUtils.isNotBlank(inspectionChargePerson)) {
entity.setInspectionChargePerson(inspectionChargePerson);
}
String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
entity.setProcessDescription(processDescription);
}
String inspectionChargePhone = (String) params.get("inspectionChargePhone");
if (StringUtils.isNotBlank(inspectionChargePhone)) {
entity.setInspectionChargePhone(inspectionChargePhone);
}
Map<String, Object> nextNodeInfo = workflowHelper.getNextWorkflowNode(instanceId);
String role = (String) nextNodeInfo.get("role");
entity.setNextExecuteIds(role);
entity.setPromoter(reginParams.getUserModel().getUserId());
if (!org.springframework.util.ObjectUtils.isEmpty(entity.getWorkflowRole())) {
entity.setWorkflowRole(entity.getWorkflowRole() + "," + role);
} else {
entity.setWorkflowRole(role);
}
entity.setStatus(status);
//此处自己撤销也赋予了办理日期 存在问题 与驳回 通过区分处理
if (rollBack) {
this.getBaseMapper().updatePromoter(entity.getSequenceNbr());
}
//逻辑变更为 通过后才对办理时间赋值
if (status.equals(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()))) {
entity.setAcceptDate(new Date());
entity.setInnerPersonCode(params.getOrDefault("innerPersonCode", "").toString());
}
this.updateById(entity);
private InstanceRuntimeData buildInstanceRuntimeData(JyjcInspectionApplication jyjcInspectionApplication) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jyjcInspectionApplication.getNextExecuteUserIds())
.promoter(jyjcInspectionApplication.getPromoter())
.nextTaskId(jyjcInspectionApplication.getNextTaskId())
.build();
}
private InstanceRuntimeData buildInstanceRuntimeData(JyjcInspectionApplicationModel jyjcInspectionApplication) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jyjcInspectionApplication.getNextExecuteUserIds())
.promoter(jyjcInspectionApplication.getPromoter())
.nextTaskId(jyjcInspectionApplication.getNextTaskId())
.build();
}
private void buildRoleList(List<ProcessTaskDTO> processTasks, List<String> roleListNext, List<String> roleListAll) {
processTasks.forEach(p -> {
p.getNextCandidateGroups().values().forEach(e -> {
......@@ -906,6 +911,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
private TaskV2Model updateTaskModel(JyjcInspectionApplicationModel model) {
Map<String, Object> params = new HashMap<>();
this.cleanNoUsedData(model);
params.put("relationId", model.getProcessInstanceId());
params.put("taskStatus", model.getStatus());
params.put("taskStatusLabel", model.getStatusName());
......@@ -914,4 +920,28 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
params.put("model", model);
return taskModelService.updateTaskModel(params);
}
/**
* 清楚无用数据防止url过长
*
* @param model
*/
private void cleanNoUsedData(JyjcInspectionApplicationModel model) {
// todo 预留
}
/**
* 缓存当前正在流程中的实例的流程数据
*/
public void initFlowData2Redis() {
LambdaQueryWrapper<JyjcInspectionApplication> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ne(JyjcInspectionApplication::getStatus, FlowStatusEnum.TO_BE_FINISHED.getCode());
queryWrapper.ne(JyjcInspectionApplication::getStatus, FlowStatusEnum.TO_BE_DISCARD.getCode());
queryWrapper.isNotNull(JyjcInspectionApplication::getProcessInstanceId);
queryWrapper.select(JyjcInspectionApplication::getProcessInstanceId,JyjcInspectionApplication::getNextTaskId,JyjcInspectionApplication::getPromoter,JyjcInspectionApplication::getNextExecuteUserIds);
List<JyjcInspectionApplication> jyjcInspectionApplicationsInFlowing = this.list(queryWrapper);
jyjcInspectionApplicationsInFlowing.forEach(inspectionApplication -> {
commonService.saveExecuteFlowData2Redis(inspectionApplication.getProcessInstanceId(),this.buildInstanceRuntimeData(inspectionApplication));
});
}
}
\ No newline at end of file
......@@ -101,7 +101,7 @@ public class JyjcInspectionResultServiceImpl extends BaseService<JyjcInspectionR
TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper;
@Autowired
CommonserviceImpl commonService;
CommonServiceImpl commonService;
@Autowired
TzsUserInfoMapper tzsUserInfoMapper;
......
......@@ -16,14 +16,12 @@ import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.dao.mapper.DataDictionaryMapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.dto.AttachmentDto;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcOpeningApplication;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.BusinessTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcBaseMapper;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcOpeningApplicationMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.*;
import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcOpeningApplicationService;
......@@ -53,6 +51,8 @@ import com.yeejoin.amos.feign.workflow.model.TaskResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -63,8 +63,8 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
......@@ -80,8 +80,6 @@ import java.util.stream.Collectors;
public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningApplicationModel, JyjcOpeningApplication, JyjcOpeningApplicationMapper> implements IJyjcOpeningApplicationService {
@Autowired
CommonserviceImpl commonserviceImpl;
@Autowired
private TzsServiceFeignClient tzsServiceFeignClient;
@Autowired
JyjcOpeningApplicationMapper jyjcOpeningApplicationMapper;
......@@ -118,13 +116,13 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
private TzsUserInfoMapper userInfoMapper;
@Autowired
CommonserviceImpl commonservice;
CommonServiceImpl commonService;
@Autowired
CmWorkflowServiceImpl cmWorkflowService;
@Autowired
TaskModelServiceImpl commonServiceImpl;
TaskModelServiceImpl taskModelService;
@Autowired
DataDictionaryMapper dataDictionaryMapper;
......@@ -132,6 +130,9 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
@Autowired
RuleActionHandler ruleActionHandler;
@Autowired
RedissonClient redissonClient;
private static Map<String, DictionarieValueModel> permissionLevelMap;
private static List<DictionarieValueModel> permissionItemList;
......@@ -148,99 +149,101 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
*/
private final static String ZZXM_JYJC_DICT_KEY = "ZZXM_JYJC_ALL";
@Transactional(rollbackFor = {Exception.class, BaseException.class})
public JyjcOpeningApplicationModel saveOrUpdateModel(JyjcOpeningApplicationModel model, Boolean enableStartFlow) {
boolean isUpdate = false;
String instanceId = null;
JyjcOpeningApplication entity = null;
public JyjcOpeningApplicationModel saveOrUpdate(JyjcOpeningApplicationModel model) {
if (model.getSequenceNbr() != null) {
entity = jyjcOpeningApplicationMapper.selectById(model.getSequenceNbr());
if (entity != null) {
instanceId = entity.getWorkflowProstanceId();
isUpdate = true;
}
}
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JY.getCode(), 1).getResult();
model.setApplicationSeq(codes.get(0));
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
model.setPromoter(reginParams.getUserModel().getUserId());
if (!isUpdate) {
CompanyBo companyBo = commonserviceImpl.getReginParamsOfCurrentUser().getCompany();
// 编辑逻辑
return this.updateWithModel(model);
} else {
// 工作台暂存(新增)逻辑
// 1.创建开通申请
List<String> codes = tzsServiceFeignClient.applicationFormCode(ApplicationFormTypeEnum.JY.getCode(), 1).getResult();
model.setApplicationSeq(codes.get(0));
CompanyBo companyBo = commonService.getReginParamsOfCurrentUser().getCompany();
model.setUnitCode(companyBo.getCompanyCode());
model.setUnitCodeName(companyBo.getCompanyName());
model.setCreateUserId(reginParams.getUserModel().getUserId());
model.setCreateUserId(RequestContext.getExeUserId());
model.setStatus(FlowStatusEnum.TO_BE_SUBMITTED.getCode() + "");
model.setStatusName(FlowStatusEnum.TO_BE_SUBMITTED.getName());
this.createWithModel(model);
// 2.创建待办
createDraftTask(model);
}
if (enableStartFlow) {
model.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
model.setApplyTime(new Date());
if (StringUtils.isBlank(instanceId)) {
// 未开启过工作流则进行开启 startProcess
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
ActWorkflowStartDTO dto = new ActWorkflowStartDTO();
ArrayList<ActWorkflowStartDTO> list = new ArrayList<>();
dto.setProcessDefinitionKey(processDefinitionKey);
dto.setBusinessKey("1");
dto.setCompleteFirstTask(Boolean.TRUE);
// 接受机构
list.add(dto);
actWorkflowBatchDTO.setProcess(list);
List<ProcessTaskDTO> processTaskDTOS = cmWorkflowService.startBatch(actWorkflowBatchDTO);
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
model.setWorkflowProstanceId(workflowResultDto.getInstanceId());
model.setNextExecuteIds(workflowResultDto.getNextExecutorRoleIds());
model.setNextTaskId(workflowResultDto.getNextTaskId());
model.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 创建代办
buildTask(model, workflowResultDto);
}
} else {
// 存在流程,执行
HashMap<String, Object> map = new HashMap<>();
map.put("sequenceNbr", model.getSequenceNbr());
map.put("op", "0");
map.put("comments", "提交");
JyjcOpeningApplication jyjcOpeningApplication = executeFlow(map);
model.setNextTaskId(jyjcOpeningApplication.getNextTaskId());
}
model.setStatusName(FlowStatusEnum.getNameByType(Long.parseLong((model.getStatus()))));
return this.updateWithModel(model);
}
@Transactional(rollbackFor = {Exception.class, BaseException.class})
public JyjcOpeningApplicationModel submitApplication(JyjcOpeningApplicationModel model) {
model.setApplyTime(new Date());
String instanceId = model.getWorkflowProstanceId();
if (StringUtils.isBlank(instanceId)) {
// 未开启过工作流则进行开启 startProcess
ActWorkflowBatchDTO actWorkflowBatchDTO = new ActWorkflowBatchDTO();
ActWorkflowStartDTO dto = new ActWorkflowStartDTO();
ArrayList<ActWorkflowStartDTO> list = new ArrayList<>();
dto.setProcessDefinitionKey(processDefinitionKey);
dto.setBusinessKey("1");
dto.setCompleteFirstTask(Boolean.TRUE);
// 接受机构
list.add(dto);
actWorkflowBatchDTO.setProcess(list);
List<ProcessTaskDTO> processTaskDTOS = cmWorkflowService.startBatch(actWorkflowBatchDTO);
List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
WorkflowResultDto workflowResultDto = resultDto.get(0);
model.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
model.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName()));
model.setPromoter(RequestContext.getExeUserId());
model.setWorkflowProstanceId(workflowResultDto.getInstanceId());
model.setNextExecuteIds(workflowResultDto.getNextExecutorRoleIds());
model.setNextTaskId(workflowResultDto.getNextTaskId());
model.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 首次提交时删除暂存的待办
taskModelService.deleteTaskModel(model.getSequenceNbr() + "");
// 创建代办
buildTask(model, workflowResultDto);
// 缓存流程数据
commonService.saveExecuteFlowData2Redis(workflowResultDto.getInstanceId(), this.buildInstanceRuntimeData(model));
return this.updateWithModel(model);
} else {
// 只有第一次改为待提交
if (entity == null) {
model.setStatus(FlowStatusEnum.TO_BE_SUBMITTED.getCode() + "");
// 暂存生成代办逻辑
ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto dto = new TaskModelDto();
TaskMessageDto taskMessageDto = new TaskMessageDto();
BeanUtil.copyProperties(model, taskMessageDto);
// 数据参数
dto.setModel(taskMessageDto);
// 摘要
dto.setTaskContent(String.format("检验检测业务开通办理,【申请单号:%s】", model.getApplicationSeq()));
// 申请单号
dto.setTaskCode(model.getApplicationSeq());
// 业务类型
dto.setTaskType(BusinessTypeEnum.JY_OPENING_APPLICATION.getCode());
// 业务主键
dto.setRelationId(String.valueOf(model.getSequenceNbr()));
dto.setNextExecuteUser("");
list.add(dto);
commonServiceImpl.buildTaskModel(list);
}
// 首次提交时删除暂存的待办
taskModelService.deleteTaskModel(model.getSequenceNbr() + "");
// 存在流程,执行
executeOneStep(model);
return this.updateWithModel(model);
}
model.setStatusName(FlowStatusEnum.getNameByType(Long.parseLong((model.getStatus()))));
return this.updateWithModel(model);
}
private void createDraftTask(JyjcOpeningApplicationModel model) {
ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto dto = new TaskModelDto();
TaskMessageDto taskMessageDto = new TaskMessageDto();
BeanUtil.copyProperties(model, taskMessageDto);
// 数据参数
dto.setModel(taskMessageDto);
// 摘要
dto.setTaskContent(String.format("检验检测业务开通办理,【申请单号:%s】", model.getApplicationSeq()));
// 申请单号
dto.setTaskCode(model.getApplicationSeq());
// 业务类型
dto.setTaskType(BusinessTypeEnum.JY_OPENING_APPLICATION.getCode());
// 业务主键
dto.setRelationId(String.valueOf(model.getSequenceNbr()));
dto.setNextExecuteUser("");
list.add(dto);
taskModelService.buildTaskModel(list);
}
@Transactional(rollbackFor = {Exception.class, BaseException.class})
public JyjcOpeningApplicationModel resubmit(JyjcOpeningApplicationModel model) {
model.setStatus(FlowStatusEnum.TO_BE_PROCESSED.getCode() + "");
model = this.updateWithModel(model);
executeFlow(MapBuilder.<String, Object>create().put("op", "0").put("instanceId", model.getWorkflowProstanceId()).put("comments", "").build());
executeFlow(MapBuilder.<String, Object>create()
.put("op", "0")
.put("instanceId", model.getWorkflowProstanceId())
.put("comments", "")
.put("nextTaskId", model.getNextTaskId())
.build());
return model;
}
......@@ -303,7 +306,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
}
public Page<JyjcOpeningApplicationModel> queryForJyjcOpeningApplicationPage(Page<JyjcOpeningApplication> page, JyjcOpeningApplicationRequstDto dto) {
ReginParams reginParams = commonserviceImpl.getReginParamsOfCurrentUser();
ReginParams reginParams = commonService.getReginParamsOfCurrentUser();
String currentUserId = reginParams.getUserModel().getUserId();
String level = reginParams.getCompany().getLevel();
if (BaseController.COMPANY_TYPE_COMPANY.equals(level)) {
......@@ -344,7 +347,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
* @author yangyang
*/
public JyjcOpeningApplicationModel queryDetail(Long sequenceNbr) {
ReginParams reginParams = commonserviceImpl.getReginParamsOfCurrentUser();
ReginParams reginParams = commonService.getReginParamsOfCurrentUser();
if (ValidationUtil.isEmpty(reginParams.getCompany())) {
throw new RuntimeException("未指定人员归属单位信息");
}
......@@ -407,9 +410,9 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
private void setBaseUnitLicences(String unitCode, JyjcOpeningApplicationModel jyjcOpeningApplicationModel, boolean isNeedFilter) {
List<BaseUnitLicence> baseUnitLicences = baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<BaseUnitLicence>().eq(BaseUnitLicence::getUnitCode, unitCode).in(BaseUnitLicence::getCertTypeCode, Arrays.asList(jyCertTypeCode, jcCertTypeCode)));
List<TzBaseUnitLicenceDto> baseUnitLicencesDtos = baseUnitLicences.stream().map(l->{
List<TzBaseUnitLicenceDto> baseUnitLicencesDtos = baseUnitLicences.stream().map(l -> {
TzBaseUnitLicenceDto licenceDto = new TzBaseUnitLicenceDto();
BeanUtil.copyProperties(l,licenceDto);
BeanUtil.copyProperties(l, licenceDto);
licenceDto.setCertTypeCode(this.castCode2Str(l.getCertTypeCode()));
return licenceDto;
}).collect(Collectors.toList());
......@@ -507,104 +510,212 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
/**
* 接收/驳回通知检验单
*/
@Transactional(rollbackFor = Exception.class)
public JyjcOpeningApplication executeFlow(Map<String, Object> params) {
ReginParams reginParams = JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
String op = params.get("op").toString();
JyjcOpeningApplication data = jyjcOpeningApplicationMapper.selectById(sequenceNbr);
//组装信息
TaskResultDTO dto = new TaskResultDTO();
dto.setResultCode("approvalStatus");
dto.setTaskId(data.getNextTaskId());
dto.setComment(params.get("comments").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", op);
if (String.valueOf(FlowStatusEnum.ROLLBACK.getCode()).equals(data.getStatus()) || String.valueOf(FlowStatusEnum.REJECTED.getCode()).equals(data.getStatus())) {
map.put("approvalStatus", "提交");
}
dto.setVariable(map);
ProcessTaskDTO complete = new ProcessTaskDTO();
if ("0".equals(op)) {
complete = cmWorkflowService.complete(data.getNextTaskId(), dto);
} else {
complete = cmWorkflowService.reject(data.getNextTaskId(), dto);
}
String instanceId = params.get("instanceId").toString();
String nextTaskId = params.get("nextTaskId").toString();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(nextTaskId, instanceId);
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
String op = params.get("op").toString();
JyjcOpeningApplication jyjcOpeningApplication = jyjcOpeningApplicationMapper.selectById(sequenceNbr);
//组装信息
TaskResultDTO dto = new TaskResultDTO();
dto.setResultCode("approvalStatus");
dto.setTaskId(jyjcOpeningApplication.getNextTaskId());
dto.setComment(params.get("comments").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", op);
if (String.valueOf(FlowStatusEnum.ROLLBACK.getCode()).equals(jyjcOpeningApplication.getStatus()) || String.valueOf(FlowStatusEnum.REJECTED.getCode()).equals(jyjcOpeningApplication.getStatus())) {
map.put("approvalStatus", "提交");
}
dto.setVariable(map);
ProcessTaskDTO complete = new ProcessTaskDTO();
if ("0".equals(op)) {
complete = cmWorkflowService.complete(jyjcOpeningApplication.getNextTaskId(), dto);
} else {
complete = cmWorkflowService.reject(jyjcOpeningApplication.getNextTaskId(), dto);
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(complete);
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!org.springframework.util.ObjectUtils.isEmpty(resultDto) && !org.springframework.util.ObjectUtils.isEmpty(resultDto.get(0))) {
}
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(complete);
List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
WorkflowResultDto workflowResultDto = resultDto.get(0);
if (!ObjectUtils.isEmpty(workflowResultDto.getNextTaskId())) {
if ("1".equals(op)) {
// 驳回
data.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
data.setStatusName(String.valueOf(FlowStatusEnum.REJECTED.getName()));
data.setPromoter("");
jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.REJECTED.getCode()));
jyjcOpeningApplication.setStatusName(String.valueOf(FlowStatusEnum.REJECTED.getName()));
jyjcOpeningApplication.setPromoter("");
} else {
data.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
data.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName()));
data.setPromoter(reginParams.getUserModel().getUserId());
// 提交
jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
jyjcOpeningApplication.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName()));
jyjcOpeningApplication.setPromoter(RequestContext.getExeUserId());
}
jyjcOpeningApplication.setNextTaskId(workflowResultDto.getNextTaskId());
jyjcOpeningApplication.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 更新代办
updateTask(data, workflowResultDto, op);
data.setNextTaskId(workflowResultDto.getNextTaskId());
updateTask(jyjcOpeningApplication, workflowResultDto, op);
} else {
// 流程结束
data.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()));
//更新办理日期
data.setAcceptDate(new Date());
jyjcOpeningApplication.setAcceptDate(new Date());
// 更新代办
HashMap<String, Object> taskParams = new HashMap<>();
taskParams.put("relationId", data.getWorkflowProstanceId());
taskParams.put("relationId", jyjcOpeningApplication.getWorkflowProstanceId());
taskParams.put("flowStatus", FlowStatusEnum.TO_BE_FINISHED.getCode());
taskParams.put("flowStatusLabel", FlowStatusEnum.TO_BE_FINISHED.getName());
taskParams.put("taskStatus", FlowStatusEnum.TO_BE_FINISHED.getCode());
taskParams.put("taskStatusLabel", FlowStatusEnum.TO_BE_FINISHED.getName());
taskParams.put("model", data);
commonServiceImpl.updateTaskModel(taskParams);
data.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName());
taskParams.put("model", jyjcOpeningApplication);
taskModelService.updateTaskModel(taskParams);
jyjcOpeningApplication.setPromoter("");
jyjcOpeningApplication.setNextTaskId("");
jyjcOpeningApplication.setNextExecuteUserIds("");
jyjcOpeningApplication.setStatusName(FlowStatusEnum.TO_BE_FINISHED.getName());
}
jyjcOpeningApplicationMapper.updateById(jyjcOpeningApplication);
// 已完成 作废逻辑
if (String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()).equals(jyjcOpeningApplication.getStatus())) {
doDiscard(jyjcOpeningApplication.getUnitCode(), jyjcOpeningApplication.getSequenceNbr(), jyjcOpeningApplication.getOpenBizType());
}
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(jyjcOpeningApplication.getWorkflowProstanceId(), this.buildInstanceRuntimeData(jyjcOpeningApplication));
return jyjcOpeningApplication;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
jyjcOpeningApplicationMapper.updateById(data);
// 已完成 作废逻辑
if (String.valueOf(FlowStatusEnum.TO_BE_FINISHED.getCode()).equals(data.getStatus())) {
doDiscard(data.getUnitCode(), data.getSequenceNbr(), data.getOpenBizType());
return null;
}
private void executeOneStep(JyjcOpeningApplicationModel openingApplication) {
String instanceId = openingApplication.getWorkflowProstanceId();
String nextTaskId = openingApplication.getNextTaskId();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(nextTaskId, instanceId);
// 组装信息执行工作流
TaskResultDTO dto = new TaskResultDTO();
dto.setResultCode("approvalStatus");
dto.setTaskId(nextTaskId);
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "提交");
dto.setVariable(map);
ProcessTaskDTO complete = cmWorkflowService.complete(nextTaskId, dto);
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(complete);
List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
WorkflowResultDto workflowResultDto = resultDto.get(0);
// 更新业务信息
openingApplication.setStatus(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getCode()));
openingApplication.setStatusName(String.valueOf(FlowStatusEnum.TO_BE_PROCESSED.getName()));
openingApplication.setPromoter(RequestContext.getExeUserId());
openingApplication.setNextTaskId(workflowResultDto.getNextTaskId());
openingApplication.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
// 更新代办
JyjcOpeningApplication jyjcOpeningApplicationEntry = new JyjcOpeningApplication();
BeanUtil.copyProperties(openingApplication, jyjcOpeningApplicationEntry);
updateTask(jyjcOpeningApplicationEntry, workflowResultDto, "0");
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jyjcOpeningApplicationEntry));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return data;
}
/**
* 撤回流程办理单
*/
public JyjcOpeningApplication stopFlow(String sequenceNbr) {
JyjcOpeningApplication jyjcOpeningApplication = jyjcOpeningApplicationMapper.selectById(sequenceNbr);
//撤回流程
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(jyjcOpeningApplication.getWorkflowProstanceId());
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(processTaskDTO);
jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode()));
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(jyjcOpeningApplication));
List<WorkflowResultDto> resultDto = commonServiceImpl.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
jsonObject.put("nextExecuteUser", workflowResultDto.getNextExecutorRoleIds());
jyjcOpeningApplication.setNextTaskId(workflowResultDto.getNextTaskId());
public JyjcOpeningApplication stopFlow(String sequenceNbr, String instanceId, String nextTaskId) {
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForRevocationFlow(nextTaskId, instanceId);
JyjcOpeningApplication jyjcOpeningApplication = jyjcOpeningApplicationMapper.selectById(sequenceNbr);
//撤回流程
ProcessTaskDTO processTaskDTO = cmWorkflowService.rollBack(jyjcOpeningApplication.getWorkflowProstanceId());
ArrayList<ProcessTaskDTO> processTaskDTOS = new ArrayList<>();
processTaskDTOS.add(processTaskDTO);
jyjcOpeningApplication.setStatus(String.valueOf(FlowStatusEnum.ROLLBACK.getCode()));
jyjcOpeningApplication.setStatusName(FlowStatusEnum.ROLLBACK.getName());
jyjcOpeningApplication.setPromoter("");
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(jyjcOpeningApplication));
List<WorkflowResultDto> resultDto = taskModelService.buildWorkFlowInfo(processTaskDTOS);
if (!ObjectUtils.isEmpty(resultDto) && !ObjectUtils.isEmpty(resultDto.get(0))) {
WorkflowResultDto workflowResultDto = resultDto.get(0);
jsonObject.put("nextExecuteUser", workflowResultDto.getNextExecutorRoleIds());
jyjcOpeningApplication.setNextTaskId(workflowResultDto.getNextTaskId());
jyjcOpeningApplication.setNextExecuteUserIds(workflowResultDto.getNextExecutorUserIds());
}
jsonObject.put("nextTaskId", jyjcOpeningApplication.getNextTaskId());
jsonObject.put("nextExecuteUserIds", jyjcOpeningApplication.getNextExecuteUserIds());
jsonObject.put("taskType", BusinessTypeEnum.JY_OPENING_APPLICATION.getCode());
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
// 撤回删除代办
taskModelService.rollbackTask(jyjcOpeningApplication.getWorkflowProstanceId(), jsonObject);
// 更新数据
jyjcOpeningApplicationMapper.updateById(jyjcOpeningApplication);
// 缓存下一个任务id,再任务进行时,用来校验数据,不再进行数据库查询
commonService.saveExecuteFlowData2Redis(instanceId, this.buildInstanceRuntimeData(jyjcOpeningApplication));
return jyjcOpeningApplication;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
jsonObject.put("nextTaskId", jyjcOpeningApplication.getNextTaskId());
jsonObject.put("taskType", BusinessTypeEnum.JY_OPENING_APPLICATION.getCode());
jsonObject.put("flowStatus", FlowStatusEnum.ROLLBACK.getCode());
jsonObject.put("flowStatusLabel", FlowStatusEnum.ROLLBACK.getName());
// 撤回删除代办
commonServiceImpl.rollbackTask(jyjcOpeningApplication.getWorkflowProstanceId(), jsonObject);
// 更新数据
jyjcOpeningApplicationMapper.updateById(jyjcOpeningApplication);
return jyjcOpeningApplication;
return null;
}
private InstanceRuntimeData buildInstanceRuntimeData(JyjcOpeningApplicationModel jyjcOpeningApplication) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jyjcOpeningApplication.getNextExecuteUserIds())
.promoter(jyjcOpeningApplication.getPromoter())
.nextTaskId(jyjcOpeningApplication.getNextTaskId())
.build();
}
private InstanceRuntimeData buildInstanceRuntimeData(JyjcOpeningApplication jyjcOpeningApplication) {
return InstanceRuntimeData.builder()
.nextExecuteUserIds(jyjcOpeningApplication.getNextExecuteUserIds())
.promoter(jyjcOpeningApplication.getPromoter())
.nextTaskId(jyjcOpeningApplication.getNextTaskId())
.build();
}
......@@ -648,7 +759,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
private void buildTask(JyjcOpeningApplicationModel model, WorkflowResultDto workflowResultDto) {
ReginParams reginParams = commonserviceImpl.getReginParamsOfCurrentUser();
ReginParams reginParams = commonService.getReginParamsOfCurrentUser();
// 代办消息
ArrayList<TaskModelDto> list = new ArrayList<>();
TaskModelDto dto = new TaskModelDto();
......@@ -676,7 +787,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
dto.setNextExecuteUser(workflowResultDto.getNextExecutorRoleIds());
dto.setPageType("look");
list.add(dto);
commonServiceImpl.buildTaskModel(list);
taskModelService.buildTaskModel(list);
}
private void updateTask(JyjcOpeningApplication model, WorkflowResultDto workflowResultDto, String op) {
......@@ -687,7 +798,7 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
params.put("flowStatusLabel", model.getStatus());
params.put("taskStatus", model.getStatus());
params.put("taskStatusLabel", model.getStatus());
TaskV2Model taskV2Model = commonServiceImpl.updateTaskModel(params);
TaskV2Model taskV2Model = taskModelService.updateTaskModel(params);
// 创建新的代办
if (!ObjectUtils.isEmpty(taskV2Model)) {
TaskModelDto taskModelDto = new TaskModelDto();
......@@ -711,17 +822,31 @@ public class JyjcOpeningApplicationServiceImpl extends BaseService<JyjcOpeningAp
}
taskModelDto.setNextExecuteUser(workflowResultDto.getNextExecutorRoleIds());
commonServiceImpl.buildTaskModel(Collections.singletonList(taskModelDto));
taskModelService.buildTaskModel(Collections.singletonList(taskModelDto));
} else {
JyjcOpeningApplicationModel applicationModel = new JyjcOpeningApplicationModel();
BeanUtil.copyProperties(model, applicationModel);
buildTask(applicationModel, workflowResultDto);
}
}
@Override
public List<TzBaseEnterpriseInfoDto> getUnitListByRecord(String record) {
return ruleActionHandler.getInspectionUnitList(new ArrayList<>(), true, record, OpenBizTypeEnum.JC.getCode());
}
/**
* 缓存当前正在流程中的实例的流程数据
*/
public void initFlowData2Redis() {
LambdaQueryWrapper<JyjcOpeningApplication> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ne(JyjcOpeningApplication::getStatus, FlowStatusEnum.TO_BE_FINISHED.getCode());
queryWrapper.ne(JyjcOpeningApplication::getStatus, FlowStatusEnum.TO_BE_DISCARD.getCode());
queryWrapper.isNotNull(JyjcOpeningApplication::getWorkflowProstanceId);
queryWrapper.select(JyjcOpeningApplication::getWorkflowProstanceId, JyjcOpeningApplication::getNextTaskId, JyjcOpeningApplication::getPromoter, JyjcOpeningApplication::getNextExecuteUserIds);
List<JyjcOpeningApplication> openingApplicationListInFlowing = this.list(queryWrapper);
openingApplicationListInFlowing.forEach(inspectionApplication -> {
commonService.saveExecuteFlowData2Redis(inspectionApplication.getWorkflowProstanceId(), this.buildInstanceRuntimeData(inspectionApplication));
});
}
}
\ No newline at end of file
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