hfxc226 2 år sedan
förälder
incheckning
ad6f41f4e6
15 ändrade filer med 290 tillägg och 113 borttagningar
  1. 20 13
      platform-activiti/src/main/java/com/platform/activiti/controller/ActivitiController.java
  2. 43 0
      platform-activiti/src/main/java/com/platform/activiti/dao/entity/ActAuditRequest.java
  3. 1 1
      platform-dao/src/main/java/com/platform/dao/enums/ActivitiUserModelTypeEnum.java
  4. 1 1
      platform-dao/src/main/resources/mapper/sb/SbScrapFormMapper.xml
  5. 27 19
      platform-rest/src/main/java/com/platform/rest/controller/activiti/SbScrapActivitiController.java
  6. 12 0
      platform-service/src/main/java/com/platform/service/activiti/ActivitiAssignStrategy.java
  7. 3 0
      platform-service/src/main/java/com/platform/service/activiti/ActivitiUserModelService.java
  8. 25 12
      platform-service/src/main/java/com/platform/service/activiti/impl/ActivitiUserModelServiceImpl.java
  9. 25 13
      platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyRole.java
  10. 6 0
      platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyStartUser.java
  11. 27 13
      platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyStartUserDeptRole.java
  12. 6 0
      platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyUser.java
  13. 74 39
      platform-service/src/main/java/com/platform/service/business/SbScrapActivitiBusinessService.java
  14. 8 1
      platform-service/src/main/java/com/platform/service/sb/SbScrapFormService.java
  15. 12 1
      platform-service/src/main/java/com/platform/service/sb/impl/SbScrapFormServiceImpl.java

+ 20 - 13
platform-activiti/src/main/java/com/platform/activiti/controller/ActivitiController.java

