xiongchao 3 years ago
parent
commit
758c8b7482

+ 5 - 0
platform-common/src/main/java/com/platform/common/util/DateUtils.java

@@ -226,6 +226,11 @@ public class DateUtils {
         return duration.toMinutes();
     }
 
+    public static String getDurationMinutesStr(LocalDateTime startTime, LocalDateTime  endTime ){
+        Duration duration = Duration.between(startTime,endTime);
+        return String.valueOf(getDurationMinutes(startTime,endTime ));
+    }
+
     public static String dateDiff(LocalDateTime end, LocalDateTime now){
         //获取秒数
         long nowSecond = now.toEpochSecond(ZoneOffset.ofHours(0));

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/dto/check/CheckJobDTO.java

@@ -90,6 +90,11 @@ public class CheckJobDTO extends BaseDTO implements Serializable {
      * 点检人
      */
     private String checkUserName;
+
+    /**
+     * 设备旧号
+     */
+    private String zbh;
     /**
      * 任务开始时间
      */

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

@@ -49,6 +49,10 @@ public class RepairApplicationFormDTO extends BaseDTO implements Serializable {
      * 设备使用位置
      */
     private String sbCph;
+    /**
+     * 设备旧号
+     */
+    private String zbh;
     /**
      * 设备型号ID
      */
@@ -128,6 +132,18 @@ public class RepairApplicationFormDTO extends BaseDTO implements Serializable {
      * 维修耗时
      */
     private String repairMinutes;
+    /**
+     * 接收耗时:分钟
+     */
+    private String receiveMinutes;
+    /**
+     * 维修耗时:0否,1是
+     */
+    private Boolean repairOvertime;
+    /**
+     * 接收耗时:0否,1是
+     */
+    private Boolean receiveOvertime;
     /**
      * 报修人员id
      */
@@ -266,4 +282,14 @@ public class RepairApplicationFormDTO extends BaseDTO implements Serializable {
      * 类型
      */
     private Integer type;
+
+    /**
+     * 搜索开始时间:报修时间
+     */
+    private LocalDateTime searchStartTime;
+
+    /**
+     * 搜索结束时间:报修时间
+     */
+    private LocalDateTime searchEndTime;
 }

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

@@ -113,9 +113,21 @@ public class RepairApplicationForm implements Serializable {
      */
     private String repairDispatchRemark;
     /**
-     * 维修耗时
+     * 维修耗时:分钟
      */
     private String repairMinutes;
+    /**
+     * 接收耗时:分钟
+     */
+    private String receiveMinutes;
+    /**
+     * 维修耗时:0否,1是
+     */
+    private Boolean repairOvertime;
+    /**
+     * 接收耗时:0否,1是
+     */
+    private Boolean receiveOvertime;
     /**
      * 报修人员id
      */

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

@@ -32,7 +32,11 @@ public enum SysConfigEnum {
     SYSTEM_SB_URL("设备地址前缀"),
     REPAIR_ONLY_ONE("1"),// 是否维修中的设备不能再报修
 
-    REPAIR_WARN_MINUTE("维修单接收超时预警分钟");
+    REPAIR_WARN_MINUTE("维修单接收超时预警分钟"),
+    REPAIR_OVERTIME_MINUTE_FIRST("维修超时预警第一阶段"),
+    REPAIR_OVERTIME_MINUTE_SECOND("维修超时预警第二阶段"),
+    REPAIR_OVERTIME_MINUTE_THIRD("维修超时预警第三阶段");
+
     private final String typeName;
 
 }

+ 12 - 0
platform-dao/src/main/java/com/platform/dao/vo/repair/RepairApplicationFormVO.java

@@ -117,6 +117,18 @@ public class RepairApplicationFormVO extends BaseVO implements Serializable {
      * 维修耗时
      */
     private String repairMinutes;
+    /**
+     * 接收耗时:分钟
+     */
+    private String receiveMinutes;
+    /**
+     * 维修耗时:0否,1是
+     */
+    private Boolean repairOvertime;
+    /**
+     * 接收耗时:0否,1是
+     */
+    private Boolean receiveOvertime;
     /**
      * 维修人员id
      */

+ 7 - 0
platform-dao/src/main/resources/mapper/check/CheckJobMapper.xml

@@ -139,6 +139,10 @@
             sbinfo.name like concat('%',#{keyword},'%') or
             sbinfo.no like concat('%',#{keyword},'%') )
         </if>
+        <if test="zbh != null and zbh != ''">
+            and sbinfo.zbh = #{zbh}
+        </if>
+
         <if test="checkUserId != null and checkUserId != ''">
             and checkjob.check_user_id = #{checkUserId}
         </if>
@@ -151,6 +155,9 @@
         <if test="searchEndTime != null">
             and checkjob.start_time <![CDATA[ <= ]]> #{searchEndTime}
         </if>
+        <if test="checkUserName != null and checkUserName != ''">
+            and u.real_name like concat('%',#{checkUserName},'%')
+        </if>
     </sql>
     <select id="selectList" parameterType="com.platform.dao.dto.check.CheckJobDTO"
             resultType="com.platform.dao.vo.query.check.CheckJobVO">

+ 17 - 2
platform-dao/src/main/resources/mapper/repair/RepairApplicationFormMapper.xml

@@ -23,16 +23,25 @@
         left join t_part_info part on application.part_id = part.id
         <where>
             <if test="keyword != null and keyword != ''">
-                and ( application.remark like concat('%',#{keyword},'%') or
-                sb.name like concat('%',#{keyword},'%') or
+                and ( sb.name like concat('%',#{keyword},'%') or
+                sb.no like concat('%',#{keyword},'%') or
                 application.content like concat('%',#{keyword},'%') )
             </if>
+            <if test="content != null and content != ''">
+                and application.content like concat('%',#{content},'%')
+            </if>
             <if test="sbId != null and sbId != ''">
                 and application.sb_id = #{sbId}
             </if>
+            <if test="zbh != null and zbh != ''">
+                and sb.zbh = #{zbh}
+            </if>
             <if test="no != null and no != ''">
                 and application.no = #{no}
             </if>
+            <if test="actualUser != null and actualUser != ''">
+                and application.actual_user = #{actualUser}
+            </if>
             <if test="mainRepairId != null and mainRepairId != ''">
                 and application.main_repair_id = #{mainRepairId}
             </if>
@@ -59,6 +68,12 @@
             <if test="checkUserId != null and checkUserId != ''">
                 and application.check_user_id = #{checkUserId}
             </if>
+            <if test="searchStartTime != null">
+                and checkjob.start_time <![CDATA[ >= ]]> #{searchStartTime}
+            </if>
+            <if test="searchEndTime != null">
+                and checkjob.start_time <![CDATA[ <= ]]> #{searchEndTime}
+            </if>
         </where>
     </select>
     <select id="selectById" parameterType="java.lang.Object"

+ 1 - 15
platform-rest/src/main/java/com/platform/rest/controller/repair/RepairApplicationFormController.java

@@ -71,7 +71,7 @@ public class RepairApplicationFormController {
      */
     @SysLog("新增保修单")
     @PostMapping
-    // @PreAuthorize("@pms.hasPermission('repair-application-forms-add')")
+    @PreAuthorize("@pms.hasPermission('repair-application-forms-add')")
     public R save(@Validated({AddGroup.class}) @RequestBody RepairApplicationFormDTO repairApplicationFormDTO) {
         return new R<>(repairApplicationFormService.saveModelByDTO(repairApplicationFormDTO));
     }
@@ -172,20 +172,6 @@ public class RepairApplicationFormController {
         return new R<>();
     }
 
-    /**
-     * 审核维修单:进行审核操作
-     *
-     * @param id 维修单DTO
-     * @return R
-     */
-   /* @SysLog("完成审核维修单")
-    @PutMapping("/examined/{id}/{result}")
-    @PreAuthorize("@pms.hasPermission('repair-application-forms-finish')")
-    public R examined(@PathVariable("id") String id, @PathVariable("result") Integer result, @Validated({UpdateGroup.class}) @RequestBody RepairApplicationFormDTO repairCheckDTO) {
-        repairApplicationFormService.examined(id, result, repairCheckDTO);
-        return new R<>();
-    }*/
-
     /**
      * 修改记录
      *

+ 9 - 1
platform-service/src/main/java/com/platform/service/redis/impl/RedisTaskService.java

@@ -95,6 +95,10 @@ public class RedisTaskService extends KeyExpirationEventMessageListener {
             }
             if(expiredKeyArr[0].equalsIgnoreCase(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_STEP_FIRST)){
                 if(StringUtils.isNotBlank(sbInfoVO.getRepairUserSecond())){
+
+                    // 更新维修单状态为接单超时
+                    repairApplicationForm.setReceiveOvertime(true);
+                    repairApplicationFormService.modModelByPrimaryKey(repairApplicationForm);
                     logger.info("处理第一阶段过期,发送消息给第二维修人");
                     userVO = sysUserService.selectUserVO(sbInfoVO.getRepairUserSecond());
                     sendMessage(repairId, repairApplicationForm,userVO,sbInfoVO,"repairEmailFirst.ftl");
@@ -129,8 +133,12 @@ public class RedisTaskService extends KeyExpirationEventMessageListener {
             if(repairApplicationForm.getStatus().compareTo(RepairApplicationFormStatusEnum.PROCESSING.getValue())>0){
                 return;
             }
-            // 超时3小时发送给牛工,通过角色来查询
             if(expiredKeyArr[0].equalsIgnoreCase(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_FIRST)){
+
+                // 更新维修单状态为维修超时
+                repairApplicationForm.setRepairOvertime(true);
+                repairApplicationFormService.modModelByPrimaryKey(repairApplicationForm);
+
                 logger.info("超时3小时发送给牛工");
                 List<SysUser> userList = sysUserService.getRepairUser(new SysUserDTO());
                 List<SysUser> filterUsers = userList.stream().filter(item -> item.getWorkFlag()).collect(Collectors.toList());

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

@@ -118,8 +118,8 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
     public MyVOPage<RepairApplicationFormVO> selectPageInfoVO(RepairApplicationFormDTO record, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);
 
-        // 获取报修人
         if(record.getSearchType() != null){
+            // 获取报修人
             if (record.getSearchType() == 1) {
                 if (record.getFilter() != null && DataFilterTypeEnum.SELF.getValue() == record.getFilter().intValue()) {
                     UserInfo userInfo = SecurityUtils.getUserInfo();
@@ -309,9 +309,24 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_STEP_FIRST + RedisKeyConstants.EXPIRE_BUSINESS_SEP + model.getId(),model.getId(),minute, TimeUnit.MINUTES);
 
         // 维修时间升级流程:超过3个小时没修好,升级给牛工,超过8个小时没修好,升级给相工,超过24 没修好,升级给田总,现在把三阶段的人员位置留好,可以先暂时升级给我,后期再改为具体的人。
-        RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_FIRST + RedisKeyConstants.EXPIRE_BUSINESS_SEP + model.getId(),model.getId(),3, TimeUnit.HOURS);
-        RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_SECOND + RedisKeyConstants.EXPIRE_BUSINESS_SEP + model.getId(),model.getId(),8, TimeUnit.HOURS);
-        RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_THIRD + RedisKeyConstants.EXPIRE_BUSINESS_SEP + model.getId(),model.getId(),24, TimeUnit.HOURS);
+        String hourFirstStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_FIRST.name());
+        int hourFirst = 3;// 默认3小时
+        if(StringUtils.isNotBlank(hourFirstStr)){
+            hourFirst = Integer.valueOf(hourFirstStr);
+        }
+        String hourSecondStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_SECOND.name());
+        int hourSecond = 8;// 默认8小时
+        if(StringUtils.isNotBlank(hourSecondStr)){
+            hourSecond = Integer.valueOf(hourSecondStr);
+        }
+        String hourThirdStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_OVERTIME_MINUTE_THIRD.name());
+        int hourThird = 24;// 默认24小时
+        if(StringUtils.isNotBlank(hourThirdStr)){
+            hourThird = Integer.valueOf(hourThirdStr);
+        }
+        RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_FIRST + RedisKeyConstants.EXPIRE_BUSINESS_SEP + model.getId(),model.getId(),hourFirst, TimeUnit.HOURS);
+        RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_SECOND + RedisKeyConstants.EXPIRE_BUSINESS_SEP + model.getId(),model.getId(),hourSecond, TimeUnit.HOURS);
+        RedisUtils.setString(RedisKeyConstants.EXPIRE_BUSINESS_KEY_REPAIR_OVERTIME_STEP_THIRD + RedisKeyConstants.EXPIRE_BUSINESS_SEP + model.getId(),model.getId(),hourThird, TimeUnit.HOURS);
 
         return form;
     }
@@ -390,11 +405,21 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         if (!RepairApplicationFormStatusEnum.NOT_ALLOCATED.getValue().equals(applicationForm.getStatus()) && !RepairApplicationFormStatusEnum.ALLOCATED.getValue().equals(applicationForm.getStatus()) && !RepairApplicationFormStatusEnum.REBACK.getValue().equals(applicationForm.getStatus())) {
             throw new BusinessException("该状态不允许接收任务");
         }
-        applicationForm.setRepairUserId(SecurityUtils.getUserInfo().getUserId());
+        UserInfo userInfo = SecurityUtils.getUser().getUserInfo();
+        applicationForm.setRepairUserId(userInfo.getUserId());
         applicationForm.setStatus(RepairApplicationFormStatusEnum.PROCESSING.getValue());
         if(applicationForm.getRepairStartTime() == null){
             applicationForm.setRepairStartTime(LocalDateTime.now());
         }
+        applicationForm.setReceiveMinutes(DateUtils.getDurationMinutesStr(applicationForm.getApplyTime(), applicationForm.getRepairStartTime()));
+
+        // 根据配置判断维修是否超时
+        String minuteStr = ConfigCache.getLabelByValueAllowNull(SysConfigEnum.REPAIR_WARN_MINUTE.name());
+        if(applicationForm.getReceiveMinutes().compareTo(minuteStr)>0){
+            applicationForm.setReceiveOvertime(true);
+        }else{
+            applicationForm.setReceiveOvertime(false);
+        }
         applicationForm.setUpdateTime(LocalDateTime.now());
         super.modModelByPrimaryKey(applicationForm);
 
@@ -527,8 +552,18 @@ public class RepairApplicationFormServiceImpl extends BaseServiceImpl<RepairAppl
         if(applicationForm.getRepairEndTime() == null){
             applicationForm.setRepairEndTime(LocalDateTime.now());
         }
-        applicationForm.setRepairMinutes(DateUtils.dateDiff(applicationForm.getRepairEndTime(), applicationForm.getRepairStartTime()));
-
+        applicationForm.setRepairMinutes(DateUtils.getDurationMinutesStr(applicationForm.getRepairEndTime(), applicationForm.getRepairStartTime()));
+        // 根据配置判断维修是否超时
+        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().compareTo(String.valueOf(hourFirst))>0){
+            applicationForm.setRepairOvertime(true);
+        }else{
+            applicationForm.setRepairOvertime(false);
+        }
         applicationForm.setRepairContent(dto.getRepairContent());
         applicationForm.setNeedStop(dto.getNeedStop());
         //applicationForm.setLevel(dto.getLevel());