Bläddra i källkod

优化加入工单超时功能

wuxw 1 år sedan
förälder
incheckning
4a51c642a1

+ 37 - 0
java110-bean/src/main/java/com/java110/dto/notice/NoticeStaffDto.java

@@ -10,9 +10,20 @@ public class NoticeStaffDto implements Serializable {
 
     private String notifyUserName;
 
+    private String url;
+
     public NoticeStaffDto() {
     }
 
+    /**
+     * 通知实体
+     * "流程名称", "发起时间", "发起人"
+     *
+     * @param communityId    小区
+     * @param staffId        通知人
+     * @param title          流程名称
+     * @param notifyUserName 发起人
+     */
     public NoticeStaffDto(String communityId, String staffId, String title, String notifyUserName) {
         this.communityId = communityId;
         this.staffId = staffId;
@@ -20,6 +31,24 @@ public class NoticeStaffDto implements Serializable {
         this.notifyUserName = notifyUserName;
     }
 
+    /**
+     * 通知实体
+     * "流程名称", "发起时间", "发起人"
+     *
+     * @param communityId    小区
+     * @param staffId        通知人
+     * @param title          流程名称
+     * @param notifyUserName 发起人
+     * @param url            打开地址
+     */
+    public NoticeStaffDto(String communityId, String staffId, String title, String notifyUserName, String url) {
+        this.communityId = communityId;
+        this.staffId = staffId;
+        this.title = title;
+        this.notifyUserName = notifyUserName;
+        this.url = url;
+    }
+
     public String getCommunityId() {
         return communityId;
     }
@@ -51,4 +80,12 @@ public class NoticeStaffDto implements Serializable {
     public void setNotifyUserName(String notifyUserName) {
         this.notifyUserName = notifyUserName;
     }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 143 - 0
service-community/src/main/java/com/java110/community/cmd/repair/ListPhoneRepairStaffsCmd.java

@@ -0,0 +1,143 @@
+package com.java110.community.cmd.repair;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.CmdContextUtils;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.file.FileRelDto;
+import com.java110.dto.repair.RepairDto;
+import com.java110.dto.repair.RepairUserDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.common.IFileRelInnerServiceSMO;
+import com.java110.intf.community.IRepairInnerServiceSMO;
+import com.java110.intf.community.IRepairUserInnerServiceSMO;
+import com.java110.intf.user.IUserV1InnerServiceSMO;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.MappingConstant;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.vo.ResultVo;
+import com.java110.vo.api.junkRequirement.PhotoVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Java110Cmd(serviceCode = "repair.listPhoneRepairStaffs")
+public class ListPhoneRepairStaffsCmd extends Cmd {
+
+    @Autowired
+    private IRepairInnerServiceSMO repairInnerServiceSMOImpl;
+
+    @Autowired
+    private IRepairUserInnerServiceSMO repairUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        super.validatePageInfo(reqJson);
+        Assert.hasKeyAndValue(reqJson, "repairId", "未包含报修单");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        String userId = CmdContextUtils.getUserId(context);
+
+        UserDto userDto = new UserDto();
+        userDto.setUserId(userId);
+        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "用户未登录");
+        RepairDto ownerRepairDto = new RepairDto();
+        ownerRepairDto.setRepairId(reqJson.getString("repairId"));
+        ownerRepairDto.setTel(userDtos.get(0).getTel());
+        int count = repairInnerServiceSMOImpl.queryRepairsCount(ownerRepairDto);
+        if (count < 1) {
+            throw new CmdException("报修工单不存在");
+        }
+
+
+        RepairUserDto repairUserDto = BeanConvertUtil.covertBean(reqJson, RepairUserDto.class);
+        count = repairUserInnerServiceSMOImpl.queryRepairUsersCount(repairUserDto);
+
+        List<RepairUserDto> repairUserDtos = null;
+        if (count > 0) {
+            repairUserDtos = repairUserInnerServiceSMOImpl.queryRepairUsers(repairUserDto);
+            refreshRepairUser(repairUserDtos);
+        } else {
+            repairUserDtos = new ArrayList<>();
+        }
+
+        ResponseEntity<String> responseEntity = ResultVo.createResponseEntity((int) Math.ceil((double) count / (double) reqJson.getInteger("row")), count, repairUserDtos);
+
+        context.setResponseEntity(responseEntity);
+    }
+
+    private void refreshRepairUser(List<RepairUserDto> repairUserDtos) {
+        long duration = 0;
+        for (RepairUserDto repairUserDto : repairUserDtos) {
+            if (repairUserDto.getEndTime() == null) {
+                duration = DateUtil.getCurrentDate().getTime() - repairUserDto.getStartTime().getTime();
+            } else {
+                duration = repairUserDto.getEndTime().getTime() - repairUserDto.getStartTime().getTime();
+            }
+            repairUserDto.setDuration(getCostTime(duration));
+        }
+
+        //刷入图片信息
+        List<PhotoVo> photoVos = null;  //业主上传维修图片
+        PhotoVo photoVo = null;
+
+        String imgUrl = MappingCache.getValue(MappingConstant.FILE_DOMAIN, "IMG_PATH");
+
+        for (RepairUserDto repairUserDto : repairUserDtos) {
+            FileRelDto fileRelDto = new FileRelDto();
+            fileRelDto.setObjId(repairUserDto.getRepairId());
+            List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto);
+            photoVos = new ArrayList<>();
+            for (FileRelDto tmpFileRelDto : fileRelDtos) {
+                if (tmpFileRelDto.getRelTypeCd().equals("14000")) {  //维修图片
+                    photoVo = new PhotoVo();
+                    if (!tmpFileRelDto.getFileRealName().startsWith("http")) {
+                        photoVo.setUrl(imgUrl + tmpFileRelDto.getFileRealName());
+                    } else {
+                        photoVo.setUrl(tmpFileRelDto.getFileRealName());
+                    }
+                    photoVo.setUrl(tmpFileRelDto.getFileRealName());
+                    photoVo.setRelTypeCd(tmpFileRelDto.getRelTypeCd());
+                    photoVos.add(photoVo);
+                } else {
+                    continue;
+                }
+            }
+            repairUserDto.setPhotoVos(photoVos);
+        }
+    }
+
+
+    public String getCostTime(Long time) {
+        if (time == null) {
+            return "00:00";
+        }
+        long hours = time / (1000 * 60 * 60);
+        long minutes = (time - hours * (1000 * 60 * 60)) / (1000 * 60);
+        String diffTime = "";
+        if (minutes < 10) {
+            diffTime = hours + ":0" + minutes;
+        } else {
+            diffTime = hours + ":" + minutes;
+        }
+        return diffTime;
+    }
+}

