Browse Source

审批单自定义-停用单

guarantee-lsq 2 years ago
parent
commit
c4fb9fe7ea
15 changed files with 920 additions and 118 deletions
  1. 8 0
      platform-activiti/src/main/java/com/platform/activiti/dao/entity/ActAuditRequest.java
  2. 2 1
      platform-common/src/main/java/com/platform/common/constant/CommonConstants.java
  3. 2 2
      platform-common/src/main/java/com/platform/common/util/IdGeneratorUtils.java
  4. 60 0
      platform-dao/src/main/java/com/platform/dao/dto/activiti/SbStopFormActiviti.java
  5. 4 2
      platform-dao/src/main/java/com/platform/dao/dto/customize/CustomFieldTemplateDataDTO.java
  6. 5 0
      platform-dao/src/main/java/com/platform/dao/vo/query/customize/CustomFieldTemplateDataVO.java
  7. 6 0
      platform-dao/src/main/resources/mapper/customize/CustomFieldTemplateDataMapper.xml
  8. 13 15
      platform-rest/src/main/java/com/platform/rest/controller/activiti/SbScrapActivitiController.java
  9. 82 0
      platform-service/src/main/java/com/platform/service/customize/BaseFormCheckService.java
  10. 370 0
      platform-service/src/main/java/com/platform/service/customize/BaseFormCheckServiceAbstract.java
  11. 21 0
      platform-service/src/main/java/com/platform/service/customize/BaseFormCheckServiceFactory.java
  12. 16 90
      platform-service/src/main/java/com/platform/service/customize/impl/CustomFieldTemplateDataServiceImpl.java
  13. 174 0
      platform-service/src/main/java/com/platform/service/customize/impl/SbScrapCheckServiceImpl.java
  14. 150 0
      platform-service/src/main/java/com/platform/service/customize/impl/SbStopCheckServiceImpl.java
  15. 7 8
      platform-service/src/main/java/com/platform/service/sb/impl/SbScrapFormServiceImpl.java

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

@@ -40,4 +40,12 @@ public class ActAuditRequest implements Serializable {
      * 转签审批人
      */
     private String changeUser;
+    /**
+     * 流程model的名称
+     */
+    private String auditModelName;
+    /**
+     * 流程model的key
+     */
+    private String auditModelKey;
 }

+ 2 - 1
platform-common/src/main/java/com/platform/common/constant/CommonConstants.java

@@ -256,6 +256,7 @@ public interface CommonConstants {
     /**
      * 审批表单
      */
-    String SB_SCRAP_FORM = "SB_SCRAP_FORM"; // 设备报废单
+    String SB_SCRAP_FORM = "sb_info_scrap"; // 设备报废单
+    String SB_STOP_FORM = "sb_info_stop"; // 设备停用单
 
 }

+ 2 - 2
platform-common/src/main/java/com/platform/common/util/IdGeneratorUtils.java

@@ -252,8 +252,8 @@ public class IdGeneratorUtils {
      * @param countNum
      * @return
      */
-    public static String getSbScrapFormNo(Integer countNum) {
-        return getProjectNum("BFD", countNum);
+    public static String getSbScrapFormNo(String prefix,Integer countNum) {
+        return getProjectNum(prefix, countNum);
     }
 
     /**

+ 60 - 0
platform-dao/src/main/java/com/platform/dao/dto/activiti/SbStopFormActiviti.java

@@ -0,0 +1,60 @@
+package com.platform.dao.dto.activiti;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+@Data
+public class SbStopFormActiviti implements Serializable {
+    /**
+     * sbId
+     */
+    private String sbId;
+
+    /**
+     * 设备名称
+     */
+    private String sbName;
+
+    /**
+     *  单号
+     */
+    private String no;
+
+    /**
+     * 维修单号
+     */
+    private String repairId;
+
+    /**
+     * 申请人
+     */
+    private String applyUserName;
+
+    /**
+     * 申请日期
+     */
+    private LocalDateTime applyDate;
+
+    /**
+     * 停用日期
+     */
+    private LocalDateTime stopDate;
+
+    /**
+     * 停用原因
+     */
+    private String stopReason;
+
+    /**
+     *
+     */
+    private Integer status;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    private String processInstanceId;
+}

+ 4 - 2
platform-dao/src/main/java/com/platform/dao/dto/customize/CustomFieldTemplateDataDTO.java

@@ -6,10 +6,10 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.*;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.time.LocalDateTime;
-import java.time.LocalDate;
+import java.util.List;
 
 /**
  * @Description 自定义报表DTO
@@ -93,4 +93,6 @@ public class CustomFieldTemplateDataDTO extends BaseDTO implements Serializable
      */
     private Integer status;
 
+    private List<Integer> statusList;
+
 }

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/customize/CustomFieldTemplateDataVO.java

@@ -95,5 +95,10 @@ public class CustomFieldTemplateDataVO extends BaseVO implements Serializable {
      */
     private String dataRemark;
 
+    /**
+     * 停用日期
+     */
+    private LocalDateTime stopDate;
+
 
 }

+ 6 - 0
platform-dao/src/main/resources/mapper/customize/CustomFieldTemplateDataMapper.xml

@@ -73,6 +73,12 @@
         <if test="status != null">
             and fieldTemplateData.status = #{status}
         </if>
+        <if test="statusList != null and statusList.size > 0">
+            AND fieldTemplateData.status in
+            <foreach item="item" index="index" collection="statusList" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
     </sql>
     <select id="selectList" parameterType="com.platform.dao.dto.customize.CustomFieldTemplateDataDTO"
             resultType="com.platform.dao.vo.query.customize.CustomFieldTemplateDataVO">

+ 13 - 15
platform-rest/src/main/java/com/platform/rest/controller/activiti/SbScrapActivitiController.java

@@ -2,13 +2,11 @@ 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;
-import com.platform.service.business.SbScrapActivitiBusinessService;
 import com.platform.service.business.impl.SbScrapActivitiServiceImpl;
