Browse Source

Merge remote-tracking branch 'origin/20210223' into 20210223

wangyangyang 4 years ago
parent
commit
eb71d06dfb

+ 18 - 0
operation_manager/src/main/java/com/huaxu/client/SmsWaterClient.java

@@ -0,0 +1,18 @@
+package com.huaxu.client;
+
+
+import com.huaxu.config.FeignConfig;
+import com.huaxu.model.AjaxMessage;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+@FeignClient(value = "sms-water",configuration={FeignConfig.class})
+public interface SmsWaterClient {
+
+    @GetMapping("/scene/selectAlarmDeviceIdBySenceId")
+    AjaxMessage<List<Map<String,Object>>> selectAlarmDeviceIdBySenceId(@RequestParam("id") int id);
+}

+ 49 - 3
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderStatisticsController.java

@@ -1,5 +1,6 @@
 package com.huaxu.order.controller;
 
+import com.huaxu.client.SmsWaterClient;
 import com.huaxu.client.UserCenterClient;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.LoginUser;
@@ -34,6 +35,9 @@ public class WorkOrderStatisticsController {
     @Autowired
     UserCenterClient userCenterClient;
 
+    @Autowired
+    SmsWaterClient smsWaterClient;
+
     @RequestMapping(value = "completionStatistics", method = RequestMethod.GET)
     @ApiOperation(value = "工单完成情况统计")
     public AjaxMessage<Map<String, Object>> completionStatistics(
@@ -150,7 +154,6 @@ public class WorkOrderStatisticsController {
         //根据用户编号,获取用户的权限
         LoginUser loginUser = UserUtil.getCurrentUser();
         WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
-
         workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
         workOrderManageDto.setUserType(loginUser.getType());
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
@@ -233,7 +236,52 @@ public class WorkOrderStatisticsController {
         return new AjaxMessage<>(ResultStatus.OK, statistics);
     }
 
+    @RequestMapping(value = "dispatchTimesStatistics", method = RequestMethod.GET)
+    @ApiOperation(value = "派单次数统计")
+    public AjaxMessage<List<Map<String,Object>>> dispatchTimesStatistics(
+            @ApiParam(value = "设备或场景ID", required = true) @RequestParam(required = true) int id,
+            @ApiParam(value = "设备或场景标识(1:设备;2:场景)", required = true) @RequestParam(required = true) int sort,
+            @ApiParam(value = "统计类型:0-按月统计,1-按年统计,2-自定义统计", required = true) @RequestParam(required = true) int type,
+            @ApiParam(value = "统计时间:月格式(yyyy-MM),年格式(yyyy),自定义统计时间开始日期", required = true) @RequestParam(required = true) String startDate,
+            @ApiParam(value = "统计时间:年月统计不用传入此参数,自定义统计截至日期", required = false) @RequestParam(required = false) String endDate) throws ParseException {
 
+        List<Integer> idList = new ArrayList<>();
+        List<Map<String,Object>> statistics = new ArrayList<Map<String, Object>>();
+
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+        switch (type) {
+            case 0:
+                startDate = String.format("%s-01", startDate);
+                endDate = subMonth(startDate, 1);
+                break;
+            case 1:
+                startDate = String.format("%s-01-01", startDate);
+                endDate = subYear(startDate, 1);
+                break;
+            case 2:
+                startDate = String.format("%s-01", startDate);
+                endDate = String.format("%s-01", endDate);
+                break;
+        }
+        workOrderManageDto.setStartDate(startDate);
+        workOrderManageDto.setEndDate(endDate);
+        if(sort == 2){
+            AjaxMessage<List<Map<String, Object>>> ajaxMessage = smsWaterClient.selectAlarmDeviceIdBySenceId(id);
+             for(Map<String,Object> map : ajaxMessage.getData()) {
+                 int deviceId = Integer.parseInt(map.get("device_id").toString());
+                 idList.add(deviceId);
+             }
+        }else if(sort==1){
+            idList.add(id);
+        }
+        if(type ==0 || type ==2){
+            statistics =  workOrderManageService.dispatchTimesMonthStatistics(workOrderManageDto,idList);
+        }
+        else if(type == 1){
+            statistics =  workOrderManageService.dispatchTimesYearStatistics(workOrderManageDto,idList);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, statistics);
+    }
 
     @RequestMapping(value = "distributionStatistics", method = RequestMethod.GET)
     @ApiOperation(value = "上报类型、工单类型、工单状态统计")
@@ -312,6 +360,4 @@ public class WorkOrderStatisticsController {
         String reStr = sdf.format(dt1);
         return reStr;
     }
-
-
 }

+ 10 - 0
operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java

@@ -94,6 +94,16 @@ public interface WorkOrderManageMapper {
     List<StatisticsDto> orderDurationStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 
 
+    /**
+     * 判单次数月统计
+     */
+    List<Map<String,Object>> dispatchTimesMonthStatistics(@Param("order") WorkOrderManageDto workOrderManageDto,@Param("idList") List<Integer> idList);
+
+    /**
+     * 判单次数年统计
+     */
+    List<Map<String,Object>> dispatchTimesYearStatistics(@Param("order") WorkOrderManageDto workOrderManageDto,@Param("idList") List<Integer> idList);
+
     /**
      * 待处理权限
      */

+ 11 - 0
operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java

@@ -130,6 +130,17 @@ public interface WorkOrderManageService {
      */
     List<StatisticsDto> orderDurationStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 
+    /**
+     * 判单次数月统计
+     */
+    List<Map<String,Object>> dispatchTimesMonthStatistics(@Param("order") WorkOrderManageDto workOrderManageDto,@Param("idList") List<Integer> idList);
+
+    /**
+     * 判单次数年统计
+     */
+    List<Map<String,Object>> dispatchTimesYearStatistics(@Param("order") WorkOrderManageDto workOrderManageDto,@Param("idList") List<Integer> idList);
+
+
     /**
     * @Author lihui
     * @Description 查询个人工单信息

+ 43 - 0
operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java

@@ -10,6 +10,7 @@ import com.huaxu.order.dto.WorkOrderManageDto;
 import com.huaxu.order.entity.WorkOrderManage;
 import com.huaxu.order.service.WorkOrderManageService;
 import com.huaxu.util.UserUtil;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -250,6 +251,48 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
         return result;
     }
 
+    @Override
+    public List<Map<String, Object>> dispatchTimesMonthStatistics(WorkOrderManageDto workOrderManageDto,List<Integer> idList) {
+        String strMonth = workOrderManageDto.getStartDate().substring(5,7);
+        int days = getDaysByYearMonth(Integer.parseInt(strMonth));
+        List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+        List<Map<String,Object>> list = workOrderManageMapper.dispatchTimesMonthStatistics(workOrderManageDto,idList);
+        for(int i=0; i<days; i++) {
+            String strDate = workOrderManageDto.getStartDate().substring(0, 7) + String.format("-%02d", i + 1);
+            Map<String, Object> data = new HashMap<>();
+            data.put("数量", 0);
+            data.put("日期", strDate);
+            data.put("序号",i+1);
+            result.add(data);
+        }
+        for(int i=0;i<list.size();i++){
+            Map<String,Object> map =list.get(i);
+            int day = Integer.parseInt(map.get("日期").toString().substring(8,10));
+            result.get(day-1).put("数量",map.get("数量"));
+        }
+        return result;
+    }
+
+    @Override
+    public List<Map<String, Object>> dispatchTimesYearStatistics(WorkOrderManageDto workOrderManageDto, List<Integer> idList) {
+        List<Map<String,Object>> list = workOrderManageMapper.dispatchTimesYearStatistics(workOrderManageDto,idList);
+        List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
+        for(int i=0; i<12; i++) {
+            String strDate = workOrderManageDto.getStartDate().substring(0, 4) + String.format("-%02d", i + 1);
+            Map<String, Object> data = new HashMap<>();
+            data.put("数量", 0);
+            data.put("日期", strDate);
+            data.put("序号",i+1);
+            result.add(data);
+        }
+        for(int i=0;i<list.size();i++){
+            Map<String,Object> map =list.get(i);
+            int month = Integer.parseInt(map.get("日期").toString().substring(5,7));
+            result.get(month-1).put("数量",map.get("数量"));
+        }
+        return result;
+    }
+
     @Override
     public Page<WorkOrderManageDto> selectByTime(IPage<WorkOrderManageDto> page, Integer userId, String startTime, String endTime) {
         LoginUser currentUser = UserUtil.getCurrentUser();

+ 25 - 0
operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml

@@ -1198,4 +1198,29 @@
       and date_create between #{startTime} and #{endTime}
     order by send_time desc
   </select>
+
+  <!--派单次数月统计-->
+  <select id="dispatchTimesMonthStatistics" resultType="map">
+      select count(1) 数量, DATE_FORMAT(send_time,'%Y-%m-%d') 日期
+      from sc_work_order_manage t1
+      where t1.send_time &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      and t1.send_time &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      and device_id in
+      <foreach collection="idList" item="item" open="(" close=")" separator=",">
+        #{item,jdbcType=INTEGER}
+      </foreach>
+      group by DATE_FORMAT(send_time,'%Y-%m-%d')
+  </select>
+  <!--派单次数年统计-->
+  <select id="dispatchTimesYearStatistics" resultType="map">
+    select count(1) 数量, DATE_FORMAT(send_time,'%Y-%m') 日期
+    from sc_work_order_manage t1
+    where t1.send_time &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+    and t1.send_time &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+    and device_id in
+    <foreach collection="idList" item="item" open="(" close=")" separator=",">
+      #{item,jdbcType=INTEGER}
+    </foreach>
+    group by DATE_FORMAT(send_time,'%Y-%m')
+  </select>
 </mapper>

+ 39 - 1
sms_water/src/main/java/com/huaxu/controller/SceneController.java

@@ -270,7 +270,7 @@ public class SceneController {
 
     @RequestMapping(value = "/alarmTimesStatistics", method = RequestMethod.GET)
     @ResponseBody
-    @ApiOperation(value = "场景及设备故障率")
+    @ApiOperation(value = "报警次数统计")
     public  AjaxMessage<List<Map<String,Object>>> alarmTimesStatistics(
             @ApiParam(value = "设备或场景ID", required = true) @RequestParam(required = true) int id,
             @ApiParam(value = "设备或场景标识(1:设备;2:场景)", required = true) @RequestParam(required = true) int sort,
@@ -305,6 +305,44 @@ public class SceneController {
         return new AjaxMessage<>(ResultStatus.OK, list);
     }
 
+    @RequestMapping(value = "/selectAlarmDeviceIdBySenceId", method = RequestMethod.GET)
+    @ResponseBody
+    @ApiOperation(value = "根据场景ID获取报警设备的ID")
+    public AjaxMessage<List<Map<String,Object>>> selectAlarmDeviceIdBySenceId(
+            @ApiParam(value = "设备或场景ID", required = true) @RequestParam(required = true) int id){
+        List<Map<String,Object>> list = sceneService.selectAlarmDeviceIdBySenceId(id);
+        return new AjaxMessage<>(ResultStatus.OK,list);
+    }
+
+
+    @RequestMapping(value = "/selectAlarmLable", method = RequestMethod.GET)
+    @ResponseBody
+    @ApiOperation(value = "报警标签")
+    public AjaxMessage<List<Map<String,Object>>> selectAlarmLable(
+            @ApiParam(value = "设备或场景ID", required = true) @RequestParam(required = true) int id,
+            @ApiParam(value = "统计类型:0-按月统计,1-按年统计,2-自定义统计", required = true) @RequestParam(required = true) int type,
+            @ApiParam(value = "统计时间:月格式(yyyy-MM),年格式(yyyy),自定义统计时间开始日期", required = true) @RequestParam(required = true) String startDate,
+            @ApiParam(value = "统计时间:年月统计不用传入此参数,自定义统计截至日期", required = false) @RequestParam(required = false) String endDate) throws ParseException {
+        SceneEntity sceneEntity = new SceneEntity();
+        sceneEntity.setId(Long.parseLong(String.valueOf(id)));
+        switch (type) {
+            case 0:
+                startDate = String.format("%s-01", startDate);
+                endDate = subMonth(startDate, 1);
+                break;
+            case 1:
+                startDate = String.format("%s-01-01", startDate);
+                endDate = subYear(startDate, 1);
+                break;
+            case 2:
+                startDate = String.format("%s-01", startDate);
+                endDate = String.format("%s-01", endDate);
+                break;
+        }
+        List<Map<String,Object>> list = sceneService.selectAlarmLable(sceneEntity,startDate,endDate);
+        return new AjaxMessage<>(ResultStatus.OK,list);
+    }
+
 
 
 

+ 4 - 0
sms_water/src/main/java/com/huaxu/dao/SceneMapper.java

@@ -49,5 +49,9 @@ public interface SceneMapper extends BaseMapper<SceneEntity> {
     List<Map<String,Object>> selectAlarmSceneAndDevice(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
     List<Map<String,Object>> selectMonthAlarmTimes(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate,@Param("sort") int sort);
+
+    List<Map<String,Object>> selectAlarmDeviceIdBySenceId(@Param("id") int id);
+
+    List<Map<String,Object>> selectAlarmLable(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate);
     /**删除相关方法  使用mybatis-plus集成的 **/
 }

+ 8 - 0
sms_water/src/main/java/com/huaxu/service/SceneService.java

@@ -499,6 +499,14 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
         return result;
     }
 
+    public List<Map<String,Object>> selectAlarmLable(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate){
+        return sceneMapper.selectAlarmLable(sceneEntity,startDate,endDate);
+    }
+
+    public List<Map<String,Object>> selectAlarmDeviceIdBySenceId(int id){
+        return sceneMapper.selectAlarmDeviceIdBySenceId(id);
+    }
+
     /**
      *获取某月有多少天
      */

+ 34 - 0
sms_water/src/main/resources/mapper/SceneMapper.xml

@@ -550,4 +550,38 @@
         and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
         group by DATE_FORMAT(c.DATE_CREATE,'%Y-%m')
     </select>
+
+    <select id="selectAlarmLable" resultType="map">
+        select amount 数量, label 标签 from
+            (
+                select count(1) amount, label from
+                    (
+                        select if(d.REMARK is null,e.NAME,d.REMARK) label
+                        <if test="sort == 2">
+                            from sms_scene a INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
+                            INNER JOIN sms_alarm_details c on c.PARENT_SCENE_ID=a.ID
+                            LEFT JOIN sms_device_parm d on d.ATTRIBUTE_ID = c.ATTRIBUTE_ID and d.STATUS=1
+                            INNER JOIN sms_device_attribute e on e.ID = c.ATTRIBUTE_ID and e.STATUS=1
+                            where a.ID = #{scene.id}
+                        </if>
+                        <if test="sort == 1">
+                            from sms_alarm_details c
+                            LEFT JOIN sms_device_parm d on d.ATTRIBUTE_ID = c.ATTRIBUTE_ID and d.STATUS=1
+                            INNER JOIN sms_device_attribute e on e.ID = c.ATTRIBUTE_ID and e.STATUS=1
+                            where c.device_id = #{scene.id}
+                        </if>
+                        and c.date_create &gt;= date_format(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+                        and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+                    ) t1
+                group by label
+            ) t2
+        order by amount desc
+    </select>
+
+
+    <select id="selectAlarmDeviceIdBySenceId" resultType="map">
+        select DISTINCT c.device_id from sms_scene a INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
+        INNER JOIN sms_alarm_details c on c.PARENT_SCENE_ID=a.ID
+        where a.ID = #{id}
+    </select>
 </mapper>