Browse Source

维修优化

guarantee-lsq 2 years ago
parent
commit
dc37695c93

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

@@ -275,6 +275,7 @@ public interface CommonConstants {
     String CALL_REPAIR_SUCCESS = "3"; // 报修工单,成功归档
     String CALL_REPAIR_SUCCESS = "3"; // 报修工单,成功归档
     String CALL_REPAIR_RECEIVE = "4"; // 报修成功 工程师接单
     String CALL_REPAIR_RECEIVE = "4"; // 报修成功 工程师接单
     String CALL_REPAIR_COMPLETE = "5"; // 报修成功 工程师结单 给相关领导推送消息
     String CALL_REPAIR_COMPLETE = "5"; // 报修成功 工程师结单 给相关领导推送消息
+    String SB_CALL_REPAIR = "6"; // 设备报修审核通知
     // 维修记录
     // 维修记录
     String REPAIR_RECORD_EDIT_ADD = "1";
     String REPAIR_RECORD_EDIT_ADD = "1";
     String REPAIR_RECORD_EDIT_STOP = "2";
     String REPAIR_RECORD_EDIT_STOP = "2";
@@ -285,15 +286,21 @@ public interface CommonConstants {
     String CALL_REPAIR_FAIL = "4";
     String CALL_REPAIR_FAIL = "4";
     String CALL_REPAIR_FINISH = "5";
     String CALL_REPAIR_FINISH = "5";
     String REPORT_REPAIR = "6";  // 主管派单
     String REPORT_REPAIR = "6";  // 主管派单
+    String PRODUCE_REFUSED_MANAGER = "7";  // 内部报修,生产拒绝消息
+
+    String CALL_REPAIR_NOTICE_PLAN = "11"; // 内部报修单
     // 维修审核
     // 维修审核
-    Integer TYPE_REPAIR_MANAGER_VERIFY = 1;    // 维修主管审核
-    Integer TYPE_CALLER_VERIFY = 2;     //报修人审核
+    Integer TYPE_REPAIR_MANAGER_VERIFY = 1;    // 维修工程师审核
+    Integer TYPE_CALLER_VERIFY = 2;     //报修人(生产)审核
+    Integer TYPE_PLAN_MM_VERIFY = 3;     //经理审核
     Integer STATUS_VERIFY_PASS = 1; // 审核通过
     Integer STATUS_VERIFY_PASS = 1; // 审核通过
     Integer STATUS_VERIFY_REFUSED = 2; // 审核驳回
     Integer STATUS_VERIFY_REFUSED = 2; // 审核驳回
     String THIRD_PARTY_YONGYOU = "用友";
     String THIRD_PARTY_YONGYOU = "用友";
     // 区域负责人通知类型
     // 区域负责人通知类型
     String MM_CLOSE_REPAIR = "1"; // 关闭工单
     String MM_CLOSE_REPAIR = "1"; // 关闭工单
     String MM_REPAIR_UP = "2"; // 维修上报
     String MM_REPAIR_UP = "2"; // 维修上报
+    String MM_REPAIR_CALLER = "3"; // 内部报修审核通知
+    String PRODUCE_REFUSED = "4"; // 内部报修,生产拒绝消息
     /**
     /**
      * 龙岩维修 end
      * 龙岩维修 end
      */
      */

+ 1 - 1
platform-dao/src/main/java/com/platform/dao/dto/repair/RepairVerifyRecordTemplateData.java

@@ -21,7 +21,7 @@ public class RepairVerifyRecordTemplateData implements Serializable {
     private String remark;
     private String remark;
 
 
     /**
     /**
-     * 审核类型 1 维系主管审核 2 报修生产审核
+     * 审核类型 1 维修工程师审核 2 生产审核  3 内部报修经理审核
      */
      */
     private Integer type;
     private Integer type;
 }
 }

+ 14 - 0
platform-dao/src/main/java/com/platform/dao/entity/repair/RepairApplicationForm.java

@@ -312,4 +312,18 @@ public class RepairApplicationForm implements Serializable {
 
 
     private String repairType; // 工作类型
     private String repairType; // 工作类型
 
 
+    /**
+     * 生产审核人ID
+     */
+    private String produceVerifyUserId;
+
+    /**
+     * 计划性维修等级  大 中 小
+     */
+    private String repairPlanLevel;
+
+    /**
+     * 挂起原因
+     */
+    private String hangUpReason;
 }
 }

+ 24 - 0
platform-dao/src/main/java/com/platform/dao/enums/RepairApplicationFormStatusEnum.java