+import com.platform.service.customize.BaseFormCheckServiceFactory;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.activiti.engine.runtime.ProcessInstance;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -30,11 +28,11 @@ public class SbScrapActivitiController {
      * @param actAuditRequest 设备基础信息DTO
      * @return R
      */
-    @SysLog("设备报废提交审批")
+    @SysLog("审批单提交审批")
     @PutMapping("/start")
     public R start(@RequestBody ActAuditRequest actAuditRequest) {
-        sbScrapActivitiServiceImpl.start(actAuditRequest);
-        return new R<>("设备报废申请已提交");
+        BaseFormCheckServiceFactory.getCheckService(actAuditRequest.getAuditModelKey()).start(actAuditRequest);
+        return new R<>("审批单已提交");
     }
 
     /**
@@ -42,10 +40,10 @@ public class SbScrapActivitiController {
      * @param actAuditRequest:不包括processInstanceId,
      * @return R
      */
-    @SysLog("设备报废审核")
+    @SysLog("审批单审核")
     @PutMapping("/audit")
     public R audit(@RequestBody ActAuditRequest actAuditRequest) {
-        sbScrapActivitiServiceImpl.audit(actAuditRequest);
+        BaseFormCheckServiceFactory.getCheckService(actAuditRequest.getAuditModelKey()).audit(actAuditRequest);
         return new R<>();
     }
 
@@ -54,10 +52,10 @@ public class SbScrapActivitiController {
      * @param actAuditRequest
      * @return R
      */
-    @SysLog("设备报废终止审核")
+    @SysLog("审批单终止审核")
     @PutMapping("/stop")
     public R stop(@RequestBody ActAuditRequest actAuditRequest) {
-        sbScrapActivitiServiceImpl.stop(actAuditRequest);
+        BaseFormCheckServiceFactory.getCheckService(actAuditRequest.getAuditModelKey()).stop(actAuditRequest);
         return new R<>();
     }
 
@@ -66,10 +64,10 @@ public class SbScrapActivitiController {
      * @param actAuditRequest
      * @return R
      */
-    @SysLog("设备报废转签")
+    @SysLog("审批单转签")
     @PutMapping("/claim")
     public R claim(@RequestBody ActAuditRequest actAuditRequest) {
-        sbScrapActivitiServiceImpl.claim(actAuditRequest);
+        BaseFormCheckServiceFactory.getCheckService(actAuditRequest.getAuditModelKey()).claim(actAuditRequest);
         return new R<>("已签收,请办理");
     }
 
@@ -78,10 +76,10 @@ public class SbScrapActivitiController {
      * @param actAuditRequest
      * @return R
      */
-    @SysLog("设备报废转签")
+    @SysLog("审批单转签")
     @PutMapping("/assign")
     public R assign(@RequestBody ActAuditRequest actAuditRequest) {
-        sbScrapActivitiServiceImpl.assign(actAuditRequest);
+        BaseFormCheckServiceFactory.getCheckService(actAuditRequest.getAuditModelKey()).assign(actAuditRequest);
         return new R<>("已转签");
     }
 
@@ -90,7 +88,7 @@ public class SbScrapActivitiController {
      * @param processInstanceId
      * @return R
      */
-    @SysLog("设备报废审核历史")
+    @SysLog("审批单审核历史")
     @GetMapping("/history/{processInstanceId}")
     public R history(@PathVariable("processInstanceId") String processInstanceId) {
         return new R(sbScrapActivitiServiceImpl.history(processInstanceId));

+ 82 - 0
platform-service/src/main/java/com/platform/service/customize/BaseFormCheckService.java

@@ -0,0 +1,82 @@
+package com.platform.service.customize;
+
+import com.platform.activiti.dao.entity.ActAuditRecord;
+import com.platform.activiti.dao.entity.ActAuditRequest;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.dao.vo.query.customize.CustomFieldTemplateDataVO;
+
+import java.util.List;
+
+public interface BaseFormCheckService {
+
+    /**
+     * 赋值前的校验
+     * @param data
+     * @return
+     */
+    String checkPrepare(String data);
+
+    /**
+     * 按照需要给表单赋值
+     * @param data
+     * @param no
+     * @return
+     */
+    String packageData(String data,String no);
+
+    /**
+     * 分页数据的回写
+     * @param pageInfos
+     */
+    void resultWrite(AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos);
+
+    void start(ActAuditRequest actAuditRequest);
+
+    /**
+     * 审批,第一个审批人为发起人,自动审批。
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    void audit(ActAuditRequest actAuditRequest);
+
+    /**
+     * 终止审核
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    void stop(ActAuditRequest actAuditRequest) ;
+
+    /**
+     * 签收
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    void claim(ActAuditRequest actAuditRequest);
+
+    /**
+     * 转签
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    void assign(ActAuditRequest actAuditRequest);
+
+    /**
+     * 审核历史:都在ActRecord里面
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param processInstanceId
+     */
+    List<ActAuditRecord> history(String processInstanceId);
+
+    /**
+     * 判定流程是否结束
+     *
+     * @param actAuditRequest
+     * @return
+     */
+    boolean doCheckLast(ActAuditRequest actAuditRequest);
+}

+ 370 - 0
platform-service/src/main/java/com/platform/service/customize/BaseFormCheckServiceAbstract.java

@@ -0,0 +1,370 @@
+package com.platform.service.customize;
+
+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.common.bean.AbstractPageResultBean;
+import com.platform.common.constant.CommonConstants;
+import com.platform.common.exception.BusinessException;
+import com.platform.common.model.UserInfo;
+import com.platform.common.util.SecurityUtils;
+import com.platform.dao.entity.activiti.ActivitiUserModel;
+import com.platform.dao.entity.customize.CustomFieldTemplateData;
+import com.platform.dao.entity.upms.SysUser;
+import com.platform.dao.mapper.customize.CustomFieldTemplateDataMapper;
+import com.platform.dao.mapper.sb.SbInfoMapper;
+import com.platform.dao.vo.query.customize.CustomFieldTemplateDataVO;
+import com.platform.service.activiti.ActivitiAssignStrategy;
+import com.platform.service.activiti.ActivitiUserModelService;
+import com.platform.service.upms.SysUserService;
+import lombok.AllArgsConstructor;
+import org.activiti.engine.*;
+import org.activiti.engine.history.HistoricDetail;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricVariableUpdate;
+import org.activiti.engine.repository.Model;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@AllArgsConstructor
+public abstract class BaseFormCheckServiceAbstract implements BaseFormCheckService{
+    @Autowired
+    private RepositoryService repositoryService;
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private HistoryService historyService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private ActivitiUserModelService activitiUserModelService;
+    /**
+     * 通过spring获取所有策略类
+     */
+    @Autowired
+    private List<ActivitiAssignStrategy> activitiAssignStrategyList;
+
+    @Autowired
+    protected CustomFieldTemplateDataMapper customFieldTemplateDataMapper;
+    @Autowired
+    protected SbInfoMapper sbInfoMapper;
+
+    protected BaseFormCheckServiceAbstract(){}
+
+    @Override
+    public String checkPrepare(String data) {
+        return null;
+    }
+
+    @Override
+    public String packageData(String data, String no) {
+        return null;
+    }
+
+    @Override
+    public void resultWrite(AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos) {
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void start(ActAuditRequest actAuditRequest) {
+        doCheck(actAuditRequest);
+        doStart(actAuditRequest);
+        doUpdate(actAuditRequest);
+    }
+
+    protected abstract void doCheck(ActAuditRequest actAuditRequest);
+
+    protected abstract void doUpdate(ActAuditRequest actAuditRequest);
+
+    /**
+     * @see com.platform.activiti.controller.ActivitiController#showTaskListStart
+     * @param actAuditRequest
+     */
+    protected void doStart(ActAuditRequest actAuditRequest) {
+        UserInfo user = SecurityUtils.getUserInfo();
+        // 设置发起对象,保存到流程实例中
+        ActApplyInfo applyInfo = new ActApplyInfo(actAuditRequest.getId(),
+                actAuditRequest.getAuditModelName(), actAuditRequest.getAuditModelKey(),
+                0,
+                LocalDateTime.now());
+        Map<String, Object> map = new HashMap<>(1);
+
+        applyInfo.setUserId(user.getUserId());
+        applyInfo.setUserName(user.getRealName());
+        map.put("data", applyInfo);
+        map.put("userId", applyInfo.getUserId());
+        ProcessInstance instance = null;
+        if (StringUtils.isBlank(actAuditRequest.getProcessInstanceId())) {
+            // 第一次启动,设置流程启动人信息,为了后面查询我的发起列表
+            identityService.setAuthenticatedUserId(user.getUserId());
+            instance = runtimeService.startProcessInstanceByKey(actAuditRequest.getAuditModelKey(), actAuditRequest.getId(), map);
+            actAuditRequest.setProcessInstanceId(instance.getId());
+        } else { // 再次提交审批的,之前被拒绝的
+            ProcessInstance instanceExsit = runtimeService.createProcessInstanceQuery()
+                    .processInstanceId(actAuditRequest.getProcessInstanceId()).singleResult();
+            if (instanceExsit == null) {
+                instance = runtimeService.startProcessInstanceByKey(actAuditRequest.getAuditModelKey(), actAuditRequest.getId(), map);
+                actAuditRequest.setProcessInstanceId(instance.getId());
+            } else {
+                instance = runtimeService.startProcessInstanceById(actAuditRequest.getProcessInstanceId(), actAuditRequest.getId(), map);
+            }
+        }
+
+
+        // 第一个审批人为发起人,为自动审批。557501
+        // 设置审批对象,保存到task实例中,每次审核都要更新追加这个对象
+        Task task = taskService.createTaskQuery().processInstanceId(actAuditRequest.getProcessInstanceId()).orderByTaskCreateTime().desc().singleResult();
+
+        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);
+        task.setAssignee(user.getUserId());
+        taskService.addComment(task.getId(), actAuditRequest.getProcessInstanceId(), "提交");
+        taskService.complete(task.getId(), data);
+        // 分配下一个节点的审批人信息
+        // 设置各个节点审批人员信息
+        Model model = repositoryService.createModelQuery().modelKey(actAuditRequest.getAuditModelKey()).singleResult();
+        List<ActivitiUserModel> list = activitiUserModelService.getModelByModelId(model.getId());
+        if (CollectionUtil.isEmpty(list)) {
+            throw new BusinessException("审批节点未设置,请先设置");
+        }
+        Task nextTask = taskService.createTaskQuery().processInstanceId(actAuditRequest.getProcessInstanceId()).orderByTaskCreateTime().desc().singleResult();
+        Map<String, String> maps = new HashMap<>();
+        maps.put("userId", user.getUserId());
+        modifyTaskAssign(model.getId(), maps, nextTask, list);
+    }
+
+    /**
+     * 审批,第一个审批人为发起人,自动审批。
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void audit(ActAuditRequest actAuditRequest) {
+        UserInfo user = SecurityUtils.getUserInfo();
+        if (doAudit(actAuditRequest)) {
+            if (!doCheckLast(actAuditRequest)) {
+                // 分配下一个节点的审批人信息
+                Model model = repositoryService.createModelQuery().modelKey(actAuditRequest.getAuditModelKey()).singleResult();
+                List<ActivitiUserModel> list = activitiUserModelService.getModelByModelId(model.getId());
+                if (CollectionUtil.isEmpty(list)) {
+                    throw new BusinessException("审批节点未设置,请先设置");
+                }
+                Map<String, String> maps = new HashMap<>();
+                maps.put("userId", user.getUserId());
+                Task nextTask = taskService.createTaskQuery().processInstanceId(actAuditRequest.getProcessInstanceId()).orderByTaskCreateTime().desc().singleResult();
+                modifyTaskAssign(model.getId(), maps, nextTask, list);
+            } else {
+                doFinish(actAuditRequest);
+            }
+        } else {
+            doRefuse(actAuditRequest);
+        }
+    }
+
+    protected abstract void doRefuse(ActAuditRequest actAuditRequest);
+
+    protected abstract void doFinish(ActAuditRequest actAuditRequest);
+
+    @Transactional(rollbackFor = Exception.class)
+    protected boolean doAudit(ActAuditRequest actAuditRequest) {
+        UserInfo user = SecurityUtils.getUserInfo();
+        // 设置发起对象,保存到流程实例中
+        String taskId = actAuditRequest.getTaskId();
+        Map<String, Object> map = new HashMap<>();
+        Integer result = 0;
+        if (actAuditRequest.getAuditFlag()) {
+            result = 1;// 同意
+        } else {
+            result = 0;// 拒绝
+        }
+        map.put("result", result);
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        Map<String, Object> variables = taskService.getVariables(taskId);
+        List<ActAuditRecord> records = new ArrayList<>();
+        Object o = variables.get(CommonConstants.ACT_AUDIT_RECORD);
+        if (o != null) {
+            records = (List<ActAuditRecord>) o;
+        }
+
+        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, actAuditRequest.getProcessInstanceId(), actAuditRequest.getRefuseReason());
+        taskService.complete(taskId, map);
+        // 审批拒绝,则不用判断是否结束。审批同意则要判断是否流程结束,结束则更新报废单状态和设备状态
+        return result == 0 ? false : true;
+
+    }
+
+    /**
+     * 终止审核:如果已经终止删除过的
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void stop(ActAuditRequest actAuditRequest) {
+        String processInstanceId = actAuditRequest.getProcessInstanceId();
+        if (StringUtils.isNotEmpty(processInstanceId)) {
+            ProcessInstance instance = runtimeService.createProcessInstanceQuery()
+                    .processInstanceId(processInstanceId).singleResult();
+            if (instance != null) {
+                runtimeService.deleteProcessInstance(processInstanceId, "发起人终止");
+                historyService.deleteHistoricProcessInstance(processInstanceId);
+            }else{
+                List<ProcessInstance> instanceList = runtimeService.createProcessInstanceQuery()
+                        .processInstanceBusinessKey(actAuditRequest.getId()).list();
+                for(ProcessInstance processInstance:instanceList){
+                    runtimeService.deleteProcessInstance(processInstance.getId(), "发起人终止");
+                    historyService.deleteHistoricProcessInstance(processInstance.getId());
+                }
+            }
+        }
+        doStop(actAuditRequest);
+    }
+
+    protected abstract void doStop(ActAuditRequest actAuditRequest);
+
+    /**
+     * 签收
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    @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 actAuditRequest
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void assign(ActAuditRequest actAuditRequest) {
+        String taskId = actAuditRequest.getTaskId();
+        String userId = actAuditRequest.getChangeUser();
+        if (StringUtils.isEmpty(taskId)) {
+            throw new BusinessException("taskId为空,请选择");
+        }
+        if (StringUtils.isEmpty(userId)) {
+            throw new BusinessException("请设置转签人员");
+        }
+        SysUser sysUser = sysUserService.getModelById(userId);
+        if (sysUser == null) {
+            throw new BusinessException("用户不存在,请选择其他人员");
+        }
+        taskService.setAssignee(taskId, userId);
+    }
+
+    /**
+     * 审核历史:都在ActRecord里面
+     * 审批设置对象:ActApplyInfo
+     *
+     * @param processInstanceId
+     */
+    @Override
+    public List<ActAuditRecord> history(String processInstanceId) {
+        ProcessInstance instance = runtimeService.createProcessInstanceQuery()
+                .processInstanceId(processInstanceId).singleResult();
+        //保证运行ing
+        List<ActAuditRecord> records = new ArrayList<>();
+        if (instance != null) {
+            Task task = this.taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
+            Map<String, Object> variables = taskService.getVariables(task.getId());
+            Object o = variables.get(CommonConstants.ACT_AUDIT_RECORD);
+            if (o != null) {
+                /*获取历史审核信息*/
+                records = (List<ActAuditRecord>) o;
+            }
+        } else {
+            List<HistoricDetail> list = historyService.createHistoricDetailQuery().
+                    processInstanceId(processInstanceId).orderByTime().desc().list();
+            if (CollectionUtil.isNotEmpty(list)) {
+                HistoricDetail historicDetail = list.get(0);
+                HistoricVariableUpdate variable = (HistoricVariableUpdate) historicDetail;
+                String variableName = variable.getVariableName();
+                if (CommonConstants.ACT_AUDIT_RECORD.equals(variableName)) {
+                    records.clear();
+                    records.addAll((List<ActAuditRecord>) variable.getValue());
+                }
+            }
+        }
+        return records;
+    }
+
+    /**
+     * 判定流程是否结束
+     *
+     * @param actAuditRequest
+     * @return
+     */
+    @Override
+    public boolean doCheckLast(ActAuditRequest actAuditRequest) {
+        HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(actAuditRequest.getProcessInstanceId()).singleResult();
+        if (Objects.isNull(historicProcessInstance)) {
+            return true;
+        }
+        if (Objects.isNull(historicProcessInstance.getEndTime())) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * 修改审批节点:每次审批后,包括第一次提交,来更新下一次任务的审批人信息。不能更新xml。更新xml只适合部根据发起人所属部门的情况
+     * 每次上一个节点审批后,设置下一个审批人员信息,并记录到task的变量里面
+     *
+     * @param modeId
+     * @param map,发起人信息,为了设置
+     * @param list
+     * @throws Exception
+     */
+    public void modifyTaskAssign(String modeId, Map<String, String> map, 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, map, userTaskModel);
+        userTaskModel.setDeploymentId(model.getDeploymentId());
+        // activitiUserModelService.updateBatch(list);
+    }
+
+    protected CustomFieldTemplateData getById(String id){
+        return customFieldTemplateDataMapper.selectByPrimaryKey(id);
+    }
+}

+ 21 - 0
platform-service/src/main/java/com/platform/service/customize/BaseFormCheckServiceFactory.java

@@ -0,0 +1,21 @@
+package com.platform.service.customize;
+
+import com.platform.common.constant.CommonConstants;
+import com.platform.common.util.BeanUtils;
+
+public class BaseFormCheckServiceFactory {
+    public static BaseFormCheckService getCheckService(String type){
+        BaseFormCheckService checkService = null;
+        switch (type){
+            case CommonConstants
+                    .SB_SCRAP_FORM:
+                checkService = (BaseFormCheckService)BeanUtils.getBean("sbScrapCheckServiceImpl");
+                break;
+            case CommonConstants
+                    .SB_STOP_FORM:
+                checkService = (BaseFormCheckService)BeanUtils.getBean("sbStopCheckServiceImpl");
+                break;
+        }
+        return checkService;
+    }
+}

+ 16 - 90
platform-service/src/main/java/com/platform/service/customize/impl/CustomFieldTemplateDataServiceImpl.java

@@ -2,21 +2,21 @@ package com.platform.service.customize.impl;
 
 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.*;
+import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.common.util.SecurityUtils;
+import com.platform.common.util.StringUtils;
 import com.platform.dao.bean.MyPage;
-import com.platform.dao.dto.activiti.SbScrapFormActiviti;
 import com.platform.dao.dto.customize.CustomFieldTemplateDataDTO;
 import com.platform.dao.entity.customize.CustomFieldTemplateData;
-import com.platform.dao.entity.sb.SbInfo;
 import com.platform.dao.enums.CustomFieldTemplateDataStatusEnum;
 import com.platform.dao.enums.CustomFieldTemplateDataTypeEnum;
-import com.platform.dao.enums.SbInfoStatusEnum;
 import com.platform.dao.mapper.customize.CustomFieldTemplateDataMapper;
 import com.platform.dao.mapper.sb.SbInfoMapper;
 import com.platform.dao.vo.query.customize.CustomFieldTemplateDataVO;
 import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.customize.BaseFormCheckService;
+import com.platform.service.customize.BaseFormCheckServiceFactory;
 import com.platform.service.customize.CustomFieldTemplateDataService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -64,34 +64,11 @@ public class CustomFieldTemplateDataServiceImpl extends BaseServiceImpl<CustomFi
         }
         AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos = new MyPage(mapper.selectList(record));
         if(resultWriteFlag){
-            resultWrite(pageInfos,record.getRemark());
-        }
-        return pageInfos;
-    }
-
-    private void resultWrite(AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos,String type){
-        if(pageInfos != null && pageInfos.getRows() != null && pageInfos.getRows().size() > 0){ // 统一判断
-            switch (type){
-                case CommonConstants.SB_SCRAP_FORM:  // 设备报废单
-                    sbScrapWrite(pageInfos);
-                    break;
+            if(pageInfos != null && pageInfos.getRows() != null && pageInfos.getRows().size() > 0){ // 统一判断
+                BaseFormCheckServiceFactory.getCheckService(record.getRemark()).resultWrite(pageInfos);
             }
         }
-    }
-
-    /**
-     * 设备报废单的反写
-     * @param pageInfos
-     */
-    private void sbScrapWrite(AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos){
-        for(CustomFieldTemplateDataVO vo : pageInfos.getRows()){
-            SbScrapFormActiviti activiti = JsonUtils.jsonToModel(vo.getData(),SbScrapFormActiviti.class);
-            vo.setDataRemark(activiti.getRemark());
-            vo.setNo(activiti.getNo());
-            vo.setSbName(activiti.getSbName());
-            vo.setReason(activiti.getReason());
-            vo.setSbNo(activiti.getSbNo());
-        }
+        return pageInfos;
     }
 
     @Override
@@ -119,69 +96,18 @@ public class CustomFieldTemplateDataServiceImpl extends BaseServiceImpl<CustomFi
     @Override
     @Transactional(rollbackFor = Exception.class)
     public CustomFieldTemplateData saveModelFormByDTO(CustomFieldTemplateDataDTO model) {
+        BaseFormCheckService checkService = BaseFormCheckServiceFactory.getCheckService(model.getRemark());
         // 审批表单申请前的校验并返回单号
-        String no = checkPrepare(model);
-        // 发起人和发起时间
-        String userId = SecurityUtils.getUserInfo().getUserId();
-        String userName = SecurityUtils.getUserInfo().getUsername();
-        LocalDateTime now = LocalDateTime.now();
-        SbScrapFormActiviti activiti = JsonUtils.jsonToModel(model.getData(), SbScrapFormActiviti.class);
-        activiti.setApplyUserId(userId);
-        activiti.setApplyUserName(userName);
-        activiti.setStatus(CustomFieldTemplateDataStatusEnum.APPLY.getValue());
-        activiti.setId(IdGeneratorUtils.getObjectId());
-        activiti.setNo(no);
-        model.setData(JsonUtils.objectToJson(activiti));
-        model.setCreatedTime(now);
-        model.setCreatedUserId(userId);
-        model.setCreatedUserName(userName);
+        String no = checkService.checkPrepare(model.getData());
+        // 为表单相关属性赋值
+        model.setData(checkService.packageData(model.getData(),no));
+        model.setCreatedTime(LocalDateTime.now());
+        model.setCreatedUserId(SecurityUtils.getUserInfo().getUserId());
+        model.setCreatedUserName(SecurityUtils.getUserInfo().getUsername());
         model.setStatus(CustomFieldTemplateDataStatusEnum.APPLY.getValue());
         model.setId(IdGeneratorUtils.getObjectId());
         CustomFieldTemplateData entity = BeanConverterUtil.copyObjectProperties(model, getEntityClass());
         mapper.insertSelective(entity);
         return entity;
     }
-
-    /**
-     * 表单检查
-     * @param model
-     */
-    private String checkPrepare(CustomFieldTemplateDataDTO model){
-        String no = "";
-        String data = model.getData();
-        switch (model.getRemark()){
-            case CommonConstants
-                    .SB_SCRAP_FORM:
-                no = checkSbScrapForm(data);
-                break;
-        }
-        return no;
-    }
-
-    /**
-     * 设备报废校验
-     * @param jsonInfo
-     */
-    private String checkSbScrapForm(String jsonInfo){
-        SbScrapFormActiviti sbForm = JsonUtils.jsonToModel(jsonInfo, SbScrapFormActiviti.class);
-        SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(sbForm.getSbId());
-        if (sbInfo == null) {
-            throw new DeniedException("设备不存在");
-        }
-        if (sbInfo.getStatus().equals(SbInfoStatusEnum.IN_SCRAP.getValue()) ||
-                sbInfo.getStatus().equals(SbInfoStatusEnum.SCRAPED.getValue()) ||
-                sbInfo.getStatus().equals(SbInfoStatusEnum.IN_USE.getValue())) {
-            throw new DeniedException("设备状态无法报废");
-        }
-        CustomFieldTemplateData dataQuery = new CustomFieldTemplateData();
-        dataQuery.setType(CustomFieldTemplateDataTypeEnum.ACTIVITY_FORM.getValue());
-        dataQuery.setRemark(CommonConstants.SB_SCRAP_FORM);
-        int historyCount = mapper.selectCount(dataQuery);
-        dataQuery.setObjId(sbInfo.getId());
-        if(mapper.selectCount(dataQuery) > 0){
-            throw new DeniedException("该设备的报废申请单已存在");
-        }
-        return IdGeneratorUtils.getSbScrapFormNo(++historyCount);
-    }
-
 }

+ 174 - 0
platform-service/src/main/java/com/platform/service/customize/impl/SbScrapCheckServiceImpl.java

@@ -0,0 +1,174 @@
+package com.platform.service.customize.impl;
+
+import com.platform.activiti.dao.entity.ActAuditRequest;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.constant.CommonConstants;
+import com.platform.common.exception.BusinessException;
+import com.platform.common.exception.DeniedException;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.common.util.JsonUtils;
+import com.platform.common.util.SecurityUtils;
+import com.platform.dao.dto.activiti.SbScrapFormActiviti;
+import com.platform.dao.entity.customize.CustomFieldTemplateData;
+import com.platform.dao.entity.sb.SbInfo;
+import com.platform.dao.enums.ActivitiFormStatusEnum;
+import com.platform.dao.enums.CustomFieldTemplateDataStatusEnum;
+import com.platform.dao.enums.CustomFieldTemplateDataTypeEnum;
+import com.platform.dao.enums.SbInfoStatusEnum;
+import com.platform.dao.vo.query.customize.CustomFieldTemplateDataVO;
+import com.platform.service.customize.BaseFormCheckServiceAbstract;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+@Service("sbScrapCheckServiceImpl")
+public class SbScrapCheckServiceImpl extends BaseFormCheckServiceAbstract {
+
+    @Override
+    public String checkPrepare(String jsonInfo) {
+        SbScrapFormActiviti sbForm = JsonUtils.jsonToModel(jsonInfo, SbScrapFormActiviti.class);
+        SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(sbForm.getSbId());
+        if (sbInfo == null) {
+            throw new DeniedException("设备不存在");
+        }
+        if (sbInfo.getStatus().equals(SbInfoStatusEnum.IN_SCRAP.getValue()) ||
+                sbInfo.getStatus().equals(SbInfoStatusEnum.SCRAPED.getValue()) ||
+                sbInfo.getStatus().equals(SbInfoStatusEnum.IN_USE.getValue())) {
+            throw new DeniedException("设备状态无法报废");
+        }
+        CustomFieldTemplateData dataQuery = new CustomFieldTemplateData();
+        dataQuery.setType(CustomFieldTemplateDataTypeEnum.ACTIVITY_FORM.getValue());
+        dataQuery.setRemark(CommonConstants.SB_SCRAP_FORM);
+        int historyCount = customFieldTemplateDataMapper.selectCount(dataQuery);
+        dataQuery.setObjId(sbInfo.getId());
+        if(customFieldTemplateDataMapper.selectCount(dataQuery) > 0){
+            throw new DeniedException("该设备的报废申请单已存在");
+        }
+        return IdGeneratorUtils.getSbScrapFormNo("BFD",++historyCount);
+    }
+
+    @Override
+    public String packageData(String data, String no) {
+        SbScrapFormActiviti activiti = JsonUtils.jsonToModel(data, SbScrapFormActiviti.class);
+        activiti.setApplyUserId(SecurityUtils.getUserInfo().getUserId());
+        activiti.setApplyUserName(SecurityUtils.getUserInfo().getUsername());
+        activiti.setStatus(CustomFieldTemplateDataStatusEnum.APPLY.getValue());
+        activiti.setId(IdGeneratorUtils.getObjectId());
+        activiti.setNo(no);
+        return JsonUtils.objectToJson(activiti);
+    }
+
+    @Override
+    public void resultWrite(AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos) {
+        for(CustomFieldTemplateDataVO vo : pageInfos.getRows()){
+            SbScrapFormActiviti activiti = JsonUtils.jsonToModel(vo.getData(),SbScrapFormActiviti.class);
+            vo.setDataRemark(activiti.getRemark());
+            vo.setNo(activiti.getNo());
+            vo.setSbName(activiti.getSbName());
+            vo.setReason(activiti.getReason());
+            vo.setSbNo(activiti.getSbNo());
+        }
+    }
+
+    /**
+     * 检查业务是否可以发起,比如检查业务状态等
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    protected void doCheck(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData sbScrapForm = getById(actAuditRequest.getId());
+        if (sbScrapForm == null || StringUtils.isBlank(sbScrapForm.getData())) {
+            throw new BusinessException("报废单不存在");
+        }
+        if (!sbScrapForm.getStatus().equals(CustomFieldTemplateDataStatusEnum.APPLY.getValue())) {
+            throw new BusinessException("只要草稿状态下的报废单,才可以提交申请");
+        }
+        SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(sbScrapForm.getObjId());
+        if (sbInfo == null) {
+            throw new BusinessException("设备不存在");
+        }
+        if (sbInfo.getStatus().equals(SbInfoStatusEnum.IN_SCRAP.getValue()) || sbInfo.getStatus().equals(SbInfoStatusEnum.SCRAPED.getValue()) || sbInfo.getStatus().equals(SbInfoStatusEnum.IN_USE.getValue())) {
+            throw new BusinessException("设备状态无法报废");
+        }
+    }
+
+    /**
+     * 更新业务
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    protected void doUpdate(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setId(actAuditRequest.getId());
+        updInfo.setStatus(ActivitiFormStatusEnum.EXECUTING.getValue());
+        SbScrapFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbScrapFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.EXECUTING.getValue());
+        activiti.setProcessInstanceId(actAuditRequest.getProcessInstanceId());
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+
+        SbInfo sbInfo = new SbInfo();
+        sbInfo.setStatus(SbInfoStatusEnum.IN_SCRAP.getValue());
+        sbInfo.setId(updInfo.getObjId());
+        sbInfoMapper.updateByPrimaryKeySelective(sbInfo);
+    }
+
+    /**
+     * 拒绝业务
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    protected void doRefuse(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setStatus(ActivitiFormStatusEnum.REFUSE.getValue());
+        SbScrapFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbScrapFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.REFUSE.getValue());
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+    }
+
+    /**
+     * 完成业务
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    protected void doFinish(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setStatus(ActivitiFormStatusEnum.FINISH.getValue());
+        SbScrapFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbScrapFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.FINISH.getValue());
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+
+        SbInfo sbInfo = new SbInfo();
+        sbInfo.setStatus(SbInfoStatusEnum.SCRAPED.getValue());
+        sbInfo.setId(updInfo.getObjId());
+        sbInfoMapper.updateByPrimaryKeySelective(sbInfo);
+    }
+
+    /**
+     * 终止业务
+     *
+     * @param actAuditRequest
+     */
+    @Override
+    protected void doStop(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setId(actAuditRequest.getId());
+        SbScrapFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbScrapFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.NOT_EXECUTE.getValue());
+        activiti.setProcessInstanceId(null);
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        updInfo.setStatus(ActivitiFormStatusEnum.NOT_EXECUTE.getValue());
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+
+        SbInfo sbInfo = new SbInfo();
+        sbInfo.setStatus(SbInfoStatusEnum.IN_STORE.getValue());
+        sbInfo.setId(updInfo.getObjId());
+        sbInfoMapper.updateByPrimaryKeySelective(sbInfo);
+    }
+
+}

+ 150 - 0
platform-service/src/main/java/com/platform/service/customize/impl/SbStopCheckServiceImpl.java

@@ -0,0 +1,150 @@
+package com.platform.service.customize.impl;
+
+import com.platform.activiti.dao.entity.ActAuditRequest;
+import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.constant.CommonConstants;
+import com.platform.common.exception.BusinessException;
+import com.platform.common.exception.DeniedException;
+import com.platform.common.util.IdGeneratorUtils;
+import com.platform.common.util.JsonUtils;
+import com.platform.common.util.SecurityUtils;
+import com.platform.dao.dto.activiti.SbStopFormActiviti;
+import com.platform.dao.entity.customize.CustomFieldTemplateData;
+import com.platform.dao.entity.sb.SbInfo;
+import com.platform.dao.enums.ActivitiFormStatusEnum;
+import com.platform.dao.enums.CustomFieldTemplateDataStatusEnum;
+import com.platform.dao.enums.CustomFieldTemplateDataTypeEnum;
+import com.platform.dao.enums.SbInfoStatusEnum;
+import com.platform.dao.mapper.customize.CustomFieldTemplateDataMapper;
+import com.platform.dao.mapper.sb.SbInfoMapper;
+import com.platform.dao.vo.query.customize.CustomFieldTemplateDataVO;
+import com.platform.service.customize.BaseFormCheckServiceAbstract;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service("sbStopCheckServiceImpl")
+public class SbStopCheckServiceImpl extends BaseFormCheckServiceAbstract {
+    @Resource
+    private CustomFieldTemplateDataMapper customFieldTemplateDataMapper;
+    @Resource
+    private SbInfoMapper sbInfoMapper;
+
+    @Override
+    public String checkPrepare(String jsonInfo) {
+        SbStopFormActiviti sbForm = JsonUtils.jsonToModel(jsonInfo, SbStopFormActiviti.class);
+        SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(sbForm.getSbId());
+        if (sbInfo == null) {
+            throw new DeniedException("设备不存在");
+        }
+        if (sbInfo.getStatus().equals(SbInfoStatusEnum.IN_STOP.getValue()) ||
+                sbInfo.getStatus().equals(SbInfoStatusEnum.IN_DIAOBO.getValue())) {
+            throw new DeniedException("设备状态无法停用");
+        }
+        // 判断该设备已经有审核中的流程
+        CustomFieldTemplateData dataQuery = new CustomFieldTemplateData();
+        dataQuery.setType(CustomFieldTemplateDataTypeEnum.ACTIVITY_FORM.getValue());
+        dataQuery.setRemark(CommonConstants.SB_STOP_FORM);
+        int historyCount = customFieldTemplateDataMapper.selectCount(dataQuery);
+        dataQuery.setObjId(sbInfo.getId());
+        dataQuery.setStatus(CustomFieldTemplateDataStatusEnum.VERIFYING.getValue());
+        if(customFieldTemplateDataMapper.selectCount(dataQuery) > 0){
+            throw new DeniedException("该设备的停用申请正在审核,无需重复提交");
+        }
+        return IdGeneratorUtils.getSbScrapFormNo("TYD",++historyCount);
+    }
+
+    @Override
+    public String packageData(String data, String no) {
+        SbStopFormActiviti activiti = JsonUtils.jsonToModel(data, SbStopFormActiviti.class);
+        activiti.setApplyUserName(SecurityUtils.getUserInfo().getUsername());
+        activiti.setStatus(CustomFieldTemplateDataStatusEnum.APPLY.getValue());
+        activiti.setNo(no);
+        return JsonUtils.objectToJson(activiti);
+    }
+
+    @Override
+    public void resultWrite(AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos) {
+        for(CustomFieldTemplateDataVO vo : pageInfos.getRows()){
+            SbStopFormActiviti activiti = JsonUtils.jsonToModel(vo.getData(),SbStopFormActiviti.class);
+            vo.setDataRemark(activiti.getRemark());
+            vo.setNo(activiti.getNo());
+            vo.setSbName(activiti.getSbName());
+            vo.setReason(activiti.getStopReason());
+            vo.setStopDate(activiti.getStopDate());
+        }
+    }
+
+    @Override
+    protected void doCheck(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData sbScrapForm = getById(actAuditRequest.getId());
+        if (sbScrapForm == null || StringUtils.isBlank(sbScrapForm.getData())) {
+            throw new BusinessException("停用单不存在");
+        }
+        if (!sbScrapForm.getStatus().equals(CustomFieldTemplateDataStatusEnum.APPLY.getValue())) {
+            throw new BusinessException("只要待提交状态下的停用单,才可以提交申请");
+        }
+        SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(sbScrapForm.getObjId());
+        if (sbInfo == null) {
+            throw new BusinessException("设备不存在");
+        }
+        if (sbInfo.getStatus().equals(SbInfoStatusEnum.IN_STOP.getValue()) || sbInfo.getStatus().equals(SbInfoStatusEnum.IN_DIAOBO.getValue())) {
+            throw new BusinessException("设备状态无法停用");
+        }
+    }
+
+    @Override
+    protected void doUpdate(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setId(actAuditRequest.getId());
+        updInfo.setStatus(ActivitiFormStatusEnum.EXECUTING.getValue());
+        SbStopFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbStopFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.EXECUTING.getValue());
+        activiti.setProcessInstanceId(actAuditRequest.getProcessInstanceId());
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+    }
+
+    @Override
+    protected void doRefuse(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setStatus(ActivitiFormStatusEnum.REFUSE.getValue());
+        SbStopFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbStopFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.REFUSE.getValue());
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+    }
+
+    @Override
+    protected void doFinish(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setStatus(ActivitiFormStatusEnum.FINISH.getValue());
+        SbStopFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbStopFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.FINISH.getValue());
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+
+        SbInfo sbInfo = new SbInfo();
+        sbInfo.setStatus(SbInfoStatusEnum.IN_STOP.getValue());
+        sbInfo.setId(updInfo.getObjId());
+        sbInfoMapper.updateByPrimaryKeySelective(sbInfo);
+    }
+
+    @Override
+    protected void doStop(ActAuditRequest actAuditRequest) {
+        CustomFieldTemplateData updInfo = getById(actAuditRequest.getId());
+        updInfo.setId(actAuditRequest.getId());
+        SbStopFormActiviti activiti = JsonUtils.jsonToModel(updInfo.getData(),SbStopFormActiviti.class);
+        activiti.setStatus(ActivitiFormStatusEnum.NOT_EXECUTE.getValue());
+        activiti.setProcessInstanceId(null);
+        updInfo.setData(JsonUtils.objectToJson(activiti));
+        updInfo.setStatus(ActivitiFormStatusEnum.NOT_EXECUTE.getValue());
+        customFieldTemplateDataMapper.updateByPrimaryKeySelective(updInfo);
+
+        SbInfo sbInfo = new SbInfo();
+        sbInfo.setStatus(SbInfoStatusEnum.IN_USE.getValue());
+        sbInfo.setId(updInfo.getObjId());
+        sbInfoMapper.updateByPrimaryKeySelective(sbInfo);
+    }
+}