+ 0 - 4
service-community/src/main/java/com/java110/community/cmd/repair/QueryPhoneRepairsCmd.java

@@ -77,10 +77,6 @@ public class QueryPhoneRepairsCmd extends Cmd {
         if (reqJson.containsKey("repairStates")) {
             String[] states = reqJson.getString("repairStates").split(",");
             ownerRepairDto.setStatess(states);
-        } else {
-            //Pc WEB维修已办
-            String[] states = {RepairDto.STATE_BACK, RepairDto.STATE_TRANSFER, RepairDto.STATE_PAY, RepairDto.STATE_PAY_ERROR, RepairDto.STATE_APPRAISE, RepairDto.STATE_RETURN_VISIT, RepairDto.STATE_COMPLATE};
-            ownerRepairDto.setStatess(states);
         }
 
         int count = repairInnerServiceSMOImpl.queryRepairsCount(ownerRepairDto);

+ 4 - 0
service-job/src/main/java/com/java110/job/msgNotify/wechat/WechatMsgNotifyImpl.java

@@ -407,9 +407,13 @@ public class WechatMsgNotifyImpl implements IMsgNotify {
         data.put("time10", new Content(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)));
         data.put("thing9", new Content(noticeStaffDto.getNotifyUserName()));
         templateMessage.setData(data);
+
         //获取员工公众号地址
         String wechatUrl = MappingCache.getValue(MappingConstant.URL_DOMAIN, "STAFF_WECHAT_URL");
         templateMessage.setUrl(wechatUrl);
+        if (StringUtil.isEmpty(noticeStaffDto.getUrl())) {
+            templateMessage.setUrl(noticeStaffDto.getUrl());
+        }
         logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
         ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
         logger.info("微信模板返回内容:{}", responseEntity);

+ 0 - 153
service-job/src/main/java/com/java110/job/task/groupBuy/GeneratorGroupBuyBatchTemplate.java

@@ -1,153 +0,0 @@
-package com.java110.job.task.groupBuy;
-
-import com.java110.core.factory.GenerateCodeFactory;
-import com.java110.dto.shop.GroupBuySettingDto;
-import com.java110.dto.store.StoreDto;
-import com.java110.dto.task.TaskDto;
-import com.java110.intf.goods.IGroupBuyBatchInnerServiceSMO;
-import com.java110.intf.goods.IGroupBuyProductInnerServiceSMO;
-import com.java110.intf.goods.IGroupBuySettingInnerServiceSMO;
-import com.java110.job.quartz.TaskSystemQuartz;
-import com.java110.po.shop.GroupBuyBatchPo;
-import com.java110.po.shop.GroupBuyProductPo;
-import com.java110.po.shop.GroupBuySettingPo;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.DateUtil;
-import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @program: MicroCommunity
- * @description: 定时任务 定时生成批次
- * @author: wuxw
- * @create: 2020-06-15 13:35
- **/
-@Component
-public class GeneratorGroupBuyBatchTemplate extends TaskSystemQuartz {
-
-    private static Logger logger = LoggerFactory.getLogger(GeneratorGroupBuyBatchTemplate.class);
-
-    private static final int EXPIRE_IN = 7200;
-
-    @Autowired(required = false)
-    private IGroupBuySettingInnerServiceSMO groupBuySettingInnerServiceSMOImpl;
-
-    @Autowired(required = false)
-    private IGroupBuyBatchInnerServiceSMO groupBuyBatchInnerServiceSMOImpl;
-
-    @Autowired(required = false)
-    private IGroupBuyProductInnerServiceSMO groupBuyProductInnerServiceSMOImpl;
-
-
-    @Override
-    protected void process(TaskDto taskDto) {
-        logger.debug("开始生成拼团批次" + taskDto.toString());
-
-        // 获取小区
-        List<StoreDto> storeDtos = getAllStore(StoreDto.STORE_TYPE_ADMIN);
-
-        for (StoreDto storeDto : storeDtos) {
-            try {
-                generatorGroupBuyBatch(taskDto, storeDto);
-            } catch (Exception e) {
-                logger.error("推送消息失败", e);
-            }
-        }
-    }
-
-    /**
-     * 轮训派单
-     *
-     * @param taskDto
-     * @param storeDto
-     */
-    private void generatorGroupBuyBatch(TaskDto taskDto, StoreDto storeDto) {
-
-        //查询需要程序轮训派单 订单
-        GroupBuySettingDto groupBuySettingDto = new GroupBuySettingDto();
-        groupBuySettingDto.setStoreId(storeDto.getStoreId());
-        List<GroupBuySettingDto> groupBuySettingDtos = groupBuySettingInnerServiceSMOImpl.queryGroupBuySettings(groupBuySettingDto);
-
-        Assert.listOnlyOne(groupBuySettingDtos, "未配置 拼团设置");
-
-        for (GroupBuySettingDto tmpGroupBuySettingDto : groupBuySettingDtos) {
-            try {
-                doGeneratorGroupBuyBatch(tmpGroupBuySettingDto);
-            } catch (Exception e) {
-                logger.error("生成批次", e);
-            }
-
-        }
-
-    }
-
-    /**
-     * 生成批次
-     *
-     * @param tmpGroupBuySettingDto
-     */
-    private void doGeneratorGroupBuyBatch(GroupBuySettingDto tmpGroupBuySettingDto) throws Exception {
-
-        Date endTime = DateUtil.getDateFromString(tmpGroupBuySettingDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_A);
-        Date nowTime = DateUtil.getCurrentDate();
-
-        if (endTime.getTime() > nowTime.getTime()) { // 还没有到 批次结束
-            return;
-        }
-
-        Date startTime = endTime;
-
-        int validHours = Integer.parseInt(tmpGroupBuySettingDto.getValidHours());
-
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(endTime);
-        calendar.add(Calendar.HOUR_OF_DAY, validHours);
-
-        endTime = calendar.getTime();
-
-        GroupBuyBatchPo groupBuyBatchPo = new GroupBuyBatchPo();
-        groupBuyBatchPo.setSettingId(tmpGroupBuySettingDto.getSettingId());
-        groupBuyBatchPo.setStoreId(tmpGroupBuySettingDto.getStoreId());
-        groupBuyBatchPo.setCurBatch("F");
-        groupBuyBatchPo.setDefaultCurBatch("Y");
-        groupBuyBatchInnerServiceSMOImpl.updateGroupBuyBatch(groupBuyBatchPo);
-
-
-        groupBuyBatchPo.setCurBatch("Y");
-        groupBuyBatchPo.setBatchStartTime(DateUtil.getFormatTimeString(startTime, DateUtil.DATE_FORMATE_STRING_A));
-        groupBuyBatchPo.setBatchEndTime(DateUtil.getFormatTimeString(endTime,DateUtil.DATE_FORMATE_STRING_A));
-        groupBuyBatchPo.setBatchId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_batchId));
-        int flag = groupBuyBatchInnerServiceSMOImpl.saveGroupBuyBatch(groupBuyBatchPo);
-
-        if(flag < 1){
-            throw new IllegalArgumentException("保存批次失败");
-        }
-
-        //更新 setting 表
-        GroupBuySettingPo groupBuySettingPo = new GroupBuySettingPo();
-        groupBuySettingPo.setStartTime(DateUtil.getFormatTimeString(startTime, DateUtil.DATE_FORMATE_STRING_A));
-        groupBuySettingPo.setEndTime(DateUtil.getFormatTimeString(endTime,DateUtil.DATE_FORMATE_STRING_A));
-        groupBuySettingPo.setSettingId(tmpGroupBuySettingDto.getSettingId());
-        flag = groupBuySettingInnerServiceSMOImpl.updateGroupBuySetting(groupBuySettingPo);
-        if(flag < 1){
-            throw new IllegalArgumentException("保存批次失败");
-        }
-
-        GroupBuyProductPo groupBuyProductPo = new GroupBuyProductPo();
-        groupBuyProductPo.setStoreId(tmpGroupBuySettingDto.getStoreId());
-        groupBuyProductPo.setBatchId(groupBuyBatchPo.getBatchId());
-
-        flag = groupBuyProductInnerServiceSMOImpl.updateGroupBuyProduct(groupBuyProductPo);
-        if(flag < 1){
-            throw new IllegalArgumentException("保存批次失败");
-        }
-    }
-
-
-}