@@ -71,6 +71,30 @@ public enum RepairApplicationFormStatusEnum {
      * 工单关闭
      * 工单关闭
      */
      */
     MM_REPAIR_CLOSE(14),
     MM_REPAIR_CLOSE(14),
+    /**
+     * 报修一审中
+     */
+    CALLER_REPAIR_VERIFYING_ONE(15),
+    /**
+     * 报修一审被拒
+     */
+    CALLER_REPAIR_VERIFY_FAIL_ONE(16),
+    /**
+     * 报修二审中
+     */
+    CALLER_REPAIR_VERIFYING_TWO(17),
+    /**
+     * 报修二审审被拒
+     */
+    CALLER_REPAIR_VERIFY_FAIL_TWO(18),
+    /**
+     * 报修三审被中
+     */
+    CALLER_REPAIR_VERIFYING_THREE(19),
+    /**
+     * 报修三审审被拒
+     */
+    CALLER_REPAIR_VERIFY_FAIL_THREE(20),
     ;
     ;
     private final Integer value;
     private final Integer value;
 }
 }

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

@@ -48,6 +48,7 @@ public enum SysConfigEnum {
     REPAIR_STRATEGY_MODEL("维修策略模式选择"),
     REPAIR_STRATEGY_MODEL("维修策略模式选择"),
     STORE_SUPER_USERS("仓库管理中的超级用户集合"),
     STORE_SUPER_USERS("仓库管理中的超级用户集合"),
     REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID("报修后通知维修主管"),
     REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID("报修后通知维修主管"),
+    PRODUCE_VERIFY_USERS("生产审核人员配置"),
     REPAIR_RECEIVE_SUCCESS_WECHAT_TEMPLATE_ID("报修接收后通知报修人"),
     REPAIR_RECEIVE_SUCCESS_WECHAT_TEMPLATE_ID("报修接收后通知报修人"),
     REPAIR_NOTICE_SUCCESS_WECHAT_TEMPLATE_ID("派工后通知维修人"),
     REPAIR_NOTICE_SUCCESS_WECHAT_TEMPLATE_ID("派工后通知维修人"),
     REPAIR_TWENTY_FOUR_USER("24小时值班人"),
     REPAIR_TWENTY_FOUR_USER("24小时值班人"),

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

@@ -158,6 +158,10 @@ public enum SysRoleCodeEnum {
      * 巡检主管
      * 巡检主管
      */
      */
     FILL_CHECKER_LEADER,
     FILL_CHECKER_LEADER,
+    /**
+     * 设备报修-生产审核
+     */
+    SB_CALLER_VERIFY,
     ;
     ;
 
 
 }
 }

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