+ 7 - 8
platform-service/src/main/java/com/platform/service/sb/impl/SbScrapFormServiceImpl.java

@@ -1,5 +1,6 @@
 package com.platform.service.sb.impl;
 
+import com.github.pagehelper.PageHelper;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.model.UserInfo;
@@ -7,23 +8,21 @@ import com.platform.common.util.BeanConverterUtil;
 import com.platform.common.util.IdGeneratorUtils;
 import com.platform.common.util.SecurityUtils;
 import com.platform.dao.bean.MyPage;
-import com.github.pagehelper.PageHelper;
-import com.platform.dao.entity.repair.RepairApplicationForm;
+import com.platform.dao.dto.sb.SbScrapFormDTO;
 import com.platform.dao.entity.sb.SbInfo;
+import com.platform.dao.entity.sb.SbScrapForm;
 import com.platform.dao.enums.ActivitiFormStatusEnum;
 import com.platform.dao.enums.SbInfoStatusEnum;
 import com.platform.dao.mapper.sb.SbInfoMapper;
-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.dao.mapper.sb.SbScrapFormMapper;
+import com.platform.dao.vo.query.sb.SbScrapFormVO;
+import com.platform.service.base.impl.BaseServiceImpl;
 import com.platform.service.sb.SbScrapFormService;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
-import com.platform.service.base.impl.BaseServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
 import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
-import lombok.AllArgsConstructor;
 
 import java.util.List;
 
@@ -73,7 +72,7 @@ public class SbScrapFormServiceImpl extends BaseServiceImpl<SbScrapFormMapper, S
         UserInfo userInfo = SecurityUtils.getUserInfo();
         model.setApplyUserId(userInfo.getUserId());
         model.setApplyUserName(userInfo.getRealName());
-        model.setNo(IdGeneratorUtils.getSbScrapFormNo(++count));
+        model.setNo(IdGeneratorUtils.getSbScrapFormNo("BFD",++count));
         SbInfo sbInfo = sbInfoMapper.selectByPrimaryKey(model.getSbId());
         if (sbInfo.getStatus().equals(SbInfoStatusEnum.SCRAPED.getValue())) {
             throw new BusinessException("设备已经报废");