|
@@ -1,22 +1,23 @@
|
|
|
package com.platform.service.workflow.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.platform.common.bean.AbstractPageResultBean;
|
|
|
import com.platform.common.constant.CommonConstants;
|
|
|
import com.platform.common.exception.DeniedException;
|
|
|
-import com.platform.common.util.BeanConverterUtil;
|
|
|
-import com.platform.common.util.BigDecimalUtil;
|
|
|
-import com.platform.common.util.ListUtils;
|
|
|
-import com.platform.common.util.SecurityUtils;
|
|
|
+import com.platform.common.util.*;
|
|
|
import com.platform.dao.bean.MyPage;
|
|
|
import com.platform.dao.dto.workflow.WorkflowNodeDTO;
|
|
|
import com.platform.dao.dto.workflow.WorkflowTaskBomDTO;
|
|
|
-import com.platform.dao.entity.workflow.WorkflowNode;
|
|
|
+import com.platform.dao.entity.custom.CustomClassName;
|
|
|
+import com.platform.dao.entity.custom.CustomFormData;
|
|
|
import com.platform.dao.entity.workflow.WorkflowTask;
|
|
|
import com.platform.dao.entity.workflow.WorkflowTaskBom;
|
|
|
import com.platform.dao.enums.FlowTaskStatusEnum;
|
|
|
import com.platform.dao.enums.YesNoEnum;
|
|
|
+import com.platform.dao.mapper.custom.CustomClassNameMapper;
|
|
|
+import com.platform.dao.mapper.custom.CustomFormDataMapper;
|
|
|
import com.platform.dao.mapper.workflow.WorkflowNodeMapper;
|
|
|
import com.platform.dao.mapper.workflow.WorkflowTaskBomMapper;
|
|
|
import com.platform.dao.mapper.workflow.WorkflowTaskMapper;
|
|
@@ -33,7 +34,10 @@ import tk.mybatis.mapper.weekend.Weekend;
|
|
|
import tk.mybatis.mapper.weekend.WeekendCriteria;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.lang.reflect.InvocationTargetException;
|
|
|
+import java.lang.reflect.Method;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@@ -51,6 +55,10 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
|
|
|
private WorkflowTaskMapper workflowTaskMapper;
|
|
|
@Autowired
|
|
|
private WorkflowNodeMapper workflowNodeMapper;
|
|
|
+ @Autowired
|
|
|
+ private CustomClassNameMapper customClassNameMapper;
|
|
|
+ @Autowired
|
|
|
+ private CustomFormDataMapper customFormDataMapper;
|
|
|
|
|
|
@Override
|
|
|
public int batchDelete(List<String> ids) {
|
|
@@ -103,6 +111,7 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
|
|
|
public void publishTask(String id) {
|
|
|
WorkflowTaskBom bom = mapper.selectByPrimaryKey(id);
|
|
|
WorkflowTask task = workflowTaskMapper.selectByPrimaryKey(bom.getTaskId());
|
|
|
+ CustomFormData data = customFormDataMapper.selectByPrimaryKey(task.getFormDataId());
|
|
|
// 校验是否处于待发起的状态,bom.status=0 & task.status = 3、5、6
|
|
|
if (bom.getStatus().intValue() != YesNoEnum.NO.getValue()) {
|
|
|
throw new DeniedException("待办事项状态有误,请检查");
|
|
@@ -128,53 +137,147 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
|
|
|
WorkflowTask updTask = new WorkflowTask();
|
|
|
updTask.setId(bom.getTaskId());
|
|
|
updTask.setFlowId(task.getFlowId());
|
|
|
+ updTask.setApplyTime(LocalDateTime.now());
|
|
|
WorkflowTaskBom updBom = new WorkflowTaskBom();
|
|
|
updBom.setId(id);
|
|
|
- generateTaskBom(nodeList,updTask,updBom);
|
|
|
- // 修改已有taskBom
|
|
|
-
|
|
|
- // 修改Task
|
|
|
-
|
|
|
+ WorkflowTaskBom insertBom = generateTaskBom(nodeList,updTask,updBom,data);
|
|
|
+ // 存入bom
|
|
|
+ mapper.insert(insertBom);
|
|
|
+ // 修改老节点
|
|
|
+ mapper.updateByPrimaryKey(updBom);
|
|
|
+ // 修改任务
|
|
|
+ workflowTaskMapper.updateByPrimaryKeySelective(updTask);
|
|
|
}
|
|
|
|
|
|
- private WorkflowTaskBom generateTaskBom(List<WorkflowNodeVO> nodeList,WorkflowTask updTask,WorkflowTaskBom updBom) {
|
|
|
+ /**
|
|
|
+ * 生成新bom初始方法
|
|
|
+ * @param nodeList
|
|
|
+ * @param updTask
|
|
|
+ * @param updBom
|
|
|
+ * @param data
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private WorkflowTaskBom generateTaskBom(List<WorkflowNodeVO> nodeList,WorkflowTask updTask,WorkflowTaskBom updBom,CustomFormData data) {
|
|
|
WorkflowTaskBom bom = null;
|
|
|
- if (nodeList.size() == 1) {
|
|
|
- WorkflowNodeVO node = nodeList.get(0);
|
|
|
- switch (node.getType()) {
|
|
|
- case CommonConstants.CONDITION_TYPE: // 条件分支
|
|
|
- break;
|
|
|
- case CommonConstants.VERIFY_USER_TYPE:
|
|
|
- break;
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (WorkflowNodeVO node : nodeList) {
|
|
|
- switch (node.getType()) {
|
|
|
- case CommonConstants.CONDITION_TYPE:
|
|
|
- break;
|
|
|
- case CommonConstants.VERIFY_USER_TYPE:
|
|
|
- break;
|
|
|
- }
|
|
|
+ for (WorkflowNodeVO nodeVO : nodeList) {
|
|
|
+ bom = generateTaskBom(nodeVO,updTask,updBom,data);
|
|
|
+ if (bom != null) {
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
return bom;
|
|
|
}
|
|
|
|
|
|
- private WorkflowTaskBom generateTaskBom(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom){
|
|
|
+ /**
|
|
|
+ * 具体处理分支方法
|
|
|
+ * @param node
|
|
|
+ * @param updTask
|
|
|
+ * @param updBom
|
|
|
+ * @param data
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private WorkflowTaskBom generateTaskBom(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom,CustomFormData data){
|
|
|
WorkflowTaskBom bom = null;
|
|
|
switch (node.getType()) {
|
|
|
case CommonConstants.CONDITION_TYPE: // 条件分支
|
|
|
JSONObject switchJson = JSONObject.parseObject(node.getSwitchJson());
|
|
|
- int symbol = switchJson.getInteger("symbol"); // 比较符号
|
|
|
+ int symbol = switchJson.getInteger("symbol"); // 比较符号 > = < 等
|
|
|
BigDecimal val = BigDecimalUtil.valueNull(switchJson.getString("value")); // 比较值
|
|
|
+ String fieldName = switchJson.getString("fieldName");
|
|
|
+ // 获取主键ID值
|
|
|
+ String primaryKey = getPrimaryKey(data.getJsonString(),fieldName);
|
|
|
+ // 获取表单关联关系
|
|
|
+ if(StringUtils.isBlank(node.getSwitchHandleId())){
|
|
|
+ throw new DeniedException("分支条件处理class流程未配置");
|
|
|
+ }
|
|
|
+ CustomClassName className = customClassNameMapper.selectByPrimaryKey(node.getSwitchHandleId());
|
|
|
+ Object obj = BeanUtils.getBean(className.getHandleCode());
|
|
|
+ Class cla = obj.getClass();
|
|
|
+ Boolean findFlag = Boolean.FALSE; // 符合分支条件
|
|
|
+ try{
|
|
|
+ Method method = cla.getMethod("");
|
|
|
+ findFlag = (Boolean)method.invoke(obj,primaryKey,val,symbol);
|
|
|
+ }catch (NoSuchMethodException e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }catch (IllegalAccessException e2){
|
|
|
+ e2.printStackTrace();
|
|
|
+ }catch (InvocationTargetException e3){
|
|
|
+ e3.printStackTrace();
|
|
|
+ }
|
|
|
+ if(findFlag){
|
|
|
+ // 获取下一个节点,封装审批人
|
|
|
+ int nodeSort = node.getNodeLevel();
|
|
|
+ nodeSort++;
|
|
|
+ WorkflowNodeDTO nextNode = new WorkflowNodeDTO();
|
|
|
+ nextNode.setNodeLevel(nodeSort);
|
|
|
+ nextNode.setFlowId(data.getFlowId());
|
|
|
+ nextNode.setFrontParentId(node.getFrontId());
|
|
|
+ List<WorkflowNodeVO> nodeList = workflowNodeMapper.selectNodeList(nextNode);
|
|
|
+ bom = getBomByNode(nodeList.get(0),updTask,updBom);
|
|
|
+ }
|
|
|
// 获取分支
|
|
|
break;
|
|
|
case CommonConstants.VERIFY_USER_TYPE: // 审核人处理
|
|
|
+ bom = getBomByNode(node,updTask,updBom);
|
|
|
break;
|
|
|
}
|
|
|
return bom;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据node获取bom具体方法
|
|
|
+ * @param node
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private WorkflowTaskBom getBomByNode(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom){
|
|
|
+ WorkflowTaskBom bom = new WorkflowTaskBom();
|
|
|
+ bom.setId(IdGeneratorUtils.getObjectId());
|
|
|
+ bom.setTaskId(updTask.getId());
|
|
|
+ bom.setStatus(YesNoEnum.NO.getValue());
|
|
|
+ bom.setPersonalType(YesNoEnum.YES.getValue() + 1);
|
|
|
+ bom.setCreatedUserName(node.getUserName());
|
|
|
+ bom.setCreatedUserId(node.getUserId());
|
|
|
+ bom.setCreatedTime(LocalDateTime.now());
|
|
|
+ bom.setReadFlag(YesNoEnum.NO.getValue());
|
|
|
+ bom.setReminderNum(YesNoEnum.NO.getValue());
|
|
|
+ // 修改已有taskBom
|
|
|
+ updBom.setStatus(YesNoEnum.YES.getValue());
|
|
|
+ updBom.setHandleRemark("发起审批流程");
|
|
|
+ updBom.setHandleTime(LocalDateTime.now());
|
|
|
+ // 修改Task
|
|
|
+ updTask.setStatus(FlowTaskStatusEnum.VERIFYING.getValue());
|
|
|
+ updTask.setNodeSort(node.getNodeLevel());
|
|
|
+ updTask.setFrontId(node.getFrontId());
|
|
|
+ updTask.setLastTime(LocalDateTime.now());
|
|
|
+ updTask.setLastUserName(SecurityUtils.getUserInfo().getRealName());
|
|
|
+ updTask.setLastUserId(SecurityUtils.getUserInfo().getUserId());
|
|
|
+ updTask.setCurrentUserId(node.getUserId());
|
|
|
+ updTask.setCurrentUserName(node.getUserName());
|
|
|
+ updTask.setRemark("待" + node.getUserName() + "处理");
|
|
|
+ return bom;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检索表单数据中的主键值
|
|
|
+ * @param json
|
|
|
+ * @param fieldName
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getPrimaryKey(String json,String fieldName){
|
|
|
+ String id = "";
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(json);
|
|
|
+ String components = jsonObject.getString("components");
|
|
|
+ JSONArray array = JSONArray.parseArray(components);
|
|
|
+ for (int i = 0; i < array.size(); i++) {
|
|
|
+ JSONObject jsonItem = array.getJSONObject(i);
|
|
|
+ if(jsonItem.getString("fieldName").equals(fieldName)){
|
|
|
+ id = jsonItem.getString("id");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return id;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public AbstractPageResultBean<WorkflowTaskBom> selectPageInfo(WorkflowTaskBomDTO record, int pageNum, int pageSize) {
|
|
|
PageHelper.startPage(pageNum, pageSize);
|