@@ -24,11 +24,14 @@ public enum WorkplaceBacklogDetailTypeEnum {
     REPAIR_MANAGE_RECEIVE(17, "工程师接单通知"),
     REPAIR_MANAGE_RECEIVE(17, "工程师接单通知"),
     REPAIR_REPORT_LEADER(18, "维修上报通知"),
     REPAIR_REPORT_LEADER(18, "维修上报通知"),
     REPAIR_REPORT_CLOSE(26, "维修工单关闭"),
     REPAIR_REPORT_CLOSE(26, "维修工单关闭"),
+    REPAIR_REPORT_CALLER_VERIFY(27, "报修审核通知"),
+    PRODUCE_VERIFY_REFUSED(29, "报修审核被拒通知"),
     REPAIR_REPORT_LEADER_TRANSFER(19, "主管派单通知"),
     REPAIR_REPORT_LEADER_TRANSFER(19, "主管派单通知"),
     REPAIR_DISPATCH(4, "维修派工通知"),
     REPAIR_DISPATCH(4, "维修派工通知"),
     REPAIR_BACK(5, "维修驳回通知"),
     REPAIR_BACK(5, "维修驳回通知"),
     REPAIR_OK(6, "维修结束通知"),
     REPAIR_OK(6, "维修结束通知"),
     REPAIR_RECEIVE(23, "维修接收通知"),
     REPAIR_RECEIVE(23, "维修接收通知"),
+    SB_CALLER_REPAIR(28, "设备部报修审核"),
     REPAIR_EXAMINE(24, "维修审核通知"),
     REPAIR_EXAMINE(24, "维修审核通知"),
     CHECK_RUN_EXPIRE(7, "润滑任务过期通知"),
     CHECK_RUN_EXPIRE(7, "润滑任务过期通知"),
     CHECK_BAOYANG_EXPIRE(8, "保养任务过期通知"),
     CHECK_BAOYANG_EXPIRE(8, "保养任务过期通知"),

+ 3 - 0
platform-dao/src/main/resources/mapper/repair/RepairApplicationFormMapper.xml

@@ -353,6 +353,9 @@
             <if test="repairDeptId != null and repairDeptId != ''">
             <if test="repairDeptId != null and repairDeptId != ''">
                 repair_dept_id = #{repairDeptId},
                 repair_dept_id = #{repairDeptId},
             </if>
             </if>
+            <if test="hangUpReason != null and hangUpReason != ''">
+                hang_up_reason = #{hangUpReason},
+            </if>
         </set>
         </set>
         where id = #{id}
         where id = #{id}
     </update>
     </update>

+ 41 - 0
platform-service/src/main/java/com/platform/service/repair/strategy/RepairBaseStrategy.java

@@ -40,12 +40,14 @@ public interface RepairBaseStrategy {
 
 
     /**
     /**
      * 审核通过
      * 审核通过
+     * 工程师审核计划性报修/日常维修
      * @param model
      * @param model
      */
      */
     void verifyRepair(RepairApplicationFormDTO model);
     void verifyRepair(RepairApplicationFormDTO model);
 
 
     /**
     /**
      * 审核不通过
      * 审核不通过
+     * 工程师审核计划性报修/日常维修
      */
      */
     RepairApplicationFormDTO verifyRefused(RepairApplicationFormDTO model);
     RepairApplicationFormDTO verifyRefused(RepairApplicationFormDTO model);
 
 
@@ -93,4 +95,43 @@ public interface RepairBaseStrategy {
      * @return
      * @return
      */
      */
     RepairApplicationFormDTO closeRepair(RepairApplicationFormDTO dto);
     RepairApplicationFormDTO closeRepair(RepairApplicationFormDTO dto);
+
+    /**
+     * 经理审核报修
+     * @param model
+     */
+    void verifyRepairByMM(RepairApplicationFormDTO model);
+
+    /**
+     * 经理审核报修不通过
+     */
+    void verifyRefusedByMM(RepairApplicationFormDTO model);
+
+    /**
+     * 生产审核报修
+     * @param model
+     */
+    void verifyRepairByProduce(RepairApplicationFormDTO model);
+
+    /**
+     * 生产审核报修不通过
+     */
+    void verifyRefusedByProduce(RepairApplicationFormDTO model);
+
+    /**
+     * 生产被拒单子,再次发起审核
+     * @param model
+     */
+    void applyVerify(RepairApplicationFormDTO model);
+
+    /**
+     * 非计划性维修转计划性维修
+     */
+    void nonPlanTransferToPlan(RepairApplicationFormDTO model);
+
+    /**
+     * 维修挂起解除
+     * @param model
+     */
+    void recoverRepair(RepairApplicationFormDTO model);
 }
 }

+ 40 - 0
platform-service/src/main/java/com/platform/service/repair/strategy/impl/AllocateRepairBaseStrategy.java

@@ -265,6 +265,46 @@ public class AllocateRepairBaseStrategy extends AbstractRepairBaseStrategy {
         return model;
         return model;
     }
     }
 
 
