wangbo 3 years ago
parent
commit
4aedfd1ec9

+ 5 - 1
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderManageController.java

@@ -395,9 +395,13 @@ public class WorkOrderManageController {
         //根据用户编号,获取用户的权限
         LoginUser loginUser = UserUtil.getCurrentUser();
         workOrderManageDto.setTenantId(loginUser.getTenantId());
+        if(loginUser.getCompanyId()!=null) {
+            workOrderManageDto.setCompanyOrgId(loginUser.getCompanyId().toString());
+        }
         if(loginUser.getDepartmentId() != null) {
-            workOrderManageDto.setDepartmentOrgId(String.valueOf(loginUser.getDepartmentId()));
+            workOrderManageDto.setDepartmentOrgId(loginUser.getDepartmentId().toString());
         }
+        workOrderManageDto.setCreateBy(loginUser.getId().toString());
         IPage<WorkOrderManageDto> iPage = new Page<>(pageNum, pageSize);
         iPage = workOrderManageService.findEventListPage(iPage, workOrderManageDto);
         Pagination<WorkOrderManageDto> pages = new Pagination<>(iPage);

+ 6 - 0
operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderStatisticsController.java

@@ -76,6 +76,12 @@ public class WorkOrderStatisticsController {
         //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
         workOrderManageDto.setPermissonType(loginUser.getPermissonType());
         Map<String, Object> statistics = workOrderManageService.workOrderStatistics(workOrderManageDto);
+        if(!statistics.containsKey("工单完成数")){
+            statistics.put("工单完成数",0);
+        }
+        if(!statistics.containsKey("工单完成率")){
+            statistics.put("工单完成率",0);
+        }
         workOrderManageDto.setStartDate(sameStartDate);
         workOrderManageDto.setEndDate(sameEndDate);
         //同比

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

@@ -234,8 +234,8 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
     @Override
     public List<StatisticsDto> orderDurationStatistics(WorkOrderManageDto workOrderManageDto) {
         List<StatisticsDto> result = new ArrayList<StatisticsDto>();
-        List<StatisticsDto> list = workOrderManageMapper.orderStatusStatistics(workOrderManageDto);
-        for(int i=1;i<=5;i++){
+        List<StatisticsDto> list = workOrderManageMapper.orderDurationStatistics(workOrderManageDto);
+        for(int i=1;i<=6;i++){
             StatisticsDto statisticsDto = new StatisticsDto();
             statisticsDto.setIndex(i);
             statisticsDto.setStatisticsName(String.valueOf(i));

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

@@ -1136,7 +1136,7 @@
     select count(*) statistics_value,duration statistics_name from(
       select case when duration&lt;=1 then 1 when duration>1 and duration&lt;=2 then 2
       when duration>2 and duration&lt;=3 then 3 when duration>3 and duration&lt;=4 then 4
-      else 5 end duration
+      when duration>4 and duration&lt;=5 then 5 else 6 end duration
       from
       (
       select TIMESTAMPDIFF(DAY,date_create,finish_date) duration

+ 2 - 0
sms_water/src/main/java/com/huaxu/client/UserCenterClient.java

@@ -6,11 +6,13 @@ import com.huaxu.entity.OperateLogEntity;
 import com.huaxu.entity.Org;
 import com.huaxu.model.AjaxMessage;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @description 服务调用

+ 105 - 3
sms_water/src/main/java/com/huaxu/controller/SceneController.java

@@ -2,6 +2,7 @@ package com.huaxu.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.client.UserCenterClient;
 import com.huaxu.common.FileUploadUtil;
 import com.huaxu.dto.DeviceDto;
 import com.huaxu.entity.DeviceParmEntity;
@@ -22,6 +23,10 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.ui.ModelMap;
 
 import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.util.Calendar;
 import java.util.List;
 import java.util.Map;
 import java.util.Date;
@@ -43,6 +48,8 @@ public class SceneController {
     private SceneService sceneService;
     @Value("${SMS.sys_config_path}")
     private String baseDir;
+    @Autowired
+    UserCenterClient userCenterClient;
 
     @ApiOperation(value = "分页查询场景")
     @RequestMapping(value = "/selectPage", method = RequestMethod.GET)
@@ -213,9 +220,104 @@ public class SceneController {
     @RequestMapping(value = "/selectAlarmSceneAndDevice", method = RequestMethod.GET)
     @ResponseBody
     @ApiOperation(value = "场景及设备故障率")
-    public  AjaxMessage<List<SceneEntity>> selectAlarmSceneAndDevice(@ApiParam(value = "父级场景ID", required = false)@RequestParam(required = false) Long id) {
-        List<SceneEntity> sceneEntities = sceneService.findByParentId(id);
-        return new AjaxMessage<>(ResultStatus.OK, sceneEntities);
+    public  AjaxMessage<List<Map<String,Object>>> selectAlarmSceneAndDevice(
+            @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 {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        SceneEntity sceneEntity = new SceneEntity();
+        sceneEntity.setTenantId(loginUser.getTenantId());
+        sceneEntity.setProgramItems(loginUser.getProgramItemList());
+        sceneEntity.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        sceneEntity.setPermissonType(loginUser.getPermissonType());
+        int days = 1;
+        switch (type) {
+            case 0:
+                startDate = String.format("%s-01", startDate);
+                endDate = subMonth(startDate, 1);
+                days =getDaysOfMonth(startDate);
+                break;
+            case 1:
+                days =LocalDate.of(Integer.parseInt(startDate),1,1).lengthOfYear();
+                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);
+                days = differentDaysByMillisecond(startDate,endDate);
+                break;
+        }
+        List<Map<String,Object>> list = sceneService.selectAlarmSceneAndDevice(sceneEntity, startDate, endDate);
+        for(int i=0;i<list.size();i++){
+            Map<String,Object> map = list.get(i);
+            double amount =Double.parseDouble(map.get("amount").toString());
+            double rate =amount / days;
+            map.put("rate",rate);
+
+            if(rate>=0.5){
+                map.put("level","高");
+            }
+            else if(rate>=0.2 && rate<0.5){
+                map.put("level","中");
+            }
+            else if(rate<0.2){
+                map.put("level","低");
+            }
+        }
+        return new AjaxMessage<>(ResultStatus.OK, list);
+    }
+
+
+
+
+    /**
+     * 获取一个月有多少天
+     */
+    public int getDaysOfMonth(String date) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date dt = sdf.parse(date);
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(dt);
+        return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
+    }
+
+    public int differentDaysByMillisecond(String date1,String date2) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date dt1 = sdf.parse(date1);
+        Date dt2 = sdf.parse(date2);
+        int days = (int) ((dt2.getTime() - dt1.getTime()) / (1000*3600*24));
+        return days;
+    }
+
+
+    /**
+     * 日期增加一年
+     */
+    private String subYear(String date, int n) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date dt = sdf.parse(date);
+        Calendar rightNow = Calendar.getInstance();
+        rightNow.setTime(dt);
+        rightNow.add(Calendar.YEAR, n);
+        Date dt1 = rightNow.getTime();
+        String reStr = sdf.format(dt1);
+        return reStr;
+    }
+
+    /**
+     * 日期增加一月
+     */
+    private String subMonth(String date, int n) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date dt = sdf.parse(date);
+        Calendar rightNow = Calendar.getInstance();
+        rightNow.setTime(dt);
+        rightNow.add(Calendar.MONTH, n);
+        Date dt1 = rightNow.getTime();
+        String reStr = sdf.format(dt1);
+        return reStr;
     }
 
 }

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

@@ -446,7 +446,7 @@ public class SceneService extends ServiceImpl<SceneMapper, SceneEntity> {
         return sceneMapper.selectByTypeName(sceneEntity);
     }
 
-    List<Map<String,Object>> selectAlarmSceneAndDevice(SceneEntity sceneEntity, String startDate, String endDate){
+    public List<Map<String,Object>> selectAlarmSceneAndDevice(SceneEntity sceneEntity, String startDate, String endDate){
         return sceneMapper.selectAlarmSceneAndDevice(sceneEntity, startDate, endDate);
     }
 }

+ 9 - 10
sms_water/src/main/resources/mapper/SceneMapper.xml

@@ -430,7 +430,8 @@
     </select>
     <!--报警场景及报警设备查询-->
     <select id="selectAlarmSceneAndDevice" resultType="map">
-        select count(1) amount,a.id,a.SCENE_NAME name,2 type
+       select amount, id, name, type from(
+        select count(1) amount, a.id, a.SCENE_NAME name,2 type
         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>
@@ -469,14 +470,15 @@
             and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
             and SCENE_TYPE_NAME in('水源','水厂','泵站')
         </where>
-        group by a.SCENE_NAME, a.ID, 2
+        group by a.SCENE_NAME, a.ID, type
 
         union all
 
-        select count(1) amount,a.id,d.DEVICE_NAME name,1 type
-        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
+        select count(1) amount, d.id, d.DEVICE_NAME name,1 type
+        from sms_alarm_details c
         INNER JOIN sms_device d on c.DEVICE_ID=d.ID
+        INNER JOIN sms_scene a on  c.PARENT_SCENE_ID=a.ID
+        INNER JOIN sms_scene_type b on a.SCENE_TYPE_ID=b.ID
         <where>
             a.PARENT_SCENE_ID=0 and a.STATUS=1
             <if test="scene.tenantId != null  and scene.tenantId != ''">
@@ -513,10 +515,7 @@
             and c.date_create &lt; date_format(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d')
             and SCENE_TYPE_NAME='管网'
         </where>
-        group by d.DEVICE_NAME, d.ID, 1
+        group by d.DEVICE_NAME, d.ID, type) t
+        order by amount desc
     </select>
-
-
-
-
 </mapper>