@@ -493,19 +493,26 @@ public class ActivitiController {
         for (int i = startRow; i < endRow; i++) {
             HistoricTaskInstance task = taskList.get(i);
             String taskId = task.getId();
-            map = taskService.getVariables(taskId);
-            ActApplyInfo applyInfo = (ActApplyInfo) map.get("data");
-            if(applyInfo == null){
-                applyInfo = new ActApplyInfo();
-            }
-            applyInfo.setProcessInstanceId(task.getProcessInstanceId());
-            applyInfo.setTaskId(task.getId());
-
-            /**如果是自己*/
-            if (userId.equals(applyInfo.getUserId())) {
-                applyInfo.setSelf(true);
+            List<HistoricVariableInstance> historicVars = historyService.createHistoricVariableInstanceQuery().processInstanceId(task.getProcessInstanceId()).list();
+            List<HistoricDetail> list = historyService.createHistoricDetailQuery().
+                    processInstanceId(task.getProcessInstanceId()).orderByTime().desc().list();
+            if (CollectionUtil.isNotEmpty(list)) {
+                for(HistoricDetail historicDetail: list){
+                    HistoricVariableUpdate variable = (HistoricVariableUpdate) historicDetail;
+                    String variableName = variable.getVariableName();
+                    if ("data".equals(variableName)) {
+                        ActApplyInfo applyInfo = (ActApplyInfo)variable.getValue();
+                        log.info(applyInfo.toString());
+                        applyInfo.setProcessInstanceId(task.getProcessInstanceId());
+                        applyInfo.setTaskId(task.getId());
+                        /**如果是自己*/
+                        if (userId.equals(applyInfo.getUserId())) {
+                            applyInfo.setSelf(true);
+                        }
+                        tasks.add(applyInfo);
+                    }
+                }
             }
-            tasks.add(applyInfo);
         }
         MyPage<ActApplyInfo> page = new MyPage<>(tasks);
         page.setTotal(total);
@@ -524,7 +531,7 @@ public class ActivitiController {
     }
 
     /**
-     * 根据 执行对象id获取审批信息
+     * 根据 执行对象id获取审批历史信息:保存到map的每次审批信息记录
      *
      * @param processInstanceId
      * @return

+ 43 - 0
platform-activiti/src/main/java/com/platform/activiti/dao/entity/ActAuditRequest.java

@@ -0,0 +1,43 @@
+package com.platform.activiti.dao.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Description 审批信息
+ * @Author chenyuehu
+ * @Date 2020/2/6
+ * @Version Copyright (c) 2019,安徽阡陌网络科技有限公司 All rights reserved.
+ */
+@Data
+public class ActAuditRequest implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 审批目标ID:表单的单号id,或者设备的id。方便得task列表点击进行判定,跳转到不同表单
+     */
+    private String id;
+    /**
+     * 审批任务id
+     */
+    private String taskId;
+    /**
+     * 是否同意:0不同意,1同意
+     */
+    private Boolean auditFlag;
+    /**
+     * 审批内容
+     */
+    private String refuseReason;
+    /**
+     * 实例ID
+     */
+    private String processInstanceId;
+
+    /**
+     * 转签审批人
+     */
+    private String changeUser;
+}

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/enums/ActivitiUserModelTypeEnum.java

@@ -29,7 +29,7 @@ public enum ActivitiUserModelTypeEnum {
      */
     START_USER_DEPT_ROLE(4),
     /**
-     * 发起人部门,下面的单些角色:
+     * 发起人部门,下面的多个角色:
      */
     START_USER_DEPT_ROLES(5),
     /**

+ 1 - 1
platform-dao/src/main/resources/mapper/sb/SbScrapFormMapper.xml

@@ -104,7 +104,7 @@ scraps.process_instance_id,
     <select id="selectList" parameterType="com.platform.dao.dto.sb.SbScrapFormDTO"
             resultType="com.platform.dao.vo.query.sb.SbScrapFormVO">
         select scraps.*
-        ,t1.name as sbName, t1.no as sbNo, t1.ggxh as sbGgxh,t1.initial_value, t1.current_value, t1.start_date, t1.work_year
+        ,t1.name as sbName, t1.no as sbNo, t1.initial_value, t1.current_value, t1.start_date, t1.work_year
         from t_sb_scrap_form as scraps
         join t_sb_info t1 on scraps.sb_id = t1.id
         <where>

+ 27 - 19
platform-rest/src/main/java/com/platform/rest/controller/activiti/SbScrapActivitiController.java

@@ -1,5 +1,6 @@
 package com.platform.rest.controller.activiti;
 
+import com.platform.activiti.dao.entity.ActAuditRequest;
 import com.platform.common.util.R;
 import com.platform.dao.dto.sb.SbScrapFormDTO;
 import com.platform.rest.log.annotation.SysLog;
@@ -25,59 +26,66 @@ public class SbScrapActivitiController {
 
     /**
      * 启动:将设备id和表单id设置到businessKey中
-     * @param sbScrapDTO 设备基础信息DTO
+     * @param actAuditRequest 设备基础信息DTO
      * @return R
      */
     @SysLog("设备报废提交审批")
     @PutMapping("/start")
-    public R start(@RequestBody SbScrapFormDTO sbScrapDTO) {
-        ProcessInstance instance = sbScrapActivitiBusinessService.start(sbScrapDTO);
+    public R start(@RequestBody ActAuditRequest actAuditRequest) {
+        sbScrapActivitiBusinessService.start(actAuditRequest);
         return new R<>("设备报废申请已提交");
     }
 
     /**
      * 审核
-     *
-     * @param sbScrapDTO:不包括processInstanceId,
+     * @param actAuditRequest:不包括processInstanceId,
      * @return R
      */
     @SysLog("设备报废审核")
     @PutMapping("/audit")
-    public R audit(@RequestBody SbScrapFormDTO sbScrapDTO) {
-        boolean flag = sbScrapActivitiBusinessService.audit(sbScrapDTO);
-
+    public R audit(@RequestBody ActAuditRequest actAuditRequest) {
+        sbScrapActivitiBusinessService.audit(actAuditRequest);
         return new R<>();
     }
 
     /**
-     * 审核
-     *
-     * @param sbScrapDTO
+     * 终止
+     * @param actAuditRequest
      * @return R
      */
     @SysLog("设备报废终止审核")
     @PutMapping("/stop")
-    public R stop(@RequestBody SbScrapFormDTO sbScrapDTO) {
-        sbScrapActivitiBusinessService.stop(sbScrapDTO);
+    public R stop(@RequestBody ActAuditRequest actAuditRequest) {
+        sbScrapActivitiBusinessService.stop(actAuditRequest);
         return new R<>();
     }
 
+    /**
+     * 签收
+     * @param actAuditRequest
+     * @return R
+     */
+    @SysLog("设备报废转签")
+    @PutMapping("/claim")
+    public R claim(@RequestBody ActAuditRequest actAuditRequest) {
+        sbScrapActivitiBusinessService.claim(actAuditRequest);
+        return new R<>("已签收,请办理");
+    }
+
     /**
      * 转签
-     *
-     * @param sbScrapDTO
+     * @param actAuditRequest
      * @return R
      */
     @SysLog("设备报废转签")
     @PutMapping("/assign")
-    public R assign(@RequestBody SbScrapFormDTO sbScrapDTO) {
-        sbScrapActivitiBusinessService.assign(sbScrapDTO);
-        return new R<>();
+    public R assign(@RequestBody ActAuditRequest actAuditRequest) {
+        sbScrapActivitiBusinessService.assign(actAuditRequest);
+        return new R<>("已转签");
     }
 
     /**
      * 审核历史
-     *
      * @param processInstanceId
      * @return R
      */

+ 12 - 0
platform-service/src/main/java/com/platform/service/activiti/ActivitiAssignStrategy.java

@@ -1,12 +1,15 @@
 package com.platform.service.activiti;
 
 import com.platform.dao.entity.activiti.ActivitiUserModel;
+import org.activiti.engine.task.Task;
 import org.dom4j.Element;
 
 import java.io.Serializable;
 
 /**
  * 工作流审批模式处理类
+ *  提供两种模式
+ *  1:修改xml文件,直接在xml文件中设置审批人和候选用户
  * @param <T>
  */
 public interface ActivitiAssignStrategy<T extends Serializable> {
@@ -27,4 +30,13 @@ public interface ActivitiAssignStrategy<T extends Serializable> {
      */
     void handleAssign(Element element, String userId, ActivitiUserModel activitiUserModel);
 
+    /**
+     * 获取审批内容
+     * @param task
+     * @param userId 发起人id,用于根据发起人部门筛选角色等人员。如果部根据发起人,可以为空
+     * @param activitiUserModel 请求参数,根据请求参数进行设置
+     * @return
+     */
+    void handleAssign(Task task, String userId, ActivitiUserModel activitiUserModel);
+
 }

+ 3 - 0
platform-service/src/main/java/com/platform/service/activiti/ActivitiUserModelService.java

@@ -5,6 +5,7 @@ import com.platform.dao.dto.activiti.ActivitiUserModelDTO;
 import com.platform.dao.entity.activiti.ActivitiUserModel;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.service.base.IBaseService;
+import org.activiti.engine.task.Task;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -44,4 +45,6 @@ public interface ActivitiUserModelService extends IBaseService<ActivitiUserModel
 
     void modify(String modeId, String userId, List<ActivitiUserModel> list);
 
+    @Transactional(rollbackFor = Exception.class)
+    void modifyTaskAssign(String modeId, String userId, Task task, List<ActivitiUserModel> list);
 }

+ 25 - 12
platform-service/src/main/java/com/platform/service/activiti/impl/ActivitiUserModelServiceImpl.java

@@ -17,6 +17,7 @@ import org.activiti.engine.ProcessEngineConfiguration;
 import org.activiti.engine.RepositoryService;
 import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
 import org.activiti.engine.repository.Model;
+import org.activiti.engine.task.Task;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
@@ -164,6 +165,7 @@ public class ActivitiUserModelServiceImpl extends BaseServiceImpl<ActivitiUserMo
 
     /**
      * 修改审批节点:
+     * 更新xml文件
      *
      * @param modeId
      * @param userId,发起人信息,为了设置
@@ -191,18 +193,6 @@ public class ActivitiUserModelServiceImpl extends BaseServiceImpl<ActivitiUserMo
                 ActivitiUserModel userTaskModel =
                         list.stream().filter(u -> u.getId().equals(id)).collect(Collectors.toList()).get(0);
                 Integer type = userTaskModel.getType();
-            /*Attribute assignee = element.attribute("assignee");
-            if (assignee != null) {
-                element.remove(assignee);
-            }
-            Attribute candidateUsers = element.attribute("candidateUsers");
-            if (candidateUsers != null) {
-                element.remove(candidateUsers);
-            }
-            Attribute candidateGroups = element.attribute("candidateGroups");
-            if (candidateGroups != null) {
-                element.remove(candidateGroups);
-            }*/
                 ActivitiAssignStrategy activitiAssignStrategy =
                         activitiAssignStrategyList.stream().filter(strategy -> strategy.getType().equals(type)).collect(Collectors.toList()).get(0);
                 activitiAssignStrategy.handleAssign(element, userId, userTaskModel);
@@ -247,4 +237,27 @@ public class ActivitiUserModelServiceImpl extends BaseServiceImpl<ActivitiUserMo
             e.printStackTrace();
         }
     }
+
+    /**
+     * 修改审批节点:每次审批后,包括第一次提交,来更新下一次任务的审批人信息。不能更新xml。更新xml只适合部根据发起人所属部门的情况
+     * 每次上一个节点审批后,设置下一个审批人员信息,并记录到task的变量里面
+     *
+     * @param modeId
+     * @param userId,发起人信息,为了设置
+     * @param list
+     * @throws Exception
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void modifyTaskAssign(String modeId, String userId, Task task, List<ActivitiUserModel> list) {
+        Model model = repositoryService.getModel(modeId);
+        ActivitiUserModel userTaskModel =
+                list.stream().filter(u -> u.getId().equals(task.getTaskDefinitionKey())).collect(Collectors.toList()).get(0);
+        Integer type = userTaskModel.getType();
+        ActivitiAssignStrategy activitiAssignStrategy =
+                activitiAssignStrategyList.stream().filter(strategy -> strategy.getType().equals(type)).collect(Collectors.toList()).get(0);
+        activitiAssignStrategy.handleAssign(task, userId, userTaskModel);
+        userTaskModel.setDeploymentId(model.getDeploymentId());
+        mapper.updateBatch(list);
+    }
 }

+ 25 - 13
platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyRole.java

@@ -11,6 +11,8 @@ import com.platform.service.upms.SysRoleService;
 import com.platform.service.upms.SysUserService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
 import org.apache.commons.lang.StringUtils;
 import org.dom4j.Attribute;
 import org.dom4j.Element;
@@ -31,6 +33,7 @@ public class ActivitiAssignStrategyRole implements ActivitiAssignStrategy<String
 
     private final SysUserService sysUserService;
     private final SysRoleService sysRoleService;
+    private final TaskService taskService;
     /**
      * @see ActivitiUserModelTypeEnum
      * @return 策略能处理的类型
@@ -42,24 +45,12 @@ public class ActivitiAssignStrategyRole implements ActivitiAssignStrategy<String
 
     @Override
     public void handleAssign(Element element, String userId, ActivitiUserModel activitiUserModel) {
-        String roleId = activitiUserModel.getRoleId();
-        SysUserDTO sysUserDTO = new SysUserDTO();
-        sysUserDTO.setRoleIds(Arrays.asList(roleId));
-        List<SysUserVO> sysUserVOList = sysUserService.getDeptChildrenRoleUser(sysUserDTO);
-        if(CollectionUtils.isEmpty(sysUserVOList)){
-            SysRoleVO sysRoleVO = sysRoleService.selectRoleVOByRoleId(roleId);
-            if(sysRoleVO == null){
-                throw new BusinessException("查询不到角色,请先设置,角色名称:" + sysRoleVO.getRoleName());
-            }
-            throw new BusinessException("查询不到角色对应人员,请先设置,角色名称:" + sysRoleVO.getRoleName());
-        }
         Attribute candidateUsers = element.attribute("candidateUsers");
         if (candidateUsers != null) {
             log.info(candidateUsers.getValue());
             element.remove(candidateUsers);
         }
-        List<String> ids = sysUserVOList.stream().map(SysUserVO::getUserId).collect(Collectors.toList());
-        element.addAttribute("activiti:candidateUsers", StringUtils.join(ids, ","));
+        element.addAttribute("activiti:candidateUsers", getIds(activitiUserModel));
 
         // 指定角色的,就不会指定人员,需要清除
         Attribute assignee = element.attribute("assignee");
@@ -68,4 +59,25 @@ public class ActivitiAssignStrategyRole implements ActivitiAssignStrategy<String
             element.remove(assignee);
         }
     }
+
+    @Override
+    public void handleAssign(Task task, String userId, ActivitiUserModel activitiUserModel) {
+        taskService.addCandidateUser(task.getId(), getIds(activitiUserModel));
+    }
+
+    public String getIds(ActivitiUserModel activitiUserModel){
+        String roleId = activitiUserModel.getRoleId();
+        SysUserDTO sysUserDTO = new SysUserDTO();
+        sysUserDTO.setRoleIds(Arrays.asList(roleId));
+        List<SysUserVO> sysUserVOList = sysUserService.getDeptChildrenRoleUser(sysUserDTO);
+        if(CollectionUtils.isEmpty(sysUserVOList)){
+            SysRoleVO sysRoleVO = sysRoleService.selectRoleVOByRoleId(roleId);
+            if(sysRoleVO == null){
+                throw new BusinessException("查询不到角色,请先设置,角色名称:" + sysRoleVO.getRoleName());
+            }
+            throw new BusinessException("查询不到角色对应人员,请先设置,角色名称:" + sysRoleVO.getRoleName());
+        }
+        List<String> ids = sysUserVOList.stream().map(SysUserVO::getUserId).collect(Collectors.toList());
+        return StringUtils.join(ids, ",");
+    }
 }

+ 6 - 0
platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyStartUser.java

@@ -11,6 +11,7 @@ import com.platform.service.upms.SysRoleService;
 import com.platform.service.upms.SysUserService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.activiti.engine.task.Task;
 import org.apache.commons.lang.StringUtils;
 import org.dom4j.Attribute;
 import org.dom4j.Element;
@@ -53,4 +54,9 @@ public class ActivitiAssignStrategyStartUser implements ActivitiAssignStrategy<S
             element.remove(candidateUsers);
         }
     }
+
+    @Override
+    public void handleAssign(Task task, String userId, ActivitiUserModel activitiUserModel) {
+        task.setAssignee(userId);
+    }
 }

+ 27 - 13
platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyStartUserDeptRole.java

@@ -13,6 +13,8 @@ import com.platform.service.upms.SysUserDeptService;
 import com.platform.service.upms.SysUserService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.task.Task;
 import org.apache.commons.lang.StringUtils;
 import org.dom4j.Attribute;
 import org.dom4j.Element;
@@ -34,6 +36,8 @@ public class ActivitiAssignStrategyStartUserDeptRole implements ActivitiAssignSt
     private final SysUserService sysUserService;
     private final SysRoleService sysRoleService;
     private final SysUserDeptService sysUserDeptService;
+    private final TaskService taskService;
+
     /**
      * @see ActivitiUserModelTypeEnum
      * @return 策略能处理的类型
@@ -45,6 +49,28 @@ public class ActivitiAssignStrategyStartUserDeptRole implements ActivitiAssignSt
 
     @Override
     public void handleAssign(Element element, String userId, ActivitiUserModel activitiUserModel) {
+
+        Attribute candidateUsers = element.attribute("candidateUsers");
+        if (candidateUsers != null) {
+            log.info(candidateUsers.getValue());
+            element.remove(candidateUsers);
+        }
+        element.addAttribute("activiti:candidateUsers", getIds(userId, activitiUserModel));
+
+        // 指定角色的,就不会指定人员,需要清除
+        Attribute assignee = element.attribute("assignee");
+        if (assignee != null) {
+            log.info(assignee.getValue());
+            element.remove(assignee);
+        }
+    }
+
+    @Override
+    public void handleAssign(Task task, String userId, ActivitiUserModel activitiUserModel) {
+        taskService.addCandidateUser(task.getId(), getIds(userId, activitiUserModel));
+    }
+
+    public String getIds(String userId, ActivitiUserModel activitiUserModel){
         String roleId = activitiUserModel.getRoleId();
         SysUserDTO sysUserDTO = new SysUserDTO();
         sysUserDTO.setRoleIds(Arrays.asList(roleId));
@@ -59,19 +85,7 @@ public class ActivitiAssignStrategyStartUserDeptRole implements ActivitiAssignSt
             }
             throw new BusinessException("查询不到角色对应人员,请先设置,角色名称:" + sysRoleVO.getRoleName());
         }
-        Attribute candidateUsers = element.attribute("candidateUsers");
-        if (candidateUsers != null) {
-            log.info(candidateUsers.getValue());
-            element.remove(candidateUsers);
-        }
         List<String> ids = sysUserVOList.stream().map(SysUserVO::getUserId).collect(Collectors.toList());
-        element.addAttribute("activiti:candidateUsers", StringUtils.join(ids, ","));
-
-        // 指定角色的,就不会指定人员,需要清除
-        Attribute assignee = element.attribute("assignee");
-        if (assignee != null) {
-            log.info(assignee.getValue());
-            element.remove(assignee);
-        }
+        return StringUtils.join(ids, ",");
     }
 }

+ 6 - 0
platform-service/src/main/java/com/platform/service/activiti/strategy/ActivitiAssignStrategyUser.java

@@ -5,6 +5,7 @@ import com.platform.dao.enums.ActivitiUserModelTypeEnum;
 import com.platform.service.activiti.ActivitiAssignStrategy;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.activiti.engine.task.Task;
 import org.dom4j.Attribute;
 import org.dom4j.Element;
 import org.springframework.stereotype.Service;
@@ -40,4 +41,9 @@ public class ActivitiAssignStrategyUser implements ActivitiAssignStrategy<String
             element.remove(candidateUsers);
         }
     }
+
+    @Override
+    public void handleAssign(Task task, String userId, ActivitiUserModel activitiUserModel) {
+        task.setAssignee(activitiUserModel.getAssignee());
+    }
 }

+ 74 - 39
platform-service/src/main/java/com/platform/service/business/SbScrapActivitiBusinessService.java

@@ -3,14 +3,13 @@ package com.platform.service.business;
 import cn.hutool.core.collection.CollectionUtil;
 import com.platform.activiti.dao.entity.ActApplyInfo;
 import com.platform.activiti.dao.entity.ActAuditRecord;
+import com.platform.activiti.dao.entity.ActAuditRequest;
 import com.platform.activiti.enums.ActApplyEnum;
 import com.platform.common.constant.CommonConstants;
 import com.platform.common.enums.ResultCode;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.model.UserInfo;
 import com.platform.common.util.SecurityUtils;
-import com.platform.dao.dto.sb.SbScrapFormDTO;
-import com.platform.dao.dto.sb.SbScrapFormDTO;
 import com.platform.dao.entity.activiti.ActivitiUserModel;
 import com.platform.dao.entity.upms.SysUser;
 import com.platform.service.activiti.ActivitiUserModelService;
@@ -59,19 +58,13 @@ public class SbScrapActivitiBusinessService {
      * 然后在提交审批,保存数据
      * 审批设置对象:ActApplyInfo
      *
-     * @param sbScrapFormDTO
+     * @param actAuditRequest
      */
     @Transactional(rollbackFor = Exception.class)
-    public ProcessInstance start(SbScrapFormDTO sbScrapFormDTO) {
+    public void start(ActAuditRequest actAuditRequest) {
         UserInfo user = SecurityUtils.getUserInfo();
-
-        // 设置各个节点审批人员信息
-        Model model = repositoryService.createModelQuery().modelKey(ActApplyEnum.SB_INFO_SCRAP.getKey()).singleResult();
-        List<ActivitiUserModel> list = activitiUserModelService.getModelByModelId(model.getId());
-        activitiUserModelService.modify(model.getId(), user.getUserId(), list);
-
         // 设置发起对象,保存到流程实例中
-        ActApplyInfo applyInfo = new ActApplyInfo(sbScrapFormDTO.getId(),
+        ActApplyInfo applyInfo = new ActApplyInfo(actAuditRequest.getId(),
                 ActApplyEnum.SB_INFO_SCRAP.getName(), ActApplyEnum.SB_INFO_SCRAP.getKey(),
                 0,
                 LocalDateTime.now());
@@ -84,47 +77,57 @@ public class SbScrapActivitiBusinessService {
         // 设置流程启动人信息,为了后面查询我的发起列表
         identityService.setAuthenticatedUserId(user.getUserId());
         ProcessInstance instance = null;
-        if (StringUtils.isBlank(sbScrapFormDTO.getProcessInstanceId())) {
-            instance = runtimeService.startProcessInstanceByKey(ActApplyEnum.SB_INFO_SCRAP.getKey(), sbScrapFormDTO.getId(), map);
+        if (StringUtils.isBlank(actAuditRequest.getProcessInstanceId())) {
+            instance = runtimeService.startProcessInstanceByKey(ActApplyEnum.SB_INFO_SCRAP.getKey(), actAuditRequest.getId(), map);
         } else { // 再次提交审批的,之前被拒绝的
-            instance = runtimeService.startProcessInstanceById(sbScrapFormDTO.getProcessInstanceId(), sbScrapFormDTO.getId(), map);
+            instance = runtimeService.startProcessInstanceById(actAuditRequest.getProcessInstanceId(), actAuditRequest.getId(), map);
         }
         if (instance == null) {
             throw new BusinessException(ResultCode.ACTIVITI_PROCESS_NOT_EXIST.getDescription());
         }
 
-        // 第一个审批人为发起人,自动审批。
+        // 第一个审批人为发起人,自动审批。
         // 设置审批对象,保存到task实例中,每次审核都要更新追加这个对象
         Task task = taskService.createTaskQuery().processInstanceId(instance.getId()).orderByTaskCreateTime().desc().singleResult();
-        task.setAssignee(user.getUserId());
-        taskService.saveTask(task);
+
         List<ActAuditRecord> records = new ArrayList<>();
         records.add(new ActAuditRecord(user.getUserId(), user.getRealName(), "提交",
                 LocalDateTime.now(), true, task.getId(), task.getName()));
         Map<String, Object> data = new HashMap<>();
         data.put(CommonConstants.ACT_AUDIT_RECORD, records);
         data.put("result", 1);
-        taskService.addComment(task.getId(), sbScrapFormDTO.getProcessInstanceId(), "提交");
-        taskService.complete(task.getId(), map);
+        task.setAssignee(user.getUserId());
+        taskService.addComment(task.getId(), actAuditRequest.getProcessInstanceId(), "提交");
+        taskService.complete(task.getId(), data);
 
-        sbScrapFormService.updateByActivitiStart(instance.getId(), sbScrapFormDTO.getId());
-        return instance;
+        // 分配下一个节点的审批人信息
+        // 设置各个节点审批人员信息
+        Model model = repositoryService.createModelQuery().modelKey(ActApplyEnum.SB_INFO_SCRAP.getKey()).singleResult();
+        List<ActivitiUserModel> list = activitiUserModelService.getModelByModelId(model.getId());
+        if(CollectionUtil.isEmpty(list)){
+            throw new BusinessException("审批节点未设置,请先设置");
+        }
+        Task nextTask = taskService.createTaskQuery().processInstanceId(instance.getId()).orderByTaskCreateTime().desc().singleResult();
+        activitiUserModelService.modifyTaskAssign(model.getId(), user.getUserId(),nextTask, list);
+
+        // 更新业务数据
+        sbScrapFormService.updateByActivitiStart(instance.getId(), actAuditRequest.getId());
     }
 
     /**
      * 审批,第一个审批人为发起人,自动审批。
      * 审批设置对象:ActApplyInfo
      *
-     * @param sbScrapFormDTO
+     * @param actAuditRequest
      */
     @Transactional(rollbackFor = Exception.class)
-    public boolean audit(SbScrapFormDTO sbScrapFormDTO) {
+    public void audit(ActAuditRequest actAuditRequest) {
         UserInfo user = SecurityUtils.getUserInfo();
         // 设置发起对象,保存到流程实例中
-        String taskId = sbScrapFormDTO.getTaskId();
+        String taskId = actAuditRequest.getTaskId();
         Map<String, Object> map = new HashMap<>();
         Integer result = 0;
-        if (sbScrapFormDTO.getAuditFlag()) {
+        if (actAuditRequest.getAuditFlag()) {
             result = 1;// 同意
         } else {
             result = 0;// 拒绝
@@ -137,44 +140,76 @@ public class SbScrapActivitiBusinessService {
         if (o != null) {
             records = (List<ActAuditRecord>) o;
         }
-        boolean flag = result == 0 ? false : true;
-        records.add(0, new ActAuditRecord(user.getUserId(), user.getRealName(), sbScrapFormDTO.getRefuseReason(),
+
+        records.add(0, new ActAuditRecord(user.getUserId(), user.getRealName(), actAuditRequest.getRefuseReason(),
                 LocalDateTime.now(), result == 0 ? false : true, taskId, task.getName()));
         map.put(CommonConstants.ACT_AUDIT_RECORD, records);
-        taskService.addComment(taskId, sbScrapFormDTO.getProcessInstanceId(), sbScrapFormDTO.getRefuseReason());
+        taskService.addComment(taskId, actAuditRequest.getProcessInstanceId(), actAuditRequest.getRefuseReason());
         taskService.complete(taskId, map);
 
-        // 更新结果
-        sbScrapFormService.updateByActivitiFinish(sbScrapFormDTO.getId(), flag);
-        return flag;
+        // 审批拒绝,则不用判断是否结束。审批同意则要判断是否流程结束,结束则更新报废单状态和设备状态
+        boolean flag = result == 0 ? false : true;
+        if(flag){
+            flag = checkFinish(actAuditRequest.getProcessInstanceId());
+            // 审批通过,且不是最后一个节点,分配下一个节点
+            if(!flag){
+                // 分配下一个节点的审批人信息
+                Model model = repositoryService.createModelQuery().modelKey(ActApplyEnum.SB_INFO_SCRAP.getKey()).singleResult();
+                List<ActivitiUserModel> list = activitiUserModelService.getModelByModelId(model.getId());
+                if(CollectionUtil.isEmpty(list)){
+                    throw new BusinessException("审批节点未设置,请先设置");
+                }
+                Task nextTask = taskService.createTaskQuery().processInstanceId(task.getProcessInstanceId()).orderByTaskCreateTime().desc().singleResult();
+                activitiUserModelService.modifyTaskAssign(model.getId(), user.getUserId(),nextTask, list);
+            }
+        }
+
+        // 更新状态
+        sbScrapFormService.updateByActivitiFinish(actAuditRequest.getId(), flag);
     }
 
     /**
      * 终止审核
      * 审批设置对象:ActApplyInfo
      *
-     * @param sbScrapFormDTO
+     * @param actAuditRequest
      */
     @Transactional(rollbackFor = Exception.class)
-    public void stop(SbScrapFormDTO sbScrapFormDTO) {
-        String processInstanceId = sbScrapFormDTO.getProcessInstanceId();
+    public void stop(ActAuditRequest actAuditRequest) {
+        String processInstanceId = actAuditRequest.getProcessInstanceId();
         if (StringUtils.isNotEmpty(processInstanceId)) {
             runtimeService.deleteProcessInstance(processInstanceId, "");
             historyService.deleteHistoricProcessInstance(processInstanceId);
         }
-        sbScrapFormService.updateByActivitiStop(processInstanceId, sbScrapFormDTO.getId());
+        sbScrapFormService.updateByActivitiStop(processInstanceId, actAuditRequest.getId());
+    }
+
+    /**
+     * 签收
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void claim(ActAuditRequest actAuditRequest) {
+        String taskId = actAuditRequest.getTaskId();
+        String userId = SecurityUtils.getUserInfo().getUserId();
+        if (StringUtils.isEmpty(taskId)) {
+            throw new BusinessException("taskId为空,请选择");
+        }
+        taskService.setAssignee(taskId, userId);
     }
 
     /**
      * 转签
      * 审批设置对象:ActApplyInfo
      *
-     * @param sbScrapFormDTO
+     * @param actAuditRequest
      */
     @Transactional(rollbackFor = Exception.class)
-    public void assign(SbScrapFormDTO sbScrapFormDTO) {
-        String taskId = sbScrapFormDTO.getTaskId();
-        String userId = sbScrapFormDTO.getChangeUser();
+    public void assign(ActAuditRequest actAuditRequest) {
+        String taskId = actAuditRequest.getTaskId();
+        String userId = actAuditRequest.getChangeUser();
         if (StringUtils.isEmpty(taskId)) {
             throw new BusinessException("taskId为空,请选择");
         }

+ 8 - 1
platform-service/src/main/java/com/platform/service/sb/SbScrapFormService.java

@@ -4,6 +4,7 @@ import com.platform.dao.vo.query.sb.SbScrapFormVO;
 import com.platform.dao.dto.sb.SbScrapFormDTO;
 import com.platform.dao.entity.sb.SbScrapForm;
 import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.vo.sb.SbInfoVO;
 import com.platform.service.base.IBaseService;
 
 import java.util.List;
@@ -15,7 +16,13 @@ import java.util.List;
  * @Version Copyright (c) 2020,北京乾元坤和科技有限公司 All rights reserved.
  */
 public interface SbScrapFormService extends IBaseService<SbScrapForm, SbScrapFormDTO> {
-
+    /**
+     * 根据主键查询
+     *
+     * @param id :
+     * @return :
+     */
+    SbScrapFormVO getVOById(String id);
     /**
      * 批量删除
      *

+ 12 - 1
platform-service/src/main/java/com/platform/service/sb/impl/SbScrapFormServiceImpl.java

@@ -3,6 +3,7 @@ package com.platform.service.sb.impl;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.model.UserInfo;
+import com.platform.common.util.BeanConverterUtil;
 import com.platform.common.util.IdGeneratorUtils;
 import com.platform.common.util.SecurityUtils;
 import com.platform.dao.bean.MyPage;
@@ -38,6 +39,15 @@ public class SbScrapFormServiceImpl extends BaseServiceImpl<SbScrapFormMapper, S
 
     private final SbInfoMapper sbInfoMapper;
 
+    @Override
+    public SbScrapFormVO getVOById(String id) {
+        SbScrapForm sbScrapForm = this.getModelById(id);
+        SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(sbScrapForm.getSbId());
+        SbScrapFormVO sbScrapFormVO  = BeanConverterUtil.copyObjectProperties(sbScrapForm, SbScrapFormVO.class);
+        sbScrapFormVO.setSbName(sbInfo.getName());
+        return sbScrapFormVO;
+    }
+
     @Override
     public int batchDelete(List<String> ids) {
         Weekend<SbScrapForm> weekend = new Weekend<>(SbScrapForm.class);
@@ -47,6 +57,7 @@ public class SbScrapFormServiceImpl extends BaseServiceImpl<SbScrapFormMapper, S
         return 1;
     }
 
+
     @Override
     public SbScrapForm saveModelByDTO(SbScrapFormDTO model) {
 
@@ -142,7 +153,7 @@ public class SbScrapFormServiceImpl extends BaseServiceImpl<SbScrapFormMapper, S
     public void updateByActivitiFinish(String id, boolean flag) {
         SbScrapForm updInfo = mapper.selectByPrimaryKey(id);
         updInfo.setId(id);
-        updInfo.setStatus(flag ? ActivitiFormStatusEnum.EXECUTING.getValue() : ActivitiFormStatusEnum.REFUSE.getValue());
+        updInfo.setStatus(flag ? ActivitiFormStatusEnum.FINISH.getValue() : ActivitiFormStatusEnum.REFUSE.getValue());
         mapper.updateByPrimaryKeySelective(updInfo);
 
         if (flag) {