+ 0 - 202
service-job/src/main/java/com/java110/job/task/inspection/PublishStaffInspectionTaskTemplate.java

@@ -1,202 +0,0 @@
-package com.java110.job.task.inspection;
-
-import com.alibaba.fastjson.JSON;
-import com.java110.core.factory.WechatFactory;
-import com.java110.dto.community.CommunityDto;
-import com.java110.dto.inspection.InspectionTaskDetailDto;
-import com.java110.dto.inspection.InspectionTaskDto;
-import com.java110.dto.wechat.SmallWeChatDto;
-import com.java110.dto.wechat.SmallWechatAttrDto;
-import com.java110.dto.user.StaffAppAuthDto;
-import com.java110.dto.task.TaskDto;
-import com.java110.dto.wechat.Content;
-import com.java110.dto.wechat.Data;
-import com.java110.dto.wechat.PropertyFeeTemplateMessage;
-import com.java110.intf.community.*;
-import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
-import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO;
-import com.java110.intf.user.IStaffAppAuthInnerServiceSMO;
-import com.java110.intf.user.IUserInnerServiceSMO;
-import com.java110.job.quartz.TaskSystemQuartz;
-import com.java110.utils.cache.MappingCache;
-import com.java110.utils.constant.MappingConstant;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.DateUtil;
-import com.java110.utils.util.StringUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import java.text.ParseException;
-import java.util.Date;
-import java.util.List;
-
-@Component
-public class PublishStaffInspectionTaskTemplate extends TaskSystemQuartz {
-
-    @Autowired
-    private IInspectionPlanInnerServiceSMO inspectionPlanInnerServiceSMOImpl;
-
-    @Autowired
-    private IInspectionPlanStaffInnerServiceSMO inspectionPlanStaffInnerServiceSMOImpl;
-
-    @Autowired
-    private IInspectionRoutePointRelInnerServiceSMO inspectionRoutePointRelInnerServiceSMOImpl;
-
-
-    @Autowired
-    private IInspectionTaskInnerServiceSMO inspectionTaskInnerServiceSMOImpl;
-
-    @Autowired
-    private IInspectionTaskDetailInnerServiceSMO inspectionTaskDetailInnerServiceSMOImpl;
-
-    @Autowired
-    private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
-
-    @Autowired
-    private ISmallWechatAttrInnerServiceSMO smallWechatAttrInnerServiceSMOImpl;
-
-    @Autowired
-    private IStaffAppAuthInnerServiceSMO staffAppAuthInnerServiceSMO;
-
-    @Autowired
-    private RestTemplate outRestTemplate;
-
-    @Autowired
-    private IUserInnerServiceSMO userInnerServiceSMO;
-
-
-    //模板信息推送地址
-    private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
-
-    @Override
-    protected void process(TaskDto taskDto) throws Exception {
-        logger.debug("开始执行微信模板信息推送" + taskDto.toString());
-
-        // 获取小区
-        List<CommunityDto> communityDtos = getAllCommunity();
-
-        for (CommunityDto communityDto : communityDtos) {
-            try {
-                publishStaffInspectionTask(taskDto, communityDto);
-            } catch (Exception e) {
-                logger.error("推送消息失败", e);
-            }
-        }
-    }
-
-    /**
-     * 巡检任务
-     *
-     * @param taskDto
-     * @param communityDto
-     */
-    private void publishStaffInspectionTask(TaskDto taskDto, CommunityDto communityDto) {
-        InspectionTaskDetailDto inspectionTaskDetailDto = new InspectionTaskDetailDto();
-        inspectionTaskDetailDto.setCommunityId(communityDto.getCommunityId());
-        inspectionTaskDetailDto.setState(InspectionTaskDto.STATE_NO_START);
-        inspectionTaskDetailDto.setQrCodeTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B));
-        inspectionTaskDetailDto.setSendFlag(InspectionTaskDetailDto.SEND_FLAG_N);
-        List<InspectionTaskDetailDto> inspectionTaskDetailDtos = inspectionTaskDetailInnerServiceSMOImpl.queryInspectionTaskDetails(inspectionTaskDetailDto);
-
-        for (InspectionTaskDetailDto inspectionTaskDetailDto1 : inspectionTaskDetailDtos) {
-            dealInspectionTaskDetail(inspectionTaskDetailDto1, taskDto, communityDto);
-        }
-    }
-
-    /**
-     * 处理巡检计划
-     *
-     * @param inspectionTaskDetailDto
-     * @param taskDto
-     * @param communityDto
-     */
-    private void dealInspectionTaskDetail(InspectionTaskDetailDto inspectionTaskDetailDto, TaskDto taskDto, CommunityDto communityDto) {
-
-        String startTime = inspectionTaskDetailDto.getPointStartTime();
-
-        startTime = DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B) + " " + startTime + ":00";
-        Date startDate = null;
-        try {
-            startDate = DateUtil.getDateFromString(startTime, DateUtil.DATE_FORMATE_STRING_A);
-        } catch (ParseException e) {
-            e.printStackTrace();
-            startDate = new Date();
-        }
-
-        //还没有到时间
-        if (startDate.getTime() > DateUtil.getCurrentDate().getTime()) {
-            return;
-        }
-        SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
-        smallWeChatDto.setWeChatType("1100");
-        smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
-        smallWeChatDto.setObjId(communityDto.getCommunityId());
-        List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
-        if (smallWeChatDto == null || smallWeChatDtos.size() <= 0) {
-            logger.info("未配置微信公众号信息,定时任务执行结束");
-            return;
-        }
-        SmallWeChatDto weChatDto = smallWeChatDtos.get(0);
-        SmallWechatAttrDto smallWechatAttrDto = new SmallWechatAttrDto();
-        smallWechatAttrDto.setCommunityId(communityDto.getCommunityId());
-        smallWechatAttrDto.setWechatId(weChatDto.getWeChatId());
-        smallWechatAttrDto.setSpecCd(SmallWechatAttrDto.SPEC_CD_WECHAT_TEMPLATE);
-        List<SmallWechatAttrDto> smallWechatAttrDtos = smallWechatAttrInnerServiceSMOImpl.querySmallWechatAttrs(smallWechatAttrDto);
-        if (smallWechatAttrDtos == null || smallWechatAttrDtos.size() <= 0) {
-            logger.info("未配置微信公众号消息模板");
-            return;
-        }
-        String templateId = smallWechatAttrDtos.get(0).getValue();
-        String accessToken = WechatFactory.getAccessToken(weChatDto.getAppId(), weChatDto.getAppSecret());
-        if (StringUtil.isEmpty(accessToken)) {
-            logger.info("推送微信模板,获取accessToken失败:{}", accessToken);
-            return;
-        }
-        String url = sendMsgUrl + accessToken;
-        //根据 userId 查询到openId
-        StaffAppAuthDto staffAppAuthDto = new StaffAppAuthDto();
-        staffAppAuthDto.setStaffId(inspectionTaskDetailDto.getPlanUserId());
-        staffAppAuthDto.setAppType("WECHAT");
-        List<StaffAppAuthDto> staffAppAuthDtos = staffAppAuthInnerServiceSMO.queryStaffAppAuths(staffAppAuthDto);
-        if (staffAppAuthDtos == null || staffAppAuthDtos.size() < 1) {
-            return;
-        }
-        String openId = staffAppAuthDtos.get(0).getOpenId();
-        Data data = new Data();
-        PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
-        templateMessage.setTemplate_id(templateId);
-        templateMessage.setTouser(openId);
-        data.setFirst(new Content("您有新的巡检任务,巡检信息如下:"));
-        data.setKeyword1(new Content(inspectionTaskDetailDto.getInspectionName()));
-        data.setKeyword2(new Content(inspectionTaskDetailDto.getPlanInsTime()));
-        data.setKeyword3(new Content(inspectionTaskDetailDto.getInspectionName() + "未巡检,请及时巡检"));
-        data.setRemark(new Content("如有疑问请联系管理员"));
-
-        templateMessage.setData(BeanConvertUtil.beanCovertJson(data));
-
-
-        String staffWechatUrl = MappingCache.getValue(MappingConstant.URL_DOMAIN,"STAFF_WECHAT_URL");
-        staffWechatUrl =  staffWechatUrl
-                    + "pages/excuteOneQrCodeInspection/excuteOneQrCodeInspection?inspectionId="
-                    + inspectionTaskDetailDto.getInspectionId()
-                    + "&inspectionName=" + inspectionTaskDetailDto.getInspectionName()
-                    + "&itemId=" + inspectionTaskDetailDto.getItemId();
-
-
-        templateMessage.setUrl(staffWechatUrl);
-        logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
-        ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
-        logger.info("微信模板返回内容:{}", responseEntity);
-
-
-        InspectionTaskDetailDto inspectionTaskDetailPo = new InspectionTaskDetailDto();
-        inspectionTaskDetailPo.setTaskDetailId(inspectionTaskDetailDto.getTaskDetailId());
-        inspectionTaskDetailPo.setSendFlag(InspectionTaskDetailDto.SEND_FLAG_Y);
-        inspectionTaskDetailDto.setStatusCd("0");
-        inspectionTaskDetailInnerServiceSMOImpl.updateInspectionTaskDetail(inspectionTaskDetailPo);
-
-    }
-
-}

