xiongchao 3 years ago
parent
commit
b98fe2aba4
26 changed files with 592 additions and 21 deletions
  1. 10 0
      platform-activiti/src/main/java/com/platform/activiti/service/ActivitiService.java
  2. 33 0
      platform-activiti/src/main/java/com/platform/activiti/service/impl/ActivitiServiceImpl.java
  3. 4 0
      platform-dao/src/main/java/com/platform/dao/dto/repair/RepairProjectDTO.java
  4. 41 0
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbInfoDTO.java
  5. 4 0
      platform-dao/src/main/java/com/platform/dao/dto/sqarepartmanage/SparePartInfoDTO.java
  6. 4 0
      platform-dao/src/main/java/com/platform/dao/entity/repair/RepairProject.java
  7. 40 0
      platform-dao/src/main/java/com/platform/dao/entity/sb/SbInfo.java
  8. 4 0
      platform-dao/src/main/java/com/platform/dao/entity/sqarepartmanage/SparePartInfo.java
  9. 38 0
      platform-dao/src/main/java/com/platform/dao/enums/SbInfoScrapAuditNodeEnum.java
  10. 4 0
      platform-dao/src/main/java/com/platform/dao/enums/SbInfoStatusEnum.java
  11. 1 0
      platform-dao/src/main/java/com/platform/dao/enums/SysRoleCodeEnum.java
  12. 2 0
      platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogDetailTypeEnum.java
  13. 4 0
      platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogTypeEnum.java
  14. 6 2
      platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java
  15. 20 0
      platform-dao/src/main/java/com/platform/dao/util/MessageTemplateUtil.java
  16. 4 0
      platform-dao/src/main/java/com/platform/dao/vo/query/sparepartmanage/SparePartInfoVO.java
  17. 50 0
      platform-dao/src/main/java/com/platform/dao/vo/sb/SbInfoVO.java
  18. 5 1
      platform-dao/src/main/resources/mapper/repair/RepairProjectMapper.xml
  19. 22 2
      platform-dao/src/main/resources/mapper/sb/SbInfoMapper.xml
  20. 3 2
      platform-dao/src/main/resources/mapper/sqarepartmanage/SparePartInfoMapper.xml
  21. 0 4
      platform-rest/src/main/java/com/platform/rest/controller/repair/RepairProjectController.java
  22. 41 0
      platform-rest/src/main/java/com/platform/rest/controller/sb/SbInfoController.java
  23. 90 8
      platform-service/src/main/java/com/platform/service/business/ActivitiBusinessService.java
  24. 2 2
      platform-service/src/main/java/com/platform/service/repair/impl/RepairApplicationFormServiceImpl.java
  25. 6 0
      platform-service/src/main/java/com/platform/service/sb/SbInfoService.java
  26. 154 0
      platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

+ 10 - 0
platform-activiti/src/main/java/com/platform/activiti/service/ActivitiService.java

@@ -51,4 +51,14 @@ public interface ActivitiService {
      * @return
      * @return
      */
      */
     String startProcess(String key, ActApplyInfo applyInfo, String userId, Integer result);
     String startProcess(String key, ActApplyInfo applyInfo, String userId, Integer result);
+
+    /**
+     * 开始节点 - 指定下一个审批人
+     *
+     * @param key
+     * @param applyInfo
+     * @param userId
+     * @return
+     */
+    String startProcess(String key, ActApplyInfo applyInfo, String userId, Integer result, String applyComment);
 }
 }

+ 33 - 0
platform-activiti/src/main/java/com/platform/activiti/service/impl/ActivitiServiceImpl.java

@@ -98,6 +98,7 @@ public class ActivitiServiceImpl implements ActivitiService {
         Model modelEntity = repositoryService.getModel(model.getId());
         Model modelEntity = repositoryService.getModel(model.getId());
         modelEntity.setName(model.getName());
         modelEntity.setName(model.getName());
         modelEntity.setKey(model.getKey());
         modelEntity.setKey(model.getKey());
+        modelEntity.setCategory(model.getCategory());
         modelEntity.setMetaInfo(modelNode.toString());
         modelEntity.setMetaInfo(modelNode.toString());
 
 
         repositoryService.saveModel(modelEntity);
         repositoryService.saveModel(modelEntity);
@@ -189,4 +190,36 @@ public class ActivitiServiceImpl implements ActivitiService {
         taskService.setAssignee(task.getId(), userId);
         taskService.setAssignee(task.getId(), userId);
         return id;
         return id;
     }
     }
+
+    @Override
+    public String startProcess(String key, ActApplyInfo applyInfo, String userId, Integer result, String applyComment) {
+        Map<String, Object> map = new HashMap<>(1);
+        UserInfo user = SecurityUtils.getUserInfo();
+        applyInfo.setUserId(user.getUserId());
+        applyInfo.setUserName(user.getRealName());
+        map.put("data", applyInfo);
+        map.put("userId", applyInfo.getUserId());
+        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, map);
+        if (processInstance == null) {
+            throw new BusinessException(ResultCode.ACTIVITI_PROCESS_NOT_EXIST.getDescription());
+        }
+        String id = processInstance.getProcessInstanceId();
+        Task task = taskService.createTaskQuery().processInstanceId(id).orderByTaskCreateTime().desc().singleResult();
+        Map<String, Object> variables = taskService.getVariables(task.getId());
+        List<ActAuditRecord> records = new ArrayList<>();
+        Object o = variables.get(CommonConstants.ACT_AUDIT_RECORD);
+        if (o != null) {
+            records = (List<ActAuditRecord>) o;
+        }
+        user = SecurityUtils.getUserInfo();
+        records.add(new ActAuditRecord(user.getUserId(), user.getRealName(), applyComment,
+                LocalDateTime.now(), true, task.getId(), PurchaseAuditNodeEnum.START.getValue()));
+        Map<String, Object> data = new HashMap<>();
+        data.put(CommonConstants.ACT_AUDIT_RECORD, records);
+        data.put("result", result);
+        taskService.complete(task.getId(), data);
+        task = taskService.createTaskQuery().processInstanceId(id).orderByTaskCreateTime().desc().singleResult();
+        taskService.setAssignee(task.getId(), userId);
+        return id;
+    }
 }
 }

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/dto/repair/RepairProjectDTO.java

