Jelajahi Sumber

物管急修功能完善

wanghaicheng 5 tahun lalu
induk
melakukan
ee721cbbee

+ 7 - 71
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/controller/PropertyMaintenanceController.java

@@ -1,50 +1,26 @@
 package cn.com.ty.lift.business.maintenance.controller;
 
-import cn.com.ty.lift.business.emergency.dto.RepairResponse;
+import cn.com.ty.lift.business.emergency.dto.RepairRequest;
 import cn.com.ty.lift.business.emergency.entity.EmergencyRepair;
-import cn.com.ty.lift.business.emergency.service.EmergencyRepairService;
-import cn.com.ty.lift.business.library.dao.entity.PlatformCompanyLiftRelevance;
-import cn.com.ty.lift.business.library.service.PlatformCompanyLiftRelevanceService;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.request.PropertyMaintenanceVO;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.request.PropertyVo;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.response.DynamicMessageResponse;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.response.PropertyMtResponse;
 import cn.com.ty.lift.business.maintenance.service.PropertyService;
-import cn.com.ty.lift.business.project.dao.entity.Region;
-import cn.com.ty.lift.business.push.service.PushUserService;
-import cn.com.ty.lift.common.constants.ApiConstants;
-import cn.com.ty.lift.common.constants.CommonEnum;
-import cn.com.ty.lift.common.constants.WebSocketConstants;
-import cn.com.ty.lift.common.model.PushMessage;
-import cn.com.ty.lift.common.model.PushUserInfo;
-import cn.com.ty.lift.common.utils.SendMessageUtil;
-import cn.com.ty.lift.common.utils.ValuePool;
-import cn.com.ty.lift.common.verify.Validate;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
-import org.springframework.jms.core.JmsMessagingTemplate;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
 @RestController
 @AllArgsConstructor
 @RequestMapping("property")
 public class PropertyMaintenanceController {
     private final PropertyService propertyService;
-    private final EmergencyRepairService emergencyRepairService;
-    private final PlatformCompanyLiftRelevanceService platformCompanyLiftRelevanceService;
-    private final JmsMessagingTemplate jmsMessagingTemplate;
-    private final PushUserService pushUserService;
 
     @PostMapping("maintenance")
     public RestResponse<?> maintenance(@RequestBody PropertyMaintenanceVO propertyMaintenanceVO) {
@@ -86,51 +62,11 @@ public class PropertyMaintenanceController {
 
     @PostMapping("repair/add")
     public RestResponse<?> repairAdd(@RequestBody EmergencyRepair entity) {
-        Long mtCompanyId = entity.getMtCompanyId();
-        Long liftId = entity.getLiftId();
-        int repairing = emergencyRepairService.countRepairing(mtCompanyId, liftId);
-        Validate.notTrue(repairing > 0, ValuePool.EMERGENCY_HAVE_REPAIRING);
-        PlatformCompanyLiftRelevance relevance = platformCompanyLiftRelevanceService.findByMtCompanyAndLift(entity.getMtCompanyId(), entity.getLiftId());
-        if (Objects.nonNull(relevance)) {
-            Validate.notTrue(CommonEnum.LiftStatus.ANNUAL_INSPECTION.getCode().equals(relevance.getLiftCompanyStatus()), ValuePool.EMERGENCY_LIFT_IS_IN_INSPECTION);
-        }
-        //派单时间 急修单创建时间
-        entity.setHasEvaluate(0);
-        entity.setAssignTime(LocalDateTime.now());
-        entity.setStatus(ValuePool.EMERGENCY_STATE_TO_DO);
-        entity.setCreateDate(LocalDateTime.now());
-        boolean result = emergencyRepairService.save(entity);
-        if (result) {
-            //消息推送
-            Long id = entity.getId();
-            List<Long> userIds = new ArrayList<>();
-            Region region = pushUserService.findRegionByEmergencyRepair(id, mtCompanyId);
-            if (Objects.nonNull(region)) {
-                userIds.add(region.getUserId());
-            }
-            List<PushUserInfo> director = pushUserService.listHighDirector(mtCompanyId);
-            List<PushUserInfo> pushUserInfos = new ArrayList<>(director);
-            if (!userIds.isEmpty()) {
-                List<PushUserInfo> userInfos = pushUserService.listByUserIds(mtCompanyId, userIds);
-                pushUserInfos.addAll(userInfos);
-            }
-            if (!pushUserInfos.isEmpty()) {
-                RepairResponse info = emergencyRepairService.infoById(id);
-                PushMessage pushMessage = PushMessage.emergencyAssign(info.getAreaName(), info.getProjectName(), info.getDevicePosition(),
-                        info.getRegistrationCode(), info.getCallerDate(), info.getIsTrapped(),
-                        info.getCallerFaultDescription(), info.getWorkerName());
-                if (ApiConstants.ACCESS_TYPE_PUBLIC == entity.getMobileType()) {
-                    pushMessage = PushMessage.emergencyAssignByProperty(info.getAreaName(), info.getProjectName(), info.getDevicePosition(),
-                            info.getRegistrationCode(), info.getCallerDate(), info.getIsTrapped(),
-                            info.getCallerFaultDescription(), info.getWorkerName());
-                    //物业端发起的急修要将消息推送到pc端
-                    List<Long> pushUserIds = pushUserInfos.stream().map(PushUserInfo::getUserId).collect(Collectors.toList());
-                    SendMessageUtil.sendMessageToPC(jmsMessagingTemplate, pushUserIds, pushMessage.getContent(),
-                            WebSocketConstants.MessageType.EMERGENCY_MSG);
-                }
-                pushMessage.sendTokenOnPlatform(jmsMessagingTemplate, pushUserInfos);
-            }
-        }
-        return RestResponse.success(result);
+        return propertyService.repairAdd(entity);
+    }
+
+    @PostMapping("repair/bill")
+    public RestResponse<?> repairBill(@RequestBody RepairRequest request) {
+        return propertyService.repairBill(request);
     }
 }

+ 5 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/dao/entity/model/request/PropertyVo.java

@@ -8,4 +8,9 @@ public class PropertyVo {
     private Long id;
 
     private Integer type;
+    private Integer status;
+
+
+    private long pageNum;
+    private long pageSize;
 }

+ 1 - 0
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/dao/entity/model/response/RepairResponse.java

@@ -35,4 +35,5 @@ public class RepairResponse {
     private Integer category;
     private String devicePosition;
     private String workerName;
+    private String waitDiff;
 }

+ 1 - 1
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/dao/mapper/PropertyMaintenanceMapper.java

@@ -32,5 +32,5 @@ public interface PropertyMaintenanceMapper {
     List<PropertyEvaluateAuthResponse> queryEvaluateAuth(String table, Long userId);
 
     @Select(SqlConstants.QUERY_REPAIR_LIST)
-    List<RepairResponse> queryRepairList(Long userId);
+    IPage<RepairResponse> queryRepairList(IPage<RepairResponse> page, Integer status, Long userId);
 }

+ 156 - 4
lift-business-service/src/main/java/cn/com/ty/lift/business/maintenance/service/PropertyService.java

@@ -1,27 +1,62 @@
 package cn.com.ty.lift.business.maintenance.service;
 
+import cn.com.ty.lift.business.emergency.dto.RepairRequest;
+import cn.com.ty.lift.business.emergency.entity.EmergencyRepair;
+import cn.com.ty.lift.business.emergency.entity.LiftFault;
+import cn.com.ty.lift.business.emergency.service.EmergencyRepairService;
+import cn.com.ty.lift.business.emergency.service.ErRecordCostService;
+import cn.com.ty.lift.business.emergency.service.ErRecordImgService;
+import cn.com.ty.lift.business.emergency.service.LiftFaultService;
+import cn.com.ty.lift.business.evaluation.dao.entity.Evaluation;
+import cn.com.ty.lift.business.evaluation.service.EvaluationService;
+import cn.com.ty.lift.business.library.dao.entity.PlatformCompanyLiftRelevance;
+import cn.com.ty.lift.business.library.service.PlatformCompanyLiftRelevanceService;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.dto.MaintenancePlanMonthTaskNum;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.request.PropertyMaintenanceVO;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.request.PropertyVo;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.response.DynamicMessageResponse;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.response.PropertyCalendarResponse;
 import cn.com.ty.lift.business.maintenance.dao.entity.model.response.PropertyMtResponse;
+import cn.com.ty.lift.business.maintenance.dao.entity.model.response.RepairResponse;
 import cn.com.ty.lift.business.maintenance.dao.mapper.PropertyMaintenanceMapper;
+import cn.com.ty.lift.business.project.dao.entity.Region;
+import cn.com.ty.lift.business.push.service.PushUserService;
 import cn.com.ty.lift.common.constants.ApiConstants;
+import cn.com.ty.lift.common.constants.CommonEnum;
+import cn.com.ty.lift.common.constants.WebSocketConstants;
+import cn.com.ty.lift.common.model.PushMessage;
+import cn.com.ty.lift.common.model.PushUserInfo;
+import cn.com.ty.lift.common.utils.SendMessageUtil;
+import cn.com.ty.lift.common.utils.ValuePool;
+import cn.com.ty.lift.common.verify.Validate;
 import cn.com.xwy.boot.web.dto.RestResponse;
+import cn.hutool.core.collection.IterUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.jms.core.JmsMessagingTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
 @Slf4j
 public class PropertyService {
     private final PropertyMaintenanceMapper propertyMaintenanceMapper;
+    private final EmergencyRepairService emergencyRepairService;
+    private final PlatformCompanyLiftRelevanceService platformCompanyLiftRelevanceService;
+    private final JmsMessagingTemplate jmsMessagingTemplate;
+    private final PushUserService pushUserService;
+    private final EvaluationService evaluationService;
+    private final ErRecordCostService erRecordCostService;
+    private final ErRecordImgService erRecordImgService;
+    private final LiftFaultService liftFaultService;
 
     /**
      * @param propertyMaintenanceVO userId用户id,yearMonth年月 例202005即2020年5月
@@ -182,7 +217,124 @@ public class PropertyService {
      * @param propertyVo userId
      * @return 急修列表
      */
-    public RestResponse<?> queryRepairList(PropertyVo propertyVo) {
-        return RestResponse.success(propertyMaintenanceMapper.queryRepairList(propertyVo.getUserId()));
+    public RestResponse<?> queryRepairList(@RequestBody PropertyVo propertyVo) {
+        IPage<RepairResponse> page = new Page<>(propertyVo.getPageNum(), propertyVo.getPageSize());
+        return RestResponse.success(propertyMaintenanceMapper.queryRepairList(page, propertyVo.getStatus(), propertyVo.getUserId()));
+    }
+
+    /**
+     * 发起急修
+     * @param entity
+     * @return
+     */
+    public RestResponse<Boolean> repairAdd(EmergencyRepair entity) {
+        Long mtCompanyId = entity.getMtCompanyId();
+        Long liftId = entity.getLiftId();
+        int repairing = emergencyRepairService.countRepairing(mtCompanyId, liftId);
+        Validate.notTrue(repairing > 0, ValuePool.EMERGENCY_HAVE_REPAIRING);
+        PlatformCompanyLiftRelevance relevance = platformCompanyLiftRelevanceService.findByMtCompanyAndLift(entity.getMtCompanyId(), entity.getLiftId());
+        if (Objects.nonNull(relevance)) {
+            Validate.notTrue(CommonEnum.LiftStatus.ANNUAL_INSPECTION.getCode().equals(relevance.getLiftCompanyStatus()), ValuePool.EMERGENCY_LIFT_IS_IN_INSPECTION);
+        }
+        //派单时间 急修单创建时间
+        entity.setHasEvaluate(0);
+        entity.setAssignTime(LocalDateTime.now());
+        entity.setStatus(ValuePool.EMERGENCY_STATE_TO_DO);
+        entity.setCreateDate(LocalDateTime.now());
+        boolean result = emergencyRepairService.save(entity);
+        if (result) {
+            //消息推送
+            Long id = entity.getId();
+            List<Long> userIds = new ArrayList<>();
+            Region region = pushUserService.findRegionByEmergencyRepair(id, mtCompanyId);
+            if (Objects.nonNull(region)) {
+                userIds.add(region.getUserId());
+            }
+            List<PushUserInfo> director = pushUserService.listHighDirector(mtCompanyId);
+            List<PushUserInfo> pushUserInfos = new ArrayList<>(director);
+            if (!userIds.isEmpty()) {
+                List<PushUserInfo> userInfos = pushUserService.listByUserIds(mtCompanyId, userIds);
+                pushUserInfos.addAll(userInfos);
+            }
+            if (!pushUserInfos.isEmpty()) {
+                cn.com.ty.lift.business.emergency.dto.RepairResponse info = emergencyRepairService.infoById(id);
+                PushMessage pushMessage = PushMessage.emergencyAssign(info.getAreaName(), info.getProjectName(), info.getDevicePosition(),
+                        info.getRegistrationCode(), info.getCallerDate(), info.getIsTrapped(),
+                        info.getCallerFaultDescription(), info.getWorkerName());
+                if (ApiConstants.ACCESS_TYPE_PUBLIC == entity.getMobileType()) {
+                    pushMessage = PushMessage.emergencyAssignByProperty(info.getAreaName(), info.getProjectName(), info.getDevicePosition(),
+                            info.getRegistrationCode(), info.getCallerDate(), info.getIsTrapped(),
+                            info.getCallerFaultDescription(), info.getWorkerName());
+                    //物业端发起的急修要将消息推送到pc端
+                    List<Long> pushUserIds = pushUserInfos.stream().map(PushUserInfo::getUserId).collect(Collectors.toList());
+                    SendMessageUtil.sendMessageToPC(jmsMessagingTemplate, pushUserIds, pushMessage.getContent(),
+                            WebSocketConstants.MessageType.EMERGENCY_MSG);
+                }
+                pushMessage.sendTokenOnPlatform(jmsMessagingTemplate, pushUserInfos);
+            }
+        }
+        return RestResponse.success(result);
+    }
+
+    /**
+     * @param request
+     * @return 急修详情
+     */
+    public RestResponse<?> repairBill(RepairRequest request) {
+        Long id = request.getId();
+        cn.com.ty.lift.business.emergency.dto.RepairResponse result = emergencyRepairService.infoById(request.getId());
+        if (null != result) {
+            //急修费用
+            result.setErRecordCosts(erRecordCostService.listByErRecordId(id));
+            //急修图片
+            result.setErRecordImgs(erRecordImgService.listByErRecordId(id));
+            //评价
+            Evaluation byRecord = evaluationService.findByRecord(id, ValuePool.EVALUATE_SOURCE_EMERGENCY);
+            if (Objects.nonNull(byRecord)) result.setEvaluation(byRecord);
+            //故障信息
+            fillFault(result);
+        }
+        return RestResponse.success(result);
+    }
+
+    /**
+     * 解析故障项id字符串,查询出相关的故障项
+     *
+     * @param result RepairResponse
+     */
+    private void fillFault(cn.com.ty.lift.business.emergency.dto.RepairResponse result) {
+        List<Long> partIds = splitIds(result.getFaultPart());
+        List<Long> reasonIds = splitIds(result.getFaultReason());
+        List<Long> natureIds = splitIds(result.getFaultNature());
+        List<Long> handleIds = splitIds(result.getFaultHandle());
+        List<Long> dutyIds = splitIds(result.getFaultDuty());
+
+        Set<Long> faultIds = new HashSet<>();
+        faultIds.addAll(partIds);
+        faultIds.addAll(reasonIds);
+        faultIds.addAll(natureIds);
+        faultIds.addAll(handleIds);
+        faultIds.addAll(dutyIds);
+        if (faultIds.isEmpty()) return;
+        Collection<LiftFault> liftFaults = liftFaultService.listByIds(faultIds);
+        if (IterUtil.isEmpty(liftFaults)) return;
+        result.setFaultParts(liftFaults.stream().filter(fault -> (partIds.contains(fault.getId()))).collect(Collectors.toList()));
+        result.setFaultReasons(liftFaults.stream().filter(fault -> (reasonIds.contains(fault.getId()))).collect(Collectors.toList()));
+        result.setFaultNatures(liftFaults.stream().filter(fault -> (natureIds.contains(fault.getId()))).collect(Collectors.toList()));
+        result.setFaultHandles(liftFaults.stream().filter(fault -> (handleIds.contains(fault.getId()))).collect(Collectors.toList()));
+        result.setFaultDuties(liftFaults.stream().filter(fault -> (dutyIds.contains(fault.getId()))).collect(Collectors.toList()));
+    }
+
+    /**
+     * 拆分故障项id字符串,组装成List<Long>
+     *
+     * @param idStr ids
+     * @return List<Long>
+     */
+    private List<Long> splitIds(String idStr) {
+        if (StrUtil.isEmpty(idStr)) {
+            return Collections.emptyList();
+        }
+        return Arrays.stream(idStr.split(ValuePool.COMMA)).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
     }
 }

+ 6 - 6
lift-common/src/main/java/cn.com.ty.lift.common/constants/SqlConstants.java

@@ -126,7 +126,7 @@ public interface SqlConstants {
                     "                l.category          category," +
                     "                l.device_position   devicePosition," +
                     "                ui.name             workerName," +
-                    "                TimeStampDiff(SECOND ,er.assign_time,ifnull(er.taking_time, now())) * 1000 AS waitDiff," +
+                    "                TimeStampDiff(HOUR ,er.assign_time,ifnull(er.taking_time, now())) AS waitDiff," +
                     "                er.create_date" +
                     "    from emergency_repair er" +
                     "         left join project_user pu on pu.project_id = er.project_id" +
@@ -139,9 +139,9 @@ public interface SqlConstants {
                     "                                  from project_user pu" +
                     "                                  where pu.user_id = #{userId}) order by er.create_date desc";
 
-    //查询区域列表
-    String QUERY_REGIONS = 
-            "select         r.area_name     areaName" +
+    //查询区域列表,
+    String QUERY_REGIONS =
+            "select r.area_name     areaName" +
                     "     , r.area_code     areaCode" +
                     "     , r.city_code     cityCode" +
                     "     , r.remark        remark" +
@@ -152,7 +152,7 @@ public interface SqlConstants {
                     "     , r.id            id" +
                     "   from region r" +
                     "         left join user_info ui on r.user_id = ui.user_id" +
-                    "   where mt_company_id = #{mtCompanyId}" +
-                    "  and (r.area_name like '%${name}%' or ui.name like '%${name}%')" +
+                    "     where mt_company_id = #{mtCompanyId}" +
+                    "       and (r.area_name like '%${name}%' or ui.name like '%${name}%')" +
                     "   order by create_time desc";
 }