guarantee-lsq 2 سال پیش
والد
کامیت
585b7c3187
38فایلهای تغییر یافته به همراه1015 افزوده شده و 188 حذف شده
  1. 6 0
      platform-common/pom.xml
  2. 7 3
      platform-common/src/main/java/com/platform/common/constant/CommonConstants.java
  3. 10 0
      platform-dao/src/main/java/com/platform/dao/dto/part/PartInfoDTO.java
  4. 31 0
      platform-dao/src/main/java/com/platform/dao/dto/repair/RepairApplicationFormDTO.java
  5. 47 0
      platform-dao/src/main/java/com/platform/dao/dto/repair/RepairDispatchTemplateData.java
  6. 5 0
      platform-dao/src/main/java/com/platform/dao/dto/sb/SbInfoDTO.java
  7. 10 0
      platform-dao/src/main/java/com/platform/dao/dto/upms/SysUserDTO.java
  8. 5 0
      platform-dao/src/main/java/com/platform/dao/entity/part/PartInfo.java
  9. 11 1
      platform-dao/src/main/java/com/platform/dao/entity/repair/RepairApplicationForm.java
  10. 5 0
      platform-dao/src/main/java/com/platform/dao/entity/sb/SbInfo.java
  11. 20 3
      platform-dao/src/main/java/com/platform/dao/enums/RepairApplicationFormStatusEnum.java
  12. 1 0
      platform-dao/src/main/java/com/platform/dao/enums/SysConfigEnum.java
  13. 1 0
      platform-dao/src/main/java/com/platform/dao/enums/SysFileTypeEnum.java
  14. 13 9
      platform-dao/src/main/java/com/platform/dao/enums/SysRoleCodeEnum.java
  15. 3 0
      platform-dao/src/main/java/com/platform/dao/enums/WorkplaceBacklogDetailTypeEnum.java
  16. 2 0
      platform-dao/src/main/java/com/platform/dao/mapper/upms/SysUserMapper.java
  17. 1 0
      platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java
  18. 85 2
      platform-dao/src/main/java/com/platform/dao/util/MessageTemplateUtil.java
  19. 12 0
      platform-dao/src/main/java/com/platform/dao/vo/query/customize/CustomFieldTemplateDataVO.java
  20. 11 1
      platform-dao/src/main/java/com/platform/dao/vo/repair/RepairApplicationFormVO.java
  21. 5 0
      platform-dao/src/main/java/com/platform/dao/vo/sb/SbInfoVO.java
  22. 1 1
      platform-dao/src/main/resources/mapper/part/PartInfoMapper.xml
  23. 25 9
      platform-dao/src/main/resources/mapper/repair/RepairApplicationFormMapper.xml
  24. 2 2
      platform-dao/src/main/resources/mapper/sb/SbInfoMapper.xml
  25. 24 0
      platform-dao/src/main/resources/mapper/upms/SysUserMapper.xml
  26. 27 3
      platform-rest/src/main/java/com/platform/rest/controller/repair/RepairApplicationFormController.java
  27. 9 0
      platform-rest/src/main/java/com/platform/rest/controller/upms/SysRoleController.java
  28. 11 0
      platform-rest/src/main/java/com/platform/rest/controller/upms/SysUserDeptController.java
  29. 18 0
      platform-service/src/main/java/com/platform/service/customize/impl/CustomFieldTemplateDataServiceImpl.java
  30. 7 5
      platform-service/src/main/java/com/platform/service/part/impl/PartInfoServiceImpl.java
  31. 58 48
      platform-service/src/main/java/com/platform/service/repair/impl/RepairApplicationFormServiceImpl.java
  32. 16 22
      platform-service/src/main/java/com/platform/service/repair/strategy/AbstractRepairBaseStrategy.java
  33. 17 4
      platform-service/src/main/java/com/platform/service/repair/strategy/RepairBaseStrategy.java
  34. 452 75
      platform-service/src/main/java/com/platform/service/repair/strategy/impl/LongYanRepairStrategy.java
  35. 6 0
      platform-service/src/main/java/com/platform/service/upms/SysRoleService.java
  36. 2 0
      platform-service/src/main/java/com/platform/service/upms/SysUserService.java
  37. 22 0
      platform-service/src/main/java/com/platform/service/upms/impl/SysRoleServiceImpl.java
  38. 27 0
      platform-service/src/main/java/com/platform/service/upms/impl/SysUserServiceImpl.java

+ 6 - 0
platform-common/pom.xml

@@ -160,6 +160,12 @@
             <version>9.1.5</version>
         </dependency>
 
+        <dependency>
+            <artifactId>velocity</artifactId>
+            <groupId>org.apache.velocity</groupId>
+            <version>1.7</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 7 - 3
platform-common/src/main/java/com/platform/common/constant/CommonConstants.java