@@ -31,6 +31,10 @@ public class RepairProjectDTO extends BaseDTO implements Serializable{
      */
      */
     @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
     @NotNull(groups = {UpdateGroup.class}, message = "ID不能为空")
     private String id;
     private String id;
+    /**
+     * 维修单id
+     */
+    private String repairId;
     /**
     /**
      * 编码
      * 编码
      */
      */

+ 41 - 0
platform-dao/src/main/java/com/platform/dao/dto/sb/SbInfoDTO.java

@@ -452,4 +452,45 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
      * 有效期搜索结束时间
      * 有效期搜索结束时间
      */
      */
     private LocalDate nextCheckDateEnd;
     private LocalDate nextCheckDateEnd;
+
+    /**
+     * 申请时间
+     */
+    private LocalDateTime applyTime;
+    /**
+     * 审核时间
+     */
+    private LocalDateTime auditTime;
+    /**
+     * 提交审核时间
+     */
+    private LocalDateTime submitTime;
+    /**
+     * 关闭时间
+     */
+    private LocalDateTime closeTime;
+    /**
+     * 关闭描述
+     */
+    private String closeDesc;
+    /**
+     * 工作流实例ID
+     */
+    private String processInstanceId;
+
+    private Integer auditNode;
+
+    /**
+     * 拒绝原因
+     */
+    private String refuseReason;
+
+    /**
+     * 报废创建人
+     */
+    private String scrapUserId;
+    /**
+     * 报废创建人
+     */
+    private String scrapUserName;
 }
 }

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/dto/sqarepartmanage/SparePartInfoDTO.java