+    @Override
+    public RepairApplicationFormDTO closeRepair(RepairApplicationFormDTO dto) {
+        return null;
+    }
+
+    @Override
+    public void verifyRepairByMM(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRefusedByMM(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRepairByProduce(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRefusedByProduce(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void applyVerify(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void nonPlanTransferToPlan(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void recoverRepair(RepairApplicationFormDTO model) {
+
+    }
+
     @Override
     @Override
     public RepairApplicationFormDTO handleRepair(RepairApplicationFormDTO dto) {
     public RepairApplicationFormDTO handleRepair(RepairApplicationFormDTO dto) {
         super.handleRepair(dto);
         super.handleRepair(dto);

+ 40 - 0
platform-service/src/main/java/com/platform/service/repair/strategy/impl/BaseRepairBaseStrategy.java

@@ -192,6 +192,46 @@ public class BaseRepairBaseStrategy extends AbstractRepairBaseStrategy {
         return model;
         return model;
     }
     }
 
 
+    @Override
+    public RepairApplicationFormDTO closeRepair(RepairApplicationFormDTO dto) {
+        return null;
+    }
+
+    @Override
+    public void verifyRepairByMM(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRefusedByMM(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRepairByProduce(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRefusedByProduce(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void applyVerify(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void nonPlanTransferToPlan(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void recoverRepair(RepairApplicationFormDTO model) {
+
+    }
+
     @Override
     @Override
     public RepairApplicationFormDTO handleRepair(RepairApplicationFormDTO dto) {
     public RepairApplicationFormDTO handleRepair(RepairApplicationFormDTO dto) {
         super.handleRepair(dto);
         super.handleRepair(dto);

+ 253 - 38
platform-service/src/main/java/com/platform/service/repair/strategy/impl/LongYanPlanRepairStrategy.java

@@ -1,5 +1,6 @@
 package com.platform.service.repair.strategy.impl;
 package com.platform.service.repair.strategy.impl;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.platform.common.cache.ConfigCache;
 import com.platform.common.cache.ConfigCache;
 import com.platform.common.constant.CommonConstants;
 import com.platform.common.constant.CommonConstants;
 import com.platform.common.exception.DeniedException;
 import com.platform.common.exception.DeniedException;
@@ -82,23 +83,22 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
         // 报修人
         // 报修人
         form.setActualUser(SecurityUtils.getUserInfo().getUsername());
         form.setActualUser(SecurityUtils.getUserInfo().getUsername());
         form.setUserId(SecurityUtils.getUserInfo().getUserId());
         form.setUserId(SecurityUtils.getUserInfo().getUserId());
+        // 同时也是维修人
+        form.setRepairUserId(form.getUserId());
+        form.setRepairUserName(form.getActualUser());
         // 区域负责人
         // 区域负责人
         form.setReportLeaderId(getReportLeaderId(model.getSbId()));
         form.setReportLeaderId(getReportLeaderId(model.getSbId()));
+        // 状态修改为待审核
+        form.setStatus(RepairApplicationFormStatusEnum.CALLER_REPAIR_VERIFYING_ONE.getValue());
         repairApplicationFormMapper.insert(form);
         repairApplicationFormMapper.insert(form);
         // 记录维修状态跟踪
         // 记录维修状态跟踪
-        addRepairStatusRecord(form,"报修");
+        String statusRemark = "计划性维修";
+        if(model.getCategory() == CommonConstants.NORMAL){
+            statusRemark = "日常维修";
+        }
+        addRepairStatusRecord(form,statusRemark);
         // 给相关的工程师推送信息
         // 给相关的工程师推送信息
         sendMessageToRepairManger(form,sysUserVOList,CommonConstants.CALL_REPAIR_NOTICE);
         sendMessageToRepairManger(form,sysUserVOList,CommonConstants.CALL_REPAIR_NOTICE);
-        // 给该部门班组长推送信息
-        List<SysUserVO> banzuzhangs = getRepairMangers(repairDeptId,null,SysRoleCodeEnum.Maintenance_Leader.name());
-        if(banzuzhangs != null && banzuzhangs.size() > 0){
-            sendMessageToRepairManger(form,banzuzhangs,CommonConstants.CALL_REPAIR_NOTICE);
-        }
-        // 给二十四小时人员发送信息
-        String everyWhereUsers = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_TWENTY_FOUR_USER.name());
-        if(StringUtils.isNotBlank(everyWhereUsers)){
-            sendMessageToRepairManger(form,getUserVOs(everyWhereUsers.trim()),CommonConstants.CALL_REPAIR_NOTICE);
-        }
         return form;
         return form;
     }
     }
 
 
@@ -122,15 +122,6 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
         return sbPositionMapper.getById(positionId).getUserId();
         return sbPositionMapper.getById(positionId).getUserId();
     }
     }
 
 
-    public static void main(String[] args) {
-        Map<String,String> maps = new HashMap<>();
-        maps.put("13410011001","12121,2323,2323");
-        maps.put("13410011002","12121,2323,2323");
-        System.out.println(JsonUtils.objectToJson(maps));
-        Map<String,String> covertMap = JsonUtils.jsonToMap("{\"13410011002\":\"12121,2323,2323\",\"13410011001\":\"12121,2323,2323\"}");
-        System.out.println(covertMap.get("13410011001"));
-    }
-
     /**
     /**
      * 获取当前用户的角色集合
      * 获取当前用户的角色集合
      * @return
      * @return
@@ -394,7 +385,7 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
         // 3、状态记录表
         // 3、状态记录表
         addRepairStatusRecord(updRepair,"维修上报");
         addRepairStatusRecord(updRepair,"维修上报");
         // 4、通知你上报的人
         // 4、通知你上报的人
-        sendMessageToReportLeader(form,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(model.getReportLeaderId()),SysUserVO.class));
+        sendMessageToReportLeader(form,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(model.getReportLeaderId()),SysUserVO.class),CommonConstants.MM_REPAIR_UP);
     }
     }
 
 
     /**
     /**
@@ -465,7 +456,7 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
                 form.setStatus(RepairApplicationFormStatusEnum.MM_REPAIR_FAIL.getValue());
                 form.setStatus(RepairApplicationFormStatusEnum.MM_REPAIR_FAIL.getValue());
             }
             }
             // 上报通知
             // 上报通知
-            sendMessageToReportLeader(existForm,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(leaderId),SysUserVO.class));
+            sendMessageToReportLeader(existForm,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(leaderId),SysUserVO.class),CommonConstants.MM_REPAIR_UP);
         }
         }
         repairApplicationFormMapper.updateLongYan(form);
         repairApplicationFormMapper.updateLongYan(form);
         // 添加状态记录
         // 添加状态记录
@@ -478,6 +469,169 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
         return null;
         return null;
     }
     }
 
 
+    /**
+     * 经理审核报修
+     * @param model
+     */
+    @Override
+    public void verifyRepairByMM(RepairApplicationFormDTO model) {
+        // 判断是否具有权限
+        String roles = getCurrentRoles();
+        if(!roles.contains(SysRoleCodeEnum.MM.name())){
+            throw new DeniedException("对不起,您不具有审核权限");
+        }
+        String produceUser = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.PRODUCE_VERIFY_USERS.name());
+        if(StringUtils.isBlank(produceUser)){
+            throw new DeniedException("生产审核人员为空,请先配置!");
+        }
+        RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
+        // 修改工单状态
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(form.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.CALLER_REPAIR_VERIFYING_THREE.getValue());
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updForm);
+        // 添加跟踪状态
+        addRepairStatusRecord(form,"经理审核");
+        // 添加审核记录
+        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_PLAN_MM_VERIFY);
+        List<String> userNames = JSONArray.parseArray(produceUser,String.class);
+        List<SysUser> users = ListUtils.newArrayList();
+        userNames.forEach(item -> {
+            users.add(sysUserService.selectByUsername(item));
+        });
+        // 通知生产审核
+        sendMessageToProducer(model,CommonConstants.SB_CALL_REPAIR,users);
+    }
+
+    /**
+     * 经理审核报修不通过
+     * @param model
+     */
+    @Override
+    public void verifyRefusedByMM(RepairApplicationFormDTO model) {
+        // 判断是否具有权限
+        String roles = getCurrentRoles();
+        if(!roles.contains(SysRoleCodeEnum.MM.name())){
+            throw new DeniedException("对不起,您不具有审核权限");
+        }
+        RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
+        // 修改工单状态
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(form.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.CALLER_REPAIR_VERIFY_FAIL_TWO.getValue());
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updForm);
+        // 添加跟踪状态
+        addRepairStatusRecord(form,"经理审核不通过");
+        // 添加审核记录
+        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_REFUSED, CommonConstants.TYPE_PLAN_MM_VERIFY);
+        // 通知报修人报修人审核被拒
+        sendMessageToRepairCaller(model,CommonConstants.CALL_REPAIR_REFUSED);
+    }
+
+    /**
+     * 生产审核报修
+     * @param model
+     */
+    @Override
+    public void verifyRepairByProduce(RepairApplicationFormDTO model) {
+        // 判断是否具有权限
+        String roles = getCurrentRoles();
+        if(!roles.contains(SysRoleCodeEnum.SB_CALLER_VERIFY.name())){
+            throw new DeniedException("对不起,您不具有审核权限");
+        }
+        RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
+        // 修改工单状态
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(form.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+        // 生产审核人
+        updForm.setProduceVerifyUserId(SecurityUtils.getUserInfo().getUserId());
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updForm);
+        // 添加跟踪状态
+        addRepairStatusRecord(form,"生产审核通过");
+        // 添加审核记录
+        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_CALLER_VERIFY);
+        // 添加追踪状态
+        addRepairStatusRecord(form,"维修中");
+        // 添加维修记录
+        model.setRepairUserId(form.getRepairUserId());
+        model.setRepairUserName(form.getRepairUserName());
+        addRepairRecord(model);
+        // 通知维修人可以进行维修
+        sendMessageToRepairer(model);
+    }
+
+    /**
+     * 生产审核报修不通过
+     * @param model
+     */
+    @Override
+    public void verifyRefusedByProduce(RepairApplicationFormDTO model) {
+        // 判断是否具有权限
+        String roles = getCurrentRoles();
+        if(!roles.contains(SysRoleCodeEnum.SB_CALLER_VERIFY.name())){
+            throw new DeniedException("对不起,您不具有审核权限");
+        }
+        RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
+        // 修改工单状态
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(form.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.CALLER_REPAIR_VERIFY_FAIL_THREE.getValue());
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updForm);
+        // 添加跟踪状态
+        addRepairStatusRecord(form,"生产审核不通过");
+        // 添加审核记录
+        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_REFUSED, CommonConstants.TYPE_CALLER_VERIFY);
+        // 通知经理和工程师审核被拒
+        SysUserVO leaderVO = sysUserService.selectUserVO(form.getReportLeaderId());
+        sendMessageToReportLeader(form,leaderVO,CommonConstants.PRODUCE_REFUSED);
+        // 通知工程师
+        List<SysUserVO> managers = ListUtils.newArrayList();
+        managers.add(sysUserService.selectUserVO(form.getDispatchUserId()));
+        sendMessageToRepairManger(form,managers,CommonConstants.PRODUCE_REFUSED_MANAGER);
+    }
+
+    @Override
+    public void applyVerify(RepairApplicationFormDTO model) {
+        // 判断是否具有权限
+        String roles = getCurrentRoles();
+        if(!roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
+            throw new DeniedException("对不起,您不具有权限");
+        }
+        String produceUser = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.PRODUCE_VERIFY_USERS.name());
+        if(StringUtils.isBlank(produceUser)){
+            throw new DeniedException("生产审核人员为空,请先配置!");
+        }
+        RepairApplicationForm form = repairApplicationFormMapper.selectByPrimaryKey(model.getId());
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(form.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.CALLER_REPAIR_VERIFYING_THREE.getValue());
+        // 添加跟踪状态
+        addRepairStatusRecord(form,"再次发起审核");
+        // 添加审核记录
+        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_REPAIR_MANAGER_VERIFY);
+        List<String> userNames = JSONArray.parseArray(produceUser,String.class);
+        List<SysUser> users = ListUtils.newArrayList();
+        userNames.forEach(item -> {
+            users.add(sysUserService.selectByUsername(item));
+        });
+        // 通知生产审核
+        sendMessageToProducer(model,CommonConstants.SB_CALL_REPAIR,users);
+    }
+
+    @Override
+    public void nonPlanTransferToPlan(RepairApplicationFormDTO model) {
+        // 修改工单类型以及级别
+        // 班组长-工程师-经理具有这个权限-暂时放开
+
+
+    }
+
+    @Override
+    public void recoverRepair(RepairApplicationFormDTO model) {
+
+    }
+
     /**
     /**
      * 维修人提交维修完成
      * 维修人提交维修完成
      * @param dto
      * @param dto
@@ -602,36 +756,43 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
     public void verifyRepair(RepairApplicationFormDTO model) {
     public void verifyRepair(RepairApplicationFormDTO model) {
         // 判断是否具有权限
         // 判断是否具有权限
         String roles = getCurrentRoles();
         String roles = getCurrentRoles();
-        if(!roles.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
+        if(!roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
             throw new DeniedException("对不起,您不具有审核权限");
             throw new DeniedException("对不起,您不具有审核权限");
         }
         }
-        super.verifyRepair(model);
         RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
         RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
+        // 修改工单状态
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(form.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.CALLER_REPAIR_VERIFYING_TWO.getValue());
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updForm);
         // 添加跟踪状态
         // 添加跟踪状态
-        addRepairStatusRecord(form,"维修完成");
+        addRepairStatusRecord(form,"工程师审核");
         // 添加审核记录
         // 添加审核记录
-        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_CALLER_VERIFY);
-        // 通知主管,是否通知维修人
-        SysUserVO vo = BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(form.getDispatchUserId()),SysUserVO.class);
-        //sendMessageToRepairManger(form,vo,CommonConstants.CALL_REPAIR_FINISH);
+        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_REPAIR_MANAGER_VERIFY);
+        // 通知经理审核
+        SysUserVO vo = sysUserService.selectUserVO(form.getReportLeaderId());
+        sendMessageToReportLeader(form,vo,CommonConstants.MM_REPAIR_CALLER);
     }
     }
 
 
     @Override
     @Override
     public RepairApplicationFormDTO verifyRefused(RepairApplicationFormDTO model) {
     public RepairApplicationFormDTO verifyRefused(RepairApplicationFormDTO model) {
         // 判断是否具有权限
         // 判断是否具有权限
         String roles = getCurrentRoles();
         String roles = getCurrentRoles();
-        if(!roles.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
+        if(!roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
             throw new DeniedException("对不起,您不具有审核权限");
             throw new DeniedException("对不起,您不具有审核权限");
         }
         }
-        super.verifyRefused(model);
         RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
         RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
+        // 修改工单状态
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(form.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.CALLER_REPAIR_VERIFY_FAIL_ONE.getValue());
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updForm);
         // 添加跟踪状态
         // 添加跟踪状态
-        addRepairStatusRecord(form,"生产驳回");
+        addRepairStatusRecord(form,"工程师审核不通过");
         // 添加审核记录
         // 添加审核记录
-        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_REFUSED, CommonConstants.TYPE_CALLER_VERIFY);
-        // 通知主管,再次派工维修
-        SysUserVO vo = BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(form.getDispatchUserId()),SysUserVO.class);
-        //sendMessageToRepairManger(form,vo,CommonConstants.CALL_REPAIR_FAIL);
+        addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_REFUSED, CommonConstants.TYPE_REPAIR_MANAGER_VERIFY);
+        // 通知报修人报修人审核被拒
+        sendMessageToRepairCaller(model,CommonConstants.CALL_REPAIR_REFUSED);
         return model;
         return model;
     }
     }
 
 
@@ -777,6 +938,37 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
         }
         }
     }
     }
 
 
+
+    private void sendMessageToProducer(RepairApplicationFormDTO model,String type,List<SysUser> users){
+        List<String> emails = ListUtils.newArrayList();
+        List<String> phones = ListUtils.newArrayList();
+        List<String> openIds = ListUtils.newArrayList();
+        List<String> userIds = ListUtils.newArrayList();
+        users.forEach(item -> {
+            emails.add(item.getEmail());
+            phones.add(item.getPhone());
+            openIds.add(item.getWxOpenId());
+            userIds.add(item.getUserId());
+        });
+        String messageInfo = ""; // 通知内容
+        Integer detailType = WorkplaceBacklogDetailTypeEnum.SB_CALLER_REPAIR.getValue();
+        String[] values = null; // 微信填充内容
+        String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_RECEIVE_SUCCESS_WECHAT_TEMPLATE_ID.name()); // 微信模板ID
+        String detailUrl = "pages/service-detail/service-detail?id=" + model.getId(); // 微信跳转url
+        switch (type){
+            case CommonConstants.SB_CALL_REPAIR:
+                messageInfo = MessageTemplateUtil.getRepairStart(model.getNo());
+                values = new String[]{"设备部提交报修审核!",model.getNo(),"待审核",DateUtils.dateToString(LocalDateTime.now()),"请知悉"};
+                break;
+        }
+        // 1、站内信和email
+        sendWorkplaceAndEmailNew(emails,userIds,model.getId(),messageInfo, detailType);
+        // 2、微信
+        SendMessageUtils.sendWechatNew(openIds,detailUrl,values,wechatTemplateId);
+        // 3、短信
+        SendMessageUtils.sendCommonSms(phones,messageInfo);
+    }
+
     /**
     /**
      * 给相关领导发送消息
      * 给相关领导发送消息
      * @param model
      * @param model
@@ -870,6 +1062,10 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
                 values = new String[]{"维修主管派单消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
                 values = new String[]{"维修主管派单消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER_TRANSFER.getValue();
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER_TRANSFER.getValue();
                 break;
                 break;
+            case CommonConstants.PRODUCE_REFUSED_MANAGER:
+                values = new String[]{"报修生产审核拒绝!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                detailType = WorkplaceBacklogDetailTypeEnum.PRODUCE_VERIFY_REFUSED.getValue();
+                break;
         }
         }
         Map<String,List<String>> maps = getPushReceivers(userVOs);
         Map<String,List<String>> maps = getPushReceivers(userVOs);
         // 1、站内信
         // 1、站内信
@@ -884,17 +1080,36 @@ public class LongYanPlanRepairStrategy extends AbstractRepairBaseStrategy {
      * 维修上报通知
      * 维修上报通知
      * @param form
      * @param form
      * @param userVOs
      * @param userVOs
+     * @param type
      */
      */