@@ -261,15 +261,18 @@ public interface CommonConstants {
     String SB_ALLOCATE_FORM = "sb_info_allocate"; // 设备调拨单
     String REPAIR_STATUS_RECORD = "repair_status_record"; // 维修状态记录
     String REPAIR_RECORD = "repair_record"; // 维修记录
+    String REPAIR_DISPATCH_RECORD = "repair_dispatch_record"; // 维修转派记录
     String REPAIR_VERIFY_RECORD = "repair_verify_record"; // 维修审核记录
 
     /**
      * 龙岩维修 start
      */
     // 报修
-    String CALL_REPAIR_PASS = "1";
-    String CALL_REPAIR_REFUSED = "2";
-    String CALL_REPAIR_SUCCESS = "3";
+    String CALL_REPAIR_PASS = "1"; // 开始维修
+    String CALL_REPAIR_REFUSED = "2"; // 报修工单,被拒
+    String CALL_REPAIR_SUCCESS = "3"; // 报修工单,成功归档
+    String CALL_REPAIR_RECEIVE = "4"; // 报修成功 工程师接单
+    String CALL_REPAIR_COMPLETE = "5"; // 报修成功 工程师结单 给相关领导推送消息
     // 维修记录
     String REPAIR_RECORD_EDIT_ADD = "1";
     String REPAIR_RECORD_EDIT_STOP = "2";
@@ -279,6 +282,7 @@ public interface CommonConstants {
     String REPAIR_COMPLETE_NOTICE = "3";
     String CALL_REPAIR_FAIL = "4";
     String CALL_REPAIR_FINISH = "5";
+    String REPORT_REPAIR = "6";  // 主管派单
     // 维修审核
     Integer TYPE_REPAIR_MANAGER_VERIFY = 1;    // 维修主管审核
     Integer TYPE_CALLER_VERIFY = 2;     //报修人审核

+ 10 - 0
platform-dao/src/main/java/com/platform/dao/dto/part/PartInfoDTO.java

@@ -88,5 +88,15 @@ public class PartInfoDTO extends BaseDTO implements Serializable {
      */
     private LocalDateTime updateTime;
 
+    /**
+     * 修改之前的部位名称
+     */
+    private String oldPartName;
+
+    /**
+     * 关联的维修部门ID
+     */
+    private String repairDeptId;
+
 
 }

+ 31 - 0
platform-dao/src/main/java/com/platform/dao/dto/repair/RepairApplicationFormDTO.java

@@ -286,6 +286,10 @@ public class RepairApplicationFormDTO extends BaseDTO implements Serializable {
      * 维修图片
      */
     private List<SysFile> repairFileList;
+    /**
+     * 维修文件
+     */
+    private List<SysFile> opinionFileList;
     /**
      * 验收图片
      */
@@ -377,4 +381,31 @@ public class RepairApplicationFormDTO extends BaseDTO implements Serializable {
      * 二次派工原因
      */
     private String remarkTwo;
+
+    /**
+     * 接单时间
+     */
+    private LocalDateTime receiveTime;
+
+    /**
+     * 接单方式
+     */
+    private Integer receiveType;
+
+    /**
+     * 维修上报上级ID
+     */
+    private String reportLeaderId;
+
+    /**
+     * 维修上报的处理方式
+     * 1 自主处理  2 继续上报  3 维修人上报
+     */
+    private Integer reportHandleType;
+
+    /**
+     * 设备位置ID
+     */
+    private String sbPositionId;
+
 }

+ 47 - 0
platform-dao/src/main/java/com/platform/dao/dto/repair/RepairDispatchTemplateData.java

@@ -0,0 +1,47 @@
+package com.platform.dao.dto.repair;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 维修转派记录数据
+ */
+@Data
+public class RepairDispatchTemplateData implements Serializable {
+
+    /**
+     * 原维修工程师/主管ID
+     */
+    private String oldDispatchUserId;
+
+    /**
+     * 原维修工程师/主管
+     */
+    private String oldDispatchUserName;
+    /**
+     * 现维修工程师/主管ID
+     */
+    private String dispatchUserId;
+
+    /**
+     * 现维修工程师/主管
+     */
+    private String dispatchUserName;
+
+    /**
+     * 转派备注
+     */
+    private String remark;
+
+    /**
+     * 转派文件
+     */
+    private String file;
+
+    /**
+     * 转派图片
+     */
+    private String imageList;
+
+}

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

@@ -543,4 +543,9 @@ public class SbInfoDTO extends BaseDTO implements Serializable {
      */
     @Transient
     private String changeUser;
+
+    /**
+     * 关联的维修部门ID
+     */
+    private String repairDeptId;
 }

+ 10 - 0
platform-dao/src/main/java/com/platform/dao/dto/upms/SysUserDTO.java

@@ -242,4 +242,14 @@ public class SysUserDTO extends BaseDTO implements Serializable {
      * 获取角色专用 1 代表根据创建时间升序
      */
     private Integer orderByFlag;
+
+    /**
+     * 1 班组长 2 工程师
+     */
+    private Integer roleType;
+
+    /**
+     * 查询类型 1 维修上报查询  2 上报处理查询
+     */
+    private Integer queryType;
 }

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/entity/part/PartInfo.java

@@ -97,4 +97,9 @@ public class PartInfo implements Serializable {
 
     private List<SbModelSpareBomVO> sparePartInfoVOList;
 
+    /**
+     * 关联的维修部门ID
+     */
+    private String repairDeptId;
+
 }

+ 11 - 1
platform-dao/src/main/java/com/platform/dao/entity/repair/RepairApplicationForm.java

@@ -146,6 +146,7 @@ public class RepairApplicationForm implements Serializable {
     private Boolean receiveOvertime;
     /**
      * 报修人员id
+     * 改为区域负责人ID或者维修主管ID
      */
     private String userId;
     /**
@@ -239,7 +240,7 @@ public class RepairApplicationForm implements Serializable {
 
     /**
      * 分配人ID
-     * 龙岩的维修主管ID
+     * 龙岩的维修工程师ID
      */
     private String dispatchUserId;
 
@@ -293,4 +294,13 @@ public class RepairApplicationForm implements Serializable {
      */
     private String remarkTwo;
 
+    /**
+     * 接单时间
+     */
+    private LocalDateTime receiveTime;
+    /**
+     * 维修上报上级ID
+     */
+    private String reportLeaderId;
+
 }

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

@@ -418,4 +418,9 @@ public class SbInfo implements Serializable {
      * 报废创建人
      */
     private String scrapUserName;
+
+    /**
+     * 关联的维修部门ID
+     */
+    private String repairDeptId;
 }

+ 20 - 3
platform-dao/src/main/java/com/platform/dao/enums/RepairApplicationFormStatusEnum.java

@@ -22,7 +22,7 @@ public enum RepairApplicationFormStatusEnum {
     PROCESSING(2),
     /**
      * 待审核
-     * 龙岩-待维修主管审核
+     * 龙岩-待工程师审核
      */
     WAIT_SUBMIT(3),
     /**
@@ -44,8 +44,25 @@ public enum RepairApplicationFormStatusEnum {
      */
     REFUSED_REPAIR(7),
     /**
-     * 	维修失败,再次派工
+     * 维修上报-自己无法处理
      */
-    REPAIR_FAIL(8);
+    REPAIR_FAIL(8),
+    /**
+     * 	(工程师或维修主管)已接单
+     */
+    RECEIVED(9),
+    /**
+     * 维修挂起
+     */
+    HANG_UP(10),
+    /**
+     * 转派维修
+     */
+    DISPATCH_REPAIR(11),
+    /**
+     * 主管派单
+     */
+    MM_DISPATCH(12),
+    ;
     private final Integer value;
 }

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

@@ -43,6 +43,7 @@ public enum SysConfigEnum {
     REPAIR_FEE_TYPE_MAPS("维修费用类别集合"),
     SPARE_WARN_FORREST_EMAIL("保养库存邮件邮箱"),
     REPAIR_SUPER_USERS("维修管理中的超级用户集合"),
+    REPAIR_AREA_MANAGER("维修区域负责人"),
     PURCHASE_FORM_SUPER_USERS("采购入库单的超级用户集合"),
     REPAIR_STRATEGY_MODEL("维修策略模式选择"),
     STORE_SUPER_USERS("仓库管理中的超级用户集合"),

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

@@ -24,6 +24,7 @@ public enum SysFileTypeEnum {
     SB_IMG(4, "设备图片"),
     REPAIR_APPLICATION_IMGS(11, "维修-报修图片"),
     REPAIR_REPAIR_IMGS(12, "维修-维修图片"),
+    REPAIR_REPAIR_FILES(35, "维修-维修文件"),
     REPAIR_CHECK_IMGS(13, "维修-验收图片"),
     SPARE_IMGS(14, "备件图片"),
     REPAIR_FEE_IMGS(18, "维修-费用图片"),

+ 13 - 9
platform-dao/src/main/java/com/platform/dao/enums/SysRoleCodeEnum.java

@@ -73,14 +73,6 @@ public enum SysRoleCodeEnum {
      * 机台
      */
     Opreator,
-    /**
-     * 维修人员
-     */
-    Maintenance,
-    /**
-     * 维修主管
-     */
-    MM,
     /**
      * 分公司设备主管
      */
@@ -142,9 +134,21 @@ public enum SysRoleCodeEnum {
     REPAIR_DISPATCH,
 
     /**
-     * 维修主管
+     * 工程师
      */
     REPAIR_MANAGE,
+    /**
+     * 维修人员
+     */
+    Maintenance,
+    /**
+     * 维修班组长
+     */
+    Maintenance_Leader,
+    /**
+     * 维修主管--区域负责人
+     */
+    MM,
     ;
 
 }

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

@@ -21,6 +21,9 @@ public enum WorkplaceBacklogDetailTypeEnum {
     REPAIR_APPLICATION(2, "报修申请通知"),
     REPAIR_APPLICATION_STOP(25, "维修终止通知"),
     REPAIR_FINISH(3, "维修完成通知"),
+    REPAIR_MANAGE_RECEIVE(17, "工程师接单通知"),
+    REPAIR_REPORT_LEADER(18, "维修上报通知"),
+    REPAIR_REPORT_LEADER_TRANSFER(19, "主管派单通知"),
     REPAIR_DISPATCH(4, "维修派工通知"),
     REPAIR_BACK(5, "维修驳回通知"),
     REPAIR_OK(6, "维修结束通知"),

+ 2 - 0
platform-dao/src/main/java/com/platform/dao/mapper/upms/SysUserMapper.java

@@ -58,4 +58,6 @@ public interface SysUserMapper extends MyMapper<SysUser> {
     List<SysUserVO> selectDeptRoleUser(SysUserDTO sysUserDTO);
 
     List<SysUserVO> getSysUserList(SysUserDeptDTO sysUserDeptDTO);
+
+    List<SysUserVO> getRepairUsers(SysUserDTO sysUserDTO);
 }

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/util/CustomExcelImportUtil.java

@@ -941,6 +941,7 @@ public class CustomExcelImportUtil {
                 }
 
             } catch (Exception e) {
+                e.printStackTrace();
                 error.append(index).append(",");
             }
             result.add(record);

+ 85 - 2
platform-dao/src/main/java/com/platform/dao/util/MessageTemplateUtil.java

@@ -1,5 +1,7 @@
 package com.platform.dao.util;
 
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.extra.template.engine.velocity.VelocityTemplate;
 import com.platform.common.exception.BusinessException;
 import com.platform.common.util.StringUtils;
 import com.platform.dao.dto.repair.RepairApplicationFormDTO;
@@ -8,6 +10,9 @@ import com.platform.dao.vo.sb.SbInfoVO;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.apache.velocity.app.VelocityEngine;
 
 import java.io.IOException;
 import java.io.StringWriter;
@@ -16,6 +21,7 @@ import java.text.DecimalFormat;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 /**
  * @Description 消息模板工具类
@@ -26,7 +32,12 @@ import java.util.Map;
 public class MessageTemplateUtil {
 
     private static DecimalFormat df = new DecimalFormat("###,##0.00");
-
+    private static String templatePath = "";
+    static {
+        // 获取模板位置
+        MessageTemplateUtil u = new MessageTemplateUtil();
+        templatePath = u.getClass().getResource("/").getPath();
+    }
     /**
      * 供应商审批通知内容
      *
@@ -149,7 +160,6 @@ public class MessageTemplateUtil {
         Configuration configuration = new Configuration(Configuration.VERSION_2_3_0);
         ClassLoader loader = MessageTemplateUtil.class.getClassLoader();
         configuration.setClassLoaderForTemplateLoading(loader,"templates");
-
         // 配置模版文件
         try {
             Template template = configuration.getTemplate("repairEmail.ftl");
@@ -175,6 +185,71 @@ public class MessageTemplateUtil {
         }
     }
 
+    /**
+     * vm 模板解析报修通知
+     * @param url
+     * @param model
+     * @param vo
+     * @return
+     */
+    public static String getVmHtmlContent(String url, RepairApplicationFormDTO model, SbInfo vo){
+        //构造填充数据的Map
+        Map<String,String> map = new HashMap();
+        map.put("no", model.getNo());
+        map.put("sbName", vo.getName());
+        map.put("sbNo", vo.getNo());
+        map.put("sbCph", model.getSbCph()==null?"无":model.getSbCph());
+        map.put("actualUser", model.getActualUser()==null?"无":model.getActualUser());
+        if(StringUtils.isBlank(model.getContent())){
+            map.put("repairDesc", "无法断定,请维修人员现场检查");
+        }else{
+            map.put("repairDesc", model.getContent());
+        }
+        map.put("url", url);
+        //初始化参数
+        Properties properties=new Properties();
+        //设置velocity资源加载方式为class
+        properties.setProperty("resource.loader", "class");
+        //设置velocity资源加载方式为file时的处理类
+        properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+        //实例化一个VelocityEngine对象
+        VelocityEngine velocityEngine=new VelocityEngine(properties);
+
+        //实例化一个VelocityContext
+        VelocityContext context=new VelocityContext(map);
+        try {
+            //渲染模板
+            StringWriter sw = new StringWriter();
+            velocityEngine.mergeTemplate("repairEmail.vm", "utf-8", context, sw);
+            System.out.println(sw.toString());
+            return sw.toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("报修邮件模板解析出错。" + e.getMessage());
+        }
+    }
+
+    public static void main(String[] args) {
+        //初始化参数
+        Properties properties=new Properties();
+        //设置velocity资源加载方式为class
+        properties.setProperty("resource.loader", "class");
+        //设置velocity资源加载方式为file时的处理类
+        properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+        //实例化一个VelocityEngine对象
+        VelocityEngine velocityEngine=new VelocityEngine(properties);
+
+        //实例化一个VelocityContext
+        VelocityContext context=new VelocityContext();
+
+        StringWriter writer=new StringWriter();
+        //从src目录下加载hello.vm模板
+        //假若在com.velocity.test包下有一个hello.vm文件,那么加载路径为com/velocity/test/hello.vm
+        velocityEngine.mergeTemplate("repairEmail.vm", "utf-8", context, writer);
+        System.out.println(writer.toString());
+        //velocityEngine.mergeTemplate("hello.vm", "gbk", context, writer);
+    }
+
     /**
      * 获取维修通知
      *
@@ -257,6 +332,10 @@ public class MessageTemplateUtil {
         return String.format("您维修【%s】已验收,该任务已完结", id);
     }
 
+    public static String getRepairStart(String id) {
+        return String.format("您的报修【%s】已开始维修,请等待", id);
+    }
+
     public static String getReceive(String id) {
         return String.format("您的报修【%s】已接受,正在处理,请等待", id);
     }
@@ -269,6 +348,10 @@ public class MessageTemplateUtil {
         return String.format("您的报修【%s】已完成,请尽快审核确认!", no);
     }
 
+    public static String getRepairSuccessForLeader(String no) {
+        return String.format("维修工单【%s】已完成,请知悉!", no);
+    }
+
     public static String getReceiveExamine(String id) {
         return String.format("维修【%s】工单已经完成,等待您审核", id);
     }

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

@@ -134,7 +134,19 @@ public class CustomFieldTemplateDataVO extends BaseVO implements Serializable {
 
     private List<SysFile> imageList;
 
+    private List<SysFile> opinionFiles;
+
     private String file;
 
     private String opinion;
+
+    /**
+     * 原维修工程师/主管
+     */
+    private String oldDispatchUserName;
+
+    /**
+     * 现维修工程师/主管
+     */
+    private String dispatchUserName;
 }

+ 11 - 1
platform-dao/src/main/java/com/platform/dao/vo/repair/RepairApplicationFormVO.java

@@ -119,7 +119,7 @@ public class RepairApplicationFormVO extends BaseVO implements Serializable {
     private LocalDateTime repairEndTime;
 
     /**
-     * 派工时间
+     * 派工时间(第一次派工时间,和最终的updateTime一起计算总维修时长)
      */
     private LocalDateTime repairDispatchTime;
     /**
@@ -382,4 +382,14 @@ public class RepairApplicationFormVO extends BaseVO implements Serializable {
     private String remarkTwo;
 
     private Integer roleFlag;
+
+    /**
+     * 接单时间
+     */
+    private LocalDateTime receiveTime;
+    /**
+     * 维修上报上级ID
+     */
+    private String reportLeaderId;
+
 }

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

@@ -486,4 +486,9 @@ public class SbInfoVO extends BaseVO implements Serializable {
      * 申请意见
      */
     private String applyComment;
+
+    /**
+     * 关联的维修部门ID
+     */
+    private String repairDeptId;
 }

+ 1 - 1
platform-dao/src/main/resources/mapper/part/PartInfoMapper.xml

@@ -21,7 +21,7 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-        id, no, name, type_id, level, sb_id, remark, created_time, update_time
+        id, no, name, type_id, level, sb_id, remark, created_time, update_time,repair_dept_id
     </sql>
 
     <select id="selectPageList" parameterType="com.platform.dao.dto.part.PartInfoDTO" resultMap="BaseResultMap">

+ 25 - 9
platform-dao/src/main/resources/mapper/repair/RepairApplicationFormMapper.xml

@@ -73,14 +73,6 @@
             <if test="userId != null and userId != ''">
                 and application.user_id = #{userId}
             </if>
-            <!--<if test="repairUserId != null and repairUserId != ''">
-                <if test="repairUserIdOrNoAssignFlag != null and repairUserIdOrNoAssignFlag == true">
-                    and (application.repair_user_id = #{repairUserId} or application.repair_user_id is null)
-                </if>
-                <if test="repairUserIdOrNoAssignFlag == null || repairUserIdOrNoAssignFlag == false">
-                    and (application.repair_user_id = #{repairUserId}  or sb.repair_user_second  = #{repairUserId} )
-                </if>
-            </if>-->
             <if test="repairUserId != null and repairUserId != ''">
                 and application.repair_user_id = #{repairUserId}
             </if>
@@ -115,6 +107,12 @@
             <if test="checkAllFlag != null and checkAllFlag == 1">
                 and application.check_user_id is not null
             </if>
+            <if test="repairDeptId != null and repairDeptId != ''">
+                and application.repair_dept_id = #{repairDeptId}
+            </if>
+            <if test="reportLeaderId != null and reportLeaderId != ''">
+                and application.report_leader_id = #{reportLeaderId}
+            </if>
         </where>
     </select>
     <select id="selectById" parameterType="java.lang.Object"
@@ -309,7 +307,22 @@
     <update id="updateLongYan" parameterType="com.platform.dao.entity.repair.RepairApplicationForm">
         update t_repair_application_form
         <set>
-            repair_user_id = null,
+            <choose>
+                <when test="repairUserId != null">
+                    repair_user_id = #{repairUserId},
+                </when>
+                <otherwise>
+                    repair_user_id = null,
+                </otherwise>
+            </choose>
+            <choose>
+                <when test="repairUseName != null">
+                    repair_user_name = #{repairUseName},
+                </when>
+                <otherwise>
+                    repair_user_name = null,
+                </otherwise>
+            </choose>
             <if test="remark != null">
                 remark = #{remark},
             </if>
@@ -322,6 +335,9 @@
             <if test="repairMinutes != null">
                 repair_minutes = #{repairMinutes},
             </if>
+            <if test="dispatchUserId != null">
+                dispatch_user_id = #{dispatchUserId},
+            </if>
         </set>
         where id = #{id}
     </update>

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

@@ -173,7 +173,7 @@ sb.apply_time,
                                      sb.apply_comment,
 sb.scrap_user_id,
 sb.scrap_user_name,
-user.real_name as saveUserName
+user.real_name as saveUserName,sb.repair_dept_id
     </sql>
 
     <sql id="deptSql">
@@ -216,7 +216,7 @@ user.real_name as saveUserName
             and producer.name like concat('%',#{producerName},'%')
         </if>
         <if test="positionId != null and positionId!=''">
-            and sb.position_id  = #{positionId}
+            and sb.position_id = #{positionId}
         </if>
         <if test="likeDeptCode != null and likeDeptCode!=''">
             and sdDept.dept_code like concat(#{likeDeptCode},'%')

+ 24 - 0
platform-dao/src/main/resources/mapper/upms/SysUserMapper.xml

@@ -126,6 +126,9 @@
         <if test="deptId != null">
             and ud.dept_id = #{deptId}
         </if>
+        <if test="userId != null and userId != ''">
+            and u.user_id = #{userId}
+        </if>
         <choose>
             <when test="orderByFlag != null and orderByFlag == 1">
                 order by u.created_time asc
@@ -154,6 +157,27 @@
     </if>
     </select>
 
+    <select id="getRepairUsers" parameterType="com.platform.dao.dto.upms.SysUserDTO"
+            resultType="com.platform.dao.vo.SysUserVO">
+        select distinct user.username as username,user.real_name realName, user.user_id userId  from t_sys_user user
+        join t_sys_user_role urole on urole.user_id = user.user_id
+        join t_sys_role role on urole.role_id = role.role_id
+        join t_sys_user_dept dept on user.user_id = dept.user_id
+        where user.status = 1
+        <if test="roleCode != null">
+            and role.role_code = #{roleCode}
+        </if>
+        <if test="deptId != null and deptId != ''">
+            and dept.dept_id = #{deptId}
+        </if>
+        <if test="roleCodes != null  and roleCodes.size >0">
+            AND role.role_code in
+            <foreach item="item" index="index" collection="roleCodes" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
     <select id="getSysUserVO" parameterType="com.platform.dao.dto.upms.SysUserDTO"
             resultType="com.platform.dao.vo.SysUserVO">
         SELECT user.*,dept.name as dept, GROUP_CONCAT(role.role_name) as roless

+ 27 - 3
platform-rest/src/main/java/com/platform/rest/controller/repair/RepairApplicationFormController.java

@@ -7,7 +7,9 @@ import com.platform.common.util.R;
 import com.platform.common.util.SecurityUtils;
 import com.platform.common.validation.group.AddGroup;
 import com.platform.common.validation.group.UpdateGroup;
+import com.platform.dao.bean.MyVOPage;
 import com.platform.dao.dto.repair.RepairApplicationFormDTO;
+import com.platform.dao.entity.repair.RepairApplicationForm;
 import com.platform.dao.enums.RepairApplicationFormTypeEnum;
 import com.platform.dao.enums.SysRoleCodeEnum;
 import com.platform.dao.util.ExcelUtil;
@@ -160,7 +162,8 @@ public class RepairApplicationFormController {
     @GetMapping("/page")
     public R query(RepairApplicationFormDTO repairApplicationFormDTO, @RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "20") int pageSize) {
         //return new R<>(repairApplicationFormService.selectPageInfoVO(repairApplicationFormDTO, pageNum, pageSize));
-        return new R<>(repairApplicationFormService.selectPageInfoVOByModelThree(repairApplicationFormDTO, pageNum, pageSize));
+        MyVOPage<RepairApplicationFormVO> pageInfos = repairApplicationFormService.selectPageInfoVOByModelThree(repairApplicationFormDTO, pageNum, pageSize);
+        return new R<>(pageInfos);
     }
 
     /**
@@ -249,11 +252,10 @@ public class RepairApplicationFormController {
 
     /**
      * 接收维修单
-     *
      * @param id 维修单DTO
      * @return R
      */
-    @SysLog("接收维修单")
+    @SysLog("派工维修单")
     @PutMapping("/deal/{id}")
     @PreAuthorize("@pms.hasPermission('repair-application-forms-dispatch')")
     public R repairFormDeal(@PathVariable("id") String id) {
@@ -264,6 +266,28 @@ public class RepairApplicationFormController {
         return new R<>();
     }
 
+    @SysLog("接单维修单")
+    @PutMapping("/receive/repair")
+    public R receiveRepairForm(@RequestBody RepairApplicationFormDTO applicationFormDTO) {
+        RepairStrategyFactory.getStrategy().receiveRepair(applicationFormDTO);
+        return new R<>();
+    }
+
+    @SysLog("接单维修单")
+    @PutMapping("/report/repair")
+    public R reportRepairForm(@RequestBody RepairApplicationFormDTO applicationFormDTO) {
+        switch (applicationFormDTO.getReportHandleType()){
+            case 3:
+                RepairStrategyFactory.getStrategy().stopRepairByPerson(applicationFormDTO);
+                break;
+            case 1:
+            case 2:
+                RepairStrategyFactory.getStrategy().reportLeaderHandle(applicationFormDTO);
+                break;
+        }
+        return new R<>();
+    }
+
     /**
      * 验收通过
      *

+ 9 - 0
platform-rest/src/main/java/com/platform/rest/controller/upms/SysRoleController.java

@@ -148,4 +148,13 @@ public class SysRoleController {
         return new R<>(sysRoleService.getModelListByDTO(sysRoleDTO));
     }
 
+    /**
+     * 查询当前用户的角色类型
+     */
+    @GetMapping("/self/role")
+    @SysLog("查询自己维修角色")
+    public R querySelf() {
+        return new R<>(sysRoleService.getRepairRole());
+    }
+
 }

+ 11 - 0
platform-rest/src/main/java/com/platform/rest/controller/upms/SysUserDeptController.java

@@ -3,6 +3,7 @@ package com.platform.rest.controller.upms;
 import com.platform.common.model.UserInfo;
 import com.platform.common.util.R;
 import com.platform.common.util.SecurityUtils;
+import com.platform.dao.dto.upms.SysUserDTO;
 import com.platform.dao.dto.upms.SysUserDeptDTO;
 import com.platform.dao.enums.DeptNatureEnum;
 import com.platform.dao.util.UserUtil;
@@ -43,6 +44,16 @@ public class SysUserDeptController {
         return new R<>(sysUserService.getSysUserList(sysUserDeptDTO));
     }
 
+    /**
+     * 查询用户列表
+     * @param sysUserDeptDTO :
+     * @return R
+     */
+    @GetMapping("/user-dept/dept-code/repair")
+    public R queryUserVORepair(SysUserDTO sysUserDeptDTO) {
+        return new R<>(sysUserService.getRepairUsers(sysUserDeptDTO));
+    }
+
     /**
      * 查询用户列表
      *

+ 18 - 0
platform-service/src/main/java/com/platform/service/customize/impl/CustomFieldTemplateDataServiceImpl.java

@@ -7,6 +7,7 @@ import com.platform.common.exception.DeniedException;
 import com.platform.common.util.*;
 import com.platform.dao.bean.MyPage;
 import com.platform.dao.dto.customize.CustomFieldTemplateDataDTO;
+import com.platform.dao.dto.repair.RepairDispatchTemplateData;
 import com.platform.dao.dto.repair.RepairRecordTemplateData;
 import com.platform.dao.dto.repair.RepairStatusTemplateData;
 import com.platform.dao.dto.repair.RepairVerifyRecordTemplateData;
@@ -163,6 +164,9 @@ public class CustomFieldTemplateDataServiceImpl extends BaseServiceImpl<CustomFi
                 case CommonConstants.REPAIR_VERIFY_RECORD:
                     writeBackToVerify(pageInfos);
                     break;
+                case CommonConstants.REPAIR_DISPATCH_RECORD:
+                    writeBackToDispatch(pageInfos);
+                    break;
             }
         }
         return pageInfos;
@@ -174,6 +178,7 @@ public class CustomFieldTemplateDataServiceImpl extends BaseServiceImpl<CustomFi
         CustomFieldTemplateDataVO vo = BeanConverterUtil.copyObjectProperties(info,CustomFieldTemplateDataVO.class);
         List<SysFile> sysFiles = sysFileService.getListByTargetAndType(id, null);
         List<SysFile> imageList = ListUtils.newArrayList();
+        List<SysFile> opinionFiles = ListUtils.newArrayList();
         switch (info.getRemark()){
             case CommonConstants.REPAIR_VERIFY_RECORD:
                 RepairVerifyRecordTemplateData data = JsonUtils.jsonToModel(vo.getData(),RepairVerifyRecordTemplateData.class);
@@ -195,10 +200,14 @@ public class CustomFieldTemplateDataServiceImpl extends BaseServiceImpl<CustomFi
                     if (item.getType().equals(SysFileTypeEnum.REPAIR_REPAIR_IMGS.getValue())) {
                         imageList.add(item);
                     }
+                    if (item.getType().equals(SysFileTypeEnum.REPAIR_REPAIR_FILES.getValue())) {
+                        opinionFiles.add(item);
+                    }
                 });
                 break;
         }
         vo.setImageList(imageList);
+        vo.setOpinionFiles(opinionFiles);
         return vo;
     }
 
@@ -246,4 +255,13 @@ public class CustomFieldTemplateDataServiceImpl extends BaseServiceImpl<CustomFi
             vo.setType(data.getType());
         }
     }
+
+    private void writeBackToDispatch(AbstractPageResultBean<CustomFieldTemplateDataVO> pageInfos){
+        for(CustomFieldTemplateDataVO vo : pageInfos.getRows()){
+            RepairDispatchTemplateData data = JsonUtils.jsonToModel(vo.getData(),RepairDispatchTemplateData.class);
+            vo.setDataRemark(data.getRemark());
+            vo.setDispatchUserName(data.getDispatchUserName());
+            vo.setOldDispatchUserName(data.getOldDispatchUserName());
+        }
+    }
 }

+ 7 - 5
platform-service/src/main/java/com/platform/service/part/impl/PartInfoServiceImpl.java

@@ -113,11 +113,13 @@ public class PartInfoServiceImpl extends BaseServiceImpl<PartInfoMapper, PartInf
 
     @Override
     public void modModelByDTO(PartInfoDTO model) {
-        Weekend<PartInfo> weekendExsit = new Weekend<>(PartInfo.class);
-        weekendExsit.weekendCriteria().andEqualTo(PartInfo::getSbId, model.getSbId()).andEqualTo(PartInfo::getName, model.getName());
-        Integer exsitCount = mapper.selectCountByExample(weekendExsit);
-        if(exsitCount>0){
-            throw new BusinessException("名称已存在,请重新命名");
+        if(!model.getName().equals(model.getOldPartName())){ // 此时前端修改了部位名称
+            Weekend<PartInfo> weekendExsit = new Weekend<>(PartInfo.class);
+            weekendExsit.weekendCriteria().andEqualTo(PartInfo::getSbId, model.getSbId()).andEqualTo(PartInfo::getName, model.getName());
+            Integer exsitCount = mapper.selectCountByExample(weekendExsit);
+            if(exsitCount>0){
+                throw new BusinessException("名称已存在,请重新命名");
+            }
         }
         super.modModelByDTO(model);
     }

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

@@ -354,74 +354,84 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
 
     @Override
     public MyVOPage<RepairApplicationFormVO> selectPageInfoVOByModelThree(RepairApplicationFormDTO record, int pageNum, int pageSize) {
-        PageHelper.startPage(pageNum, pageSize);
+        // 获取当前用户角色集合值
+        UserInfo userInfo = SecurityUtils.getUserInfo();
+        StringBuilder roleCodes = new StringBuilder();
+        userInfo.getRoleCodes().forEach(item-> {
+            roleCodes.append(item).append(",");
+        });
+        String roleArray = roleCodes.toString();
         if(StringUtils.isBlank(record.getSbId())){ // 非获取设备的维修记录
-            UserInfo userInfo = SecurityUtils.getUserInfo();
             if(record.getSearchType() != null){
-                List<Integer> statusList = new ArrayList<>();
-                if(record.getSearchType() == 1){ // 我的报修
+                // 根据角色-不同赋值
+                if(roleArray.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
+                    // 维修工程师
+                    record.setDispatchUserId(userInfo.getUserId());
+                }else if(roleArray.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
+                    // 报修人
                     record.setUserId(userInfo.getUserId());
-                    // filter 分为   已接收 已驳回
-                    if(record.getFilter() != null){ // 待接收
-                        if(record.getFilter() == RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue()){
-                            statusList.add(record.getFilter());
-                        }
-                        if(record.getFilter() == RepairApplicationFormStatusEnum.PROCESSING.getValue()){ // 已接收
-                            statusList.add(record.getFilter());
-                        }
-                        if(record.getFilter() == RepairApplicationFormStatusEnum.REFUSED_REPAIR.getValue()){ // 已驳回
-                            statusList.add(record.getFilter());
-                        }
-                    }
-                }else if(record.getSearchType() == 2){ // 我的维修
+                }else if(roleArray.contains(SysRoleCodeEnum.Maintenance.name()) || roleArray.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
+                    // 班组长(维修人)
                     record.setRepairUserId(userInfo.getUserId());
-                }else if(record.getSearchType() == 3){ // 待接收工单-维修主管
-                    record.setDispatchUserId(userInfo.getUserId());
+                }else if(roleArray.contains(SysRoleCodeEnum.MM.name())){
+                    record.setReportLeaderId(userInfo.getUserId());
+                }
+                List<Integer> statusList = new ArrayList<>();
+                if(record.getSearchType() == 1){ // 我的工单--报修人,我的工单--工程师,我的工单--班组长
                     statusList.add(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
-                }else if(record.getSearchType() == 4){ // 待分配工单-维修主管
-                    record.setDispatchUserId(userInfo.getUserId());
-                    //statusList.add(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.WAIT_SUBMIT.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.NOT_ACCEPTANCE.getValue());
                     statusList.add(RepairApplicationFormStatusEnum.REBACK.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.FINISHED.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.RECEIVED.getValue());
                     statusList.add(RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue());
-                }else if(record.getSearchType() == 5){ // 维修审批-维修主管
-                    record.setDispatchUserId(userInfo.getUserId());
-                    statusList.add(RepairApplicationFormStatusEnum.WAIT_SUBMIT.getValue());
-                }else if(record.getSearchType() == 6){ // 维修审批-生产
-                    record.setUserId(userInfo.getUserId());
+                    statusList.add(RepairApplicationFormStatusEnum.HANG_UP.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.DISPATCH_REPAIR.getValue());
+                }else if(record.getSearchType() == 2){ // 我的维修--废弃
+                    record.setRepairUserId(userInfo.getUserId());
+                }else if(record.getSearchType() == 3){ // 接单大厅-维修人和班组长
+                    record.setRepairUserId(null);
+                    record.setRepairDeptId(sysUserDeptMapper.selectDeptIdByUserId(userInfo.getUserId()));
+                    statusList.add(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
+                }else if(record.getSearchType() == 4){ // 待接工单-维修工程师
+                    record.setRepairDeptId(sysUserDeptMapper.selectDeptIdByUserId(userInfo.getUserId()));
+                    record.setDispatchUserId(null);
+                    statusList.add(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
+                }else if(record.getSearchType() == 5){ // 维修审核-维修主管,报修审核--报修人
+                    // 根据角色-不同赋值
+                    if(roleArray.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
+                        // 维修工程师
+                        statusList.add(RepairApplicationFormStatusEnum.WAIT_SUBMIT.getValue());
+                    }else if(roleArray.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
+                        // 报修人
+                        statusList.add(RepairApplicationFormStatusEnum.NOT_ACCEPTANCE.getValue());
+                    }
+                }else if(record.getSearchType() == 6){ // 报修审批-生产--暂时废弃
                     statusList.add(RepairApplicationFormStatusEnum.NOT_ACCEPTANCE.getValue());
-                }else if(record.getSearchType() == -1){// 全部工单
+                }else if(record.getSearchType() == -1){ // 全部工单
                     if(record.getStatus() != null){
                         statusList.add(record.getStatus());
                     }
-                    // 根据用户的角色来定
-                    StringBuilder roleCodes = new StringBuilder();
-                    userInfo.getRoleCodes().forEach(item-> {
-                        roleCodes.append(item).append(",");
-                    });
-                    String role = roleCodes.toString();
-                    if(userInfo.getSuperAdmin() == 0){ // 非超级管理员
-                        if(role.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
-                            // 维修主管
-                            record.setDispatchUserId(userInfo.getUserId());
-                        }else if(role.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
-                            // 报修+终审
-                            record.setUserId(userInfo.getUserId());
-                        }else if(role.contains(SysRoleCodeEnum.Maintenance.name())){
-                            record.setRepairUserId(userInfo.getUserId());
-                        }else{
-                            record.setRepairUserId(userInfo.getUserId());
-                        }
-                    }
+                }else if(record.getSearchType() == 7){ // 待派工单-工程师
+                    statusList.add(RepairApplicationFormStatusEnum.MM_DISPATCH.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.RECEIVED.getValue());
+                    statusList.add(RepairApplicationFormStatusEnum.DISPATCH_REPAIR.getValue());
+                } else if(record.getSearchType() == 8){// 上报工单
+                    statusList.add(RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue());
                 }
-                // 超级管理员可以看到各个状态下的所有数据
+                // 超级管理员可以看到各个状态下的所有数据 相关领导,可以在这里进行设置
                 if(userInfo.getSuperAdmin() == 1){
                     record.setUserId(null);
                     record.setDispatchUserId(null);
                     record.setRepairUserId(null);
+                    record.setRepairDeptId(null);
+                    record.setReportLeaderId(null);
                 }
                 record.setStatusList(statusList);
             }
         }
+        PageHelper.startPage(pageNum, pageSize);
         return new MyVOPage<>(mapper.selectPageList(record));
     }
 

+ 16 - 22
platform-service/src/main/java/com/platform/service/repair/strategy/AbstractRepairBaseStrategy.java

@@ -104,7 +104,6 @@ public abstract class AbstractRepairBaseStrategy implements RepairBaseStrategy{
         }
         model.setOutNo(model.getOutNo());
         model.setNo(IdGeneratorUtils.getRepairApplicaitonFormNo(++count));
-
         model.setStatus(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
         model.setApplyTime(LocalDateTime.now());
         model.setCreatedTime(model.getApplyTime());
@@ -112,7 +111,6 @@ public abstract class AbstractRepairBaseStrategy implements RepairBaseStrategy{
         model.setId(IdGeneratorUtils.getObjectId());
         sysFileService.saveFile(model.getId(), SysFileTypeEnum.REPAIR_APPLICATION_IMGS.getValue(), model.getApplicationFileList());
         RepairApplicationForm form = BeanConverterUtil.copyObjectProperties(model, RepairApplicationForm.class);
-        //repairApplicationFormMapper.insert(form);
         return form;
     }
 
@@ -123,18 +121,18 @@ public abstract class AbstractRepairBaseStrategy implements RepairBaseStrategy{
         if (!RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue().equals(applicationForm.getStatus()) &&
                 !RepairApplicationFormStatusEnum.REBACK.getValue().equals(applicationForm.getStatus()) &&
                 !RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue().equals(applicationForm.getStatus())) {
-            throw new BusinessException("该状态不允许接收任务");
+            throw new BusinessException("该维修状态不允许接收任务");
         }
         SbInfo sbInfo = sbInfoService.getModelById(applicationForm.getSbId());
         if (sbInfo == null) {
             throw new BusinessException("设备不存在,无法接收");
         }
-        model.setRepairStartTime(applicationForm.getRepairStartTime());
+        //model.setRepairStartTime(applicationForm.getRepairStartTime());
         model.setApplyTime(applicationForm.getApplyTime());
         model.setNo(applicationForm.getNo());
         model.setUserId(applicationForm.getUserId());
         model.setDispatchUserId(applicationForm.getDispatchUserId());
-        model.setRepairDispatchList(applicationForm.getRepairDispatchList());
+        //model.setRepairDispatchList(applicationForm.getRepairDispatchList());
         model.setSbId(sbInfo.getId());
         return model;
     }
@@ -149,28 +147,13 @@ public abstract class AbstractRepairBaseStrategy implements RepairBaseStrategy{
             applicationForm.setRepairEndTime(LocalDateTime.now());
         }
         dto.setRepairEndTime(applicationForm.getRepairEndTime());
-        /*if (dto.getRepairEndTime() != null) {
-            applicationForm.setRepairEndTime(dto.getRepairEndTime());
-        }*/
-        //applicationForm.setRepairMinutes(DateUtils.getDurationHours(applicationForm.getRepairStartTime(), applicationForm.getRepairEndTime()));
-        applicationForm.setDealMinutes(DateUtils.getDurationHours(applicationForm.getApplyTime(), applicationForm.getRepairEndTime()));
-        // 根据配置判断维修是否超时
-       /* String hourFirstStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_FIRST.name());
-        int hourFirst = 180;// 默认3小时,180分钟
-        if (StringUtils.isNotBlank(hourFirstStr)) {
-            hourFirst = Integer.valueOf(hourFirstStr) * 60;
-        }
-        if (applicationForm.getRepairMinutes() > hourFirst) {
-            applicationForm.setRepairOvertime(true);
-        } else {
-            applicationForm.setRepairOvertime(false);
-        }*/
+        // 放在接单时计算总维修时长,计算方式 接单时间-派单时间
+        //applicationForm.setDealMinutes(DateUtils.getDurationHours(applicationForm.getApplyTime(), applicationForm.getRepairEndTime()));
         applicationForm.setRepairContent(dto.getRepairContent());
         applicationForm.setNeedStop(dto.getNeedStop());
         applicationForm.setUpdateTime(LocalDateTime.now());
         applicationForm.setOutType(dto.getOutType());
         // 保存维修图片
-        //sysFileService.saveFile(dto.getId(), SysFileTypeEnum.REPAIR_REPAIR_IMGS.getValue(), dto.getRepairFileList());
         repairApplicationFormMapper.updateByPrimaryKeySelective(applicationForm);
         // 更新设备状态为使用中
         SbInfo sbInfo = sbInfoService.getModelById(applicationForm.getSbId());
@@ -286,6 +269,17 @@ public abstract class AbstractRepairBaseStrategy implements RepairBaseStrategy{
         return null;
     }
 
+    @Override
+    public RepairApplicationFormDTO receiveRepair(RepairApplicationFormDTO model) {
+        return null;
+    }
+
+    @Override
+    public RepairApplicationFormDTO reportLeaderHandle(RepairApplicationFormDTO model) {
+        System.out.println("--------------子类自行实现--------------");
+        return null;
+    }
+
     /**
      * 推送站内信和邮箱
      * @param mails

+ 17 - 4
platform-service/src/main/java/com/platform/service/repair/strategy/RepairBaseStrategy.java

@@ -21,7 +21,7 @@ public interface RepairBaseStrategy {
     RepairApplicationForm callRepairAgain(RepairApplicationFormDTO model);
 
     /**
-     * 派/领取任务
+     * 派/领取任务
      * @param model
      */
     RepairApplicationFormDTO sendRepair(RepairApplicationFormDTO model);
@@ -33,7 +33,7 @@ public interface RepairBaseStrategy {
     RepairApplicationFormDTO handleRepair(RepairApplicationFormDTO model);
 
     /**
-     * 提交审核
+     * 结单
      * @param model
      */
     RepairApplicationForm submitRepair(RepairApplicationFormDTO model);
@@ -68,9 +68,22 @@ public interface RepairBaseStrategy {
     void refusedRepair(RepairApplicationFormDTO model);
 
     /**
-     * 搞不定,终止维修
-     * 另请高明吧
+     * 维修上报
      * @param model
      */
     void stopRepairByPerson(RepairApplicationFormDTO model);
+
+    /**
+     * 接单
+     * 龙岩维修模式,报修人报修该部门,由该部门所有工程师自主接单
+     * @param model
+     */
+    RepairApplicationFormDTO receiveRepair(RepairApplicationFormDTO model);
+
+    /**
+     * 维修上报处理
+     * @param model
+     * @return
+     */
+    RepairApplicationFormDTO reportLeaderHandle(RepairApplicationFormDTO model);
 }

+ 452 - 75
platform-service/src/main/java/com/platform/service/repair/strategy/impl/LongYanRepairStrategy.java

@@ -3,11 +3,9 @@ package com.platform.service.repair.strategy.impl;
 import com.platform.common.cache.ConfigCache;
 import com.platform.common.constant.CommonConstants;
 import com.platform.common.exception.DeniedException;
+import com.platform.common.model.UserInfo;
 import com.platform.common.util.*;
-import com.platform.dao.dto.repair.RepairApplicationFormDTO;
-import com.platform.dao.dto.repair.RepairRecordTemplateData;
-import com.platform.dao.dto.repair.RepairStatusTemplateData;
-import com.platform.dao.dto.repair.RepairVerifyRecordTemplateData;
+import com.platform.dao.dto.repair.*;
 import com.platform.dao.dto.upms.SysUserDTO;
 import com.platform.dao.entity.customize.CustomFieldTemplateData;
 import com.platform.dao.entity.repair.RepairApplicationForm;
@@ -15,9 +13,11 @@ import com.platform.dao.entity.sb.SbInfo;
 import com.platform.dao.entity.upms.SysUser;
 import com.platform.dao.enums.*;
 import com.platform.dao.mapper.customize.CustomFieldTemplateDataMapper;
+import com.platform.dao.mapper.sb.SbPositionMapper;
 import com.platform.dao.mapper.upms.SysUserMapper;
 import com.platform.dao.util.MessageTemplateUtil;
 import com.platform.dao.vo.SysUserVO;
+import com.platform.service.part.PartInfoService;
 import com.platform.service.repair.strategy.AbstractRepairBaseStrategy;
 import com.platform.service.util.SendMessageUtils;
 import org.springframework.stereotype.Component;
@@ -26,7 +26,9 @@ import tk.mybatis.mapper.weekend.WeekendCriteria;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 维修接单模式  -- 龙岩
@@ -42,6 +44,11 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
     private SysUserMapper sysUserMapper;
     @Resource
     private CustomFieldTemplateDataMapper customFieldTemplateDataMapper;
+    @Resource
+    private PartInfoService partInfoService;
+    @Resource
+    private SbPositionMapper sbPositionMapper;
+
 
     /**
      * 龙岩报修人报修
@@ -51,29 +58,170 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
     @Override
     public RepairApplicationForm callRepair(RepairApplicationFormDTO model) {
         RepairApplicationForm form = super.callRepair(model);
-        // 设置报修推送地方
-        if(StringUtils.isBlank(model.getRepairDeptId())){
-            throw new DeniedException("报修必须选择维修部门");
+        // 是否具有报修权限
+        UserInfo userInfo = SecurityUtils.getUserInfo();
+        if(userInfo.getSuperAdmin() == 0){
+            // 根据用户的角色来定
+            String role = getCurrentRoles();
+            if(!role.contains(SysRoleCodeEnum.REPAIR_EXAMINE.name())){
+                throw new DeniedException("您不具有报修报修权限,如需报修,请管理员配置权限!");
+            }
         }
-        SysUserDTO queryUserDTO = new SysUserDTO();
-        queryUserDTO.setDeptId(model.getRepairDeptId());
-        queryUserDTO.setRoleCode(SysRoleCodeEnum.REPAIR_MANAGE.name());
-        List<SysUserVO> sysUserVOList = sysUserMapper.selectDeptRoleUser(queryUserDTO);
-        if(sysUserVOList == null || sysUserVOList.size() ==0 || sysUserVOList.size() > 1){
-            throw new DeniedException("您选择的维修部门,无维修主管或存在多个维修主管");
+        String repairDeptId = queryRepairDeptId(model);
+        if(StringUtils.isBlank(repairDeptId)){
+            throw new DeniedException("您报修的设备和设备部位都未关联维修部门,请关联设置后进行报修!");
+        }
+        form.setRepairDeptId(repairDeptId); // 存储维修部门ID
+        List<SysUserVO> sysUserVOList = getRepairMangers(repairDeptId,null,SysRoleCodeEnum.REPAIR_MANAGE.name());
+        if(sysUserVOList == null || sysUserVOList.size() ==0){
+            throw new DeniedException("该维修部门,没有工程师,请确认!");
         }
-        form.setDispatchUserId(sysUserVOList.get(0).getUserId());
         // 报修人
         form.setActualUser(SecurityUtils.getUserInfo().getUsername());
         form.setUserId(SecurityUtils.getUserInfo().getUserId());
+        // 区域负责人
+        form.setReportLeaderId(getReportLeaderId(model.getSbId()));
         repairApplicationFormMapper.insert(form);
         // 记录维修状态跟踪
         addRepairStatusRecord(form,"报修");
         // 给相关的维修主管推送信息
-        sendMessageToRepairManger(form,sysUserVOList.get(0),CommonConstants.CALL_REPAIR_NOTICE);
+        sendMessageToRepairManger(form,sysUserVOList,CommonConstants.CALL_REPAIR_NOTICE);
         return form;
     }
 
+    private String getReportLeaderId(String sbId){
+        String positionId = sbInfoService.getById(sbId).getPositionId();
+        String no = sbPositionMapper.getById(positionId).getNo();
+        String userMaps = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_AREA_MANAGER.name());
+        if(StringUtils.isBlank(userMaps)){
+            throw new DeniedException("区域负责人尚未配置,请配置【后台管理】-【系统管理】-【系统参数配置】");
+        }
+        Map<String,String> maps = JsonUtils.jsonToMap(userMaps);
+        String username = "";
+        for(Map.Entry<String,String> entry : maps.entrySet()){
+            String value = entry.getValue();
+            if(value.contains(no)){
+                username = entry.getKey();
+                break;
+            }
+        }
+        if(StringUtils.isBlank(username)){
+            throw new DeniedException("报修设备尚未配置给区域负责人,请配置");
+        }
+        SysUser queryUser = new SysUser();
+        queryUser.setUsername(username);
+        return sysUserMapper.selectOne(queryUser).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
+     */
+    private String getCurrentRoles(){
+        // 根据用户的角色来定
+        StringBuilder roleCodes = new StringBuilder();
+        SecurityUtils.getUserInfo().getRoleCodes().forEach(item-> {
+            roleCodes.append(item).append(",");
+        });
+        return roleCodes.toString();
+    }
+
+    /**
+     * 获取指定部门下的工程师
+     * @param repairDeptId
+     * @param userId
+     * @return
+     */
+    private List<SysUserVO> getRepairMangers(String repairDeptId,String userId,String roleCode){
+        SysUserDTO queryUserDTO = new SysUserDTO();
+        queryUserDTO.setDeptId(repairDeptId);
+        queryUserDTO.setRoleCode(roleCode);
+        queryUserDTO.setUserId(userId);
+        return sysUserMapper.selectDeptRoleUser(queryUserDTO);
+    }
+
+    /**
+     * 获取设备部位关联的维修部门
+     * @param model
+     * @return
+     */
+    private String queryRepairDeptId(RepairApplicationFormDTO model){
+        String repairDeptId = "";
+        if(StringUtils.isNotBlank(model.getPartId())){
+            repairDeptId = partInfoService.getModelById(model.getPartId()).getRepairDeptId();
+        }
+        if(StringUtils.isBlank(repairDeptId)){
+            repairDeptId = sbInfoService.getModelById(model.getSbId()).getRepairDeptId();
+        }
+        return repairDeptId;
+    }
+
+    @Override
+    public RepairApplicationFormDTO receiveRepair(RepairApplicationFormDTO model) {
+        if(StringUtils.isBlank(model.getRepairDeptId())){
+            throw new DeniedException("必须携带设备关联维修部门");
+        }
+        boolean continueFlag = Boolean.FALSE;
+        synchronized (this){
+            // 判断接单方式,根据接单角色进行区分 工程师 班组长 维修人
+            LocalDateTime now = LocalDateTime.now();
+            UserInfo userInfo = SecurityUtils.getUserInfo();
+            RepairApplicationForm form = new RepairApplicationForm();
+            form.setId(model.getId());
+            String roles = getCurrentRoles();
+            if(roles.contains(SysRoleCodeEnum.Maintenance.name()) || roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
+                // 维修人和班组长接单
+                form.setRepairUserName(userInfo.getUsername());
+                form.setRepairUserId(userInfo.getUserId());
+                form.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+                continueFlag = Boolean.TRUE;
+                model.setRepairUserName(form.getRepairUserName());
+                model.setRepairUserId(form.getRepairUserId());
+            }else if(roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
+                // 工程师接单
+                form.setDispatchUserId(SecurityUtils.getUserInfo().getUserId());
+                form.setStatus(RepairApplicationFormStatusEnum.RECEIVED.getValue());
+            }else{
+                throw new DeniedException("您不具备承接报修单的能力");
+            }
+            form.setReceiveTime(now);
+            form.setReceiveMinutes(DateUtils.getDurationHours(model.getApplyTime(), now)); // 接单时长
+            // 判断接单是否超时
+            String minuteStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_WARN_MINUTE.name());
+            if (StringUtils.isBlank(minuteStr)) {
+                form.setReceiveOvertime(false);
+            } else if (form.getReceiveMinutes() > Double.valueOf(minuteStr)) {
+                form.setReceiveOvertime(true);
+            } else {
+                form.setReceiveOvertime(false);
+            }
+            form.setUpdateTime(LocalDateTime.now());
+            repairApplicationFormMapper.updateByPrimaryKeySelective(form);
+        }
+        // 通知报修人,已接单
+        sendMessageToRepairCaller(model,CommonConstants.CALL_REPAIR_RECEIVE);
+        // 添加状态跟踪
+        model.setStatus(RepairApplicationFormStatusEnum.RECEIVED.getValue());
+        addRepairStatusRecord(BeanConverterUtil.copyObjectProperties(model,RepairApplicationForm.class),"已接单");
+        if(continueFlag){
+            // 添加状态跟踪
+            model.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+            addRepairStatusRecord(BeanConverterUtil.copyObjectProperties(model,RepairApplicationForm.class),"维修中");
+            // 添加维修记录
+            addRepairRecord(model);
+        }
+        return model;
+    }
+
     @Override
     public RepairApplicationForm callRepairAgain(RepairApplicationFormDTO model) {
         RepairApplicationForm form = repairApplicationFormMapper.selectByPrimaryKey(model.getId());
@@ -88,7 +236,7 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         form.setStatus(RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue());
         repairApplicationFormMapper.updateByPrimaryKeySelective(form);
         // 给相关的维修主管推送信息
-        sendMessageToRepairManger(form,sysUserVOList.get(0),CommonConstants.CALL_REPAIR_NOTICE);
+        sendMessageToRepairManger(form,sysUserVOList,CommonConstants.CALL_REPAIR_NOTICE);
         return null;
     }
 
@@ -136,13 +284,21 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
     }
 
     /**
-     * 维修主管接收并指派报修人
+     * 工程师派工给班组长
      * @param model
      * @return
      */
     @Override
     public RepairApplicationFormDTO sendRepair(RepairApplicationFormDTO model) {
         RepairApplicationFormDTO superModel = super.sendRepair(model);
+        // 判断是否具有派单权限
+        UserInfo userInfo = SecurityUtils.getUserInfo();
+        if(userInfo.getSuperAdmin() == 0){
+            String roles = getCurrentRoles();
+            if(!roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name()) && !roles.contains(SysRoleCodeEnum.MM.name())){
+                throw new DeniedException("不具备派单权限");
+            }
+        }
         if(StringUtils.isBlank(superModel.getRepairUserId())){
             throw new DeniedException("请指派维修人");
         }
@@ -155,20 +311,9 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         applicationForm.setRepairUserName(repairUser.getUsername());
         applicationForm.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
         superModel.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
-        superModel.setRepairUserName(repairUser.getUsername());
         if (superModel.getRepairStartTime() == null) {
             applicationForm.setRepairStartTime(LocalDateTime.now());
-            superModel.setRepairStartTime(LocalDateTime.now());
-        }
-        applicationForm.setReceiveMinutes(DateUtils.getDurationHours(superModel.getApplyTime(), superModel.getRepairStartTime()));
-        // 判断接单是否超时
-        String minuteStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_WARN_MINUTE.name());
-        if (StringUtils.isBlank(minuteStr)) {
-            applicationForm.setReceiveOvertime(false);
-        } else if (applicationForm.getReceiveMinutes() > Double.valueOf(minuteStr)) {
-            applicationForm.setReceiveOvertime(true);
-        } else {
-            applicationForm.setReceiveOvertime(false);
+            superModel.setRepairStartTime(applicationForm.getRepairStartTime());
         }
         applicationForm.setUpdateTime(LocalDateTime.now());
         repairApplicationFormMapper.updateByPrimaryKeySelective(applicationForm);
@@ -177,7 +322,7 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         // 添加维修记录
         addRepairRecord(superModel);
         // 给报修人发送消息
-        sendMessageToRepairCaller(superModel,CommonConstants.CALL_REPAIR_PASS);
+        //sendMessageToRepairCaller(superModel,CommonConstants.CALL_REPAIR_PASS);
         // 给维修人发送消息
         sendMessageToRepairer(superModel);
         // 启动超时监控
@@ -203,27 +348,111 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
     }
 
     /**
-     * 个人能力无法胜任本次维修,辜负了主管的信任
+     * 维修人上报
      * @param model
      */
     @Override
     public void stopRepairByPerson(RepairApplicationFormDTO model) {
+        if(StringUtils.isBlank(model.getReportLeaderId())){
+            throw new DeniedException("上报对象不能为空");
+        }
+        if(StringUtils.isBlank(model.getRemark())){
+            throw new DeniedException("上报原因不能为空");
+        }
         // 1、完善终止人的维修记录
         RepairApplicationForm form = repairApplicationFormMapper.selectById(model.getId());
-        double hours = editRepairRecord(model,CommonConstants.REPAIR_RECORD_EDIT_STOP);
+        editRepairRecord(model,CommonConstants.REPAIR_RECORD_EDIT_STOP);
         // 2、回写并修改维修表
+        // 根据角色判断自己上报人角色
         RepairApplicationForm updRepair = new RepairApplicationForm();
         updRepair.setId(model.getId());
         updRepair.setRemarkTwo(model.getRemark());
+        updRepair.setRepairUserId(model.getReportLeaderId());
+        /*if(roles.contains(SysRoleCodeEnum.Maintenance.name())){
+            // 更新维修人
+            updRepair.setRepairUserId(model.getReportLeaderId());
+        }else if(roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
+            // 班组长上报
+            updRepair.setDispatchUserId(model.getReportLeaderId());
+        }*/
         updRepair.setStatus(RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue());
-        double repairMinutes = form.getRepairMinutes() == null ? 0.0 : form.getRepairMinutes();
-        updRepair.setRepairMinutes(repairMinutes + hours);
-        updRepair.setRepairUserId(null);
-        repairApplicationFormMapper.updateLongYan(updRepair);
+        repairApplicationFormMapper.updateByPrimaryKeySelective(updRepair);
         // 3、状态记录表
-        addRepairStatusRecord(updRepair,"维修转派中");
-        // 4、通知维修主管
-        sendMessageToRepairManger(form,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(form.getDispatchUserId()),SysUserVO.class),CommonConstants.REPAIR_FAIL_NOTICE);
+        addRepairStatusRecord(updRepair,"维修上报");
+        // 4、通知你上报的人
+        sendMessageToReportLeader(form,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(model.getReportLeaderId()),SysUserVO.class));
+    }
+
+    /**
+     * 上报处理方法
+     * @param model
+     * @return
+     */
+    @Override
+    public RepairApplicationFormDTO reportLeaderHandle(RepairApplicationFormDTO model) {
+        String statusRemark = "自主处理";
+        RepairApplicationForm existForm = repairApplicationFormMapper.selectById(model.getId());
+        RepairApplicationForm form = new RepairApplicationForm();
+        form.setId(model.getId());
+        form.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
+        // 处理方式 自主处理和继续上报
+        String roles = getCurrentRoles();
+        if(model.getReportHandleType() == 1){
+            if(StringUtils.isBlank(model.getReportLeaderId())){
+                throw new DeniedException("派工对象不能为空");
+            }
+            // 自主处理
+            if(roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
+                // 班组长处理,重新指派维修人
+                form.setRepairUserId(model.getRepairUserId());
+                // 维修记录
+                String repairUserName = sysUserMapper.selectUserNameById(model.getRepairUserId());
+                model.setRepairUserName(repairUserName);
+                addRepairRecord(model);
+                // 通知维修人
+                sendMessageToRepairer(BeanConverterUtil.copyObjectProperties(existForm,RepairApplicationFormDTO.class));
+            }else if(roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
+                // 工程师处理
+                form.setRepairUserId(model.getRepairUserId());
+                // 维修记录
+                String repairUserName = sysUserMapper.selectUserNameById(model.getRepairUserId());
+                model.setRepairUserName(repairUserName);
+                addRepairRecord(model);
+                // 通知维修人
+                sendMessageToRepairer(BeanConverterUtil.copyObjectProperties(existForm,RepairApplicationFormDTO.class));
+            }else if(roles.contains(SysRoleCodeEnum.MM.name())){
+                // 维修主管处理
+                form.setDispatchUserId(model.getDispatchUserId());
+                form.setStatus(RepairApplicationFormStatusEnum.MM_DISPATCH.getValue());
+                // 主管派单通知工程师
+                SysUserDTO queryUser = new SysUserDTO();
+                queryUser.setUserId(model.getDispatchUserId());
+                sendMessageToRepairManger(existForm,sysUserMapper.getSysUserVO(queryUser),CommonConstants.REPORT_REPAIR);
+            }
+        } else if(model.getReportHandleType() == 2){
+            if(StringUtils.isBlank(model.getRemark())){
+                throw new DeniedException("上报原因不能为空");
+            }
+            statusRemark = "维修上报";
+            String leaderId = model.getReportLeaderId();
+            // 继续上报
+            form.setStatus(RepairApplicationFormStatusEnum.REPAIR_FAIL.getValue());
+            if(roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
+                if(StringUtils.isBlank(model.getReportLeaderId())){
+                    throw new DeniedException("上报对象不能为空");
+                }
+                form.setDispatchUserId(model.getReportLeaderId());
+            }else if(roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
+                // 工程师上报
+                leaderId = existForm.getReportLeaderId();
+            }
+            // 上报通知
+            sendMessageToReportLeader(existForm,BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(leaderId),SysUserVO.class));
+        }
+        repairApplicationFormMapper.updateByPrimaryKeySelective(form);
+        // 添加状态记录
+        addRepairStatusRecord(form,statusRemark);
+        return model;
     }
 
     /**
@@ -236,8 +465,9 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         super.handleRepair(dto);
         RepairApplicationForm form = repairApplicationFormMapper.selectById(dto.getId());
         // 计算维修时长
-        double hours = editRepairRecord(dto,CommonConstants.REPAIR_RECORD_EDIT_ADD);
-        double currentHour = form.getRepairMinutes() == null ? 0.0:form.getRepairMinutes();
+        editRepairRecord(dto,CommonConstants.REPAIR_RECORD_EDIT_ADD);
+        // 此处放在工程师结单时
+        /*double currentHour = form.getRepairMinutes() == null ? 0.0:form.getRepairMinutes();
         form.setRepairMinutes(currentHour + hours);
         // 判断维修是否超时
         String hourFirstStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_FIRST.name());
@@ -249,16 +479,40 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
             form.setRepairOvertime(true);
         } else {
             form.setRepairOvertime(false);
-        }
+        }*/
         repairApplicationFormMapper.updateByPrimaryKeySelective(form);
         // 添加状态记录
         addRepairStatusRecord(form,"维修完成待审");
-        // 通知维修主管审核
+        // 通知工程师审核
         SysUserVO vo = BeanConverterUtil.copyObjectProperties(sysUserMapper.selectByPrimaryKey(form.getDispatchUserId()),SysUserVO.class);
-        sendMessageToRepairManger(form,vo,CommonConstants.REPAIR_COMPLETE_NOTICE);
+        sendMessageToRepairManger(form,ListUtils.newArrayList(vo),CommonConstants.REPAIR_COMPLETE_NOTICE);
         return dto;
     }
 
+    /**
+     * 工程师之间的转派
+     * @param model
+     * @return
+     */
+    @Override
+    public RepairApplicationFormDTO dispatchRepair(RepairApplicationFormDTO model) {
+        SysUser user = sysUserMapper.selectByPrimaryKey(model.getDispatchUserId());
+        RepairApplicationForm form = repairApplicationFormMapper.selectByPrimaryKey(model.getId());
+        model.setDispatchUserId(form.getDispatchUserId());
+        // 添加维修转派记录
+        addRepairDispatchRecord(model,user);
+        // 更新维修信息
+        form.setDispatchUserId(user.getUserId());
+        form.setRepairUserName(null);
+        form.setRepairUserId(null);
+        form.setStatus(RepairApplicationFormStatusEnum.DISPATCH_REPAIR.getValue());
+        form.setUpdateTime(LocalDateTime.now());
+        repairApplicationFormMapper.updateByPrimaryKey(form);
+        // 添加状态记录
+        addRepairStatusRecord(form,"维修转派");
+        return model;
+    }
+
     /**
      * 提交生产审核
      * @param model
@@ -268,11 +522,13 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
     public RepairApplicationForm submitRepair(RepairApplicationFormDTO model) {
         RepairApplicationForm form = super.submitRepair(model);
         // 添加状态跟踪
-        addRepairStatusRecord(form,"待生产确认");
+        addRepairStatusRecord(form,"生产审核中");
         // 添加审核记录
         addRepairVerifyRecord(model,CommonConstants.STATUS_VERIFY_PASS, CommonConstants.TYPE_REPAIR_MANAGER_VERIFY);
         // 通知报修人(生产审核)
         sendMessageToRepairCaller(BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class),CommonConstants.CALL_REPAIR_SUCCESS);
+        // 通知相关领导
+        sendMessageToLeader(BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class),CommonConstants.CALL_REPAIR_COMPLETE);
         return form;
     }
 
@@ -290,7 +546,7 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         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);
+        //sendMessageToRepairManger(form,vo,CommonConstants.CALL_REPAIR_FINISH);
     }
 
     @Override
@@ -303,7 +559,7 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         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);
+        //sendMessageToRepairManger(form,vo,CommonConstants.CALL_REPAIR_FAIL);
         return model;
     }
 
@@ -315,17 +571,7 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
     private double editRepairRecord(RepairApplicationFormDTO form,String type){
         double hours = 0.0;
         // 获取维修记录
-        Weekend<CustomFieldTemplateData> weekend = new Weekend<>(CustomFieldTemplateData.class);
-        WeekendCriteria<CustomFieldTemplateData, Object> weekendCriteria = weekend.weekendCriteria();
-        weekendCriteria.andEqualTo(CustomFieldTemplateData::getRemark,CommonConstants.REPAIR_RECORD)
-                .andEqualTo(CustomFieldTemplateData::getObjId,form.getId()).
-                andEqualTo(CustomFieldTemplateData::getCreatedUserId,form.getRepairUserId());
-        weekend.orderBy("createdTime").desc();
-        List<CustomFieldTemplateData> list = customFieldTemplateDataMapper.selectByExample(weekend);
-        if(list == null || list.size() == 0){
-            throw new DeniedException("维修记录异常,请联系技术处理");
-        }
-        CustomFieldTemplateData queryData = list.get(0);
+        CustomFieldTemplateData queryData = getLastRepairRecord(form.getId(),form.getRepairUserId());
         CustomFieldTemplateData updData = new CustomFieldTemplateData();
         updData.setId(queryData.getId());
         updData.setUpdateTime(LocalDateTime.now());
@@ -334,13 +580,37 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         hours = DateUtils.getDurationHours(queryData.getCreatedTime(), updData.getUpdateTime());
         dataInfo.setRepairMinutes(hours);
         dataInfo.setRemark(form.getRemark());
-        // 保存维修记录图片
+        // 保存维修记录图片和文件
         sysFileService.saveFile(queryData.getId(), SysFileTypeEnum.REPAIR_REPAIR_IMGS.getValue(), form.getRepairFileList());
+        sysFileService.saveFile(queryData.getId(), SysFileTypeEnum.REPAIR_REPAIR_FILES.getValue(), form.getOpinionFileList());
         updData.setData(JsonUtils.objectToJson(dataInfo));
         customFieldTemplateDataMapper.updateByPrimaryKeySelective(updData);
         return hours;
     }
 
+    /**
+     * 获取最近一次维修记录
+     * @param repairId
+     * @return
+     */
+    private CustomFieldTemplateData getLastRepairRecord(String repairId,String repairUserId){
+        // 获取维修记录
+        Weekend<CustomFieldTemplateData> weekend = new Weekend<>(CustomFieldTemplateData.class);
+        WeekendCriteria<CustomFieldTemplateData, Object> weekendCriteria = weekend.weekendCriteria();
+        weekendCriteria = weekendCriteria.andEqualTo(CustomFieldTemplateData::getRemark,CommonConstants.REPAIR_RECORD)
+                .andEqualTo(CustomFieldTemplateData::getObjId,repairId);
+        if(StringUtils.isNotBlank(repairUserId)){
+            weekendCriteria.andEqualTo(CustomFieldTemplateData::getCreatedUserId,repairUserId);
+        }
+        weekend.orderBy("createdTime").desc();
+        List<CustomFieldTemplateData> list = customFieldTemplateDataMapper.selectByExample(weekend);
+        if(list == null || list.size() == 0){
+            throw new DeniedException("维修记录异常,请联系技术处理");
+        }
+        return list.get(0);
+    }
+
+
     /**
      * 添加维修记录
      * @param form
@@ -364,11 +634,37 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         customFieldTemplateDataMapper.insert(data);
     }
 
+    /**
+     * 添加维修转派记录
+     * @param form
+     */
+    private void addRepairDispatchRecord(RepairApplicationFormDTO form,SysUser user){
+        SysUser oldUser = sysUserMapper.selectByPrimaryKey(form.getDispatchUserId());
+        CustomFieldTemplateData data = new CustomFieldTemplateData();
+        data.setId(IdGeneratorUtils.getObjectId());
+        data.setObjId(form.getId());
+        data.setCreatedTime(LocalDateTime.now());
+        data.setCreatedUserId(form.getDispatchUserId());
+        data.setCreatedUserName(oldUser.getUsername());
+        data.setRemark(CommonConstants.REPAIR_DISPATCH_RECORD);
+        RepairDispatchTemplateData dataInfo = new RepairDispatchTemplateData();
+        dataInfo.setOldDispatchUserId(oldUser.getUserId());
+        dataInfo.setOldDispatchUserName(oldUser.getUsername());
+        dataInfo.setRemark(form.getRepairDispatchRemark());
+        dataInfo.setDispatchUserId(user.getUserId());
+        dataInfo.setDispatchUserName(user.getUsername());
+        dataInfo.setFile("");
+        dataInfo.setImageList("");
+        data.setData(JsonUtils.objectToJson(dataInfo));
+        data.setDelFlag(0);
+        customFieldTemplateDataMapper.insert(data);
+    }
+
 
     /**
      * 给报修人发送消息
      * @param model
-     * @param type 1 报修成功 2 报修驳回 3 维修成功
+     * @param type 1 报修成功 2 报修驳回 3 维修成功 4 工程师接单
      */
     private void sendMessageToRepairCaller(RepairApplicationFormDTO model,String type){
         SysUser user = sysUserMapper.selectByPrimaryKey(model.getUserId());    // 推送对象
@@ -379,8 +675,8 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         String detailUrl = "pages/repair-detail/repair-detail?detailId=" + model.getId(); // 微信跳转url
         switch (type){
             case CommonConstants.CALL_REPAIR_PASS:
-                messageInfo = MessageTemplateUtil.getReceive(model.getNo());
-                values = new String[]{"您提交的报修单已被接收并开始维修!",model.getNo(),"维修中",DateUtils.dateToString(model.getRepairStartTime()),"请知悉"};
+                messageInfo = MessageTemplateUtil.getRepairStart(model.getNo());
+                values = new String[]{"您提交的报修单已开始维修!",model.getNo(),"维修中",DateUtils.dateToString(model.getRepairStartTime()),"请知悉"};
                 break;
             case CommonConstants.CALL_REPAIR_REFUSED:
                 messageInfo = MessageTemplateUtil.getRefusedReceive(model.getNo(),model.getRemark());
@@ -389,9 +685,14 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
                 break;
             case CommonConstants.CALL_REPAIR_SUCCESS:
                 messageInfo = MessageTemplateUtil.getRepairSuccess(model.getNo());
-                values = new String[]{"您提交的报修单已维修完成!",model.getNo(),"报修完成","","请知悉"};
+                values = new String[]{"您提交的报修单已维修完成!",model.getNo(),"维修完成","","请尽快审核"};
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_FINISH.getValue();
                 break;
+            case CommonConstants.CALL_REPAIR_RECEIVE:
+                messageInfo = MessageTemplateUtil.getReceive(model.getNo());
+                values = new String[]{"您提交的报修单已被工程师接单!",model.getNo(),"已接单","","请知悉"};
+                detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_MANAGE_RECEIVE.getValue();
+                break;
         }
         // 1、站内信和email
         sendWorkplaceAndEmailNew(ListUtils.newArrayList(user.getEmail()),
@@ -404,6 +705,36 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         }
     }
 
+    /**
+     * 给相关领导发送消息
+     * @param model
+     * @param type 1 报修成功 2 报修驳回 3 维修成功 4 工程师接单 5 维修结单
+     */
+    private void sendMessageToLeader(RepairApplicationFormDTO model,String type){
+        // 获取推送对象
+        /*List<SysUserVO> userVOS = getRepairMangers(null,null,SysRoleCodeEnum.REPAIR_LEADER.name());
+        if(userVOS != null && userVOS.size() > 0){
+            String messageInfo = ""; // 通知内容
+            Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_FINISH.getValue();
+            String[] values = null; // 微信填充内容
+            String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_RECEIVE_SUCCESS_WECHAT_TEMPLATE_ID.name()); // 微信模板ID
+            String detailUrl = "pages/repair-detail/repair-detail?detailId=" + model.getId(); // 微信跳转url
+            switch (type){
+                case CommonConstants.CALL_REPAIR_COMPLETE:
+                    messageInfo = MessageTemplateUtil.getRepairSuccessForLeader(model.getNo());
+                    values = new String[]{"您有一条维修结单消息!",model.getNo(),"维修结单",DateUtils.dateToString(model.getRepairStartTime()),"请知悉"};
+                    break;
+            }
+            Map<String,List<String>> maps = getPushReceivers(userVOS);
+            // 1、站内信和email
+            sendWorkplaceAndEmailNew(maps.get("mails"),maps.get("userIds"),model.getId(),messageInfo, detailType);
+            // 2、微信
+            SendMessageUtils.sendWechatNew(maps.get("openIds"),detailUrl,values,wechatTemplateId);
+            // 3、短信
+            SendMessageUtils.sendCommonSms(maps.get("phones"),messageInfo);
+        }*/
+    }
+
     /**
      * 给维修人发送消息
      * @param model
@@ -415,12 +746,12 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
         String domain = getAndCheckPcDomain();
         String repairUrl = domain + "repair/form?no=" + model.getNo();
         // 获取站内信内容
-        String info = MessageTemplateUtil.getFreemarkerHtmlContent(repairUrl,
+        String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
                 model, sbInfo);
         sendWorkplaceAndEmailNew(ListUtils.newArrayList(user.getEmail()),
                 ListUtils.newArrayList(user.getUserId()),model.getId(),info, WorkplaceBacklogDetailTypeEnum.REPAIR_DISPATCH.getValue());
         // 2、微信
-        String[] values = new String[]{"有一条维修任务!",model.getActualUser(),sbInfo.getName(),DateUtils.dateToString(model.getApplyTime()),model.getSbCph(),model.getContent(),"请知悉"};
+        String[] values = new String[]{"有一条维修任务!",model.getActualUser(),sbInfo.getName(),DateUtils.dateToString(model.getApplyTime()),model.getSbCph(),model.getContent(),"请知悉"};
         String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_NOTICE_SUCCESS_WECHAT_TEMPLATE_ID.name());
         String detailUrl = "pages/repair-detail/repair-detail?detailId=" + model.getId();
         SendMessageUtils.sendWechatNew(ListUtils.newArrayList(user.getWxOpenId()),detailUrl,values,wechatTemplateId);
@@ -431,21 +762,21 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
     /**
      * 给维修主管推送消息
      * @param form
-     * @param type 1 报修通知 2 维修终止通知 3 维修完成  4 生产驳回
+     * @param type 1 报修通知 2 维修终止通知 3 维修完成  4 生产驳回  5 主管派单通知
      */
-    private void sendMessageToRepairManger(RepairApplicationForm form,SysUserVO userVO,String type){
+    private void sendMessageToRepairManger(RepairApplicationForm form,List<SysUserVO> userVOs,String type){
         SbInfo sbInfo = sbInfoService.getModelById(form.getSbId());
         String domain = getAndCheckPcDomain();
         String repairUrl = domain + "repair/form?no=" + form.getNo();
-        String info = MessageTemplateUtil.getFreemarkerHtmlContent(repairUrl,
+        String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
                 BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class), sbInfo);
-        Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue();;
+        Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_APPLICATION.getValue();
         String[] values = null;
         String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID.name());;
-        String detailUrl = "pages/repair-detail/repair-detail?detailId=" + form.getId();;
+        String detailUrl = "pages/repair-detail/repair-detail?detailId=" + form.getId();
         switch (type){
             case CommonConstants.CALL_REPAIR_NOTICE:
-                values = new String[]{"贵部有一条新的报修消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                values = new String[]{"有一条新的报修消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
                 break;
             case CommonConstants.REPAIR_FAIL_NOTICE:
                 values = new String[]{"维修单终止维修消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请再次派工"};
@@ -463,13 +794,59 @@ public class LongYanRepairStrategy extends AbstractRepairBaseStrategy {
                 values = new String[]{"维修生产通过消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
                 detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_FINISH.getValue();
                 break;
+            case CommonConstants.REPORT_REPAIR:
+                values = new String[]{"维修主管派单消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+                detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER_TRANSFER.getValue();
+                break;
         }
+        Map<String,List<String>> maps = getPushReceivers(userVOs);
         // 1、站内信
-        sendWorkplaceAndEmailNew(ListUtils.newArrayList(userVO.getEmail()),
-                ListUtils.newArrayList(userVO.getUserId()),form.getId(),info, detailType);
+        sendWorkplaceAndEmailNew(maps.get("mails"),maps.get("userIds"),form.getId(),info, detailType);
         // 2、微信
-        SendMessageUtils.sendWechatNew(ListUtils.newArrayList(userVO.getWxOpenId()),detailUrl,values,wechatTemplateId);
+        SendMessageUtils.sendWechatNew(maps.get("openIds"),detailUrl,values,wechatTemplateId);
         // 3、短信
-        SendMessageUtils.sendCommonSms(ListUtils.newArrayList(userVO.getPhone()),info);
+        SendMessageUtils.sendCommonSms(maps.get("phones"),info);
+    }
+
+    /**
+     * 维修上报通知
+     * @param form
+     * @param userVOs
+     */
+    private void sendMessageToReportLeader(RepairApplicationForm form,SysUserVO userVOs){
+        SbInfo sbInfo = sbInfoService.getModelById(form.getSbId());
+        String domain = getAndCheckPcDomain();
+        String repairUrl = domain + "repair/form?no=" + form.getNo();
+        String info = MessageTemplateUtil.getVmHtmlContent(repairUrl,
+                BeanConverterUtil.copyObjectProperties(form,RepairApplicationFormDTO.class), sbInfo);
+        Integer detailType = WorkplaceBacklogDetailTypeEnum.REPAIR_REPORT_LEADER.getValue();
+        String[] values = new String[]{"有一条新的维修上报消息!",form.getNo(),sbInfo.getName(),form.getContent(),form.getSbCph(),"请知悉"};
+        String wechatTemplateId = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_SEND_SUCCESS_WECHAT_TEMPLATE_ID.name());;
+        String detailUrl = "pages/repair-detail/repair-detail?detailId=" + form.getId();
+        // 1、站内信
+        sendWorkplaceAndEmailNew(ListUtils.newArrayList(userVOs.getEmail()),ListUtils.newArrayList(userVOs.getUserId()),form.getId(),info, detailType);
+        // 2、微信
+        SendMessageUtils.sendWechatNew(ListUtils.newArrayList(userVOs.getWxOpenId()),detailUrl,values,wechatTemplateId);
+        // 3、短信
+        SendMessageUtils.sendCommonSms(ListUtils.newArrayList(userVOs.getPhone()),info);
+    }
+
+    private Map<String,List<String>> getPushReceivers(List<SysUserVO> userVOS){
+        Map<String,List<String>> retInfos = new HashMap<>();
+        List<String> mails = ListUtils.newArrayList();
+        List<String> userIds = ListUtils.newArrayList();
+        List<String> openIds = ListUtils.newArrayList();
+        List<String> phones = ListUtils.newArrayList();
+        userVOS.forEach(item -> {
+            mails.add(item.getEmail());
+            userIds.add(item.getUserId());
+            openIds.add(item.getWxOpenId());
+            phones.add(item.getPhone());
+        });
+        retInfos.put("mails",mails);
+        retInfos.put("userIds",userIds);
+        retInfos.put("openIds",openIds);
+        retInfos.put("phones",phones);
+        return retInfos;
     }
 }

+ 6 - 0
platform-service/src/main/java/com/platform/service/upms/SysRoleService.java

@@ -39,4 +39,10 @@ public interface SysRoleService extends IBaseService<SysRole, SysRoleDTO> {
      * @param roleIds :
      */
     void updateStatus(Integer status, List<String> roleIds);
+
+    /**
+     * 获取用户所属维修角色
+     * @return
+     */
+    Integer getRepairRole();
 }

+ 2 - 0
platform-service/src/main/java/com/platform/service/upms/SysUserService.java

@@ -217,4 +217,6 @@ public interface SysUserService extends IBaseService<SysUser, SysUserDTO> {
     List<SysUserVO> selectDeptRoleUser(SysUserDTO sysUserDTO);
 
     List<SysUserVO> getSysUserList(SysUserDeptDTO sysUserDeptDTO);
+
+    List<SysUserVO> getRepairUsers(SysUserDTO sysUserDTO);
 }

+ 22 - 0
platform-service/src/main/java/com/platform/service/upms/impl/SysRoleServiceImpl.java

@@ -10,11 +10,13 @@ import com.platform.common.exception.BusinessException;
 import com.platform.common.util.BeanConverterUtil;
 import com.platform.common.util.ListUtils;
 import com.platform.common.util.MapUtils;
+import com.platform.common.util.SecurityUtils;
 import com.platform.dao.bean.MyPage;
 import com.platform.dao.dto.upms.SysRoleDTO;
 import com.platform.dao.entity.upms.SysMenu;
 import com.platform.dao.entity.upms.SysRole;
 import com.platform.dao.entity.upms.SysUserRole;
+import com.platform.dao.enums.SysRoleCodeEnum;
 import com.platform.dao.enums.SysUserClientIdEnum;
 import com.platform.dao.mapper.upms.SysRoleMapper;
 import com.platform.dao.mapper.upms.SysUserRoleMapper;
@@ -154,6 +156,26 @@ public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole,
         mapper.updateByExampleSelective(update, weekend);
     }
 
+    @Override
+    public Integer getRepairRole() {
+        // 根据用户的角色来定
+        StringBuilder roleCodes = new StringBuilder();
+        SecurityUtils.getUserInfo().getRoleCodes().forEach(item-> {
+            roleCodes.append(item).append(",");
+        });
+        String roles = roleCodes.toString();
+        if(roles.contains(SysRoleCodeEnum.Maintenance_Leader.name())){
+            return 2;
+        }else if(roles.contains(SysRoleCodeEnum.Maintenance.name())){
+            return 1;
+        }else if(roles.contains(SysRoleCodeEnum.REPAIR_MANAGE.name())){
+            return 3;
+        }else if(roles.contains(SysRoleCodeEnum.MM.name())){
+            return 4;
+        }
+        return null;
+    }
+
     @Override
     public AbstractPageResultBean<SysRole> selectPageInfo(SysRoleDTO record, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);

+ 27 - 0
platform-service/src/main/java/com/platform/service/upms/impl/SysUserServiceImpl.java

@@ -20,6 +20,7 @@ import com.platform.dao.bean.MyPage;
 import com.platform.dao.dto.upms.*;
 import com.platform.dao.entity.upms.*;
 import com.platform.dao.enums.DeptNatureEnum;
+import com.platform.dao.enums.SysRoleCodeEnum;
 import com.platform.dao.enums.SysUserIdentityType;
 import com.platform.dao.mapper.upms.SysDeptManagerMapper;
 import com.platform.dao.mapper.upms.SysDeptMapper;
@@ -770,4 +771,30 @@ public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser,
         List<SysUserVO> sysUserVOS=mapper.getSysUserList(sysUserDeptDTO);
         return sysUserVOS;
     }
+
+    @Override
+    public List<SysUserVO> getRepairUsers(SysUserDTO sysUserDTO) {
+        if(sysUserDTO.getQueryType() == 1){
+            // 维修上报查询
+            if(sysUserDTO.getRoleType() == 1){
+                sysUserDTO.setRoleCode(SysRoleCodeEnum.Maintenance_Leader.name());
+            }else if(sysUserDTO.getRoleType() == 2){
+                sysUserDTO.setRoleCode(SysRoleCodeEnum.REPAIR_MANAGE.name());
+            }
+        }else{
+            // 上报处理查询
+            if(sysUserDTO.getRoleType() == 4){
+                // 查询工程师
+                sysUserDTO.setRoleCode(SysRoleCodeEnum.REPAIR_MANAGE.name());
+            }else if(sysUserDTO.getRoleType() == 3){
+                sysUserDTO.setRoleCode(SysRoleCodeEnum.Maintenance_Leader.name());
+            }else if(sysUserDTO.getRoleType() == 2){
+                List<String> roleCodes = new ArrayList<>();
+                roleCodes.add(SysRoleCodeEnum.Maintenance.name());
+                roleCodes.add(SysRoleCodeEnum.Maintenance_Leader.name());
+                sysUserDTO.setRoleCodes(roleCodes);
+            }
+        }
+        return mapper.getRepairUsers(sysUserDTO);
+    }
 }