瀏覽代碼

首页-电梯地图数据

黄远 5 年之前
父節點
當前提交
4755eb955e

+ 6 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/constants/CommonConstants.java

@@ -11,6 +11,12 @@ import java.util.Map;
  * @description 公共常量
  */
 public class CommonConstants {
+
+    /**
+     * 计划日期的时间格式
+     */
+    public static final String PLAN_DATE_FORMAT = "yyyy-MM-dd";
+
     /**
      * 返回码字段常量
      */

+ 10 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/dao/dto/request/LiftDataRequest.java

@@ -25,4 +25,14 @@ public class LiftDataRequest {
      *      未定位电梯:-1
      */
     private Integer liftDataStatus;
+
+    /**
+     * 起始时间-字符串
+     */
+    private String startDateStr;
+
+    /**
+     * 终止时间-字符串
+     */
+    private String endTimeStr;
 }

+ 25 - 4
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/dao/dto/response/LiftDataResponse.java

@@ -19,23 +19,44 @@ public class LiftDataResponse {
      */
     private String projectName;
 
+    /**
+     * 电梯注册代码
+     */
+    private String registrationCode;
+
     /**
      * 电梯编号
      */
     private String liftCode;
 
     /**
-     * 经纬度
+     * 电梯类型(1:直梯;2:扶梯)
      */
-    private String coordinate;
+    private Integer liftType;
 
     /**
-     * 电梯位置
+     * 电梯品牌
      */
-    private String liftAddress;
+    private String liftBrand;
 
     /**
      * 维保工
      */
     private String workerName;
+
+    /**
+     * 电梯公司状态 1:停保(不活跃电梯)
+     *            2:正常,3:保养中 4:维修中,5:年检中,6:大修中 (其他状态为活跃电梯)
+     */
+    private String liftCompanyStatus;
+
+    /**
+     * 经纬度
+     */
+    private String coordinate;
+
+    /**
+     * 设备使用地点
+     */
+    private String devicePosition;
 }

+ 1 - 1
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/dao/dto/response/MaintenanceTodoResponse.java

@@ -17,7 +17,7 @@ public class MaintenanceTodoResponse {
     private Long mtPlanId;
 
     /**
-     * 注册代码
+     * 电梯注册代码
      */
     private String registrationCode;
 

+ 10 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/dao/mapper/HomeLiftDataMapper.java

@@ -1,5 +1,7 @@
 package cn.com.ty.lift.system.homepage.dao.mapper;
 
+import cn.com.ty.lift.system.homepage.dao.dto.request.LiftDataRequest;
+import cn.com.ty.lift.system.homepage.dao.model.LiftMapDataModel;
 import cn.com.ty.lift.system.homepage.dao.model.LiftUnitsDataModel;
 import cn.com.xwy.boot.mybatis.MyBatisMapper;
 
@@ -20,4 +22,12 @@ public interface HomeLiftDataMapper {
      * @date 2020/2/17 4:19 下午
      */
     List<LiftUnitsDataModel> getLiftUnitsData();
+
+    /**
+     * @param
+     * @return
+     * @description 获取电梯地图中的电梯数据
+     * @date 2020/2/18 11:07 上午
+     */
+    List<LiftMapDataModel> getLiftMapData(LiftDataRequest liftDataRequest);
 }

+ 4 - 9
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/dao/model/LiftMapDataModel.java

@@ -11,18 +11,13 @@ import lombok.Data;
 @Data
 public class LiftMapDataModel extends LiftDataResponse {
     /**
-     * 电梯急修状态
+     * 电梯急修状态 默认状态100 魔法值
      */
-    private Integer liftEmergencyStatus;
+    private Integer liftMapStatus = 100;
 
     /**
-     * 电梯维保状态
+     * 定位状态
      */
-    private Integer liftMaintenanceStatus;
-
-    /**
-     * 电梯年检状态
-     */
-    private Integer liftAnnualInspectionStatus;
+    private Integer liftLocateStatus;
 
 }

+ 213 - 3
lift-system-service/src/main/java/cn/com/ty/lift/system/homepage/service/LiftDataService.java

@@ -1,15 +1,27 @@
 package cn.com.ty.lift.system.homepage.service;
 
 import cn.com.ty.lift.common.constants.ApiConstants;
+import cn.com.ty.lift.common.constants.CommonEnum;
 import cn.com.ty.lift.system.constants.CommonConstants;
 import cn.com.ty.lift.system.homepage.dao.dto.request.LiftDataRequest;
-import cn.com.ty.lift.system.homepage.dao.dto.response.LiftDataResponse;
+import cn.com.ty.lift.system.homepage.dao.mapper.CommonDataMapper;
+import cn.com.ty.lift.system.homepage.dao.mapper.HomeLiftDataMapper;
+import cn.com.ty.lift.system.homepage.dao.model.EmergencyRecordDataModel;
+import cn.com.ty.lift.system.homepage.dao.model.LiftMapDataModel;
+import cn.com.ty.lift.system.homepage.dao.model.MtPlanDataModel;
+import cn.com.ty.lift.system.homepage.dao.model.MtRecordDataModel;
 import cn.com.xwy.boot.web.dto.RestResponse;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author huangyuan
@@ -19,6 +31,12 @@ import java.util.Map;
 @Service
 public class LiftDataService {
 
+    @Resource
+    private HomeLiftDataMapper homeLiftDataMapper;
+
+    @Resource
+    private CommonDataMapper commonDataMapper;
+
     /**
      * @param
      * @return
@@ -28,9 +46,39 @@ public class LiftDataService {
     public RestResponse liftNum(LiftDataRequest liftDataRequest) {
         //获取初始化数据
         Map<Integer, Long> liftStatusToNum = CommonConstants.LIFT_DATA_STATUS_TO_NUM;
+        //获取电梯数据
+        List<LiftMapDataModel> liftMapDataModelList = getLiftMapDataModel(liftDataRequest);
+        if (liftMapDataModelList != null && liftMapDataModelList.size() > 0) {
+            //设置总电梯数
+            liftStatusToNum.put(CommonConstants.LiftDataConstants.STATUS_ALL_LIFT, liftMapDataModelList.stream().count());
+            //设置未定位电梯数
+            long noLocateCount = liftMapDataModelList.stream()
+                    .filter(liftMapDataModel -> liftMapDataModel.getLiftLocateStatus() == -1).count();
+            liftStatusToNum.put(CommonConstants.LiftDataConstants.STATUS_NO_LOCATE, noLocateCount);
+            //循环设置电梯维保数量
+            for (int liftStatus : CommonConstants.LiftDataConstants.LIFT_DATA_STATUS_ARRAY) {
+                //去除所有和未定位的电梯状态
+                if (liftStatus != CommonConstants.LiftDataConstants.STATUS_ALL_LIFT
+                        && liftStatus != CommonConstants.LiftDataConstants.STATUS_NO_LOCATE) {
+                    setMapStatusNum(liftStatusToNum, liftMapDataModelList, liftStatus);
+                }
+            }
+        }
         return RestResponse.success(liftStatusToNum, ApiConstants.RESULT_SUCCESS, "获取电梯统计数据成功");
     }
 
+    /**
+     * @param
+     * @return
+     * @description 设置电梯状态对应的电梯数量
+     * @date 2020/2/18 2:48 下午
+     */
+    private void setMapStatusNum(Map<Integer, Long> liftStatusToNum, List<LiftMapDataModel> liftMapDataModelList, int liftMapStatus) {
+        long liftStatusCount = liftMapDataModelList.stream()
+                .filter(liftMapDataModel -> liftMapDataModel.getLiftMapStatus() == liftMapStatus).count();
+        liftStatusToNum.put(liftMapStatus, liftStatusCount);
+    }
+
     /**
      * @param
      * @return
@@ -38,7 +86,169 @@ public class LiftDataService {
      * @date 2020/2/14 1:07 下午
      */
     public RestResponse getLiftDataList(LiftDataRequest liftDataRequest) {
-        List<LiftDataResponse> liftDataResponseList = new ArrayList<>();
-        return RestResponse.success(liftDataResponseList, ApiConstants.RESULT_SUCCESS, "获取电梯数据成功");
+        List<LiftMapDataModel> returnLiftMapDataModelList = new ArrayList<>();
+        //获取电梯数据
+        List<LiftMapDataModel> liftMapDataModelList = getLiftMapDataModel(liftDataRequest);
+        if(liftMapDataModelList != null && liftMapDataModelList.size() > 0) {
+            //通过电梯状态进行分组
+            Map<Integer, List<LiftMapDataModel>> statusToLiftData = liftMapDataModelList.stream()
+                    .collect(Collectors.groupingBy(LiftMapDataModel::getLiftLocateStatus));
+            if(statusToLiftData != null) {
+                returnLiftMapDataModelList = statusToLiftData.get(liftDataRequest.getLiftDataStatus());
+            }
+        }
+        return RestResponse.success(returnLiftMapDataModelList, ApiConstants.RESULT_SUCCESS, "获取电梯数据成功");
+    }
+
+    /**
+     * @param
+     * @return
+     * @description 获取企业电梯数据
+     * @date 2020/2/18 2:16 下午
+     */
+    public List<LiftMapDataModel> getLiftMapDataModel(LiftDataRequest liftDataRequest) {
+        //获取电梯数据
+        List<LiftMapDataModel> liftMapDataModelList = homeLiftDataMapper.getLiftMapData(liftDataRequest);
+        if (liftMapDataModelList != null && liftMapDataModelList.size() > 0) {
+            //过滤停保电梯
+            liftMapDataModelList = liftMapDataModelList.stream()
+                    .filter(liftMapDataModel -> {
+                        if (StringUtils.isNotBlank(liftMapDataModel.getLiftCompanyStatus())) {
+                            return CommonEnum.LiftStatus.STOP_INSURANCE.getCode().equals(
+                                    liftMapDataModel.getLiftCompanyStatus());
+                        }
+                        return false;
+                    }).collect(Collectors.toList());
+            //设置起始时间
+            setStartEndDate(liftDataRequest);
+            //获取维保计划
+            List<MtPlanDataModel> mtPlanDataModelList = commonDataMapper.getMtPlanData(liftDataRequest);
+            //将维保计划数据转化为 liftId(电梯id) -> status(维保计划状态)
+            final Map<Long, Integer> liftIdToMaintenancePlanStatus = getLiftIdToMaintenancePlanStatus(mtPlanDataModelList);
+            //获取维保记录
+            List<MtRecordDataModel> mtRecordDataModelList = commonDataMapper.getMtRecordData(liftDataRequest);
+            //将维保记录数据转化为 liftId(电梯id) -> status(维保记录状态)
+            final Map<Long, Integer> liftIdToMaintenanceRecordStatus = getLiftIdToMaintenanceRecordStatus(
+                    mtRecordDataModelList);
+            //获取急修记录
+            List<EmergencyRecordDataModel> emergencyRecordDataModelList =
+                    commonDataMapper.getEmergencyRecordData(liftDataRequest);
+            //将急修记录数据转化为 liftId(电梯id) -> status(急修状态)
+            final Map<Long, Integer> liftIdToEmergencyStatus = getLiftIdToEmergencyStatus(emergencyRecordDataModelList);
+            //设置电梯状态
+            setLiftMapStatus(liftMapDataModelList, liftIdToMaintenancePlanStatus, liftIdToMaintenanceRecordStatus, liftIdToEmergencyStatus);
+        }
+        return liftMapDataModelList;
+    }
+
+    /**
+     * @param
+     * @return
+     * @description 设置电梯状态
+     * @date 2020/2/18 2:17 下午
+     */
+    private void setLiftMapStatus(List<LiftMapDataModel> liftMapDataModelList, Map<Long, Integer> liftIdToMaintenancePlanStatus, Map<Long, Integer> liftIdToMaintenanceRecordStatus, Map<Long, Integer> liftIdToEmergencyStatus) {
+        //循环设置电梯状态
+        liftMapDataModelList.forEach(liftMapDataModel -> {
+            //设置电梯定位状态
+            //-1表示电梯未定位
+            liftMapDataModel.setLiftLocateStatus(-1);
+            if (StringUtils.isNotBlank(liftMapDataModel.getCoordinate())) {
+                //经纬度不为空说明电梯已经定位 1表示电梯已经定位
+                liftMapDataModel.setLiftLocateStatus(1);
+            }
+            //设置电梯保养状态
+            if (liftIdToMaintenancePlanStatus.size() > 0) {
+                Integer maintenanceStatus = liftIdToMaintenancePlanStatus.get(liftMapDataModel.getLiftId());
+                if (maintenanceStatus != null) {
+                    //状态不为空说明有维保计划,设置待维保
+                    liftMapDataModel.setLiftMapStatus(CommonConstants.LiftDataConstants.STATUS_WAIT_MAINTENANCE);
+                    if (liftIdToMaintenanceRecordStatus.size() > 0) {
+                        if (liftIdToMaintenanceRecordStatus.get(liftMapDataModel.getLiftId()) != null) {
+                            //有维保记录设置为维保中
+                            liftMapDataModel.setLiftMapStatus(CommonConstants.LiftDataConstants.STATUS_GO_MAINTENANCE);
+                        }
+                    }
+                    //设置维保完成
+                    if (maintenanceStatus == 1) {
+                        liftMapDataModel.setLiftMapStatus(CommonConstants.LiftDataConstants.STATUS_HAVE_MAINTENANCE);
+                    }
+                }
+            }
+            //设置电梯急修状态
+            if (liftIdToEmergencyStatus.size() > 0) {
+                Integer emergencyStatus = liftIdToEmergencyStatus.get(liftMapDataModel.getLiftId());
+                if (emergencyStatus != null) {
+                    //有急修记录设置状态为待急修
+                    liftMapDataModel.setLiftMapStatus(CommonConstants.LiftDataConstants.STATUS_WAIT_EMERGENCY);
+                    if (emergencyStatus == 2 || emergencyStatus == 3) {
+                        //状态2,3属于急修中
+                        liftMapDataModel.setLiftMapStatus(CommonConstants.LiftDataConstants.STATUS_HAVE_EMERGENCY);
+                    }
+                }
+            }
+        });
+    }
+
+    /**
+     * @param
+     * @return
+     * @description 设置起始时间
+     * @date 2020/2/18 2:13 下午
+     */
+    private void setStartEndDate(LiftDataRequest liftDataRequest) {
+        //获取昨天的时间
+        String yesterdayStr = LocalDate.now().plusDays(-1).format(
+                DateTimeFormatter.ofPattern(CommonConstants.PLAN_DATE_FORMAT));
+        //获取明天的时间
+        String tomorrowStr = LocalDate.now().format(
+                DateTimeFormatter.ofPattern(CommonConstants.PLAN_DATE_FORMAT));
+        //设置时间段
+        liftDataRequest.setStartDateStr(yesterdayStr);
+        liftDataRequest.setEndTimeStr(tomorrowStr);
+    }
+
+    /**
+     * @param
+     * @return
+     * @description 获取电梯id->电梯维保计划状态
+     * @date 2020/2/18 1:32 下午
+     */
+    private Map<Long, Integer> getLiftIdToMaintenancePlanStatus(List<MtPlanDataModel> mtPlanDataModelList) {
+        if (mtPlanDataModelList != null && mtPlanDataModelList.size() > 0) {
+            return mtPlanDataModelList.stream()
+                    .collect(Collectors.toMap(MtPlanDataModel::getLiftId, MtPlanDataModel::getStatus));
+        }
+        return new HashMap<>();
     }
+
+    /**
+     * @param
+     * @return
+     * @description 获取电梯id->电梯维保记录状态
+     * @date 2020/2/18 2:05 下午
+     */
+    private Map<Long, Integer> getLiftIdToMaintenanceRecordStatus(List<MtRecordDataModel> mtRecordDataModels) {
+        if (mtRecordDataModels != null && mtRecordDataModels.size() > 0) {
+            return mtRecordDataModels.stream()
+                    .collect(Collectors.toMap(MtRecordDataModel::getLiftId, MtRecordDataModel::getStatus));
+        }
+        return new HashMap<>();
+    }
+
+    /**
+     * @param
+     * @return
+     * @description 获取电梯id->电梯维保状态
+     * @date 2020/2/18 1:32 下午
+     */
+    private Map<Long, Integer> getLiftIdToEmergencyStatus(List<EmergencyRecordDataModel> emergencyRecordDataModelList) {
+        if (emergencyRecordDataModelList != null && emergencyRecordDataModelList.size() > 0) {
+            return emergencyRecordDataModelList.stream()
+                    .collect(Collectors.toMap(EmergencyRecordDataModel::getLiftId, EmergencyRecordDataModel::getStatus));
+        }
+        return new HashMap<>();
+    }
+
+
 }

+ 36 - 0
lift-system-service/src/main/resources/mapper/HomeLiftDataMapper.xml

@@ -17,4 +17,40 @@
             pclr.mt_company_id = mc.id
     </select>
 
+    <!-- 获取电梯地图中的电梯数据 -->
+    <select id="getLiftMapData" parameterType="cn.com.ty.lift.system.homepage.dao.dto.request.LiftDataRequest"
+            resultType="cn.com.ty.lift.system.homepage.dao.model.LiftMapDataModel">
+        select
+            plr.lift_id as liftId,
+            pclr.lift_company_status as liftCompanyStatus,
+            l.registration_code as registrationCode,
+            l.lift_type as liftType,
+            l.lift_code as liftCode,
+            l.lift_brand as liftBrand,
+            l.coordinate as coordinate,
+            l.device_position as devicePosition,
+            p.project_name as projectName,
+            ui.name as workerName
+        from
+            platform_company_lift_relevance pclr
+        left join
+            lift l
+        on
+            pclr.lift_id = l.id
+        left join
+            project_lift_relevance plr
+        on
+            pclr.lift_id = plr.lift_id
+        left join
+            project p
+        on
+            plr.project_id = p.id
+        left join
+            user_info ui
+        on
+            plr.worker_id = ui.user_id
+        where
+            pclr.mt_company_id = #{mtCompanyId}
+    </select>
+
 </mapper>