@@ -165,6 +165,10 @@ public class SparePartInfoDTO extends BaseDTO implements Serializable {
      * 使用周期:月
      * 使用周期:月
      */
      */
     private BigDecimal usePeriod;
     private BigDecimal usePeriod;
+    /**
+     * 寿命周期:月
+     */
+    private BigDecimal agePeriod;
     /**
     /**
      * 采购到货周期:天
      * 采购到货周期:天
      */
      */

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/entity/repair/RepairProject.java

@@ -25,6 +25,10 @@ public class RepairProject implements Serializable{
      */
      */
         @Id
         @Id
     private String id;
     private String id;
+    /**
+     * 维修单id
+     */
+    private String repairId;
     /**
     /**
      * 编码
      * 编码
      */
      */

+ 40 - 0
platform-dao/src/main/java/com/platform/dao/entity/sb/SbInfo.java

@@ -370,4 +370,44 @@ public class SbInfo implements Serializable {
     @Transient
     @Transient
     private DataScope dataScope;
     private DataScope dataScope;
 
 
+    /**
+     * 申请时间
+     */
+    private LocalDateTime applyTime;
+    /**
+     * 审核时间
+     */
+    private LocalDateTime auditTime;
+    /**
+     * 提交审核时间
+     */
+    private LocalDateTime submitTime;
+    /**
+     * 关闭时间
+     */
+    private LocalDateTime closeTime;
+    /**
+     * 关闭描述
+     */
+    private String closeDesc;
+    /**
+     * 工作流实例ID
+     */
+    private String processInstanceId;
+
+    private Integer auditNode;
+
+    /**
+     * 拒绝原因
+     */
+    private String refuseReason;
+
+    /**
+     * 报废创建人
+     */
+    private String scrapUserId;
+    /**
+     * 报废创建人
+     */
+    private String scrapUserName;
 }
 }

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/entity/sqarepartmanage/SparePartInfo.java

@@ -115,6 +115,10 @@ public class SparePartInfo implements Serializable{
      * 使用周期:月
      * 使用周期:月
      */
      */
     private BigDecimal usePeriod;
     private BigDecimal usePeriod;
+    /**
+     * 寿命周期:月
+     */
+    private BigDecimal agePeriod;
     /**
     /**
      * 采购到货周期:天
      * 采购到货周期:天
      */
      */

+ 38 - 0
platform-dao/src/main/java/com/platform/dao/enums/SbInfoScrapAuditNodeEnum.java

@@ -0,0 +1,38 @@
+package com.platform.dao.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Description 设备一级报废审核节点
+ * @Author liuyu
+ * @Date 2020/05/05
+ * @Version Copyright (c) 2019,安徽阡陌网络科技有限公司 All rights reserved.
+ */
+@Getter
+@AllArgsConstructor
+public enum SbInfoScrapAuditNodeEnum {
+
+    /**
+     * 开始
+     */
+    START(0),
+    /**
+     * 分公司设备主管
+     */
+    FGS_SBZG(20),
+    /**
+     * 分公司财务主管
+     */
+    FGS_CWZG(21),
+    /**
+     * 分公司分管领导
+     */
+    FGS_SBFGLD(30),
+    /**
+     * 结束
+     */
+    END(100);
+    private final Integer value;
+
+}

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/enums/SbInfoStatusEnum.java

@@ -29,6 +29,10 @@ public enum SbInfoStatusEnum {
      * 已报废
      * 已报废
      */
      */
     SCRAPED(4),
     SCRAPED(4),
+    /**
+     * 报废拒绝
+     */
+    REFUSE_SCRAPED(41),
     /**
     /**
      * 置换中
      * 置换中
      */
      */

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

@@ -73,6 +73,7 @@ public enum SysRoleCodeEnum {
      * 分公司设备主管
      * 分公司设备主管
      */
      */
     FGS_SBZG,
     FGS_SBZG,
+    FGS_CWZG,// 财务主管-分公司
     /**
     /**
      * 分公司设备分管领导
      * 分公司设备分管领导
      */
      */

+ 2 - 0
platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogDetailTypeEnum.java

@@ -41,6 +41,8 @@ public enum WorkplaceBacklogDetailTypeEnum {
     SB_OIL_OIL_CONFIRM(14, "设备加油确认通知"),
     SB_OIL_OIL_CONFIRM(14, "设备加油确认通知"),
 
 
     BACK_STORE(15, "退库申请通知"),
     BACK_STORE(15, "退库申请通知"),
+    SB_SCRAP(16, "设备报废通知"),
+    SB_SCRAP_RESULT(161, "设备报废审批结果通知"),
     /**
     /**
      * 采购总需求计划审批结束提醒
      * 采购总需求计划审批结束提醒
      */
      */

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogTypeEnum.java

@@ -25,6 +25,10 @@ public enum WorkplaceBacklogTypeEnum {
      * 维修提醒
      * 维修提醒
      */
      */
     REPAIR(2),
     REPAIR(2),
+    /**
+     * 设备报废
+     */
+    SB_SCRAP(16),
     /**
     /**
      * 接收维修单提醒
      * 接收维修单提醒
      */
      */

+ 6 - 2
platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java

@@ -999,7 +999,9 @@ public class CustomExcelImportUtil {
         String sort = getCellValue(row.getCell(11)).trim();
         String sort = getCellValue(row.getCell(11)).trim();
         record.setSort(Integer.valueOf(sort.substring(0,sort.length()-2 )));
         record.setSort(Integer.valueOf(sort.substring(0,sort.length()-2 )));
         record.setRequirement(row.getCell(12).getStringCellValue().trim());
         record.setRequirement(row.getCell(12).getStringCellValue().trim());
-        record.setName(record.getRequirement().substring(0,4));
+        int length = record.getRequirement().length();
+        length = (length>20)?20:length;
+        record.setName(record.getRequirement().substring(0,length));
         record.setId(IdGeneratorUtils.getObjectId());
         record.setId(IdGeneratorUtils.getObjectId());
         record.setType(CheckStandardTypeEnum.POLLING.getValue());
         record.setType(CheckStandardTypeEnum.POLLING.getValue());
         record.setNo(sbNo);// 需要根据no来判断设备的id
         record.setNo(sbNo);// 需要根据no来判断设备的id
@@ -1014,7 +1016,9 @@ public class CustomExcelImportUtil {
         String sort = getCellValue(row.getCell(8)).trim();
         String sort = getCellValue(row.getCell(8)).trim();
         record.setSort(Integer.valueOf(sort.substring(0,sort.length()-2 )));
         record.setSort(Integer.valueOf(sort.substring(0,sort.length()-2 )));
         record.setRequirement(row.getCell(9).getStringCellValue().trim());
         record.setRequirement(row.getCell(9).getStringCellValue().trim());
-        record.setName(record.getRequirement().substring(0,4));
+        int length = record.getRequirement().length();
+        length = (length>20)?20:length;
+        record.setName(record.getRequirement().substring(0,length));
         record.setId(IdGeneratorUtils.getObjectId());
         record.setId(IdGeneratorUtils.getObjectId());
         record.setType(CheckStandardTypeEnum.POLLING.getValue());
         record.setType(CheckStandardTypeEnum.POLLING.getValue());
         record.setNo(sbNo);// 需要根据no来判断设备的id
         record.setNo(sbNo);// 需要根据no来判断设备的id

+ 20 - 0
platform-dao/src/main/java/com/platform/dao/util/MessageTemplateUtil.java

@@ -14,6 +14,26 @@ public class MessageTemplateUtil {
 
 
     private static DecimalFormat df = new DecimalFormat("###,##0.00");
     private static DecimalFormat df = new DecimalFormat("###,##0.00");
 
 
+    /**
+     * 供应商审批通知内容
+     *
+     * @param applyTitle :
+     * @return :
+     */
+    public static String getSbInfoScrapTask(String applyTitle) {
+        return String.format("您有新的设备报废审批-【%s】待处理,请处理", applyTitle);
+    }
+
+    /**
+     * 供应商审批通知内容
+     *
+     * @param applyTitle :
+     * @param flag       :
+     * @return :
+     */
+    public static String getSbInfoScrapTaskResult(String applyTitle, boolean flag) {
+        return String.format("您的设备报废审批【%s】【%s】,请知悉", applyTitle, flag ? "已同意" : "不同意");
+    }
 
 
     /**
     /**
      * 金额转换
      * 金额转换

+ 4 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/sparepartmanage/SparePartInfoVO.java

@@ -35,6 +35,10 @@ public class SparePartInfoVO extends BaseVO implements Serializable {
      * 使用周期:月
      * 使用周期:月
      */
      */
     private BigDecimal usePeriod;
     private BigDecimal usePeriod;
+    /**
+     * 寿命周期:月
+     */
+    private BigDecimal agePeriod;
     /**
     /**
      * 采购到货周期:天
      * 采购到货周期:天
      */
      */

+ 50 - 0
platform-dao/src/main/java/com/platform/dao/vo/sb/SbInfoVO.java

@@ -405,4 +405,54 @@ public class SbInfoVO extends BaseVO implements Serializable {
     private Integer useType;//自定义类型
     private Integer useType;//自定义类型
 
 
     private List<SbInfoVO> children;
     private List<SbInfoVO> children;
+
+    /**
+     * 申请时间
+     */
+    private LocalDateTime applyTime;
+    /**
+     * 审核时间
+     */
+    private LocalDateTime auditTime;
+    /**
+     * 提交审核时间
+     */
+    private LocalDateTime submitTime;
+    /**
+     * 关闭时间
+     */
+    private LocalDateTime closeTime;
+    /**
+     * 关闭描述
+     */
+    private String closeDesc;
+    /**
+     * 工作流实例ID
+     */
+    private String processInstanceId;
+
+    private Integer auditNode;
+
+    /**
+     * 拒绝原因
+     */
+    private String refuseReason;
+    /**
+     * 当前审批用户
+     */
+    @Transient
+    private String currentAuditUserName;
+    /**
+     * 报废创建人
+     */
+    private String scrapUserId;
+    /**
+     * 报废创建人
+     */
+    private String scrapUserName;
+
+    /**
+     * 申请意见
+     */
+    private String applyComment;
 }
 }

+ 5 - 1
platform-dao/src/main/resources/mapper/repair/RepairProjectMapper.xml

@@ -6,6 +6,7 @@
                                      repairProject.name,
                                      repairProject.name,
                                      repairProject.no,
                                      repairProject.no,
                                      repairProject.type,
                                      repairProject.type,
+                                     repairProject.repair_id,
                                      repairProject.technology,
                                      repairProject.technology,
                                      repairProject.standard_hours,
                                      repairProject.standard_hours,
                                      repairProject.standard_money,
                                      repairProject.standard_money,
@@ -22,7 +23,7 @@
                         </sql>
                         </sql>
     <sql id="Ref_Column_List">
     <sql id="Ref_Column_List">
         repairProject.id,
         repairProject.id,
-                                     repairProject.name,
+                                     repairProject.name,repairProject.repair_id,
                                      repairProject.no,
                                      repairProject.no,
                                      repairProject.type,
                                      repairProject.type,
                                      repairProject.technology,
                                      repairProject.technology,
@@ -40,6 +41,9 @@
         <if test="name != null and name != ''">
         <if test="name != null and name != ''">
             and repairProject.name = #{name}
             and repairProject.name = #{name}
         </if>
         </if>
+        <if test="repairId != null and repairId != ''">
+            and repairProject.repair_id = #{repairId}
+        </if>
         <if test="no != null and no != ''">
         <if test="no != null and no != ''">
             and repairProject.no = #{no}
             and repairProject.no = #{no}
         </if>
         </if>

+ 22 - 2
platform-dao/src/main/resources/mapper/sb/SbInfoMapper.xml

@@ -63,7 +63,17 @@ name, model_id,
         supplier,
         supplier,
         repair_user_second,
         repair_user_second,
         batch_no,
         batch_no,
-        register_date
+        register_date,
+refuse_reason,
+apply_time,
+                                     audit_time,
+                                     submit_time,
+                                     process_instance_id,
+                                     audit_node,
+                                     remark,
+                                     apply_comment,
+scrap_user_id,
+scrap_user_name
     </sql>
     </sql>
 
 
     <sql id="Left_Column">
     <sql id="Left_Column">
@@ -142,7 +152,17 @@ sb.name,  sb.initial_value,
         sb.supplier,
         sb.supplier,
         sb.repair_user_second,
         sb.repair_user_second,
         sb.batch_no,
         sb.batch_no,
-        sb.register_date
+        sb.register_date,
+sb.refuse_reason,
+sb.apply_time,
+                                     sb.audit_time,
+                                     sb.submit_time,
+                                     sb.process_instance_id,
+                                     sb.audit_node,
+                                     sb.remark,
+                                     sb.apply_comment,
+sb.scrap_user_id,
+sb.scrap_user_name
     </sql>
     </sql>
 
 
     <sql id="deptSql">
     <sql id="deptSql">

+ 3 - 2
platform-dao/src/main/resources/mapper/sqarepartmanage/SparePartInfoMapper.xml

@@ -34,8 +34,9 @@
         <result column="zjm" jdbcType="VARCHAR" property="zjm"/>
         <result column="zjm" jdbcType="VARCHAR" property="zjm"/>
         <result column="cd" jdbcType="INTEGER" property="cd"/>
         <result column="cd" jdbcType="INTEGER" property="cd"/>
         <result column="yt" jdbcType="INTEGER" property="yt"/>
         <result column="yt" jdbcType="INTEGER" property="yt"/>
-        <result column="purchase_period" jdbcType="DATE" property="purchasePeriod"/>
-        <result column="use_period" jdbcType="DATE" property="usePeriod"/>
+        <result column="purchase_period" jdbcType="DECIMAL" property="purchasePeriod"/>
+        <result column="age_period" jdbcType="DECIMAL" property="agePeriod"/>
+        <result column="use_period" jdbcType="DECIMAL" property="usePeriod"/>
         <result column="params" jdbcType="VARCHAR" property="params"/>
         <result column="params" jdbcType="VARCHAR" property="params"/>
         <result column="remark" jdbcType="VARCHAR" property="remark"/>
         <result column="remark" jdbcType="VARCHAR" property="remark"/>
         <result column="created_user_id" jdbcType="VARCHAR" property="createdUserId"/>
         <result column="created_user_id" jdbcType="VARCHAR" property="createdUserId"/>

+ 0 - 4
platform-rest/src/main/java/com/platform/rest/controller/repair/RepairProjectController.java

@@ -70,7 +70,6 @@ public class RepairProjectController {
    */
    */
   @SysLog("新增维修项目")
   @SysLog("新增维修项目")
   @PostMapping
   @PostMapping
-  @PreAuthorize("@pms.hasPermission('repair-projects-add')")
   public R save(@Validated({AddGroup.class}) @RequestBody RepairProject checkProject) {
   public R save(@Validated({AddGroup.class}) @RequestBody RepairProject checkProject) {
       return new R<>(checkProjectService.saveModel(checkProject));
       return new R<>(checkProjectService.saveModel(checkProject));
   }
   }
@@ -96,7 +95,6 @@ public class RepairProjectController {
    */
    */
   @SysLog("删除维修项目")
   @SysLog("删除维修项目")
   @DeleteMapping("/{id}")
   @DeleteMapping("/{id}")
-  @PreAuthorize("@pms.hasPermission('repair-projects-edit')")
   public R removeById(@PathVariable String id){
   public R removeById(@PathVariable String id){
     checkProjectService.deleteByPrimaryKey(id);
     checkProjectService.deleteByPrimaryKey(id);
     return new R<>();
     return new R<>();
@@ -110,7 +108,6 @@ public class RepairProjectController {
      */
      */
     @SysLog("批量删除维修项目")
     @SysLog("批量删除维修项目")
     @DeleteMapping("")
     @DeleteMapping("")
-    @PreAuthorize("@pms.hasPermission('repair-projects-del')")
     public R removeIds(@RequestBody List<String> ids){
     public R removeIds(@RequestBody List<String> ids){
         checkProjectService.batchDelete(ids);
         checkProjectService.batchDelete(ids);
         return new R<>();
         return new R<>();
@@ -148,7 +145,6 @@ public class RepairProjectController {
      */
      */
   @GetMapping("/export")
   @GetMapping("/export")
   @SysLog("维修项目导出")
   @SysLog("维修项目导出")
-  @PreAuthorize("@pms.hasPermission('repair-projects-export')")
   public void export(HttpServletResponse response, RepairProjectDTO checkProjectDTO) {
   public void export(HttpServletResponse response, RepairProjectDTO checkProjectDTO) {
     List<RepairProject> list = checkProjectService.getModelListByDTO(checkProjectDTO);
     List<RepairProject> list = checkProjectService.getModelListByDTO(checkProjectDTO);
     ExcelUtil.exportResponseDict(response, ExportRepairProjectVO.class, BeanConverterUtil.copyListProperties(list, ExportCheckProjectVO.class), "维修项目");
     ExcelUtil.exportResponseDict(response, ExportRepairProjectVO.class, BeanConverterUtil.copyListProperties(list, ExportCheckProjectVO.class), "维修项目");

+ 41 - 0
platform-rest/src/main/java/com/platform/rest/controller/sb/SbInfoController.java

@@ -302,6 +302,47 @@ public class SbInfoController {
         return new R<>(sbInfoService.getCountByDTO(sbInfoDTO));
         return new R<>(sbInfoService.getCountByDTO(sbInfoDTO));
     }
     }
 
 
+    /**
+     * 设备报废信息
+     *
+     * @param sbInfoDTO 设备基础信息DTO
+     * @return R
+     */
+    @SysLog("设备报废信息")
+    @PutMapping("/scrap/{id}")
+    //@PreAuthorize("@pms.hasPermission('sb-infos-edit')")
+    public R modModelByDTOForScrap(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody SbInfoDTO sbInfoDTO) {
+        sbInfoService.modModelByDTOForScrap(sbInfoDTO);
+        return new R<>();
+    }
+
+    /**
+     * 直接提交审批申请
+     *
+     * @param sbInfoDTO 设备基础信息DTO
+     * @return R
+     */
+    @SysLog("设备报废直接提交审批申请信息")
+    @PutMapping("/audit/{id}")
+    //@PreAuthorize("@pms.hasPermission('sb-infos-edit')")
+    public R modModelByDTOForScrapForAudit(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody SbInfoDTO sbInfoDTO) {
+        sbInfoService.submitScrapAudit(sbInfoDTO);
+        return new R<>();
+    }
+
+    /**
+     * 审核
+     *
+     * @param id id
+     * @return R
+     */
+    @SysLog("设备报废审核")
+    @PutMapping("/auditProcess/{id}")
+    public R audit(@PathVariable("id") String id, @RequestBody SbInfoDTO sbInfoDTO) {
+        sbInfoService.audit(sbInfoDTO);
+        return new R<>();
+    }
+
     public static void main(String[] args) throws FileNotFoundException {
     public static void main(String[] args) throws FileNotFoundException {
         String[] files = {"C:\\Users\\cyz\\Desktop\\设备型号20210210213928562-0210导入后再导出文件.xls"};
         String[] files = {"C:\\Users\\cyz\\Desktop\\设备型号20210210213928562-0210导入后再导出文件.xls"};
         List<ExportSbInfoVO> list = ExcelImportUtil.importExcel(new FileInputStream(files[0]), ExportSbInfoVO.class,new ImportParams());
         List<ExportSbInfoVO> list = ExcelImportUtil.importExcel(new FileInputStream(files[0]), ExportSbInfoVO.class,new ImportParams());

+ 90 - 8
platform-service/src/main/java/com/platform/service/business/ActivitiBusinessService.java

@@ -107,6 +107,56 @@ public class ActivitiBusinessService {
         return obj;
         return obj;
     }
     }
 
 
+    /**
+     * 开始流程
+     *
+     * @param id
+     * @param now
+     */
+    public ActObj startWorkflow(String id, String name, String projectId, String processId, String activitiName, Integer startNode, String roleCode, LocalDateTime now, Integer result, String applyComment) {
+        // 重新发起
+        UserInfo user = SecurityUtils.getUserInfo();
+        ActApplyInfo applyInfo = new ActApplyInfo(id, name, activitiName, startNode, now);
+        ActObj obj = new ActObj();
+        String userId = getCurrentProjectDeptAudit(projectId, roleCode).getUserId();
+        Task task = null;
+        if (StringUtils.isNotEmpty(processId)) {
+            task = taskService.createTaskQuery().processInstanceId(processId).orderByTaskCreateTime().desc().singleResult();
+            if (task == null) {
+                Map<String, Object> map = new HashMap<>(1);
+                applyInfo.setUserId(user.getUserId());
+                applyInfo.setUserName(user.getRealName());
+                map.put("data", applyInfo);
+                map.put("userId", applyInfo.getUserId());
+                runtimeService.startProcessInstanceById(processId, map);
+                task = taskService.createTaskQuery().processInstanceId(id).orderByTaskCreateTime().desc().singleResult();
+            }
+            Map<String, Object> variables = taskService.getVariables(task.getId());
+            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(), applyComment,
+                    now, true, task.getId(), startNode));
+            Map<String, Object> map = new HashMap<>();
+            map.put(CommonConstants.ACT_AUDIT_RECORD, records);
+            map.put("result", result);
+            taskService.complete(task.getId(), map);
+            task = taskService.createTaskQuery().processInstanceId(processId).orderByTaskCreateTime().desc().singleResult();
+            taskService.setAssignee(task.getId(), userId);
+        } else {
+//            ActApplyInfo applyInfo = new ActApplyInfo(id, name, activitiName, startNode, now);
+            processId = activitiService.startProcess(activitiName, applyInfo, getCurrentProjectDeptAudit(projectId, roleCode).getUserId(), result, applyComment);
+            task = taskService.createTaskQuery().processInstanceId(processId).orderByTaskCreateTime().desc().singleResult();
+        }
+        obj.setTaskId(task.getId());
+        obj.setAssignee(userId);
+        obj.setProcessId(processId);
+        return obj;
+    }
+
     /**
     /**
      * 执行流程
      * 执行流程
      *
      *
@@ -213,14 +263,14 @@ public class ActivitiBusinessService {
      */
      */
     public SysUserVO getCurrentProjectDeptAudit(String projectId, String roleCode) {
     public SysUserVO getCurrentProjectDeptAudit(String projectId, String roleCode) {
         SysUserDTO query = new SysUserDTO();
         SysUserDTO query = new SysUserDTO();
-        if (StringUtils.isNotEmpty(projectId)) {
+       /* if (StringUtils.isNotEmpty(projectId)) {
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
             weekendCriteria.andLike(SysDept::getDeptCode, dept.getDeptCode() + "%");
             weekendCriteria.andLike(SysDept::getDeptCode, dept.getDeptCode() + "%");
             List<SysDept> depts = deptMapper.selectByExample(weekend);
             List<SysDept> depts = deptMapper.selectByExample(weekend);
             query.setDeptIds(depts.stream().map(item -> item.getDeptId()).collect(Collectors.toList()));
             query.setDeptIds(depts.stream().map(item -> item.getDeptId()).collect(Collectors.toList()));
-        }
+        }*/
         query.setRoleCode(roleCode);
         query.setRoleCode(roleCode);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         if (CollectionUtil.isNotEmpty(users)) {
         if (CollectionUtil.isNotEmpty(users)) {
@@ -236,14 +286,14 @@ public class ActivitiBusinessService {
      */
      */
     public List<SysUserVO> getCurrentProjectDeptUserByRole(String projectId, String roleCode) {
     public List<SysUserVO> getCurrentProjectDeptUserByRole(String projectId, String roleCode) {
         SysUserDTO query = new SysUserDTO();
         SysUserDTO query = new SysUserDTO();
-        if (StringUtils.isNotEmpty(projectId)) {
+       /* if (StringUtils.isNotEmpty(projectId)) {
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
             weekendCriteria.andLike(SysDept::getDeptCode, dept.getDeptCode() + "%");
             weekendCriteria.andLike(SysDept::getDeptCode, dept.getDeptCode() + "%");
             List<SysDept> depts = deptMapper.selectByExample(weekend);
             List<SysDept> depts = deptMapper.selectByExample(weekend);
             query.setDeptIds(depts.stream().map(item -> item.getDeptId()).collect(Collectors.toList()));
             query.setDeptIds(depts.stream().map(item -> item.getDeptId()).collect(Collectors.toList()));
-        }
+        }*/
         query.setRoleCode(roleCode);
         query.setRoleCode(roleCode);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         if (CollectionUtil.isNotEmpty(users)) {
         if (CollectionUtil.isNotEmpty(users)) {
@@ -259,7 +309,7 @@ public class ActivitiBusinessService {
      */
      */
     public SysUserVO getLeadDeptAuditUserId(String projectId, String rank, String roleCode) {
     public SysUserVO getLeadDeptAuditUserId(String projectId, String rank, String roleCode) {
         SysUserDTO query = new SysUserDTO();
         SysUserDTO query = new SysUserDTO();
-        if (StringUtils.isNotEmpty(projectId)) {
+        /*if (StringUtils.isNotEmpty(projectId)) {
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
@@ -273,7 +323,7 @@ public class ActivitiBusinessService {
             List<SysDeptVO> deptVOs = sysDeptService.allChildList(new SysDeptDTO().setAncestorList(deptIds));
             List<SysDeptVO> deptVOs = sysDeptService.allChildList(new SysDeptDTO().setAncestorList(deptIds));
             deptIds = deptVOs.stream().map(item -> item.getDeptId()).collect(Collectors.toList());
             deptIds = deptVOs.stream().map(item -> item.getDeptId()).collect(Collectors.toList());
             query.setDeptIds(deptIds);
             query.setDeptIds(deptIds);
-        }
+        }*/
         query.setRoleCode(roleCode);
         query.setRoleCode(roleCode);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         if (CollectionUtil.isNotEmpty(users)) {
         if (CollectionUtil.isNotEmpty(users)) {
@@ -289,7 +339,7 @@ public class ActivitiBusinessService {
      */
      */
     public List<SysUserVO> getLeadDeptUserByRole(String projectId, String rank, String roleCode) {
     public List<SysUserVO> getLeadDeptUserByRole(String projectId, String rank, String roleCode) {
         SysUserDTO query = new SysUserDTO();
         SysUserDTO query = new SysUserDTO();
-        if (StringUtils.isNotEmpty(projectId)) {
+        /*if (StringUtils.isNotEmpty(projectId)) {
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             SysDept dept = deptMapper.selectByPrimaryKey(projectId);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
             WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
@@ -303,7 +353,7 @@ public class ActivitiBusinessService {
             List<SysDeptVO> deptVOs = sysDeptService.allChildList(new SysDeptDTO().setAncestorList(deptIds));
             List<SysDeptVO> deptVOs = sysDeptService.allChildList(new SysDeptDTO().setAncestorList(deptIds));
             deptIds = deptVOs.stream().map(item -> item.getDeptId()).collect(Collectors.toList());
             deptIds = deptVOs.stream().map(item -> item.getDeptId()).collect(Collectors.toList());
             query.setDeptIds(deptIds);
             query.setDeptIds(deptIds);
-        }
+        }*/
         query.setRoleCode(roleCode);
         query.setRoleCode(roleCode);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
         if (CollectionUtil.isNotEmpty(users)) {
         if (CollectionUtil.isNotEmpty(users)) {
@@ -365,6 +415,38 @@ public class ActivitiBusinessService {
         return null;
         return null;
     }
     }
 
 
+    /**
+     * 分公司审批负责人
+     *
+     * @param companyId 分公司id
+     * @param rank 部门标识
+     * @param roleCode 角色代码
+     * @return
+     */
+    public SysUserVO getLeadDeptAuditUserIdInCompany(String companyId, String rank, String roleCode) {
+        SysUserDTO query = new SysUserDTO();
+        /*if (StringUtils.isNotEmpty(companyId)) {
+            SysDept dept = deptMapper.selectByPrimaryKey(companyId);
+            Weekend<SysDept> weekend = new Weekend<>(SysDept.class);
+            WeekendCriteria<SysDept, Object> weekendCriteria = weekend.weekendCriteria();
+            weekendCriteria.andIn(SysDept::getDeptCode, splitCodes(dept.getDeptCode()));
+            weekendCriteria.andEqualTo(SysDept::getNature, rank);
+            List<SysDept> depts = deptMapper.selectByExample(weekend);
+            List<String> deptIds = depts.stream().map(item -> item.getDeptId()).collect(Collectors.toList());
+            if (CollectionUtil.isEmpty(deptIds)) {
+                throw new BusinessException("上级部门不存在:" + dept.getName());
+            }
+            List<SysDeptVO> deptVOs = sysDeptService.allChildList(new SysDeptDTO().setAncestorList(deptIds));
+            deptIds = deptVOs.stream().map(item -> item.getDeptId()).collect(Collectors.toList());
+            query.setDeptIds(deptIds);
+        }*/
+        query.setRoleCode(roleCode);
+        List<SysUserVO> users = userMapper.selectDeptRoleUser(query);
+        if (CollectionUtil.isNotEmpty(users)) {
+            return users.get(0);
+        }
+        throw new BusinessException("部门审批人或者某角色人员没有指定:" + roleCode);
+    }
 
 
     /**
     /**
      * 获取二级项目
      * 获取二级项目

+ 2 - 2
platform-service/src/main/java/com/platform/service/repair/impl/RepairApplicationFormServiceImpl.java

@@ -202,9 +202,9 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
                 info.setStatus(SbInfoStatusEnum.IN_MAINTAIN.getValue());
                 info.setStatus(SbInfoStatusEnum.IN_MAINTAIN.getValue());
                 sbInfoService.modModelByPrimaryKey(info);
                 sbInfoService.modModelByPrimaryKey(info);
             }
             }
-            if (sb.getUseGroup() == null) {
+            /*if (sb.getUseGroup() == null) {
                 throw new BusinessException("找不到设备对应的使用工作组,无法指派维修单,请先设置设备的归属组,sbId" + model.getSbId());
                 throw new BusinessException("找不到设备对应的使用工作组,无法指派维修单,请先设置设备的归属组,sbId" + model.getSbId());
-            }
+            }*/
         }
         }
         model.setOutNo(model.getOutNo());
         model.setOutNo(model.getOutNo());
         model.setNo(IdGeneratorUtils.getRepairApplicaitonFormNo(++count));
         model.setNo(IdGeneratorUtils.getRepairApplicaitonFormNo(++count));

+ 6 - 0
platform-service/src/main/java/com/platform/service/sb/SbInfoService.java

@@ -201,4 +201,10 @@ public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {
     public SbInfo selectByNo(String zbh);
     public SbInfo selectByNo(String zbh);
 
 
     public SbInfo selectByZbh(String zbh);
     public SbInfo selectByZbh(String zbh);
+
+    void modModelByDTOForScrap(SbInfoDTO sbInfoDTO);
+
+    void submitScrapAudit(SbInfoDTO sbInfoDTO);
+
+    void audit(SbInfoDTO sbInfoDTO);
 }
 }

+ 154 - 0
platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

@@ -3,9 +3,12 @@ package com.platform.service.sb.impl;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
+import com.platform.activiti.bean.ActObj;
+import com.platform.activiti.enums.ActApplyEnum;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.bean.AbstractPageResultBean;
 import com.platform.common.constant.CommonConstants;
 import com.platform.common.constant.CommonConstants;
 import com.platform.common.enums.DataFilterTypeEnum;
 import com.platform.common.enums.DataFilterTypeEnum;
+import com.platform.common.enums.ResultCode;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.model.UserInfo;
 import com.platform.common.model.UserInfo;
 import com.platform.common.util.*;
 import com.platform.common.util.*;
@@ -19,6 +22,8 @@ import com.platform.dao.dto.sb.SbModelSpareBomDTO;
 import com.platform.dao.dto.store.SpareRestoreDetailDTO;
 import com.platform.dao.dto.store.SpareRestoreDetailDTO;
 import com.platform.dao.dto.upms.SysDeptDTO;
 import com.platform.dao.dto.upms.SysDeptDTO;
 import com.platform.dao.dto.upms.SysUserDeptDTO;
 import com.platform.dao.dto.upms.SysUserDeptDTO;
+import com.platform.dao.dto.workplace.WorkplaceBacklogDTO;
+import com.platform.dao.dto.workplace.WorkplaceBacklogUserDTO;
 import com.platform.dao.entity.firm.FirmProducer;
 import com.platform.dao.entity.firm.FirmProducer;
 import com.platform.dao.entity.repair.RepairApplicationForm;
 import com.platform.dao.entity.repair.RepairApplicationForm;
 import com.platform.dao.entity.sb.*;
 import com.platform.dao.entity.sb.*;
@@ -34,16 +39,21 @@ import com.platform.dao.mapper.upms.SysDeptMapper;
 import com.platform.dao.mapper.upms.SysFileMapper;
 import com.platform.dao.mapper.upms.SysFileMapper;
 import com.platform.dao.mapper.upms.SysUserDeptMapper;
 import com.platform.dao.mapper.upms.SysUserDeptMapper;
 import com.platform.dao.mapper.upms.SysUserMapper;
 import com.platform.dao.mapper.upms.SysUserMapper;
+import com.platform.dao.mapper.workplace.WorkplaceBacklogUserMapper;
 import com.platform.dao.util.CustomExcelImportUtil;
 import com.platform.dao.util.CustomExcelImportUtil;
+import com.platform.dao.util.MessageTemplateUtil;
 import com.platform.dao.util.UserUtil;
 import com.platform.dao.util.UserUtil;
 import com.platform.dao.vo.SysUserDeptVO;
 import com.platform.dao.vo.SysUserDeptVO;
+import com.platform.dao.vo.SysUserVO;
 import com.platform.dao.vo.export.sb.ExportSbInfoVO;
 import com.platform.dao.vo.export.sb.ExportSbInfoVO;
 import com.platform.dao.vo.export.store.ExportInStoreFormVO;
 import com.platform.dao.vo.export.store.ExportInStoreFormVO;
 import com.platform.dao.vo.query.upms.SysDeptVO;
 import com.platform.dao.vo.query.upms.SysDeptVO;
 import com.platform.dao.vo.sb.SbInfoVO;
 import com.platform.dao.vo.sb.SbInfoVO;
 import com.platform.dao.vo.sb.SbModelVO;
 import com.platform.dao.vo.sb.SbModelVO;
 import com.platform.service.base.impl.BaseServiceImpl;
 import com.platform.service.base.impl.BaseServiceImpl;
+import com.platform.service.business.ActivitiBusinessService;
 import com.platform.service.check.CheckStandardService;
 import com.platform.service.check.CheckStandardService;
+import com.platform.service.event.WorkplaceBacklogEvent;
 import com.platform.service.part.PartInfoService;
 import com.platform.service.part.PartInfoService;
 import com.platform.service.sb.SbInfoService;
 import com.platform.service.sb.SbInfoService;
 import com.platform.service.sb.SbModelSpareBomService;
 import com.platform.service.sb.SbModelSpareBomService;
@@ -57,6 +67,7 @@ import lombok.AllArgsConstructor;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.springframework.core.env.Environment;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
@@ -111,6 +122,8 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
     private final PartInfoService partInfoService;
     private final PartInfoService partInfoService;
     private final SbModelSpareBomService sbModelSpareBomService;
     private final SbModelSpareBomService sbModelSpareBomService;
     private final CheckStandardService checkStandardService;
     private final CheckStandardService checkStandardService;
+    private final WorkplaceBacklogUserMapper backlogUserMapper;
+    private final ActivitiBusinessService activitiBusinessService;
 
 
     private final String useArea = "5e64ac691c527828b2114da0";
     private final String useArea = "5e64ac691c527828b2114da0";
     private final String useCompany = "6063f905eb190003685af6d4";
     private final String useCompany = "6063f905eb190003685af6d4";
@@ -816,6 +829,7 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
                 });
                 });
             }
             }
         }
         }
+        vo.setCurrentAuditUserName(activitiBusinessService.getCurrentAuditUserName(vo.getProcessInstanceId()));
         return vo;
         return vo;
     }
     }
 
 
@@ -1187,4 +1201,144 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
         info.setParentId(null);
         info.setParentId(null);
         mapper.updateByPrimaryKey(info);
         mapper.updateByPrimaryKey(info);
     }
     }
+
+    /**
+     * 提交报废审批,修改状态为-报废中
+     *
+     * @param sbInfoDTO
+     */
+    @Override
+    public void modModelByDTOForScrap(SbInfoDTO sbInfoDTO) {
+        sbInfoDTO.setStatus(SbInfoStatusEnum.IN_SCRAP.getValue());
+        this.modModelByDTO(sbInfoDTO);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void submitScrapAudit(SbInfoDTO sbInfoDTO) {
+        startFlow(sbInfoDTO);
+    }
+
+    private void startFlow(SbInfoDTO sbInfoDTO) {
+        String companyId = SecurityUtils.getUserInfo().getCompanyId();
+        validAuditPerson(companyId);
+        LocalDateTime now = LocalDateTime.now();
+        String projectId = null;
+        String roleCode = SysRoleCodeEnum.FGS_SBZG.name();
+        Integer result = null;
+        Integer auditNode = SbInfoScrapAuditNodeEnum.FGS_SBZG.getValue();
+        if (StringUtils.isNotEmpty(companyId)) {
+            projectId = companyId;
+            roleCode = SysRoleCodeEnum.FGS_SBZG.name();
+            result = 2;
+            auditNode = SbInfoScrapAuditNodeEnum.FGS_SBZG.getValue();
+        }
+        ActObj obj = activitiBusinessService.startWorkflow(sbInfoDTO.getId(), sbInfoDTO.getName() + "-" +  sbInfoDTO.getNo(), projectId, sbInfoDTO.getProcessInstanceId(),
+                ActApplyEnum.SB_INFO_SCRAP.getName(), SbInfoScrapAuditNodeEnum.START.getValue(), roleCode,
+                now, result, sbInfoDTO.getRemark());
+        // 通知消息
+        SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(new WorkplaceBacklogDTO(WorkplaceBacklogTypeEnum.SB_SCRAP.getValue(),
+                WorkplaceBacklogDetailTypeEnum.SB_SCRAP.getValue(),
+                obj.getTaskId(), MessageTemplateUtil.getSbInfoScrapTask(sbInfoDTO.getName() + "-" + sbInfoDTO.getNo()),
+                sbInfoDTO.getId(), ListUtils.newArrayList(obj.getAssignee()))));
+        sbInfoDTO.setProcessInstanceId(obj.getProcessId());
+        sbInfoDTO.setAuditNode(auditNode);
+        sbInfoDTO.setStatus(SbInfoStatusEnum.IN_SCRAP.getValue());
+        sbInfoDTO.setScrapUserId(SecurityUtils.getUserInfo().getUserId());
+        sbInfoDTO.setScrapUserName(SecurityUtils.getUserInfo().getRealName());
+        this.modModelByDTO(sbInfoDTO);
+    }
+
+    /**
+     * 校验分公司设备主管,分公司分管领导审批人是否设置
+     */
+    private void validAuditPerson(String companyId) {
+        SysUserVO user = activitiBusinessService.getLeadDeptAuditUserIdInCompany(companyId, null, SysRoleCodeEnum.FGS_SBZG.name());
+        if (user == null) {
+            throw new BusinessException("该项目审批流程中分公司设备主管未设置");
+        }
+        user = activitiBusinessService.getLeadDeptAuditUserIdInCompany(companyId, null, SysRoleCodeEnum.FGS_CWZG.name());
+        if (user == null) {
+            throw new BusinessException("该项目审批流程中分公司财务未设置");
+        }
+        user = activitiBusinessService.getLeadDeptAuditUserIdInCompany(companyId, null, SysRoleCodeEnum.FGS_SBFGLD.name());
+        if (user == null) {
+            throw new BusinessException("该项目审批流程中分公司分管领导未设置");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
+    public void audit(SbInfoDTO record) {
+        String id = record.getId();
+        SbInfo sbInfo = mapper.selectByPrimaryKeyForUpdate(id);
+        if (sbInfo == null) {
+            throw new BusinessException(ResultCode.DATA_NOT_EXIST);
+        }
+        Integer result;
+        Integer node = sbInfo.getAuditNode();
+        Integer nextNode = node;
+        String roleCode = null;
+        if (!record.getAuditFlag()) {
+            result = 0;
+        } else {
+            result = 2;
+            if (SbInfoScrapAuditNodeEnum.FGS_SBZG.getValue().equals(node)) {
+                roleCode = SysRoleCodeEnum.FGS_CWZG.name();
+                nextNode = SbInfoScrapAuditNodeEnum.FGS_CWZG.getValue();
+            } else if (SbInfoScrapAuditNodeEnum.FGS_CWZG.getValue().equals(node)) {
+                roleCode = SysRoleCodeEnum.FGS_SBFGLD.name();
+                nextNode = SbInfoScrapAuditNodeEnum.FGS_SBFGLD.getValue();
+            } else {
+                result = 1;
+            }
+        }
+        // 更新
+        UserInfo user = SecurityUtils.getUserInfo();
+        SbInfo update = new SbInfo();
+        LocalDateTime now = LocalDateTime.now();
+        update.setId(id);
+        if (result == 0) {
+            update.setStatus(SbInfoStatusEnum.REFUSE_SCRAPED.getValue());
+            update.setAuditNode(SbInfoScrapAuditNodeEnum.START.getValue());
+        } else if (result == 1) {
+            update.setStatus(SbInfoStatusEnum.SCRAPED.getValue());
+            update.setAuditNode(SbInfoScrapAuditNodeEnum.END.getValue());
+            update.setAuditTime(now);
+        } else {
+            update.setAuditNode(nextNode);
+        }
+        update.setRefuseReason(record.getRefuseReason());
+        update.setUpdateTime(now);
+        update.setUpdateUserId(user.getUserId());
+        update.setUpdateUserName(user.getRealName());
+        mapper.updateByPrimaryKeySelective(update);
+
+        // 执行审批流程
+        ActObj obj = activitiBusinessService.executeFlow(record.getTaskId(), sbInfo.getProcessInstanceId(), null, result,
+                record.getRefuseReason(), record.getAuditFlag(), node, roleCode, null, LocalDateTime.now());
+        String assignee = obj.getAssignee();
+        WorkplaceBacklogDTO dto = null;
+        if (result > 1 && StringUtils.isNotEmpty(assignee)) {
+            dto = new WorkplaceBacklogDTO(WorkplaceBacklogTypeEnum.SB_SCRAP.getValue(),
+                    WorkplaceBacklogDetailTypeEnum.SB_SCRAP.getValue(),
+                    obj.getTaskId(), MessageTemplateUtil.getSbInfoScrapTask(sbInfo.getName() + "-" + sbInfo.getNo()),
+                    sbInfo.getId(), ListUtils.newArrayList(obj.getAssignee()));
+        }
+        if (result == 1 || result == 0) {
+            dto = new WorkplaceBacklogDTO(WorkplaceBacklogTypeEnum.SB_SCRAP.getValue(),
+                    WorkplaceBacklogDetailTypeEnum.SB_SCRAP_RESULT.getValue(),
+                    obj.getTaskId(), MessageTemplateUtil.getSbInfoScrapTaskResult(sbInfo.getName() + "-" + sbInfo.getNo(), result == 1),
+                    sbInfo.getId(), ListUtils.newArrayList(sbInfo.getScrapUserId()));
+        }
+        if (dto != null) {
+            // 通知消息
+            SpringContextHolder.publishEvent(new WorkplaceBacklogEvent(dto));
+        }
+        WorkplaceBacklogUserDTO backlogUserDTO = new WorkplaceBacklogUserDTO();
+        backlogUserDTO.setUserId(SecurityUtils.getUserInfo().getUserId());
+        backlogUserDTO.setOtherId(sbInfo.getId());
+        backlogUserDTO.setDetailType(WorkplaceBacklogDetailTypeEnum.SB_SCRAP_RESULT.getValue());
+        backlogUserMapper.updateByUser(backlogUserDTO);
+    }
 }
 }