+ 0 - 159
service-job/src/main/java/com/java110/job/task/inspection/PublishTodayFinishInspectionTaskReportTemplate.java

@@ -1,159 +0,0 @@
-package com.java110.job.task.inspection;
-
-import com.alibaba.fastjson.JSON;
-import com.java110.core.factory.WechatFactory;
-import com.java110.dto.community.CommunityMemberDto;
-import com.java110.dto.privilege.BasePrivilegeDto;
-import com.java110.dto.community.CommunityDto;
-import com.java110.dto.wechat.SmallWeChatDto;
-import com.java110.dto.wechat.SmallWechatAttrDto;
-import com.java110.dto.user.StaffAppAuthDto;
-import com.java110.dto.task.TaskDto;
-import com.java110.dto.user.UserDto;
-import com.java110.dto.wechat.Content;
-import com.java110.dto.wechat.Data;
-import com.java110.dto.wechat.PropertyFeeTemplateMessage;
-import com.java110.intf.community.ICommunityInnerServiceSMO;
-import com.java110.intf.order.IPrivilegeInnerServiceSMO;
-import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
-import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO;
-import com.java110.intf.user.IStaffAppAuthInnerServiceSMO;
-import com.java110.job.quartz.TaskSystemQuartz;
-import com.java110.utils.cache.MappingCache;
-import com.java110.utils.constant.MappingConstant;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.DateUtil;
-import com.java110.utils.util.StringUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.List;
-
-@Component
-public class PublishTodayFinishInspectionTaskReportTemplate extends TaskSystemQuartz {
-
-    @Autowired
-    private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
-
-    @Autowired
-    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
-
-    @Autowired
-    private ISmallWechatAttrInnerServiceSMO smallWechatAttrInnerServiceSMOImpl;
-
-    @Autowired
-    private IPrivilegeInnerServiceSMO privilegeInnerServiceSMO;
-
-    @Autowired
-    private IStaffAppAuthInnerServiceSMO staffAppAuthInnerServiceSMOImpl;
-
-    @Autowired
-    private RestTemplate outRestTemplate;
-
-    //模板信息推送地址
-    private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
-
-
-    @Override
-    protected void process(TaskDto taskDto) throws Exception {
-
-        logger.debug("开始执行微信模板信息推送" + taskDto.toString());
-
-        // 获取小区
-        List<CommunityDto> communityDtos = getAllCommunity();
-
-        for (CommunityDto communityDto : communityDtos) {
-            try {
-                publishInspectionTask(taskDto, communityDto);
-            } catch (Exception e) {
-                logger.error("推送消息失败", e);
-            }
-        }
-    }
-
-    /**
-     * 巡检任务
-     *
-     * @param taskDto
-     * @param communityDto
-     */
-    private void publishInspectionTask(TaskDto taskDto, CommunityDto communityDto) {
-        SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
-        smallWeChatDto.setWeChatType("1100");
-        smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
-        smallWeChatDto.setObjId(communityDto.getCommunityId());
-        List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
-
-        if (smallWeChatDto == null || smallWeChatDtos.size() <= 0) {
-            logger.error("未配置微信公众号信息,定时任务执行结束");
-            return;
-        }
-        SmallWeChatDto weChatDto = smallWeChatDtos.get(0);
-
-        SmallWechatAttrDto smallWechatAttrDto = new SmallWechatAttrDto();
-        smallWechatAttrDto.setCommunityId(communityDto.getCommunityId());
-        smallWechatAttrDto.setWechatId(weChatDto.getWeChatId());
-        smallWechatAttrDto.setSpecCd(SmallWechatAttrDto.SPEC_CD_WECHAT_TEMPLATE);
-        List<SmallWechatAttrDto> smallWechatAttrDtos = smallWechatAttrInnerServiceSMOImpl.querySmallWechatAttrs(smallWechatAttrDto);
-        if (smallWechatAttrDtos == null || smallWechatAttrDtos.size() <= 0) {
-            logger.info("未配置微信公众号消息模板");
-            return;
-        }
-        String templateId = smallWechatAttrDtos.get(0).getValue();
-        String accessToken = WechatFactory.getAccessToken(weChatDto.getAppId(), weChatDto.getAppSecret());
-        if (StringUtil.isEmpty(accessToken)) {
-            logger.info("推送微信模板,获取accessToken失败:{}", accessToken);
-            return;
-        }
-        String url = sendMsgUrl + accessToken;
-
-        CommunityMemberDto communityMemberDto = new CommunityMemberDto();
-        communityMemberDto.setCommunityId(communityDto.getCommunityId());
-        communityMemberDto.setAuditStatusCd(CommunityMemberDto.AUDIT_STATUS_NORMAL);
-        communityMemberDto.setMemberTypeCd(CommunityMemberDto.MEMBER_TYPE_PROPERTY);
-        List<CommunityMemberDto> communityMemberDtos = communityInnerServiceSMOImpl.getCommunityMembers(communityMemberDto);
-        Assert.listOnlyOne(communityMemberDtos, "小区没有物业公司");
-
-        BasePrivilegeDto basePrivilegeDto = new BasePrivilegeDto();
-        basePrivilegeDto.setResource("/todayInspectionNotifyStaff");
-        basePrivilegeDto.setStoreId(communityMemberDtos.get(0).getMemberId());
-        basePrivilegeDto.setCommunityId(communityDto.getCommunityId());
-        List<UserDto> userDtos = privilegeInnerServiceSMO.queryPrivilegeUsers(basePrivilegeDto);
-        for (UserDto userDto : userDtos) {
-            //根据 userId 查询到openId
-            StaffAppAuthDto staffAppAuthDto = new StaffAppAuthDto();
-            staffAppAuthDto.setStaffId(userDto.getUserId());
-            staffAppAuthDto.setAppType("WECHAT");
-            List<StaffAppAuthDto> staffAppAuthDtos = staffAppAuthInnerServiceSMOImpl.queryStaffAppAuths(staffAppAuthDto);
-            if (staffAppAuthDtos == null || staffAppAuthDtos.size() < 1) {
-                continue;
-            }
-            String openId = staffAppAuthDtos.get(0).getOpenId();
-            Data data = new Data();
-            PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
-            templateMessage.setTemplate_id(templateId);
-            templateMessage.setTouser(openId);
-            data.setFirst(new Content("今日巡检情况:"));
-            data.setKeyword1(new Content(communityDto.getName()+"今日巡检情况"));
-            data.setKeyword2(new Content(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B)));
-            data.setKeyword3(new Content("今日巡检情况已生成,请点击查看详情"));
-            data.setRemark(new Content("感谢您的使用!"));
-            templateMessage.setData(BeanConvertUtil.beanCovertJson(data));
-
-            //获取员工公众号地址
-            String wechatUrl = MappingCache.getValue(MappingConstant.URL_DOMAIN,"STAFF_WECHAT_URL");
-            if(wechatUrl.endsWith("/")){
-                wechatUrl += "#/pages/inspection/inspectionTodayReport";
-            }else{
-                wechatUrl += "/#/pages/inspection/inspectionTodayReport";
-            }
-            templateMessage.setUrl(wechatUrl);
-            logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
-            ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
-            logger.info("微信模板返回内容:{}", responseEntity);
-        }
-    }
-}