-    private void sendMessageToReportLeader(RepairApplicationForm form,SysUserVO userVOs){
+    private void sendMessageToReportLeader(RepairApplicationForm form,SysUserVO userVOs,String type){
         SbInfo sbInfo = sbInfoService.getModelById(form.getSbId());
         SbInfo sbInfo = sbInfoService.getModelById(form.getSbId());
         String domain = getAndCheckPcDomain();
         String domain = getAndCheckPcDomain();
         String repairUrl = domain + "repair/form?no=" + form.getNo();
         String repairUrl = domain + "repair/form?no=" + form.getNo();
         String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
         String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
                 BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class), sbInfo);
                 BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class), sbInfo);
         Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER.getValue();
         Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER.getValue();
-        String[] values = new String[]{"有一条新的维修上报消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+        String[] values = null;
         String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID.name());;
         String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID.name());;
         String detailUrl = "pages/service-detail/service-detail?id=" + form.getId();
         String detailUrl = "pages/service-detail/service-detail?id=" + form.getId();
+        switch (type){
+            case CommonConstants.MM_CLOSE_REPAIR:
+                values = new String[]{"工单关闭消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_CLOSE.getValue();
+                break;
+            case CommonConstants.MM_REPAIR_UP:
+                values = new String[]{"维修上报消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER.getValue();
+                break;
+            case CommonConstants.MM_REPAIR_CALLER:
+                values = new String[]{"报修审核消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_CALLER_VERIFY.getValue();
+                break;
+            case CommonConstants.PRODUCE_REFUSED:
+                values = new String[]{"报修审核被拒消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                detailType = WorkplaceBacklogDetailTypeEnum.PRODUCE_VERIFY_REFUSED.getValue();
+                break;
+        }
         // 1、站内信
         // 1、站内信
         sendWorkplaceAndEmailNew(ListUtils.newArrayList(userVOs.getEmail()),ListUtils.newArrayList(userVOs.getUserId()),form.getId(),info, detailType);
         sendWorkplaceAndEmailNew(ListUtils.newArrayList(userVOs.getEmail()),ListUtils.newArrayList(userVOs.getUserId()),form.getId(),info, detailType);
         // 2、微信
         // 2、微信

+ 76 - 1
platform-service/src/main/java/com/platform/service/repair/strategy/impl/LongYanRepairStrategy.java

@@ -466,6 +466,19 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
             }
             }
             // 上报通知
             // 上报通知
             sendMessageToReportLeader(existForm,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(leaderId),SysUserVO.class),CommonConstants.MM_REPAIR_UP);
             sendMessageToReportLeader(existForm,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(leaderId),SysUserVO.class),CommonConstants.MM_REPAIR_UP);
