Quellcode durchsuchen

Merge branches 'develop' and 'huangyuan-user' of http://132.232.206.88:3000/lift-manager/lift-server into huangyuan-user

黄远 vor 5 Jahren
Ursprung
Commit
854910d92d

+ 6 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/emergency/controller/EmergencyRepairController.java

@@ -48,6 +48,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.OutputStream;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -234,6 +235,11 @@ public class EmergencyRepairController {
 //            request.setRepairBegin(LocalDate.now().plusDays(0 - DateUtils.daysOfYear()));
 //            request.setRepairEnd(LocalDate.now());
 //        }
+        LocalDate repairBegin = request.getRepairBegin();
+        LocalDate repairEnd = request.getRepairEnd();
+        if(Objects.nonNull(repairBegin) && Objects.nonNull(repairEnd)){
+            Validate.isTrue(repairBegin.isBefore(repairEnd), ValuePool.beginTimeIllegalToEndTime(repairBegin, repairEnd));
+        }
         IPage<RepairResponse> pages = emergencyRepairService.pageByCondition(request);
         long count = emergencyRepairService.countByCondition(request);
         return RestResponse.success(CountPage.getCountPage(count, pages));

+ 10 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/controller/MaintenanceRecordController.java

@@ -67,6 +67,11 @@ public class MaintenanceRecordController {
     @Validation(fields = {"mtCompanyId"})
     public RestResponse pageRecord(@Val @RequestBody MtRecordRequest request) {
         //保养单: 按照执行日期由近及远排序
+        LocalDate planBegin = request.getPlanBegin();
+        LocalDate planEnd = request.getPlanEnd();
+        if(Objects.nonNull(planBegin) && Objects.nonNull(planEnd)){
+            Validate.isTrue(planBegin.isBefore(planEnd), ValuePool.beginTimeIllegalToEndTime(planBegin, planEnd));
+        }
         request.addDesc("work_date");
         IPage<MtRecordResponse> pages = maintenanceRecordService.pageRecordByCondition(request);
         long count = maintenanceRecordService.countRecordByCondition(request);
@@ -83,6 +88,11 @@ public class MaintenanceRecordController {
     @Validation(fields = {"mtCompanyId"})
     public RestResponse pagePlan(@Val @RequestBody MtPlanRequest request) {
         //计划超期:按计划保养时间由近及远排序
+        LocalDate planBegin = request.getPlanBegin();
+        LocalDate planEnd = request.getPlanEnd();
+        if(Objects.nonNull(planBegin) && Objects.nonNull(planEnd)){
+            Validate.isTrue(planBegin.isBefore(planEnd), ValuePool.beginTimeIllegalToEndTime(planBegin, planEnd));
+        }
         request.addDesc("plan_date");
         IPage<MtPlanResponse> pages = maintenancePlanService.pagePlanByCondition(request);
         Validate.notNull(pages, ValuePool.MAINTENANCE_PLAN_NOT_EXIST);

+ 13 - 2
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/dao/entity/model/request/MaintenanceRecordRequest.java

@@ -43,7 +43,7 @@ public class MaintenanceRecordRequest extends PageRequest {
      */
     @NotNull(message = "用户ID不能为空")
     @Min(value = 1, message = "用户ID有误")
-    private Long workerId;
+    private Long userId;
 
     /**
      * 维保计划状态
@@ -57,11 +57,22 @@ public class MaintenanceRecordRequest extends PageRequest {
     @NotBlank(message = "维保工经纬度不能为空")
     private String coordinate;
 
+    /**
+     * 当前日期
+     */
+    @NotNull(message = "当前日期不能为空")
+    private LocalDate currentTime;
+
     /**
      * 开始日期
      */
     @NotNull(message = "开始日期不能为空")
-    private LocalDate currentTime;
+    private LocalDate beginTime;
+
+    /**
+     * 当前用户角色
+     */
+    private String currentRoleCode;
 
     /**
      * 结束日期

+ 20 - 6
lift-business-service/src/main/java/cn/com/ty/lift/business/project/controller/ProjectAppController.java

@@ -7,6 +7,7 @@ import cn.com.ty.lift.business.framework.util.MessageUtils;
 import cn.com.ty.lift.business.library.dao.entity.model.request.LiftExtensionRequest;
 import cn.com.ty.lift.business.maintenance.dao.entity.MaintenanceRecord;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.request.MaintenanceRecordRequest;
+import cn.com.ty.lift.business.maintenance.dao.entity.model.response.MaintenanceAppResponse;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.response.MaintenanceRecordResponse;
 import cn.com.ty.lift.business.maintenance.service.MaintenanceRecordService;
 import cn.com.ty.lift.business.project.dao.entity.model.ProjectAppUser;
@@ -176,15 +177,28 @@ public class ProjectAppController {
     }
 
     /**
-     * @param request 用户id和维保状态
+     * @param request 用户ID、公司ID
+     * @return RestResponse 统计保养数
+     * @description 根据用户ID和公司ID统计保养数
+     * @date 2020/1/6 11:29 上午
+     */
+    @PostMapping("maintenance/count")
+    @Validation(fields = {"mtCompanyId", "userId", "beginTime"})
+    public RestResponse count(@Val @RequestBody MaintenanceRecordRequest request) {
+        Map<String, Long> result = projectAppService.count(request);
+        return RestResponse.success(result, MessageUtils.get("msg.query.success"));
+    }
+
+    /**
+     * @param request 用户ID和维保状态
      * @return RestResponse 保养任务列表
-     * @description 根据用户id和维保状态查询维保计划任务列表
+     * @description 根据用户ID和维保状态查询维保计划任务列表
      * @date 2020/1/6 11:29 上午
      */
     @PostMapping("maintenance/planTask")
-    @Validation(fields = {"mtCompanyId", "workerId", "status", "currentTime"})
+    @Validation(fields = {"mtCompanyId", "userId", "status"})
     public RestResponse planTask(@Val @RequestBody MaintenanceRecordRequest request) {
-        Map<String, Object> result = projectAppService.planTask(request);
+        IPage<MaintenanceAppResponse> result = projectAppService.planTask(request);
         return RestResponse.success(result, MessageUtils.get("msg.query.success"));
     }
 
@@ -195,9 +209,9 @@ public class ProjectAppController {
      * @date 2020/4/24 5:03 下午
      */
     @PostMapping("maintenance/recordTask")
-    @Validation(fields = {"mtCompanyId", "workerId", "status", "currentTime"})
+    @Validation(fields = {"mtCompanyId", "userId", "status"})
     public RestResponse recordTask(@Val @RequestBody MaintenanceRecordRequest request) {
-        Map<String, Object> result = projectAppService.recordTask(request);
+        IPage<MaintenanceAppResponse> result = projectAppService.recordTask(request);
         return RestResponse.success(result, MessageUtils.get("msg.query.success"));
     }
 

+ 57 - 37
lift-business-service/src/main/java/cn/com/ty/lift/business/project/service/ProjectAppService.java

@@ -19,6 +19,7 @@ import cn.com.ty.lift.business.project.dao.entity.model.response.ProjectLiftResp
 import cn.com.ty.lift.business.project.dao.entity.model.response.ProjectUserResponse;
 import cn.com.ty.lift.business.project.dao.mapper.ProjectMapper;
 import cn.com.ty.lift.business.project.dao.mapper.ProjectUserMapper;
+import cn.com.ty.lift.common.constants.CommonEnum;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -120,32 +121,60 @@ public class ProjectAppService extends ServiceImpl<ProjectMapper, Project> {
         return baseMapper.findProjectById(request);
     }
 
+    /**
+     * @param request 用户ID,公司ID
+     * @return Map<String, Long> 统计分组结果
+     * @description 保养任务日历统计
+     * @date 2020/4/30 2:15 下午
+     */
+    public Map<String, Long> count(MaintenanceRecordRequest request) {
+        request.setEndTime(request.getBeginTime().with(TemporalAdjusters.lastDayOfMonth()));
+        //总经理查询所有保养任务
+        if (DefaultRole.HIGH_DIRECTOR.getCode().equals(request.getCurrentRoleCode())) {
+            request.setUserId(null);
+        }
+        List<MaintenanceAppResponse> planCountResult = maintenancePlanMapper.countPlanByWorkerId(request);
+        //统计待保养、超期的任务
+        Map<String, Long> planCollect = planCountResult.stream().collect(Collectors.groupingBy(MaintenanceAppResponse::getStatus, Collectors.counting()));
+
+        Long waitingMaintenance = planCollect.get(MaintenancePlanStatus.WAITING_MAINTENANCE.getCode());
+        Long overdue = planCollect.get(MaintenancePlanStatus.OVERDUE.getCode());
+
+        List<MaintenanceAppResponse> recordCountResult = maintenanceRecordMapper.countRecordByWorkerId(request);
+        //统计保养中、保养完成任务
+        Map<String, Long> recordCollect = recordCountResult.stream().collect(Collectors.groupingBy(MaintenanceAppResponse::getStatus, Collectors.counting()));
+
+        Long inProgress = recordCollect.get(MaintenanceRecordStatus.MAINTENANCE_DOING.getCode());
+        Long complete = recordCollect.get(MaintenanceRecordStatus.COMPLETE.getCode());
+
+        Map<String, Long> countMap = new HashMap<>();
+        countMap.put("inProgress", inProgress == null ? 0 : inProgress);
+        countMap.put("complete", complete == null ? 0 : complete);
+        countMap.put("overdue", overdue == null ? 0 : overdue);
+        countMap.put("waitingMaintenance", waitingMaintenance == null ? 0 : waitingMaintenance);
+        return countMap;
+    }
+
     /**
      * @param request 用户id和维保状态
      * @return RestResponse 保养任务列表 (待完成、超期)
      * @description 根据用户id和维保状态查询保养任务列表
      * @date 2020/1/6 11:29 上午
      */
-    public Map<String, Object> planTask(MaintenanceRecordRequest request) {
-        Map<String, Object> resultMap = new HashMap<>();
-        Map<String, Long> countMap = new HashMap<>();
-        request.setEndTime(request.getCurrentTime().with(TemporalAdjusters.lastDayOfMonth()));
+    public IPage<MaintenanceAppResponse> planTask(MaintenanceRecordRequest request) {
+        if (Objects.nonNull(request.getBeginTime())) {
+            request.setEndTime(request.getBeginTime().with(TemporalAdjusters.lastDayOfMonth()));
+        }
+        //总经理查询所有保养任务
+        if (DefaultRole.HIGH_DIRECTOR.getCode().equals(request.getCurrentRoleCode())) {
+            request.setUserId(null);
+        }
         IPage<MaintenanceAppResponse> page = maintenancePlanMapper.findPlanByWorkerId(request.getPage(), request);
-
         List<MaintenanceAppResponse> records = page.getRecords();
         if (CollUtil.isNotEmpty(records)) {
-            List<MaintenanceAppResponse> countResult = maintenancePlanMapper.countPlanByWorkerId(request);
-
-            //统计待保养、超期的任务
-            Map<String, Long> collect = countResult.stream().collect(Collectors.groupingBy(MaintenanceAppResponse::getStatus, Collectors.counting()));
-
-            Long waitingMaintenance = collect.get(MaintenancePlanStatus.WAITING_MAINTENANCE.getCode());
-            Long overdue = collect.get(MaintenancePlanStatus.OVERDUE.getCode());
-            countMap.put("overdue", overdue == null ? 0 : overdue);
-            countMap.put("waitingMaintenance", waitingMaintenance == null ? 0 : waitingMaintenance);
 
             Map<Long, List<MaintenanceAppResponse>> currentTaskMap = page.getRecords().stream().filter(entry ->
-                    Objects.equals(request.getWorkerId(), entry.getWorkerId())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
+                    Objects.equals(request.getUserId(), entry.getWorkerId())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
             List<MaintenanceAppResponse> taskList = new ArrayList<>();
             for (Map.Entry<Long, List<MaintenanceAppResponse>> entry : currentTaskMap.entrySet()) {
                 taskList.addAll(entry.getValue());
@@ -155,7 +184,7 @@ public class ProjectAppService extends ServiceImpl<ProjectMapper, Project> {
                     .sorted(Comparator.comparing(MaintenanceAppResponse::getPlanDate)).collect(Collectors.toCollection(LinkedList::new));
 
             Map<Long, List<MaintenanceAppResponse>> taskMap = page.getRecords().stream().filter(entry ->
-                    !Objects.equals(request.getWorkerId(), entry.getWorkerId())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
+                    !Objects.equals(request.getUserId(), entry.getWorkerId())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
 
             taskList.clear();
             for (Map.Entry<Long, List<MaintenanceAppResponse>> entry : taskMap.entrySet()) {
@@ -167,9 +196,7 @@ public class ProjectAppService extends ServiceImpl<ProjectMapper, Project> {
 
             page.setRecords(currentUserTaskList);
         }
-        resultMap.put("pageResult", page);
-        resultMap.put("count", countMap);
-        return resultMap;
+        return page;
     }
 
     /**
@@ -178,24 +205,19 @@ public class ProjectAppService extends ServiceImpl<ProjectMapper, Project> {
      * @description 根据用户id和z维保状态查询保养任务列表
      * @date 2020/4/24 5:03 下午
      */
-    public Map<String, Object> recordTask(MaintenanceRecordRequest request) {
-        Map<String, Object> resultMap = new HashMap<>();
-        Map<String, Long> countMap = new HashMap<>();
-        request.setEndTime(request.getCurrentTime().with(TemporalAdjusters.lastDayOfMonth()));
+    public IPage<MaintenanceAppResponse> recordTask(MaintenanceRecordRequest request) {
+        if (Objects.nonNull(request.getBeginTime())) {
+            request.setEndTime(request.getBeginTime().with(TemporalAdjusters.lastDayOfMonth()));
+        }
+        //总经理查询所有保养任务
+        if (DefaultRole.HIGH_DIRECTOR.getCode().equals(request.getCurrentRoleCode())) {
+            request.setUserId(null);
+        }
         IPage<MaintenanceAppResponse> page = maintenanceRecordMapper.findRecordByWorkerId(request.getPage(), request);
         List<MaintenanceAppResponse> records = page.getRecords();
         if (CollUtil.isNotEmpty(records)) {
-            List<MaintenanceAppResponse> countResult = maintenanceRecordMapper.countRecordByWorkerId(request);
-            //统计保养中、保养完成任务
-            Map<String, Long> collect = countResult.stream().collect(Collectors.groupingBy(MaintenanceAppResponse::getStatus, Collectors.counting()));
-
-            Long inProgress = collect.get(MaintenanceRecordStatus.MAINTENANCE_DOING.getCode());
-            Long complete = collect.get(MaintenanceRecordStatus.COMPLETE.getCode());
-            countMap.put("inProgress", inProgress == null ? 0 : inProgress);
-            countMap.put("complete", complete == null ? 0 : complete);
-
             Map<Long, List<MaintenanceAppResponse>> currentTaskMap = page.getRecords().stream().filter(entry ->
-                    Objects.equals(request.getWorkerId(), entry.getWorkerId1())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
+                    Objects.equals(request.getUserId(), entry.getWorkerId1())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
             List<MaintenanceAppResponse> taskList = new ArrayList<>();
             for (Map.Entry<Long, List<MaintenanceAppResponse>> entry : currentTaskMap.entrySet()) {
                 taskList.addAll(entry.getValue());
@@ -204,7 +226,7 @@ public class ProjectAppService extends ServiceImpl<ProjectMapper, Project> {
                     .sorted(Comparator.comparing(MaintenanceAppResponse::getPlanDate).reversed()).collect(Collectors.toCollection(LinkedList::new));
 
             Map<Long, List<MaintenanceAppResponse>> taskMap = page.getRecords().stream().filter(entry ->
-                    !Objects.equals(request.getWorkerId(), entry.getWorkerId1())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
+                    !Objects.equals(request.getUserId(), entry.getWorkerId1())).collect(Collectors.groupingBy(MaintenanceAppResponse::getLiftId));
 
             taskList.clear();
             for (Map.Entry<Long, List<MaintenanceAppResponse>> entry : taskMap.entrySet()) {
@@ -216,9 +238,7 @@ public class ProjectAppService extends ServiceImpl<ProjectMapper, Project> {
 
             page.setRecords(currentUserTaskList);
         }
-        resultMap.put("pageResult", page);
-        resultMap.put("count", countMap);
-        return resultMap;
+        return page;
     }
 
     /**

+ 12 - 9
lift-business-service/src/main/resources/mapper/maintenance/MaintenancePlanMapper.xml

@@ -127,17 +127,20 @@
 				 LEFT JOIN lift l ON mp.lift_id = l.id
 				 LEFT JOIN user_info ui ON mp.worker_id = ui.user_id
 		WHERE mp.mt_company_id = #{request.mtCompanyId,jdbcType=BIGINT}
-		<if test="request.workerId!=null and request.workerId!=''">
-			AND pu.user_id = #{request.workerId,jdbcType=BIGINT}
+		<if test="request.userId!=null">
+			AND pu.user_id = #{request.userId,jdbcType=BIGINT}
 		</if>
 		<if test="request.status!=null and request.status!=''">
 			AND mp.status = #{request.status,jdbcType=VARCHAR}
 		</if>
 		<if test="request.currentTime!=null">
-			AND <![CDATA[ mp.plan_date >= #{request.currentTime}]]>
+			AND <![CDATA[ mp.plan_date = #{request.currentTime}]]>
+		</if>
+		<if test="request.beginTime!=null">
+			AND <![CDATA[ mp.plan_date >= #{request.beginTime}]]>
 		</if>
 		<if test="request.endTime!=null">
-			AND <![CDATA[ mp.plan_date <= #{request.endTime,jdbcType=VARCHAR}]]>
+			AND <![CDATA[ mp.plan_date <= #{request.endTime}]]>
 		</if>
 	</select>
 
@@ -151,14 +154,14 @@
 		LEFT JOIN lift l ON mp.lift_id = l.id
 		LEFT JOIN user_info ui ON mp.worker_id = ui.user_id
 		WHERE mp.mt_company_id = #{request.mtCompanyId,jdbcType=BIGINT}
-		<if test="request.workerId!=null and request.workerId!=''">
-			AND pu.user_id = #{request.workerId,jdbcType=BIGINT}
+		<if test="request.userId!=null">
+			AND pu.user_id = #{request.userId,jdbcType=BIGINT}
 		</if>
-		<if test="request.currentTime!=null">
-			AND <![CDATA[ mp.plan_date >= #{request.currentTime}]]>
+		<if test="request.beginTime!=null">
+			AND <![CDATA[ mp.plan_date >= #{request.beginTime}]]>
 		</if>
 		<if test="request.endTime!=null">
-			AND <![CDATA[ mp.plan_date <= #{request.endTime,jdbcType=VARCHAR}]]>
+			AND <![CDATA[ mp.plan_date <= #{request.endTime}]]>
 		</if>
 	</select>
 

+ 12 - 9
lift-business-service/src/main/resources/mapper/maintenance/MaintenanceRecordMapper.xml

@@ -123,17 +123,20 @@
 		LEFT JOIN lift l ON mr.lift_id = l.id
 		LEFT JOIN user_info ui ON mr.worker_id = ui.user_id
 		WHERE mr.mt_company_id = #{request.mtCompanyId,jdbcType=BIGINT}
-		<if test="request.workerId!=null and request.workerId!=''">
-			AND mr.worker_id1 = #{request.workerId,jdbcType=BIGINT}
+		<if test="request.userId!=null">
+			AND mr.worker_id1 = #{request.userId,jdbcType=BIGINT}
 		</if>
 		<if test="request.status!=null and request.status!=''">
 			AND mr.status = #{request.status,jdbcType=VARCHAR}
 		</if>
         <if test="request.currentTime!=null">
-            AND <![CDATA[ mr.plan_date >= #{request.currentTime}]]>
+            AND <![CDATA[ mr.plan_date = #{request.currentTime}]]>
+        </if>
+        <if test="request.beginTime!=null">
+            AND <![CDATA[ mr.plan_date >= #{request.beginTime}]]>
         </if>
         <if test="request.endTime!=null">
-            AND <![CDATA[ mr.plan_date <= #{request.endTime,jdbcType=VARCHAR}]]>
+            AND <![CDATA[ mr.plan_date <= #{request.endTime}]]>
         </if>
 	</select>
 
@@ -146,14 +149,14 @@
                 LEFT JOIN lift l ON mr.lift_id = l.id
                 LEFT JOIN user_info ui ON mr.worker_id = ui.user_id
         WHERE mr.mt_company_id = #{request.mtCompanyId,jdbcType=BIGINT}
-        <if test="request.workerId!=null and request.workerId!=''">
-            AND mr.worker_id1 = #{request.workerId,jdbcType=BIGINT}
+        <if test="request.userId!=null">
+            AND mr.worker_id1 = #{request.userId,jdbcType=BIGINT}
         </if>
-        <if test="request.currentTime!=null">
-            AND <![CDATA[ mr.plan_date >= #{request.currentTime}]]>
+        <if test="request.beginTime!=null">
+            AND <![CDATA[ mr.plan_date >= #{request.beginTime}]]>
         </if>
         <if test="request.endTime!=null">
-            AND <![CDATA[ mr.plan_date <= #{request.endTime,jdbcType=VARCHAR}]]>
+            AND <![CDATA[ mr.plan_date <= #{request.endTime}]]>
         </if>
     </select>
 

+ 23 - 17
lift-common/src/main/java/cn.com.ty.lift.common/model/PushMessage.java

@@ -2,7 +2,6 @@ package cn.com.ty.lift.common.model;
 
 import cn.com.ty.lift.common.utils.ValuePool;
 import cn.hutool.core.collection.IterUtil;
-import cn.hutool.core.util.StrUtil;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.jms.core.JmsMessagingTemplate;
@@ -27,7 +26,7 @@ public class PushMessage implements Serializable {
 
     private String       title;
     private String       content;
-    private List<String> toList;
+    private List<String> toList = new ArrayList<>();
     //the count of try again. Increase 1 for each failure, maximum times 100
     private int          tryCount = 0;
 
@@ -39,6 +38,11 @@ public class PushMessage implements Serializable {
         this.content = content;
     }
 
+    public PushMessage add(String to){
+        this.toList.add(to);
+        return this;
+    }
+
     private static PushMessage create(String title, String content) {
         return new PushMessage(title, content);
     }
@@ -503,10 +507,16 @@ public class PushMessage implements Serializable {
         return create("发布新闻", title);
     }
 
+    /**
+     * 检查推送列表总数是否需要拆分,信鸽推送一次最多1000
+     */
     public boolean needSplit() {
-        return toList != null && toList.size() > ValuePool.PUSH_MAX_SIZE;
+        return Objects.nonNull(toList) && toList.size() > ValuePool.PUSH_MAX_SIZE;
     }
 
+    /**
+     * 拆分推送设备列表
+     */
     public List<ArrayList<String>> doSplit(final int length) {
         List<ArrayList<String>> splits = new ArrayList<>();
         int size = toList.size();
@@ -524,7 +534,7 @@ public class PushMessage implements Serializable {
     }
 
     /**
-     * 同时推送到指定的android和ios设备token
+     * 同时推送到多个设备token
      */
     public boolean sendTokenOnPlatform(JmsMessagingTemplate jmsMessagingTemplate, List<PushUserInfo> pushUserInfos) {
         try {
@@ -534,13 +544,11 @@ public class PushMessage implements Serializable {
             Set<String> toAndroid = new HashSet<>();
             Set<String> toIos = new HashSet<>();
             for (PushUserInfo pushUserInfo : pushUserInfos) {
-                Integer deviceModel = pushUserInfo.getDeviceModel();
-                String deviceFlag = pushUserInfo.getDeviceFlag();
-                if (Objects.nonNull(deviceModel) && StrUtil.isNotBlank(deviceFlag)) {
-                    if (1 == deviceModel) {
-                        toAndroid.add(deviceFlag);
-                    } else if (2 == deviceModel) {
-                        toIos.add(deviceFlag);
+                if (pushUserInfo.available()) {
+                    if (pushUserInfo.isAndroid()) {
+                        toAndroid.add(pushUserInfo.getDeviceFlag());
+                    } else if (pushUserInfo.isIos()) {
+                        toIos.add(pushUserInfo.getDeviceFlag());
                     }
                 }
             }
@@ -568,15 +576,13 @@ public class PushMessage implements Serializable {
             if (Objects.isNull(pushUserInfo)) {
                 return false;
             }
-            Integer deviceModel = pushUserInfo.getDeviceModel();
-            String deviceFlag = pushUserInfo.getDeviceFlag();
-            if(Objects.isNull(deviceModel) || StrUtil.isBlank(deviceFlag)){
+            if(!pushUserInfo.available()){
                 return false;
             }
-            this.setToList(Arrays.asList(deviceFlag));
-            if (1 == deviceModel) {
+            this.add(pushUserInfo.getDeviceFlag());
+            if (pushUserInfo.isAndroid()) {
                 jmsMessagingTemplate.send(ValuePool.PUSH_QUEUE_ANDROID_TOKEN, new GenericMessage<>(this));
-            } else if (2 == deviceModel) {
+            } else if (pushUserInfo.isIos()) {
                 jmsMessagingTemplate.send(ValuePool.PUSH_QUEUE_IOS_TOKEN, new GenericMessage<>(this));
             } else {
                 return false;

+ 14 - 0
lift-common/src/main/java/cn.com.ty.lift.common/model/PushUserInfo.java

@@ -1,7 +1,10 @@
 package cn.com.ty.lift.common.model;
 
+import cn.com.ty.lift.common.utils.ValuePool;
 import lombok.Data;
 
+import java.util.Objects;
+
 /**
  * @author huangyuan
  * @date 2020/4/17
@@ -40,4 +43,15 @@ public class PushUserInfo {
      */
     private String roleName;
 
+    public boolean available(){
+        return Objects.nonNull(this.deviceModel) && Objects.nonNull(this.deviceFlag);
+    }
+
+    public boolean isAndroid(){
+        return ValuePool.nullable(this.getDeviceModel(), 0) == ValuePool.PUSH_DEVICE_MODEL_ANDROID;
+    }
+
+    public boolean isIos(){
+        return ValuePool.nullable(this.getDeviceModel(), 0) == ValuePool.PUSH_DEVICE_MODEL_IOS;
+    }
 }

+ 112 - 105
lift-common/src/main/java/cn.com.ty.lift.common/utils/ValuePool.java

@@ -25,169 +25,177 @@ import java.util.Objects;
  */
 public interface ValuePool {
 
-    String   AMPERSAND                                = "&";
-    String   AND                                      = "and";
-    String   AT                                       = "@";
-    String   ASTERISK                                 = "*";
-    String   STAR                                     = ASTERISK;
-    String   BACK_SLASH                               = "\\";
-    String   COLON                                    = ":";
-    String   COMMA                                    = ",";
-    String   DASH                                     = "-";
-    String   DOLLAR                                   = "$";
-    String   DOT                                      = ".";
-    String   DOTDOT                                   = "..";
-    String   DOT_CLASS                                = ".class";
-    String   DOT_JAVA                                 = ".java";
-    String   EMPTY                                    = "";
-    String   EQUALS                                   = "=";
-    String   FALSE                                    = "false";
-    String   SLASH                                    = "/";
-    String   HASH                                     = "#";
-    String   HAT                                      = "^";
-    String   LEFT_BRACE                               = "{";
-    String   LEFT_BRACKET                             = "(";
-    String   LEFT_CHEV                                = "<";
-    String   NEWLINE                                  = "\n";
-    String   N                                        = "n";
-    String   NO                                       = "no";
-    String   NULL                                     = "null";
-    String   OFF                                      = "off";
-    String   ON                                       = "on";
-    String   PERCENT                                  = "%";
-    String   PIPE                                     = "|";
-    String   PLUS                                     = "+";
-    String   QUESTION_MARK                            = "?";
-    String   EXCLAMATION_MARK                         = "!";
-    String   QUOTE                                    = "\"";
-    String   RETURN                                   = "\r";
-    String   TAB                                      = "\t";
-    String   RIGHT_BRACE                              = "}";
-    String   RIGHT_BRACKET                            = ")";
-    String   RIGHT_CHEV                               = ">";
-    String   SEMICOLON                                = ";";
-    String   SINGLE_QUOTE                             = "'";
-    String   SPACE                                    = " ";
-    String   LEFT_SQ_BRACKET                          = "[";
-    String   RIGHT_SQ_BRACKET                         = "]";
-    String   TRUE                                     = "true";
-    String   UNDERSCORE                               = "_";
-    String   UTF_8                                    = "UTF-8";
-    String   ISO_8859_1                               = "ISO-8859-1";
-    String   Y                                        = "y";
-    String   YES                                      = "yes";
-    String   ONE                                      = "1";
-    String   ZERO                                     = "0";
-    String   DOLLAR_LEFT_BRACE                        = "${";
-    String   HASH_LEFT_BRACE                          = "#{";
-    String   CRLF                                     = "\r\n";
+    String   AMPERSAND                 = "&";
+    String   AND                       = "and";
+    String   AT                        = "@";
+    String   ASTERISK                  = "*";
+    String   STAR                      = ASTERISK;
+    String   BACK_SLASH                = "\\";
+    String   COLON                     = ":";
+    String   COMMA                     = ",";
+    String   DASH                      = "-";
+    String   DOLLAR                    = "$";
+    String   DOT                       = ".";
+    String   DOTDOT                    = "..";
+    String   DOT_CLASS                 = ".class";
+    String   DOT_JAVA                  = ".java";
+    String   EMPTY                     = "";
+    String   EQUALS                    = "=";
+    String   FALSE                     = "false";
+    String   SLASH                     = "/";
+    String   HASH                      = "#";
+    String   HAT                       = "^";
+    String   LEFT_BRACE                = "{";
+    String   LEFT_BRACKET              = "(";
+    String   LEFT_CHEV                 = "<";
+    String   NEWLINE                   = "\n";
+    String   N                         = "n";
+    String   NO                        = "no";
+    String   NULL                      = "null";
+    String   OFF                       = "off";
+    String   ON                        = "on";
+    String   PERCENT                   = "%";
+    String   PIPE                      = "|";
+    String   PLUS                      = "+";
+    String   QUESTION_MARK             = "?";
+    String   EXCLAMATION_MARK          = "!";
+    String   QUOTE                     = "\"";
+    String   RETURN                    = "\r";
+    String   TAB                       = "\t";
+    String   RIGHT_BRACE               = "}";
+    String   RIGHT_BRACKET             = ")";
+    String   RIGHT_CHEV                = ">";
+    String   SEMICOLON                 = ";";
+    String   SINGLE_QUOTE              = "'";
+    String   SPACE                     = " ";
+    String   LEFT_SQ_BRACKET           = "[";
+    String   RIGHT_SQ_BRACKET          = "]";
+    String   TRUE                      = "true";
+    String   UNDERSCORE                = "_";
+    String   UTF_8                     = "UTF-8";
+    String   ISO_8859_1                = "ISO-8859-1";
+    String   Y                         = "y";
+    String   YES                       = "yes";
+    String   ONE                       = "1";
+    String   ZERO                      = "0";
+    String   DOLLAR_LEFT_BRACE         = "${";
+    String   HASH_LEFT_BRACE           = "#{";
+    String   CRLF                      = "\r\n";
     //HTML
-    String   HTML_NBSP                                = "&nbsp;";
-    String   HTML_AMP                                 = "&amp";
-    String   HTML_QUOTE                               = "&quot;";
-    String   HTML_LT                                  = "&lt;";
-    String   HTML_GT                                  = "&gt;";
+    String   HTML_NBSP                 = "&nbsp;";
+    String   HTML_AMP                  = "&amp";
+    String   HTML_QUOTE                = "&quot;";
+    String   HTML_LT                   = "&lt;";
+    String   HTML_GT                   = "&gt;";
     // ----------------------------------------------------------------log
-    String   LOG_PREFIX                               = "###| ";
-    String   LOG_LINE                                 = "============================================================";
-    String   LOG_GLOBAL_EXCEPTION_LINE                = "====================== GlobalDefaultException ======================";
-    String   LOG_URL                                  = LOG_PREFIX + "URL          : ";
-    String   LOG_IP                                   = LOG_PREFIX + "IP           : ";
-    String   LOG_CLASS_METHOD                         = LOG_PREFIX + "CLASS_METHOD : ";
-    String   LOG_ARGS                                 = LOG_PREFIX + "ARGS         : ";
-    String   LOG_RESPONSE                             = LOG_PREFIX + "RESPONSE     : ";
-    String   LOG_STATUS                               = LOG_PREFIX + "STATUS       : ";
-    String   LOG_EXCEPTION                            = LOG_PREFIX + "EXCEPTION    : ";
+    String   LOG_PREFIX                = "###| ";
+    String   LOG_LINE                  = "============================================================";
+    String   LOG_GLOBAL_EXCEPTION_LINE = "====================== GlobalDefaultException ======================";
+    String   LOG_URL                   = LOG_PREFIX + "URL          : ";
+    String   LOG_IP                    = LOG_PREFIX + "IP           : ";
+    String   LOG_CLASS_METHOD          = LOG_PREFIX + "CLASS_METHOD : ";
+    String   LOG_ARGS                  = LOG_PREFIX + "ARGS         : ";
+    String   LOG_RESPONSE              = LOG_PREFIX + "RESPONSE     : ";
+    String   LOG_STATUS                = LOG_PREFIX + "STATUS       : ";
+    String   LOG_EXCEPTION             = LOG_PREFIX + "EXCEPTION    : ";
     //是否打印全部的结果
-    boolean  LOG_PRINT_ALL                            = false;
+    boolean  LOG_PRINT_ALL             = false;
     // 结果字符串 > LOG_PRINT_MAX ,格式化打印首尾(LOG_PRINT_MAX / 2)部分,中间省略
-    int      LOG_PRINT_MAX                            = 1000;
+    int      LOG_PRINT_MAX             = 1000;
     // 方法处理耗时 > LOG_GOOD_TIME,日志到warn中
-    long     LOG_GOOD_TIME                            = 10 * 1000;
+    long     LOG_GOOD_TIME             = 10 * 1000;
     // ---------------------------------------------------------------- array
-    String[] EMPTY_ARRAY                              = new String[0];
-    byte[]   BYTES_NEW_LINE                           = NEWLINE.getBytes();
-    long     PLATFORM_IDENTIFICATION                  = 10086;
+    String[] EMPTY_ARRAY               = new String[0];
+    byte[]   BYTES_NEW_LINE            = NEWLINE.getBytes();
+    long     PLATFORM_IDENTIFICATION   = 10086;
+    // ---------------推送相关-------------------------------------------------
     //android平台的推送
-    String   PUSH_QUEUE_ANDROID_TOKEN                 = "liftmanager_queue_android_token";
+    String   PUSH_QUEUE_ANDROID_TOKEN  = "liftmanager_queue_android_token";
     //ios平台的推送
-    String   PUSH_QUEUE_IOS_TOKEN                     = "liftmanager_queue_ios_token";
+    String   PUSH_QUEUE_IOS_TOKEN      = "liftmanager_queue_ios_token";
     //android全平台的推送
-    String   PUSH_QUEUE_ANDROID_ALL                   = "liftmanager_queue_android_all";
+    String   PUSH_QUEUE_ANDROID_ALL    = "liftmanager_queue_android_all";
     //ios全平台的推送
-    String   PUSH_QUEUE_IOS_ALL                       = "liftmanager_queue_ios_all";
+    String   PUSH_QUEUE_IOS_ALL        = "liftmanager_queue_ios_all";
     //一次最多推送的账号个数
-    int      PUSH_MAX_SIZE                            = 1000;
+    int      PUSH_MAX_SIZE             = 1000;
     //消息推送失败后重新尝试的最多次数
-    int      PUSH_TRY_MAX_TIMES                       = 100;
-    String   PATTERN_NAME                             = "^[\u4e00-\u9fa5a-zA-Z0-9·.。;&\\s]{1,20}$";
-    String   PATTERN_TELEPHONE                        = "^1[345789]\\d{9}|0[1-9](\\d{1,2}\\-?)[1-9]\\d{6,7}$";
+    int      PUSH_TRY_MAX_TIMES        = 100;
+    int      PUSH_DEVICE_MODEL_ANDROID = 1;
+    int      PUSH_DEVICE_MODEL_IOS     = 2;
+    String   PATTERN_NAME              = "^[\u4e00-\u9fa5a-zA-Z0-9·.。;&\\s]{1,20}$";
+    String   PATTERN_TELEPHONE         = "^1[345789]\\d{9}|0[1-9](\\d{1,2}\\-?)[1-9]\\d{6,7}$";
+
+    static String beginTimeIllegalToEndTime(LocalDate begin, LocalDate end) {
+        return String.format("开始时间(%tF)不能晚于结束时间(%tF)", begin, end);
+    }
     //======================年检相关状态值和判断方法======================================
     /**
      * 年检待完成
      */
-    int      INSPECTION_STATUS_TO_DO                  = 0;
-    int      INSPECTION_STATUS_COMPLETE               = 1;
-    int      INSPECTION_STATUS_OVERDUE                = 2;
+    int    INSPECTION_STATUS_TO_DO                  = 0;
+    int    INSPECTION_STATUS_COMPLETE               = 1;
+    int    INSPECTION_STATUS_OVERDUE                = 2;
     /**
      * 年检 第一阶段
      */
-    int      INSPECTION_STEP_ONE                      = 1;
+    int    INSPECTION_STEP_ONE                      = 1;
     /**
      * 年检 第二阶段
      */
-    int      INSPECTION_STEP_TWO                      = 2;
+    int    INSPECTION_STEP_TWO                      = 2;
     /**
      * 年检 第三阶段
      */
-    int      INSPECTION_STEP_THREE                    = 3;
+    int    INSPECTION_STEP_THREE                    = 3;
     /**
      * 年检 第四阶段
      */
-    int      INSPECTION_STEP_FOUR                     = 4;
+    int    INSPECTION_STEP_FOUR                     = 4;
     /**
      * 1  维保工确认年检计划
      */
-    int      INSPECTION_STAGE_CONFIRM                 = 1;
+    int    INSPECTION_STAGE_CONFIRM                 = 1;
     /**
      * 2  维保工上传自检报告,选择自检时间 或者 文员设置 是否检查限速器和荷载年检设置,
      * 文员也可以上传自检报告或者确认自检报告和自检时间,自检时间以最后设置的为准
      */
-    int      INSPECTION_STAGE_SELFCHECK               = 2;
+    int    INSPECTION_STAGE_SELFCHECK               = 2;
     /**
      * 3  企业文员确认现场检验时间
      * 录入人员信息,政府质检,企业质检,联系电话
      */
-    int      INSPECTION_STAGE_CONFIRM_CHECK           = 3;
+    int    INSPECTION_STAGE_CONFIRM_CHECK           = 3;
     /**
      * 4	维保工上传检验结果
      */
-    int      INSPECTION_STAGE_UPLOAD_CHECK            = 4;
+    int    INSPECTION_STAGE_UPLOAD_CHECK            = 4;
     /**
      * 5	企业文员确认检验结果-合格 --> 不能算年检超期
      */
-    int      INSPECTION_STAGE_CHECK_QUALIFIED         = 5;
+    int    INSPECTION_STAGE_CHECK_QUALIFIED         = 5;
     /**
      * 6	企业文员确认检验结果-整改 --> 回到第二阶段
      */
-    int      INSPECTION_STAGE_CHECK_RECTIFICATION     = 6;
+    int    INSPECTION_STAGE_CHECK_RECTIFICATION     = 6;
     /**
      * 7	企业文员确认检验结果-不合格 --> 可以算年检超期
      */
-    int      INSPECTION_STAGE_CHECK_UNQUALIFIED       = 7;
+    int    INSPECTION_STAGE_CHECK_UNQUALIFIED       = 7;
     /**
      * 8	维保工上传年检报告和合格证
      */
-    int      INSPECTION_STAGE_UPLOAD_CERT_REPORT      = 8;
+    int    INSPECTION_STAGE_UPLOAD_CERT_REPORT      = 8;
     /**
      * 9	企业文员确认年检报告和合格证-合格
      */
-    int      INSPECTION_STAGE_CERT_REPORT_QUALIFIED   = 9;
+    int    INSPECTION_STAGE_CERT_REPORT_QUALIFIED   = 9;
     /**
      * 10	企业文员确认年检报告和合格证-不合格 -->停用电梯
      */
-    int      INSPECTION_STAGE_CERT_REPORT_UNQUALIFIED = 10;
-    String   INSPECTION_NOT_EXIST                     = "年检不存在,请确认年检计划";
+    int    INSPECTION_STAGE_CERT_REPORT_UNQUALIFIED = 10;
+    String INSPECTION_NOT_EXIST                     = "年检不存在,请确认年检计划";
+    String INSPECTION_EXIST_SAME                    = "年检计划已存在。";
 
     static String inspectionStepToNext(String previous, String current) {
         return String.format("请先完成%s再进行%s操作", previous, current);
@@ -209,7 +217,6 @@ public interface ValuePool {
         return String.format("年检必须在%s才能操作", stage);
     }
 
-    String INSPECTION_EXIST_SAME           = "年检计划已存在。";
     //===================急修相关状态值和判断方法======================================
     /**
      * 急修状态(-1 暂停中)
@@ -335,7 +342,7 @@ public interface ValuePool {
     static <T> T nullable(T object, T valueForNull) {
         return Objects.isNull(object) ? valueForNull : object;
     }
-
+    //===================维保相关======================================
     String MAINTENANCE_RECORD_NOT_EXIST     = "维保记录不存在,请核查";
     String MAINTENANCE_PLAN_NOT_EXIST       = "维保计划不存在,请核查";
     String MAINTENANCE_OPTION_NOT_EXIST     = "维保操作项不存在,请核查";

+ 5 - 0
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/oa/controller/AttendanceController.java

@@ -94,6 +94,11 @@ public class AttendanceController {
     @Validation(fields = "mtCompanyId")
     public RestResponse list(@Val @RequestBody AttendanceRequest request) {
         //签到管理: 按日期和打卡时间由近及远排序
+        LocalDate begin = request.getBegin();
+        LocalDate end = request.getEnd();
+        if(Objects.nonNull(begin) && Objects.nonNull(end)){
+            Validate.isTrue(begin.isBefore(end), ValuePool.beginTimeIllegalToEndTime(begin, end));
+        }
         request.addDesc("create_date");
 //        if (Objects.isNull(request.getClockTime())) {
 //            request.setBegin(LocalDate.now().plusDays(0 - DateUtils.daysOfYear()));