+ 275 - 0
service-job/src/main/java/com/java110/job/task/noticeStaff/NoticeStaffTaskTemplate.java

@@ -0,0 +1,275 @@
+package com.java110.job.task.noticeStaff;
+
+import com.java110.dto.community.CommunityDto;
+import com.java110.dto.community.CommunityMemberDto;
+import com.java110.dto.inspection.InspectionTaskDetailDto;
+import com.java110.dto.inspection.InspectionTaskDto;
+import com.java110.dto.notice.NoticeStaffDto;
+import com.java110.dto.privilege.BasePrivilegeDto;
+import com.java110.dto.repair.RepairDto;
+import com.java110.dto.repair.RepairUserDto;
+import com.java110.dto.task.TaskDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.community.*;
+import com.java110.intf.order.IPrivilegeInnerServiceSMO;
+import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
+import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO;
+import com.java110.intf.user.IStaffAppAuthInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
+import com.java110.job.msgNotify.IMsgNotify;
+import com.java110.job.msgNotify.MsgNotifyFactory;
+import com.java110.job.quartz.TaskSystemQuartz;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.MappingConstant;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ListUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 通知员工工单处理
+ */
+@Component
+public class NoticeStaffTaskTemplate extends TaskSystemQuartz {
+
+    @Autowired
+    private ICommunityInnerServiceSMO communityInnerServiceSMOImpl;
+
+    @Autowired
+    private IInspectionPlanInnerServiceSMO inspectionPlanInnerServiceSMOImpl;
+
+    @Autowired
+    private IInspectionPlanStaffInnerServiceSMO inspectionPlanStaffInnerServiceSMOImpl;
+
+    @Autowired
+    private IInspectionRoutePointRelInnerServiceSMO inspectionRoutePointRelInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IInspectionTaskInnerServiceSMO inspectionTaskInnerServiceSMOImpl;
+
+    @Autowired
+    private IInspectionTaskDetailInnerServiceSMO inspectionTaskDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IPrivilegeInnerServiceSMO privilegeInnerServiceSMO;
+
+    @Autowired
+    private IRepairInnerServiceSMO repairInnerServiceSMOImpl;
+
+    @Autowired
+    private IRepairUserInnerServiceSMO repairUserInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IUserInnerServiceSMO userInnerServiceSMO;
+
+
+    @Override
+    protected void process(TaskDto taskDto) throws Exception {
+        logger.debug("开始执行微信模板信息推送" + taskDto.toString());
+
+        // 获取小区
+        List<CommunityDto> communityDtos = getAllCommunity();
+
+        for (CommunityDto communityDto : communityDtos) {
+            try {
+                //todo 巡检 任务生成提醒
+                publishStaffInspectionTask(taskDto, communityDto);
+            } catch (Exception e) {
+                logger.error("巡检 任务生成提醒", e);
+            }
+            try {
+                //todo 巡检情况通知
+                notifyTodayInspection(communityDto);
+            } catch (Exception e) {
+                logger.error("巡检情况通知", e);
+            }
+
+            try {
+                //todo 报修快超时通知
+                notifyRepairTimeout(communityDto);
+            } catch (Exception e) {
+                logger.error("巡检情况通知", e);
+            }
+        }
+    }
+
+    /**
+     * 报修超时通知
+     *
+     * @param communityDto
+     */
+    private void notifyRepairTimeout(CommunityDto communityDto) {
+
+        RepairDto repairDto = new RepairDto();
+        repairDto.setCommunityId(communityDto.getCommunityId());
+        repairDto.setStatess(new String[]{RepairDto.STATE_WAIT, RepairDto.STATE_TAKING});
+        List<RepairDto> repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto);
+        if (ListUtil.isNull(repairDtos)) {
+            return;
+        }
+
+        RepairUserDto repairUserDto;
+        List<RepairUserDto> repairUserDtos;
+        IMsgNotify msgNotify = MsgNotifyFactory.getMsgNotify(MsgNotifyFactory.NOTIFY_WAY_WECHAT);
+        for (RepairDto tRepairDto : repairDtos) {
+            if (!NoticeTaskUtil.isRepairAboutTimeout(tRepairDto)) {
+                continue;
+            }
+            repairUserDto = new RepairUserDto();
+            repairUserDto.setRepairId(tRepairDto.getRepairId());
+            repairUserDto.setState(RepairUserDto.STATE_DOING);
+            repairUserDtos = repairUserInnerServiceSMOImpl.queryRepairUsers(repairUserDto);
+            if (ListUtil.isNull(repairUserDtos)) {
+                continue;
+            }
+            try {
+                msgNotify.sendStaffMsg(
+                        new NoticeStaffDto(communityDto.getCommunityId(),
+                                repairUserDtos.get(0).getStaffId(),
+                                tRepairDto.getRepairName() + "提交报修单快超时了",
+                                "系统管理员"));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        //todo 提示已经超时的工单
+        for (RepairDto tRepairDto : repairDtos) {
+            if (!NoticeTaskUtil.isRepairTimeout(tRepairDto)) {
+                continue;
+            }
+            repairUserDto = new RepairUserDto();
+            repairUserDto.setRepairId(tRepairDto.getRepairId());
+            repairUserDto.setState(RepairUserDto.STATE_DOING);
+            repairUserDtos = repairUserInnerServiceSMOImpl.queryRepairUsers(repairUserDto);
+            if (ListUtil.isNull(repairUserDtos)) {
+                continue;
+            }
+            try {
+                msgNotify.sendStaffMsg(
+                        new NoticeStaffDto(communityDto.getCommunityId(),
+                                repairUserDtos.get(0).getStaffId(),
+                                tRepairDto.getRepairName() + "提交报修单已超时",
+                                "系统管理员"));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 今日巡检情况通知
+     *
+     * @param communityDto
+     */
+    private void notifyTodayInspection(CommunityDto communityDto) {
+
+        if (!NoticeTaskUtil.isNotifyTodayInspection(communityDto)) {
+            return;
+        }
+
+        CommunityMemberDto communityMemberDto = new CommunityMemberDto();
+        communityMemberDto.setCommunityId(communityDto.getCommunityId());
+        communityMemberDto.setAuditStatusCd(CommunityMemberDto.AUDIT_STATUS_NORMAL);
+        communityMemberDto.setMemberTypeCd(CommunityMemberDto.MEMBER_TYPE_PROPERTY);
+        List<CommunityMemberDto> communityMemberDtos = communityInnerServiceSMOImpl.getCommunityMembers(communityMemberDto);
+        Assert.listOnlyOne(communityMemberDtos, "小区没有物业公司");
+
+        BasePrivilegeDto basePrivilegeDto = new BasePrivilegeDto();
+        basePrivilegeDto.setResource("/todayInspectionNotifyStaff");
+        basePrivilegeDto.setStoreId(communityMemberDtos.get(0).getMemberId());
+        basePrivilegeDto.setCommunityId(communityDto.getCommunityId());
+        List<UserDto> userDtos = privilegeInnerServiceSMO.queryPrivilegeUsers(basePrivilegeDto);
+        if (ListUtil.isNull(userDtos)) {
+            return;
+        }
+
+        IMsgNotify msgNotify = MsgNotifyFactory.getMsgNotify(MsgNotifyFactory.NOTIFY_WAY_WECHAT);
+        String wechatUrl = MappingCache.getValue(MappingConstant.URL_DOMAIN, "STAFF_WECHAT_URL");
+        if (wechatUrl.endsWith("/")) {
+            wechatUrl += "#/pages/inspection/inspectionTodayReport";
+        } else {
+            wechatUrl += "/#/pages/inspection/inspectionTodayReport";
+        }
+        for (UserDto userDto : userDtos) {
+            //根据 userId 查询到openId
+            try {
+                msgNotify.sendStaffMsg(
+                        new NoticeStaffDto(communityDto.getCommunityId(),
+                                userDto.getUserId(),
+                                communityDto.getName() + "今日巡检情况",
+                                "系统管理员",
+                                wechatUrl));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 巡检任务
+     *
+     * @param taskDto
+     * @param communityDto
+     */
+    private void publishStaffInspectionTask(TaskDto taskDto, CommunityDto communityDto) {
+
+        InspectionTaskDetailDto inspectionTaskDetailDto = new InspectionTaskDetailDto();
+        inspectionTaskDetailDto.setCommunityId(communityDto.getCommunityId());
+        inspectionTaskDetailDto.setState(InspectionTaskDto.STATE_NO_START);
+        inspectionTaskDetailDto.setQrCodeTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B));
+        inspectionTaskDetailDto.setSendFlag(InspectionTaskDetailDto.SEND_FLAG_N);
+        List<InspectionTaskDetailDto> inspectionTaskDetailDtos = inspectionTaskDetailInnerServiceSMOImpl.queryInspectionTaskDetails(inspectionTaskDetailDto);
+        for (InspectionTaskDetailDto tInspectionTaskDetailDto : inspectionTaskDetailDtos) {
+            String startTime = tInspectionTaskDetailDto.getPointStartTime();
+            startTime = DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_B) + " " + startTime + ":00";
+            Date startDate = null;
+            try {
+                startDate = DateUtil.getDateFromString(startTime, DateUtil.DATE_FORMATE_STRING_A);
+            } catch (ParseException e) {
+                e.printStackTrace();
+                startDate = new Date();
+            }
+
+            //还没有到时间
+            if (startDate.getTime() > DateUtil.getCurrentDate().getTime()) {
+                return;
+            }
+
+            IMsgNotify msgNotify = MsgNotifyFactory.getMsgNotify(MsgNotifyFactory.NOTIFY_WAY_WECHAT);
+            String staffWechatUrl = MappingCache.getValue(MappingConstant.URL_DOMAIN, "STAFF_WECHAT_URL");
+            staffWechatUrl = staffWechatUrl
+                    + "pages/excuteOneQrCodeInspection/excuteOneQrCodeInspection?inspectionId="
+                    + tInspectionTaskDetailDto.getInspectionId()
+                    + "&inspectionName=" + tInspectionTaskDetailDto.getInspectionName()
+                    + "&itemId=" + tInspectionTaskDetailDto.getItemId();
+            try {
+                msgNotify.sendStaffMsg(
+                        new NoticeStaffDto(communityDto.getCommunityId(),
+                                tInspectionTaskDetailDto.getPlanUserId(),
+                                tInspectionTaskDetailDto.getInspectionName() + "未巡检,请及时巡检",
+                                "系统管理员",
+                                staffWechatUrl)
+                );
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+
+            InspectionTaskDetailDto inspectionTaskDetailPo = new InspectionTaskDetailDto();
+            inspectionTaskDetailPo.setTaskDetailId(tInspectionTaskDetailDto.getTaskDetailId());
+            inspectionTaskDetailPo.setSendFlag(InspectionTaskDetailDto.SEND_FLAG_Y);
+            inspectionTaskDetailPo.setStatusCd("0");
+            inspectionTaskDetailInnerServiceSMOImpl.updateInspectionTaskDetail(inspectionTaskDetailPo);
+        }
+
+    }
+
+}

+ 82 - 0
service-job/src/main/java/com/java110/job/task/noticeStaff/NoticeTaskUtil.java

@@ -0,0 +1,82 @@
+package com.java110.job.task.noticeStaff;
+
+import com.java110.dto.community.CommunityDto;
+import com.java110.dto.repair.RepairDto;
+import com.java110.utils.cache.CommonCache;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
+
+import java.util.Calendar;
+import java.util.Date;
+
+public class NoticeTaskUtil {
+    /**
+     * 计算是否为通知时间内
+     *
+     * @return
+     */
+    public static boolean isNotifyTodayInspection(CommunityDto communityDto) {
+        Calendar calendar = Calendar.getInstance();
+        int hours = calendar.get(Calendar.HOUR_OF_DAY);
+        if (hours != 18) {
+            return false;
+        }
+        String hasValue = CommonCache.getValue("notify_today_inspection_" + communityDto.getCommunityId());
+        if (!StringUtil.isEmpty(hasValue)) {
+            return false;
+        }
+        CommonCache.setValue("notify_today_inspection_" + communityDto.getCommunityId(), hours + "", 12 * 60 * 60);
+        return true;
+    }
+
+    /**
+     * 快超时
+     *
+     * @param tRepairDto
+     * @return
+     */
+    public static boolean isRepairAboutTimeout(RepairDto tRepairDto) {
+        Date timeout = DateUtil.getDateFromStringA(tRepairDto.getTimeout());
+        Date nowTime = DateUtil.getCurrentDate();
+        if (nowTime.after(timeout)) { // 说明已经超时了
+            return false;
+        }
+        int warnTime = Integer.parseInt(tRepairDto.getWarningTime());
+
+        if (timeout.getTime() - nowTime.getTime() > warnTime * 60 * 1000) {
+            return false;
+        }
+        String hasValue = CommonCache.getValue("notify_repair_about_timeout_" + tRepairDto.getRepairId());
+        if (!StringUtil.isEmpty(hasValue)) {
+            return false;
+        }
+        if (warnTime > 1) {
+            warnTime -= 1;
+        }
+        CommonCache.setValue("notify_repair_about_timeout_" + tRepairDto.getRepairId(), warnTime + "", warnTime * 60);
+
+        return true;
+    }
+
+    /**
+     * 已经超时
+     *
+     * @param tRepairDto
+     * @return
+     */
+    public static boolean isRepairTimeout(RepairDto tRepairDto) {
+        Date timeout = DateUtil.getDateFromStringA(tRepairDto.getTimeout());
+        Date nowTime = DateUtil.getCurrentDate();
+        if (nowTime.before(timeout)) { // 说明已经没有超时
+            return false;
+        }
+
+        String hasValue = CommonCache.getValue("notify_repair_timeout_" + tRepairDto.getRepairId());
+        if (!StringUtil.isEmpty(hasValue)) {
+            return false;
+        }
+        CommonCache.setValue("notify_repair_timeout_" + tRepairDto.getRepairId(), "Y", 24 * 60 * 60);
+
+        return true;
+    }
+}

+ 2 - 3
service-job/src/main/java/com/java110/job/task/repair/TrainingRepairTemplate.java

@@ -12,6 +12,7 @@ import com.java110.dto.task.TaskDto;
 import com.java110.job.quartz.TaskSystemQuartz;
 import com.java110.utils.cache.CommonCache;
 import com.java110.utils.constant.ServiceCodeRepairDispatchStepConstant;
+import com.java110.utils.util.ListUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
 import com.java110.core.log.LoggerFactory;
@@ -76,13 +77,11 @@ public class TrainingRepairTemplate extends TaskSystemQuartz {
             repairTypeUserDto.setState(RepairTypeUserDto.STATE_ONLINE); //派单给在线员工
             List<RepairTypeUserDto> repairTypeUserDtos = repairTypeUserInnerServiceSMOImpl.queryRepairTypeUsers(repairTypeUserDto);
             //没有设置 处理师傅 无法派单
-            if (repairTypeUserDtos == null || repairTypeUserDtos.size() < 1) {
+            if (ListUtil.isNull(repairTypeUserDtos)) {
                 continue;
             }
             doTrainingRepair(tmpRepairDto, repairTypeUserDtos);
-
         }
-
     }
 
     /**