|
@@ -8,6 +8,7 @@ import com.google.gson.reflect.TypeToken;
|
|
|
import com.qmth.boot.api.exception.ApiException;
|
|
|
import com.qmth.sop.business.activiti.service.ActivitiService;
|
|
|
import com.qmth.sop.business.bean.bean.FormPropertyBean;
|
|
|
+import com.qmth.sop.business.bean.params.FlowApproveParam;
|
|
|
import com.qmth.sop.business.bean.result.*;
|
|
|
import com.qmth.sop.business.cache.CommonCacheService;
|
|
|
import com.qmth.sop.business.entity.*;
|
|
@@ -98,6 +99,9 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
@Resource
|
|
|
CommonCacheService commonCacheService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ SequenceService sequenceService;
|
|
|
+
|
|
|
/**
|
|
|
* 根据deploymentId查找processDefinitionId
|
|
|
*
|
|
@@ -158,27 +162,15 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
/**
|
|
|
* 审批任务
|
|
|
*
|
|
|
- * @param flowDeploymentId
|
|
|
- * @param approve
|
|
|
- * @param setup
|
|
|
- * @param taskId
|
|
|
- * @param formProperties
|
|
|
- * @param approveUserIds
|
|
|
- * @param approveRemark
|
|
|
- * @param map
|
|
|
+ * @param flowApproveParam
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public Map<String, Object> taskApprove(String flowDeploymentId,
|
|
|
- FlowApprovePassEnum approve,
|
|
|
- Integer setup,
|
|
|
- Long taskId,
|
|
|
- String formProperties,
|
|
|
- List<String> approveUserIds,
|
|
|
- String approveRemark,
|
|
|
- Map<String, Object> map) {
|
|
|
+ public Map<String, Object> taskApprove(FlowApproveParam flowApproveParam) throws InterruptedException {
|
|
|
SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
- if (CollectionUtils.isEmpty(approveUserIds) && (approve == FlowApprovePassEnum.START || approve == FlowApprovePassEnum.DRAFT || approve == FlowApprovePassEnum.PASS)) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ List<String> approveUserIds = flowApproveParam.getApproveUserIds();
|
|
|
+ if (CollectionUtils.isEmpty(approveUserIds) && (flowApproveParam.getApprove() == FlowApprovePassEnum.START || flowApproveParam.getApprove() == FlowApprovePassEnum.DRAFT || flowApproveParam.getApprove() == FlowApprovePassEnum.PASS)) {
|
|
|
approveUserIds = new ArrayList<>();
|
|
|
approveUserIds.add(String.valueOf(sysUser.getId()));//否则是当前登录用户
|
|
|
}
|
|
@@ -187,18 +179,20 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
TFFlowApprove tfFlowApprove = null;
|
|
|
Task taskTemp = null;
|
|
|
FlowResult flowResult = null;
|
|
|
- if (Objects.nonNull(flowDeploymentId) && Objects.isNull(taskId)) {
|
|
|
- TFCustomFlow tfCustomFlow = tfCustomFlowService.getOne(new QueryWrapper<TFCustomFlow>().lambda().eq(TFCustomFlow::getFlowDeploymentId, flowDeploymentId));
|
|
|
+ if (Objects.nonNull(flowApproveParam.getFlowDeploymentId()) && Objects.isNull(flowApproveParam.getTaskId())) {
|
|
|
+ TFCustomFlow tfCustomFlow = tfCustomFlowService.getOne(new QueryWrapper<TFCustomFlow>().lambda().eq(TFCustomFlow::getFlowDeploymentId, flowApproveParam.getFlowDeploymentId()));
|
|
|
Optional.ofNullable(tfCustomFlow.getFlowProcessVar()).orElseThrow(() -> ExceptionResultEnum.FLOW_PROCESS_VAR_NO_DATA.exception());
|
|
|
|
|
|
map.put(SystemConstant.DEFAULT_ASSIGNEE_LIST + 1, approveUserIds);
|
|
|
ProcessInstance processInstance = runtimeService.startProcessInstanceById(tfCustomFlow.getFlowDefinitionId(), map);
|
|
|
processFlowId = processInstance.getId();
|
|
|
- tfCustomFlowEntity = new TFCustomFlowEntity(tfCustomFlow.getId(), sysUser.getId());
|
|
|
- tfFlowApprove = new TFFlowApprove(sysUser.getOrgId(), Long.parseLong(approveUserIds.get(approveUserIds.size() - 1)), FlowStatusEnum.valueOf(approve.name()), null);
|
|
|
+
|
|
|
+ String code = sequenceService.createFlowCode(tfCustomFlow.getType());
|
|
|
+ tfCustomFlowEntity = new TFCustomFlowEntity(tfCustomFlow.getId(), sysUser.getId(), code);
|
|
|
+ tfFlowApprove = new TFFlowApprove(sysUser.getOrgId(), Long.parseLong(approveUserIds.get(approveUserIds.size() - 1)), FlowStatusEnum.valueOf(flowApproveParam.getApprove().name()), null);
|
|
|
flowResult = JSONObject.parseObject(tfCustomFlow.getFlowProcessVar(), FlowResult.class);
|
|
|
- } else if (Objects.nonNull(taskId)) {
|
|
|
- taskTemp = taskService.createTaskQuery().taskId(String.valueOf(taskId)).singleResult();
|
|
|
+ } else if (Objects.nonNull(flowApproveParam.getTaskId())) {
|
|
|
+ taskTemp = taskService.createTaskQuery().taskId(String.valueOf(flowApproveParam.getTaskId())).singleResult();
|
|
|
Optional.ofNullable(taskTemp).orElseThrow(() -> ExceptionResultEnum.FLOW_TASK_NO_DATA.exception());
|
|
|
processFlowId = taskTemp.getProcessInstanceId();
|
|
|
}
|
|
@@ -240,23 +234,23 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
multiInstance = true;
|
|
|
}
|
|
|
currFlowTaskResult = GsonUtil.fromJson(GsonUtil.toJson(setupMap.get(task.getTaskDefinitionKey())), FlowTaskResult.class);
|
|
|
- if (Objects.nonNull(formProperties)) {
|
|
|
- formDataFlowTaskResult = JSONObject.parseObject(formProperties, FlowTaskResult.class);
|
|
|
+ if (Objects.nonNull(flowApproveParam.getFormProperties())) {
|
|
|
+ formDataFlowTaskResult = JSONObject.parseObject(flowApproveParam.getFormProperties(), FlowTaskResult.class);
|
|
|
}
|
|
|
int currSetup = currFlowTaskResult.getSetup().intValue();
|
|
|
- if (currSetup != 1 && approve == FlowApprovePassEnum.START) {
|
|
|
+ if (currSetup != 1 && flowApproveParam.getApprove() == FlowApprovePassEnum.START) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("只有流程第一步才需要提交!");
|
|
|
}
|
|
|
- if (currSetup != 2 && approve == FlowApprovePassEnum.CANCEL) {
|
|
|
+ if (currSetup != 2 && flowApproveParam.getApprove() == FlowApprovePassEnum.CANCEL) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("只有流程第二步才能撤回!");
|
|
|
}
|
|
|
//流程流水日志
|
|
|
TFFlowLog tfFlowLog = new TFFlowLog(sysUser.getOrgId(), sysUser.getId(), sysUser.getId(),
|
|
|
currFlowTaskResult.getSetup(), Long.parseLong(processFlowId),
|
|
|
Long.parseLong(task.getId()), tfCustomFlowEntity.getId(), approveUserIds.toString().replaceAll("\\[", "").replaceAll("\\]", ""));
|
|
|
- if (approve == FlowApprovePassEnum.PASS || approve == FlowApprovePassEnum.DRAFT || approve == FlowApprovePassEnum.START) {
|
|
|
- if (Objects.nonNull(setup)) {
|
|
|
- currSetup = setup;
|
|
|
+ if (flowApproveParam.getApprove() == FlowApprovePassEnum.PASS || flowApproveParam.getApprove() == FlowApprovePassEnum.DRAFT || flowApproveParam.getApprove() == FlowApprovePassEnum.START) {
|
|
|
+ if (Objects.nonNull(flowApproveParam.getSetup())) {
|
|
|
+ currSetup = flowApproveParam.getSetup();
|
|
|
} else {
|
|
|
currSetup = currSetup == setupMap.size() - 1 ? 0 : currSetup + 1;
|
|
|
}
|
|
@@ -266,7 +260,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
nextFlowTaskResult,
|
|
|
currSetup,
|
|
|
setupMap,
|
|
|
- approve);
|
|
|
+ flowApproveParam.getApprove());
|
|
|
|
|
|
this.approvePass(currFlowTaskResult,
|
|
|
setupMap,
|
|
@@ -277,12 +271,12 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
tfFlowLog,
|
|
|
nextFlowTaskResult,
|
|
|
map,
|
|
|
- approve,
|
|
|
- approveRemark);
|
|
|
+ flowApproveParam.getApprove(),
|
|
|
+ flowApproveParam.getApproveRemark());
|
|
|
map.put(SystemConstant.DEFAULT_ASSIGNEE_LIST + nextFlowTaskResult.getSetup(), approveUserIds);
|
|
|
- } else if (approve == FlowApprovePassEnum.REJECT || approve == FlowApprovePassEnum.CANCEL) {
|
|
|
- if (Objects.nonNull(setup)) {
|
|
|
- currSetup = setup;
|
|
|
+ } else if (flowApproveParam.getApprove() == FlowApprovePassEnum.REJECT || flowApproveParam.getApprove() == FlowApprovePassEnum.CANCEL) {
|
|
|
+ if (Objects.nonNull(flowApproveParam.getSetup())) {
|
|
|
+ currSetup = flowApproveParam.getSetup();
|
|
|
} else {
|
|
|
currSetup = currSetup - 1;
|
|
|
}
|
|
@@ -293,7 +287,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
nextFlowTaskResult,
|
|
|
currSetup,
|
|
|
setupMap,
|
|
|
- approve);
|
|
|
+ flowApproveParam.getApprove());
|
|
|
|
|
|
this.approveReject(multiInstance,
|
|
|
map,
|
|
@@ -301,8 +295,8 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
nextFlowTaskResult,
|
|
|
tfFlowApprove,
|
|
|
tfFlowLog,
|
|
|
- approve,
|
|
|
- approveRemark);
|
|
|
+ flowApproveParam.getApprove(),
|
|
|
+ flowApproveParam.getApproveRemark());
|
|
|
}
|
|
|
map.put(SystemConstant.APPROVE, nextFlowTaskResult.getTaskKey());
|
|
|
map.put(SystemConstant.DEFAULT_ASSIGNEE_LIST + nextFlowTaskResult.getSetup(), approveUserIds);
|
|
@@ -311,9 +305,9 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
}
|
|
|
flowResult.setSetupMap(setupMap);
|
|
|
tfCustomFlowEntity.setFlowProcessVar(JacksonUtil.parseJson(flowResult));
|
|
|
- if (approve == FlowApprovePassEnum.START || approve == FlowApprovePassEnum.PASS
|
|
|
- || approve == FlowApprovePassEnum.CANCEL || approve == FlowApprovePassEnum.REJECT) {
|
|
|
- if (approve == FlowApprovePassEnum.CANCEL || approve == FlowApprovePassEnum.REJECT) {
|
|
|
+ if (flowApproveParam.getApprove() == FlowApprovePassEnum.START || flowApproveParam.getApprove() == FlowApprovePassEnum.PASS
|
|
|
+ || flowApproveParam.getApprove() == FlowApprovePassEnum.CANCEL || flowApproveParam.getApprove() == FlowApprovePassEnum.REJECT) {
|
|
|
+ if (flowApproveParam.getApprove() == FlowApprovePassEnum.CANCEL || flowApproveParam.getApprove() == FlowApprovePassEnum.REJECT) {
|
|
|
List<HistoricTaskInstance> historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery()
|
|
|
.processInstanceId(task.getProcessInstanceId()).orderByHistoricTaskInstanceEndTime().desc().list();
|
|
|
if (!CollectionUtils.isEmpty(historicTaskInstanceList)) {
|
|
@@ -337,7 +331,7 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
}
|
|
|
}
|
|
|
taskService.complete(task.getId(), map);
|
|
|
- if (approve == FlowApprovePassEnum.START || approve == FlowApprovePassEnum.PASS) {
|
|
|
+ if (flowApproveParam.getApprove() == FlowApprovePassEnum.START || flowApproveParam.getApprove() == FlowApprovePassEnum.PASS) {
|
|
|
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processFlowId).list();
|
|
|
if (!CollectionUtils.isEmpty(tasks)) {
|
|
|
Set<String> approveIdSet = new LinkedHashSet<>();
|
|
@@ -363,6 +357,8 @@ public class ActivitiServiceImpl implements ActivitiService {
|
|
|
tfCustomFlowEntityService.saveOrUpdate(tfCustomFlowEntity);
|
|
|
tfFlowApproveService.saveOrUpdate(tfFlowApprove);
|
|
|
tfFlowLogService.saveBatch(tfFlowLogList);
|
|
|
+ map.put(SystemConstant.FLOW_APPROVE, tfFlowApprove);
|
|
|
+ map.put(SystemConstant.CUSTOM_FLOW_ENTITY, tfCustomFlowEntity);
|
|
|
} catch (Exception e) {
|
|
|
log.error(SystemConstant.LOG_ERROR, e);
|
|
|
if (e instanceof ApiException) {
|