+        }else if(model.getReportHandleType() == 3){
+            // 维修挂起
+            if(StringUtils.isBlank(model.getRemark())){
+                throw new DeniedException("挂起原因不能为空");
+            }
+            // 判断是否具有权限
+            String role = getCurrentRoles();
+            if(!role.contains(SysRoleCodeEnum.REPAIR_MANAGE.name()) && !role.contains(SysRoleCodeEnum.MM.name())){
+                throw new DeniedException("不具备维修挂起的权限");
+            }
+            statusRemark = "维修挂起";
+            form.setStatus(RepairApplicationFormStatusEnum.HANG_UP.getValue());
+            form.setHangUpReason(model.getRemark());
         }
         }
         repairApplicationFormMapper.updateLongYan(form);
         repairApplicationFormMapper.updateLongYan(form);
         // 添加状态记录
         // 添加状态记录
@@ -495,6 +508,68 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         return null;
         return null;
     }
     }
 
 
+    @Override
+    public void verifyRepairByMM(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRefusedByMM(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRepairByProduce(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void verifyRefusedByProduce(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void applyVerify(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void nonPlanTransferToPlan(RepairApplicationFormDTO model) {
+
+    }
+
+    @Override
+    public void recoverRepair(RepairApplicationFormDTO model) {
+        // 判断是否具有权限
+        String role = getCurrentRoles();
+        if(!role.contains(SysRoleCodeEnum.REPAIR_MANAGE.name()) && !role.contains(SysRoleCodeEnum.MM.name())){
+            throw new DeniedException("不具备解除挂起的权限");
+        }
+        if(StringUtils.isBlank(model.getRepairUserId())){
+            throw new DeniedException("派工对象不能为空");
+        }
+        // 更新
+        RepairApplicationForm form = repairApplicationFormMapper.selectByPrimaryKey(model.getId());
+        RepairApplicationForm updForm = new RepairApplicationForm();
+        updForm.setId(model.getId());
+        updForm.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+        updForm.setRepairUserId(model.getRepairUserId());
+        updForm.setRepairUserName(sysUserMapper.selectUserNameById(updForm.getRepairUserId()));
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updForm);
+        // 状态记录
+        addRepairStatusRecord(form,"维修中");
+        model.setSbCph(form.getSbCph());
+        model.setSbId(form.getSbId());
+        model.setNo(form.getNo());
+        model.setApplyTime(form.getApplyTime());
+        model.setActualUser(form.getActualUser());
+        model.setContent(form.getContent());
+        // 添加维修记录
+        addRepairRecord(model);
+        // 给维修人发送消息
+        sendMessageToRepairer(model);
+    }
+
     /**
     /**
      * 维修人提交维修完成
      * 维修人提交维修完成
      * @param dto
      * @param dto
@@ -918,7 +993,7 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_CLOSE.getValue();
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_CLOSE.getValue();
                 break;
                 break;
             case CommonConstants.MM_REPAIR_UP:
             case CommonConstants.MM_REPAIR_UP:
-                values = new String[]{"有一条新的维修上报消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                values = new String[]{"维修上报消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER.getValue();
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER.getValue();
                 break;
                 break;
         }
         }