Просмотр исходного кода

Merge branch '20210223' of http://114.135.61.188:53000/UIMS/Code into 20210223

 Conflicts:
	operation_manager/src/main/java/com/huaxu/client/UserCenterClient.java
	operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java
	operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java
	operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml
lihui007 4 лет назад
Родитель
Сommit
d1ac87e792
48 измененных файлов с 2973 добавлено и 79 удалено
  1. 1 0
      common/src/main/java/com/huaxu/model/ResultStatus.java
  2. 6 0
      operation_manager/src/main/java/com/huaxu/client/UserCenterClient.java
  3. 2 2
      operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationCycleController.java
  4. 4 2
      operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationGradeServiceImpl.java
  5. 1 1
      operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderManageController.java
  6. 311 0
      operation_manager/src/main/java/com/huaxu/order/controller/WorkOrderStatisticsController.java
  7. 34 1
      operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java
  8. 28 0
      operation_manager/src/main/java/com/huaxu/order/dto/StatisticsDto.java
  9. 27 1
      operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java
  10. 94 5
      operation_manager/src/main/java/com/huaxu/order/service/impl/WorkOrderManageServiceImpl.java
  11. 181 0
      operation_manager/src/main/java/com/huaxu/task/controller/PlanStatisticsController.java
  12. 9 0
      operation_manager/src/main/java/com/huaxu/task/dao/PlanManageMapper.java
  13. 8 0
      operation_manager/src/main/java/com/huaxu/task/dto/PlanManageDto.java
  14. 27 0
      operation_manager/src/main/java/com/huaxu/task/dto/TaskChangeTendDto.java
  15. 54 0
      operation_manager/src/main/java/com/huaxu/task/dto/TaskConditionDto.java
  16. 10 0
      operation_manager/src/main/java/com/huaxu/task/service/PlanManageService.java
  17. 96 0
      operation_manager/src/main/java/com/huaxu/task/service/impl/PlanManageServiceImpl.java
  18. 277 24
      operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml
  19. 226 0
      operation_manager/src/main/resources/mapper/task/PlanManageMapper.xml
  20. 115 0
      sms_water/src/main/java/com/huaxu/common/HttpRequest.java
  21. 103 0
      sms_water/src/main/java/com/huaxu/common/JacksonUtil.java
  22. 0 2
      sms_water/src/main/java/com/huaxu/controller/AppPageReportController.java
  23. 77 23
      sms_water/src/main/java/com/huaxu/controller/MonitorInfoController.java
  24. 138 0
      sms_water/src/main/java/com/huaxu/controller/ParmSettingController.java
  25. 9 0
      sms_water/src/main/java/com/huaxu/controller/SceneController.java
  26. 26 0
      sms_water/src/main/java/com/huaxu/dao/DeviceSetupMethodMapper.java
  27. 28 0
      sms_water/src/main/java/com/huaxu/dao/DeviceSetupRecordMapper.java
  28. 34 0
      sms_water/src/main/java/com/huaxu/dao/ParmSettingMapper.java
  29. 1 0
      sms_water/src/main/java/com/huaxu/dao/SceneMapper.java
  30. 17 0
      sms_water/src/main/java/com/huaxu/dto/SetupMethod.java
  31. 61 0
      sms_water/src/main/java/com/huaxu/entity/DeviceSetupMethodEntity.java
  32. 74 0
      sms_water/src/main/java/com/huaxu/entity/DeviceSetupRecordEntity.java
  33. 0 1
      sms_water/src/main/java/com/huaxu/entity/MonitorInfoEntity.java
  34. 75 0
      sms_water/src/main/java/com/huaxu/entity/ParmSettingEntity.java
  35. 215 0
      sms_water/src/main/java/com/huaxu/service/DeviceSetupMethodService.java
  36. 94 0
      sms_water/src/main/java/com/huaxu/service/DeviceSetupRecordService.java
  37. 91 0
      sms_water/src/main/java/com/huaxu/service/ParmSettingService.java
  38. 4 0
      sms_water/src/main/java/com/huaxu/service/SceneService.java
  39. 15 4
      sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java
  40. 2 0
      sms_water/src/main/resources/application-dev.properties
  41. 2 0
      sms_water/src/main/resources/application-prd.properties
  42. 3 1
      sms_water/src/main/resources/application-sit.properties
  43. 75 0
      sms_water/src/main/resources/mapper/DeviceSetupMethodMapper.xml
  44. 105 0
      sms_water/src/main/resources/mapper/DeviceSetupRecordMapper.xml
  45. 82 0
      sms_water/src/main/resources/mapper/ParmSettingMapper.xml
  46. 91 0
      sms_water/src/main/resources/mapper/SceneMapper.xml
  47. 11 4
      user_center/src/main/java/com/huaxu/controller/UserController.java
  48. 29 8
      user_center/src/main/java/com/huaxu/service/UserService.java

+ 1 - 0
common/src/main/java/com/huaxu/model/ResultStatus.java

@@ -127,6 +127,7 @@ public enum ResultStatus {
     USER_AUTH_APPID_NOT_FOUND(910001,"appId不存在"),
     USER_AUTH_ENCRYPT_VALUE_VERIFY_ERROR(910002,"encrypt value验证不对或已过期!"),
     USER_AUTH_UNIQID_OR_CODE_ISNULL(910003,"获取不到uniqId或code已过期!"),
+    OP_PASSWORD_ERROR(910004,"安全密码错误!"),
     ;
 
     private final int status;

+ 6 - 0
operation_manager/src/main/java/com/huaxu/client/UserCenterClient.java

@@ -57,4 +57,10 @@ public interface UserCenterClient {
             @RequestParam(value = "tenantId", required = false) String tenantId,
             @RequestParam(value = "companyOrgId", required = false)Integer companyOrgId,
             @RequestParam(value = "deptOrgId", required = false)Integer deptOrgId);
+
+    /**
+     * 查询该时间内的运维人数
+     */
+    @RequestMapping(value = "/user/findMaintainerCount", method = RequestMethod.GET)
+    Integer findMaintainerCount(@RequestParam("endDate") String endDate);
 }

+ 2 - 2
operation_manager/src/main/java/com/huaxu/evaluation/controller/EvaluationCycleController.java

@@ -48,9 +48,9 @@ public class EvaluationCycleController {
             @RequestParam(required = false) Long companyOrgId) {
         IPage<EvaluationCycleEntity> iPage = new Page<>(pageNum, pageSize);
         EvaluationCycleEntity entity = new EvaluationCycleEntity();
-        if (type != null)
+        if (type != null && type.trim() != "")
             entity.setType(Integer.valueOf(type));
-        if(companyOrgId!=null)
+        if (companyOrgId != null)
             entity.setCompanyOrgId(companyOrgId.intValue());
         iPage = evaluationCycleService.findPage(iPage, entity);
         Pagination<EvaluationCycleEntity> pages = new Pagination<>(iPage);

+ 4 - 2
operation_manager/src/main/java/com/huaxu/evaluation/service/impl/EvaluationGradeServiceImpl.java

@@ -55,8 +55,10 @@ public class EvaluationGradeServiceImpl extends ServiceImpl<EvaluationGradeMappe
         Page<EvaluationGradeEntity> iPage = evaluationGradeMapper.findPage(page, evaluationGradeEntity);
         for (EvaluationGradeEntity item : iPage.getRecords()) {
             item.setCompanyOrgName(orgInfoUtil.getOrgName(item.getCompanyOrgId()));
-            item.setTypeName(dictUtil.getDictName("SC_EVALUATION_GRADE_TYPE",item.getType().intValue()));
-            item.setEvaluationGradeName(dictUtil.getDictName("SC_EVALUATION_GRADE",item.getEvaluationGrade().intValue()));
+            if (item.getType() != null)
+                item.setTypeName(dictUtil.getDictName("SC_EVALUATION_GRADE_TYPE", item.getType().intValue()));
+            if (item.getEvaluationGrade() != null)
+                item.setEvaluationGradeName(dictUtil.getDictName("SC_EVALUATION_GRADE", item.getEvaluationGrade().intValue()));
         }
         return iPage;
     }

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

@@ -389,7 +389,7 @@ public class WorkOrderManageController {
      * @return
      */
     @GetMapping("/event/list")
-    @ApiOperation(value = "查询事件隐患/所有工单")
+    @ApiOperation(value = "App事件列表")
     public AjaxMessage<Pagination<WorkOrderManageDto>> selectEventList(
             @ApiParam(value = "页数", required = true)@RequestParam Integer pageNum,
             @ApiParam(value = "条数", required = true)@RequestParam Integer pageSize){

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

@@ -0,0 +1,311 @@
+package com.huaxu.order.controller;
+
+import com.huaxu.client.UserCenterClient;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.order.dto.StatisticsDto;
+import com.huaxu.order.dto.WorkOrderManageDto;
+import com.huaxu.order.service.WorkOrderManageService;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+@RequestMapping("/order/workOrderStatistics/")
+@Api(tags = "工单统计")
+public class WorkOrderStatisticsController {
+
+    @Autowired
+    WorkOrderManageService workOrderManageService;
+
+    @Autowired
+    UserCenterClient userCenterClient;
+
+    @RequestMapping(value = "completionStatistics", method = RequestMethod.GET)
+    @ApiOperation(value = "工单完成情况统计")
+    public AjaxMessage<Map<String, Object>> completionStatistics(
+            @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 {
+        //同比日期
+        String sameStartDate = null, sameEndDate = null;
+        //环比日期
+        String chainStartDate = null, chainEndDate = null;
+        if (type == 0) {
+            startDate = String.format("%s-01", startDate);
+            endDate = subMonth(startDate, 1);
+
+            sameStartDate = subYear(startDate, -1);
+            sameEndDate = subYear(sameStartDate, 1);
+
+            chainStartDate = subMonth(startDate, -1);
+            chainEndDate = subMonth(chainStartDate, 1);
+        } else if (type == 1) {
+            startDate = String.format("%s-01-01", startDate);
+            endDate = subMonth(startDate, 1);
+
+            sameStartDate = subYear(startDate, -1);
+            sameEndDate = subYear(sameStartDate, 1);
+
+            chainStartDate = subYear(startDate, -1);
+            chainEndDate = subYear(chainStartDate, 1);
+        } else if (type == 2) {
+            startDate = String.format("%s-01", startDate);
+            endDate = String.format("%s-01", endDate);
+        }
+        //根据用户编号,获取用户的权限
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+        workOrderManageDto.setStartDate(startDate);
+        workOrderManageDto.setEndDate(endDate);
+        workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
+        workOrderManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        workOrderManageDto.setPermissonType(loginUser.getPermissonType());
+        Map<String, Object> statistics = workOrderManageService.workOrderStatistics(workOrderManageDto);
+        workOrderManageDto.setStartDate(sameStartDate);
+        workOrderManageDto.setEndDate(sameEndDate);
+        //同比
+        Map<String, Object> sameStatistic = workOrderManageService.workOrderStatistics(workOrderManageDto);
+        //环比
+        workOrderManageDto.setStartDate(chainStartDate);
+        workOrderManageDto.setEndDate(chainEndDate);
+        Map<String, Object> chainStatistic = workOrderManageService.workOrderStatistics(workOrderManageDto);
+
+        DecimalFormat df = new DecimalFormat("#0.00");
+
+        if (sameStatistic.get("工单完成率") == null || sameStatistic.get("工单完成率").toString().equals("0")) {
+            statistics.put("工单完成率同比", 0);
+        } else {
+            Double finishedSameRate = (Double.parseDouble(statistics.get("工单完成率").toString()) - Double.parseDouble(sameStatistic.get("工单完成率").toString())) * 100 / Double.parseDouble(sameStatistic.get("工单完成率").toString());
+            statistics.put("工单完成率同比", df.format(finishedSameRate));
+        }
+
+        if (chainStatistic.get("工单完成率") == null || chainStatistic.get("工单完成率").toString().equals("0")) {
+            statistics.put("工单完成率环比", 0);
+        } else {
+            Double finishedChainRate = (Double.parseDouble(statistics.get("工单完成率").toString()) - Double.parseDouble(chainStatistic.get("工单完成率").toString())) * 100 / Double.parseDouble(chainStatistic.get("工单完成率").toString());
+            statistics.put("工单完成率环比", df.format(finishedChainRate));
+        }
+        
+        if (sameStatistic.get("工单总数") == null || sameStatistic.get("工单总数").toString().equals("0")) {
+            statistics.put("工单总数同比", 0);
+        } else {
+            Double orderSameTotalNumberRate = (Double.parseDouble(statistics.get("工单总数").toString()) - Double.parseDouble(sameStatistic.get("工单总数").toString())) * 100 / Double.parseDouble(sameStatistic.get("工单总数").toString());
+            statistics.put("工单总数同比", df.format(orderSameTotalNumberRate));
+        }
+        if (chainStatistic.get("工单总数") == null || chainStatistic.get("工单总数").toString().equals("0")) {
+            statistics.put("工单总数环比", 0);
+        } else {
+            Double orderChainTotalNumberRate = (Double.parseDouble(statistics.get("工单总数").toString()) - Double.parseDouble(chainStatistic.get("工单总数").toString())) * 100 / Double.parseDouble(chainStatistic.get("工单总数").toString());
+            statistics.put("工单总数环比", df.format(orderChainTotalNumberRate));
+        }
+
+        if (sameStatistic.get("工单完成数") == null || sameStatistic.get("工单完成数").toString().equals("0")) {
+            statistics.put("工单完成数同比", 0);
+
+        } else {
+            Double finishedSameNumber = (Double.parseDouble(statistics.get("工单完成数").toString()) - Double.parseDouble(sameStatistic.get("工单完成数").toString())) * 100 / Double.parseDouble(sameStatistic.get("工单完成数").toString());
+            statistics.put("工单完成数同比", df.format(finishedSameNumber));
+        }
+
+        if (chainStatistic.get("工单完成数") == null || chainStatistic.get("工单完成数").toString().equals("0")) {
+            statistics.put("工单完成数环比", 0);
+        } else {
+            Double finishedChainNumber = (Double.parseDouble(statistics.get("工单完成数").toString()) - Double.parseDouble(chainStatistic.get("工单完成数").toString())) * 100 / Double.parseDouble(chainStatistic.get("工单完成数").toString());
+            statistics.put("工单完成数环比", df.format(finishedChainNumber));
+        }
+
+        return new AjaxMessage<>(ResultStatus.OK, statistics);
+    }
+
+    @RequestMapping(value = "eventStatistics", method = RequestMethod.GET)
+    @ApiOperation(value = "事件曲线数据统计展示、人均工单数据统计展示")
+    public AjaxMessage<Map<String,Object>> eventStatistics(
+            @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 {
+        int maintainerCount = 0;
+        Map<String,Object> result = new HashMap<>();
+        List<Map<String, Object>> statistics = new ArrayList<>(), average =new ArrayList<>();
+        //根据用户编号,获取用户的权限
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+
+        workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
+        workOrderManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        workOrderManageDto.setPermissonType(loginUser.getPermissonType());
+        switch (type) {
+            case 0:
+                maintainerCount = userCenterClient.findMaintainerCount(startDate);
+                startDate = String.format("%s-01", startDate);
+                endDate = subMonth(startDate, 1);
+                break;
+            case 1:
+                maintainerCount = userCenterClient.findMaintainerCount(String.format("%s-12",startDate));
+                startDate = String.format("%s-01-01", startDate);
+                endDate = subYear(startDate, 1);
+                break;
+            case 2:
+                maintainerCount = userCenterClient.findMaintainerCount(endDate);
+                startDate = String.format("%s-01", startDate);
+                endDate = String.format("%s-01", endDate);
+                break;
+        }
+        workOrderManageDto.setStartDate(startDate);
+        workOrderManageDto.setEndDate(endDate);
+
+        if (type == 0 || type == 2) {
+            statistics = workOrderManageService.eventMonthStatistics(workOrderManageDto);
+        } else if (type == 1) {
+            statistics = workOrderManageService.eventYearStatistics(workOrderManageDto);
+        }
+        int seq=0;
+        DecimalFormat df = new DecimalFormat("#0.00");
+        for(Map<String,Object> map : statistics){
+            seq++;
+            double number = 0;
+            if(maintainerCount > 0){
+                number = Double.parseDouble(map.get("数量").toString())/maintainerCount;
+            }
+            Map<String,Object> data = new HashMap<>();
+            data.put("日期",map.get("日期"));
+            data.put("数量",df.format(number));
+            data.put("序号",seq);
+            average.add(data);
+        }
+        result.put("事件数量",statistics);
+        result.put("人均工单",average);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    @RequestMapping(value = "orderDurationStatistics", method = RequestMethod.GET)
+    @ApiOperation(value = "工单时长统计展示")
+    public AjaxMessage<List<StatisticsDto>> orderDurationStatistics(
+            @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();
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+
+        workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
+        workOrderManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        workOrderManageDto.setPermissonType(loginUser.getPermissonType());
+        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);
+        List<StatisticsDto> statistics = workOrderManageService.orderDurationStatistics(workOrderManageDto);
+        return new AjaxMessage<>(ResultStatus.OK, statistics);
+    }
+
+
+
+    @RequestMapping(value = "distributionStatistics", method = RequestMethod.GET)
+    @ApiOperation(value = "上报类型、工单类型、工单状态统计")
+    public AjaxMessage<Map<String, Object>> distributionStatistics(
+            @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 {
+        Map<String, Object> result = new HashMap<>();
+        //根据用户编号,获取用户的权限
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        WorkOrderManageDto workOrderManageDto = new WorkOrderManageDto();
+        workOrderManageDto.setOrderStatus(type);
+        workOrderManageDto.setProgramItems(loginUser.getProgramItemList());
+        workOrderManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        workOrderManageDto.setPermissonType(loginUser.getPermissonType());
+        if (type == 0) {
+            startDate = String.format("%s-01", startDate);
+            endDate = subMonth(startDate, 1);
+
+        } else if (type == 1) {
+            startDate = String.format("%s-01-01", startDate);
+            endDate = subYear(startDate, 1);
+        } else if (type == 2) {
+            startDate = String.format("%s-01", startDate);
+            endDate = String.format("%s-01", endDate);
+        }
+        workOrderManageDto.setStartDate(startDate);
+        workOrderManageDto.setEndDate(endDate);
+        result.put("上报类型", CalculatePercentage(workOrderManageService.reportStatistics(workOrderManageDto)));
+        result.put("工单状态", CalculatePercentage(workOrderManageService.orderStatusStatistics(workOrderManageDto)));
+        result.put("工单类型", CalculatePercentage(workOrderManageService.orderTypeStatistics(workOrderManageDto)));
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    private List<StatisticsDto> CalculatePercentage(List<StatisticsDto> list) {
+        double total = 0;
+        DecimalFormat df = new DecimalFormat("#0.00");
+        for (StatisticsDto statisticsDto : list) {
+            if (statisticsDto.getStatisticsValue() != null) {
+                total += statisticsDto.getStatisticsValue();
+            }
+        }
+        for (StatisticsDto statisticsDto : list) {
+            double d = statisticsDto.getStatisticsValue() * 100 / total;
+            BigDecimal b = new BigDecimal(d);
+            statisticsDto.setStatisticsValue(b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+        }
+        return list;
+    }
+
+    /**
+     * 日期增加一年
+     */
+    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;
+    }
+
+
+}

+ 34 - 1
operation_manager/src/main/java/com/huaxu/order/dao/WorkOrderManageMapper.java

@@ -2,6 +2,7 @@ package com.huaxu.order.dao;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.order.dto.StatisticsDto;
 import com.huaxu.order.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.order.dto.WorkOrderManageDto;
 import com.huaxu.order.entity.WorkOrderManage;
@@ -45,7 +46,6 @@ public interface WorkOrderManageMapper {
 
     Page<WorkOrderManageDto> findPage(IPage<WorkOrderManageDto> page, @Param("order") WorkOrderManageDto workOrderManageDto);
 
-
     Map<String,Object> workOrderStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 
     Page<WorkOrderManageDto> findByNo(IPage<WorkOrderManageDto> page, @Param("order") WorkOrderManageDto workOrderManageDto);
@@ -61,8 +61,38 @@ public interface WorkOrderManageMapper {
     Map<String,Object> selectMaintainUserStatus(@Param("userId") String userId);
 
 
+    /**
+     * 事件月报统计
+     */
+    List<Map<String,Object>> eventMonthStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+    /**
+     *事件年统计
+     */
+    List<Map<String,Object>> eventYearStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+    /**
+     * 上报统计
+     */
+    List<StatisticsDto> reportStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+
+    /**
+     * 工单状态统计
+     */
+    List<StatisticsDto> orderStatusStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 
 
+    /**
+     * 工单类型统计
+     */
+    List<StatisticsDto> orderTypeStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+    /**
+     * 工单时长统计
+     */
+    List<StatisticsDto> orderDurationStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
 
     /**
      * 待处理权限
@@ -75,4 +105,7 @@ public interface WorkOrderManageMapper {
                                            @Param("startTime")String startTime, @Param("endTime")String endTime);
 
 
+
+
+
 }

+ 28 - 0
operation_manager/src/main/java/com/huaxu/order/dto/StatisticsDto.java

@@ -0,0 +1,28 @@
+package com.huaxu.order.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel(value = "工单统计-分布统计")
+@Data
+public class StatisticsDto {
+
+    /**
+     * 统计项名
+     */
+    @ApiModelProperty(value = "统计项名")
+    private String statisticsName;
+    /**
+     * 统计数据
+     */
+    @ApiModelProperty(value = "统计数据")
+    private Double statisticsValue;
+
+    /**
+     * 序号
+     */
+    @ApiModelProperty(value = "统计数据")
+    private int index;
+}

+ 27 - 1
operation_manager/src/main/java/com/huaxu/order/service/WorkOrderManageService.java

@@ -3,6 +3,7 @@ package com.huaxu.order.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.order.dto.StatisticsDto;
 import com.huaxu.order.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.order.dto.WorkOrderManageDto;
 import com.huaxu.order.entity.WorkOrderManage;
@@ -89,6 +90,11 @@ public interface WorkOrderManageService {
 
 
     Map<String,Object> workOrderStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+
+    List<Map<String,Object>> eventMonthStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+    List<Map<String,Object>> eventYearStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
     /**
      * 待处理权限
      */
@@ -100,7 +106,27 @@ public interface WorkOrderManageService {
 
     List<WorkOrderManageDto> selectMaintainOrder(WorkOrderManageDto workOrderManageDto);
 
-    Page<WorkOrderManageDto> selectByTime(IPage<WorkOrderManageDto> page, Integer userId, String startTime, String endTime);
 
 
+    /**
+     * 上报统计
+     */
+    List<StatisticsDto> reportStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+
+    /**
+     * 工单状态统计
+     */
+    List<StatisticsDto> orderStatusStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+
+    /**
+     * 工单类型统计
+     */
+    List<StatisticsDto> orderTypeStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
+
+    /**
+     * 工单时长月统计
+     */
+    List<StatisticsDto> orderDurationStatistics(@Param("order") WorkOrderManageDto workOrderManageDto);
 }

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.model.LoginUser;
 import com.huaxu.order.dao.WorkOrderManageMapper;
+import com.huaxu.order.dto.StatisticsDto;
 import com.huaxu.order.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.order.dto.WorkOrderManageDto;
 import com.huaxu.order.entity.WorkOrderManage;
@@ -12,8 +13,7 @@ import com.huaxu.util.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
@@ -158,6 +158,48 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
         return workOrderManageMapper.workOrderStatistics(workOrderManageDto);
     }
 
+    @Override
+    public List<Map<String, Object>> eventMonthStatistics(WorkOrderManageDto workOrderManageDto) {
+        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.eventMonthStatistics(workOrderManageDto);
+        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>> eventYearStatistics(WorkOrderManageDto workOrderManageDto) {
+        List<Map<String,Object>> list = workOrderManageMapper.eventYearStatistics(workOrderManageDto);
+        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 int selectPendingPower(Map<String, Object> map) {
         return workOrderManageMapper.selectPendingPower(map);
@@ -175,8 +217,55 @@ public class WorkOrderManageServiceImpl implements WorkOrderManageService {
     }
 
     @Override
-    public Page<WorkOrderManageDto> selectByTime(IPage<WorkOrderManageDto> page, Integer userId, String startTime, String endTime) {
-        LoginUser currentUser = UserUtil.getCurrentUser();
-        return workOrderManageMapper.selectByTime(page, userId, currentUser.getTenantId(), startTime, endTime);
+    public List<StatisticsDto> reportStatistics(WorkOrderManageDto workOrderManageDto) {
+        return workOrderManageMapper.reportStatistics(workOrderManageDto);
+    }
+
+    @Override
+    public List<StatisticsDto> orderStatusStatistics(WorkOrderManageDto workOrderManageDto) {
+        return workOrderManageMapper.orderStatusStatistics(workOrderManageDto);
+    }
+
+    @Override
+    public List<StatisticsDto> orderTypeStatistics(WorkOrderManageDto workOrderManageDto) {
+        return workOrderManageMapper.orderTypeStatistics(workOrderManageDto);
+    }
+
+    @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++){
+            StatisticsDto statisticsDto = new StatisticsDto();
+            statisticsDto.setIndex(i);
+            statisticsDto.setStatisticsName(String.valueOf(i));
+            statisticsDto.setStatisticsValue(0.0);
+            result.add(statisticsDto);
+        }
+        for(int i=0;i<list.size();i++){
+            StatisticsDto statisticsDto = list.get(i);
+            StatisticsDto statisticsDto1 = result.get(Integer.parseInt(statisticsDto.getStatisticsName())-1);
+            statisticsDto1.setStatisticsValue(statisticsDto.getStatisticsValue());
+        }
+        return result;
+    }
+
+    /**
+     *获取某月有多少天
+     */
+    private int getDaysByYearMonth(int month) {
+
+        Calendar a =Calendar.getInstance();
+
+        a.set(Calendar.MONTH, month- 1);
+
+        a.set(Calendar.DATE, 1);
+
+        a.roll(Calendar.DATE,-1);
+
+        int maxDate =a.get(Calendar.DATE);
+
+        return maxDate;
+
     }
 }

+ 181 - 0
operation_manager/src/main/java/com/huaxu/task/controller/PlanStatisticsController.java

@@ -0,0 +1,181 @@
+package com.huaxu.task.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.huaxu.client.UserCenterClient;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.Pagination;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.order.entity.WorkFlowDetail;
+import com.huaxu.order.entity.WorkFlowLog;
+import com.huaxu.order.service.WorkFlowLogService;
+import com.huaxu.process.entity.ProcessDefinition;
+import com.huaxu.process.service.WorkFlowService;
+import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
+import com.huaxu.task.dto.TaskConditionDto;
+import com.huaxu.task.entity.PlanManage;
+import com.huaxu.task.entity.UserEntity;
+import com.huaxu.task.service.PlanManageService;
+import com.huaxu.util.DatesUtil;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.activiti.engine.task.Task;
+import org.joda.time.DateTime;
+import org.joda.time.Days;
+import org.joda.time.Months;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/task/planStatistics")
+@Api(tags = "任务统计")
+public class PlanStatisticsController {
+
+    @Autowired
+    PlanManageService planManageService;
+    @Autowired
+    private UserCenterClient userCenterClient;
+
+    /**
+     * 查询任务完成情况
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskFinishedByDate", method = RequestMethod.GET)
+    @ApiOperation(value = "按时间查询任务完成情况")
+    public AjaxMessage<List<PlanManageDto>> selectTaskFinished(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+        List<PlanManageDto> result=planManageService.selectTaskFinishedByDate(planManageDto);
+        if(result.size()>0) {
+            Map<String,String> dictMap=userCenterClient.selectListByPCodes("SC_TASK_TYPE");
+            for(PlanManageDto plan:result){
+                if (plan.getTaskType() != null) {
+                    plan.setTypeName(dictMap.get(plan.getTaskType().toString()));
+                }
+            }
+        }
+        return new AjaxMessage<>(ResultStatus.OK, result );
+    }
+
+    /**
+     * 查询任务情况
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskCondition", method = RequestMethod.GET)
+    @ApiOperation(value = "查询任务情况")
+    public AjaxMessage<TaskConditionDto> selectTaskCondition(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+
+        TaskConditionDto result=planManageService.selectTaskCondition(planManageDto);
+        return new AjaxMessage<>(ResultStatus.OK, result );
+    }
+    /**
+     * 查询任务变化趋势和人均情况
+     * * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskChangeTrend", method = RequestMethod.GET)
+    @ApiOperation(value = "查询任务变化趋势和人均情况")
+    public AjaxMessage<List<TaskChangeTendDto>> selectTaskChangeTrend(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            Calendar c=Calendar.getInstance();
+            String maintainerEndDate=null;
+            Integer intervalCount=0;
+            switch (statsType){
+                case 0:
+                    maintainerEndDate=startDate;
+                    c.setTime(sdf.parse(startDate));
+                    intervalCount= c.getActualMaximum(Calendar.DAY_OF_MONTH);
+                    break;
+                case 1:
+                    maintainerEndDate=startDate+"-12";
+                    intervalCount=12;
+                    break;
+                case 2:
+                    maintainerEndDate=endDate;
+                    c.setTime(sdf.parse(endDate));
+                    intervalCount= Days.daysBetween(new DateTime(startDate), new DateTime(endDate)).getDays()+c.getActualMaximum(Calendar.DAY_OF_MONTH);
+                    break;
+            }
+            planManageDto.setMaintainerCount(userCenterClient.findMaintainerCount(maintainerEndDate));
+            planManageDto.setIntervalCount(intervalCount);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new AjaxMessage<>(ResultStatus.OK, planManageService.selectTaskChangeTrend(planManageDto));
+    }
+
+    /**
+     * 查询任务处理时长
+     * @return Response对象
+     */
+    @RequestMapping(value = "selectTaskDuration", method = RequestMethod.GET)
+    @ApiOperation(value = "查询任务处理时长")
+    public AjaxMessage<int[]> selectTaskDuration(
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        PlanManageDto planManageDto=new PlanManageDto();
+        planManageDto.setStatsType(statsType);
+        planManageDto.setStartDate(startDate);
+        planManageDto.setEndDate(endDate);
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        planManageDto.setTenantId(loginUser.getTenantId());
+        planManageDto.setProgramItems(loginUser.getProgramItemList());
+        planManageDto.setUserType(loginUser.getType());
+        //1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+        planManageDto.setPermissonType(loginUser.getPermissonType());
+
+        int[] result=planManageService.selectTaskDuration(planManageDto);
+        return new AjaxMessage<>(ResultStatus.OK, result );
+    }
+}

+ 9 - 0
operation_manager/src/main/java/com/huaxu/task/dao/PlanManageMapper.java

@@ -3,6 +3,7 @@ package com.huaxu.task.dao;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
 import com.huaxu.task.entity.PlanManage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -36,4 +37,12 @@ public interface PlanManageMapper {
     List<Map<String,Object>> selectTaskName(Map<String,Object> map);
 
     List<PlanManageDto> selectTaskFinished(PlanManageDto planManageDto);
+
+    List<PlanManageDto> selectTaskFinishedByDate(PlanManageDto planManageDto);
+
+    PlanManageDto selectTaskCondition(PlanManageDto planManageDto);
+
+    List<TaskChangeTendDto> selectTaskChangeTrend(PlanManageDto planManageDto);
+
+    List<PlanManageDto> selectTaskDuration(PlanManageDto planManageDto);
 }

+ 8 - 0
operation_manager/src/main/java/com/huaxu/task/dto/PlanManageDto.java

@@ -84,4 +84,12 @@ public class PlanManageDto extends PlanManage {
     @ApiModelProperty(value="统计类型 0或null本月、1本年、2近一年",hidden = true)
     @JsonIgnore
     private Integer statsType;
+
+    @ApiModelProperty(value="间隔数",hidden = true)
+    @JsonIgnore
+    private Integer intervalCount;
+
+    @ApiModelProperty(value="运维人数",hidden = true)
+    @JsonIgnore
+    private Integer maintainerCount;
 }

+ 27 - 0
operation_manager/src/main/java/com/huaxu/task/dto/TaskChangeTendDto.java

@@ -0,0 +1,27 @@
+package com.huaxu.task.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.Double2Serializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("任务变化趋势")
+public class TaskChangeTendDto implements Serializable {
+
+    @ApiModelProperty(value = "创建时间")
+    private String dateCreate;
+
+    @ApiModelProperty(value = "时间标签")
+    private String dateLabel;
+
+    @ApiModelProperty(value = "任务数")
+    private Integer taskCount;
+
+    @ApiModelProperty(value = "人均任务量")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskCountAvg;
+}

+ 54 - 0
operation_manager/src/main/java/com/huaxu/task/dto/TaskConditionDto.java

@@ -0,0 +1,54 @@
+package com.huaxu.task.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.common.Double2Serializer;
+import com.huaxu.model.ProgramItem;
+import com.huaxu.order.entity.WorkFlowDetail;
+import com.huaxu.order.entity.WorkFlowLog;
+import com.huaxu.task.entity.PlanManage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@ApiModel("任务情况")
+public class TaskConditionDto implements Serializable {
+
+    @ApiModelProperty(value = "任务总数")
+    private Integer taskCount;
+
+    @ApiModelProperty(value = "任务完成数")
+    private Integer finishedCount;
+
+    @ApiModelProperty(value = "任务完成率")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskFinishedRate;
+
+    @ApiModelProperty(value = "任务总数环比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskCountRateMOnM;
+
+    @ApiModelProperty(value = "任务完成数环比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double finishedCountRateMOnM;
+
+    @ApiModelProperty(value = "任务完成率环比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskFinishedRateMOnM;
+
+    @ApiModelProperty(value = "任务总数同比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskCountRateYOnY;
+
+    @ApiModelProperty(value = "任务完成数同比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double finishedCountRateYOnY;
+
+    @ApiModelProperty(value = "任务完成率同比")
+    @JsonSerialize(using = Double2Serializer.class)
+    private Double taskFinishedRateYOnY;
+}

+ 10 - 0
operation_manager/src/main/java/com/huaxu/task/service/PlanManageService.java

@@ -2,6 +2,8 @@ package com.huaxu.task.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
+import com.huaxu.task.dto.TaskConditionDto;
 import com.huaxu.task.entity.PlanManage;
 import org.apache.ibatis.annotations.Param;
 
@@ -66,4 +68,12 @@ public interface PlanManageService {
      * 综合展示-查询任务执行情况
      */
     List<PlanManageDto> selectTaskFinished(PlanManageDto planManageDto);
+
+    List<PlanManageDto> selectTaskFinishedByDate(PlanManageDto planManageDto);
+
+    TaskConditionDto selectTaskCondition(PlanManageDto planManageDto);
+
+    List<TaskChangeTendDto> selectTaskChangeTrend(PlanManageDto planManageDto);
+
+    int[] selectTaskDuration(PlanManageDto planManageDto);
 }

+ 96 - 0
operation_manager/src/main/java/com/huaxu/task/service/impl/PlanManageServiceImpl.java

@@ -4,12 +4,19 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.model.LoginUser;
 import com.huaxu.task.dao.PlanManageMapper;
 import com.huaxu.task.dto.PlanManageDto;
+import com.huaxu.task.dto.TaskChangeTendDto;
+import com.huaxu.task.dto.TaskConditionDto;
 import com.huaxu.task.entity.PlanManage;
 import com.huaxu.task.service.PlanManageService;
 import com.huaxu.util.UserUtil;
+import org.joda.time.DateTime;
+import org.joda.time.Months;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -83,4 +90,93 @@ public class PlanManageServiceImpl implements PlanManageService {
         result.add(plan);
         return result;
     }
+
+    @Override
+    public List<PlanManageDto> selectTaskFinishedByDate(PlanManageDto planManageDto) {
+        return planManageMapper.selectTaskFinishedByDate(planManageDto);
+    }
+
+    @Override
+    public TaskConditionDto selectTaskCondition(PlanManageDto planManageDto) {
+        TaskConditionDto result=new TaskConditionDto();
+        try{
+            PlanManageDto plan=planManageMapper.selectTaskCondition(planManageDto);
+            result.setTaskCount(plan.getTaskCount());
+            result.setFinishedCount(plan.getFinishedCount());
+            result.setTaskFinishedRate(plan.getTaskCount()!=0?(double)plan.getFinishedCount()/plan.getTaskCount()*100:null);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+            Calendar c=Calendar.getInstance();
+
+            PlanManageDto planMOnM=new PlanManageDto();
+            PlanManageDto planYOnY=new PlanManageDto();
+            if(planManageDto.getStatsType()==0){
+                Date thisDate=sdf.parse(planManageDto.getStartDate());
+                c.setTime(thisDate);
+                c.add(Calendar.MONTH,-1);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                planMOnM=planManageMapper.selectTaskCondition(planManageDto);
+
+                c.setTime(thisDate);
+                c.add(Calendar.YEAR,-1);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                planYOnY=planManageMapper.selectTaskCondition(planManageDto);
+            }else if(planManageDto.getStatsType()==1){
+                planManageDto.setStartDate(String.valueOf(Integer.parseInt(planManageDto.getStartDate())-1));
+                planMOnM=planManageMapper.selectTaskCondition(planManageDto);
+                planYOnY=planMOnM;
+            }else if(planManageDto.getStatsType()==2){
+                //自定义时间相差多少个月
+                int month=Months.monthsBetween(new DateTime(planManageDto.getStartDate()), new DateTime(planManageDto.getEndDate())).getMonths();
+                Date startDate=sdf.parse(planManageDto.getStartDate());
+                Date endDate=sdf.parse(planManageDto.getEndDate());
+                c.setTime(startDate);
+                c.add(Calendar.MONTH,-1);
+                planManageDto.setEndDate(sdf.format(c.getTime()));
+                c.add(Calendar.MONTH,-month);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                planMOnM=planManageMapper.selectTaskCondition(planManageDto);
+
+                c.setTime(startDate);
+                c.add(Calendar.YEAR,-1);
+                planManageDto.setStartDate(sdf.format(c.getTime()));
+                c.setTime(endDate);
+                c.add(Calendar.YEAR,-1);
+                planManageDto.setEndDate(sdf.format(c.getTime()));
+                planYOnY=planManageMapper.selectTaskCondition(planManageDto);
+            }
+            double taskFinishedRateMOnM=planMOnM.getTaskCount()!=0?(double)planMOnM.getFinishedCount()/planMOnM.getTaskCount()*100:0;
+            double taskFinishedRateYOnY=planYOnY.getTaskCount()!=0?(double)planYOnY.getFinishedCount()/planYOnY.getTaskCount()*100:0;
+
+            result.setTaskCountRateMOnM(planMOnM.getTaskCount()!=0?(double)(result.getTaskCount()-planMOnM.getTaskCount())/planMOnM.getTaskCount()*100:null);
+            result.setTaskCountRateYOnY(planYOnY.getTaskCount()!=0?(double)(result.getTaskCount()-planYOnY.getTaskCount())/planYOnY.getTaskCount()*100:null);
+            result.setFinishedCountRateMOnM(planMOnM.getFinishedCount()!=0?(double)(result.getFinishedCount()-planMOnM.getFinishedCount())/planMOnM.getFinishedCount()*100:null);
+            result.setFinishedCountRateYOnY(planYOnY.getFinishedCount()!=0?(double)(result.getFinishedCount()-planYOnY.getFinishedCount())/planYOnY.getFinishedCount()*100:null);
+            result.setTaskFinishedRateMOnM(taskFinishedRateMOnM !=0 ?(result.getTaskFinishedRate()-taskFinishedRateMOnM)/taskFinishedRateMOnM*100:null);
+            result.setTaskFinishedRateYOnY(taskFinishedRateYOnY !=0 ?(result.getTaskFinishedRate()-taskFinishedRateYOnY)/taskFinishedRateYOnY*100:null);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    @Override
+    public List<TaskChangeTendDto>  selectTaskChangeTrend(PlanManageDto planManageDto) {
+        return planManageMapper.selectTaskChangeTrend(planManageDto);
+    }
+
+    @Override
+    public int[]  selectTaskDuration(PlanManageDto planManageDto) {
+        int[] result=new int[6];
+        List<PlanManageDto> listPlan=planManageMapper.selectTaskDuration(planManageDto);
+        for(PlanManageDto plan : listPlan){
+            if(plan.getIntervalCount()!=null){
+                if(plan.getIntervalCount()<5){
+                    result[plan.getIntervalCount()]=plan.getFinishedCount();
+                }else{
+                    result[5]+=plan.getFinishedCount();
+                }
+            }
+        }
+        return result;
+    }
 }

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

@@ -88,6 +88,12 @@
     </collection>
   </resultMap>
 
+
+  <resultMap id="StatisticsMap" type="com.huaxu.order.dto.StatisticsDto" >
+    <result column="statistics_name" property="statisticsName" jdbcType="VARCHAR" />
+    <result column="statistics_value" property="statisticsValue" jdbcType="VARCHAR" />
+  </resultMap>
+
   <sql id="Base_Column_List" >
     id, task_no, task_desc, order_user_id, send_time, send_by, plan_finish_date, finish_date, 
     date_limit, urgency, address, contact_user, contact_phone, order_time, company_org_id, 
@@ -660,13 +666,13 @@
 
       <if test="order.startDate != null and order.endDate != null">
         <if test="order.orderStatus == 0">
-          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.date_create &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 DAY)
+          and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+          and t1.date_create &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d'),INTERVAL 1 DAY)
           order by t1.date_create desc
         </if>
         <if test="order.orderStatus != 0">
-          and t1.send_time &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-          and t1.send_time &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%c-%d'),INTERVAL 1 DAY)
+          and t1.send_time &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+          and t1.send_time &lt;= DATE_ADD(date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d'),INTERVAL 1 DAY)
           order by t1.send_time desc
         </if>
       </if>
@@ -863,17 +869,16 @@
     </where>
   </select>
 
-
   <!--工单完成情况统计-->
   <select id="workOrderStatistics" resultType="map">
-    select  total '工单总数', finished '工单完成数', finished/total '工单完成率' from
+    select  total 工单总数, finished 工单完成数, finished/total 工单完成率 from
     (
       select count(1) total,sum(case when order_status=2 then 1 when order_status =3 then 1 else 0 end) finished
       from sc_work_order_manage t1
       <where>
         t1.order_status != 0
-        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%c-%d')
-        and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%c-%d')
+        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+        and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
         <if test="order.tenantId != null and order.tenantId != ''">
           and t1.tenant_id = #{order.tenantId}
         </if>
@@ -908,22 +913,270 @@
     ) a
   </select>
 
-  <select id="selectByTime" resultMap="BaseResultMap">
-    select distinct t1.id,task_no,send_time,address,order_type_id,current_task_name,t1.create_by,t1.update_by,task_desc,order_status,in_process_status,t1.plan_finish_date,t1.finish_date,t1.date_create,t1.date_limit
+  <!--事件数据月统计-->
+  <select id="eventMonthStatistics" resultType="map">
+    select count(1) 数量,date_format(date_create,'%Y-%m-%d') 日期
     from sc_work_order_manage t1
-           left join sc_work_flow_log t2 ON t1.id=t2.flow_id and flow_type=2 and find_in_set(#{userId},handle_user_id) and left(flow_result,2)='拒单'
-    where (find_in_set(#{userId},current_users)
-       or t1.id in(select flow_id from sc_work_flow_log where flow_type=2 and find_in_set(#{userId},handle_user_id)))
-      and tenant_id = #{tenantId}
-      and (t2.id is null or t1.order_user_id=t2.handle_user_id)
-      and t1.date_create between #{startTime} and #{endTime}
-    union
-    select id,plan_id,plan_date,task_area_name,task_type,current_task_name,create_by,update_by,task_content,plan_status,in_process_status,plan_end_date,finish_date,date_create,"0"
-    from sc_plan_manage
-    where (find_in_set(#{userId},current_users)
-      or id in(select flow_id from sc_work_flow_log where flow_type=1 and find_in_set(#{userId},handle_user_id)))
-      and tenant_id = #{tenantId}
-      and date_create between #{startTime} and #{endTime}
-    order by send_time desc
+    <where>
+      t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      <if test="order.tenantId != null and order.tenantId != ''">
+        and t1.tenant_id = #{order.tenantId}
+      </if>
+      <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+        <if test="order.permissonType == 5 or order.permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="order.permissonType == 4 or order.permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="order.permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+    </where>
+    group by date_format(date_create,'%Y-%m-%d')
+    order by date_format(date_create,'%Y-%m-%d')
+  </select>
+
+  <!--事件数据年统计-->
+  <select id="eventYearStatistics" resultType="map">
+    select count(1) 数量,date_format(date_create,'%Y-%m') 日期
+    from sc_work_order_manage t1
+    <where>
+      t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      <if test="order.tenantId != null and order.tenantId != ''">
+        and t1.tenant_id = #{order.tenantId}
+      </if>
+      <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+        <if test="order.permissonType == 5 or order.permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="order.permissonType == 4 or order.permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="order.permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+    </where>
+    group by date_format(date_create,'%Y-%m')
+    order by date_format(date_create,'%Y-%m')
+  </select>
+
+  <!--上报类型统计-->
+  <select id="reportStatistics" resultMap="StatisticsMap">
+    select  case when t1.event_type=1 then '运维上报' when t1.event_type=2 then '用户上报' when t1.event_type=3 then '设备告警' end statistics_name,
+    count(*) statistics_value
+    from sc_work_order_manage t1
+    <where>
+      t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      <if test="order.tenantId != null and order.tenantId != ''">
+        and t1.tenant_id = #{order.tenantId}
+      </if>
+      <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+        <if test="order.permissonType == 5 or order.permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="order.permissonType == 4 or order.permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="order.permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+    </where>
+    group by  t1.event_type
+  </select>
+
+  <!--工单状态统计-->
+  <select id="orderStatusStatistics" resultMap="StatisticsMap">
+    select 工单状态 statistics_name,sum(数量) statistics_value from
+    (
+      select case when t1.order_status=0 then '未派单' when t1.order_status=1 or t1.order_status=4 then '处理中'
+      when t1.order_status=2 then '已完成' when t1.order_status=3 then '终止' end 工单状态,count(*) 数量
+      from sc_work_order_manage t1
+      <where>
+        t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+        and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+        <if test="order.tenantId != null and order.tenantId != ''">
+          and t1.tenant_id = #{order.tenantId}
+        </if>
+        <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+          <if test="order.permissonType == 5 or order.permissonType == 2">
+            and ( t1.department_org_id in
+            <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+              #{item.orgId}
+            </foreach>
+            or
+            t1.COMPANY_ORG_ID in
+            <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+              #{item.orgId}
+            </foreach>
+            )
+          </if>
+          <if test="order.permissonType == 4 or order.permissonType == 3">
+            and t1.department_org_id in
+            <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+              #{item.orgId}
+            </foreach>
+          </if>
+          <if test="order.permissonType == 1">
+            and t1.COMPANY_ORG_ID in
+            <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+              #{item.orgId}
+            </foreach>
+            and (t1.department_org_id is null or t1.department_org_id =0)
+          </if>
+        </if>
+      </where>
+      group by t1.order_status
+    ) a
+    group by 工单状态
+  </select>
+
+  <!--工单类型统计-->
+  <select id="orderTypeStatistics" resultMap="StatisticsMap">
+    select  case when t1.order_type_id=1 then '表务工单' when t1.order_type_id=2 then '停通水工单'
+    when t1.order_type_id=3 then '抢修工单' when t1.order_type_id=4 then '漏点定位工单'
+    when t1.order_type_id=5 then '测漏工单' when t1.order_type_id=6 then '违章跑水工单'
+    when t1.order_type_id=10 then '压力调度工单' end statistics_name,
+    count(*) statistics_value
+    from sc_work_order_manage t1
+    <where>
+      t1.order_type_id>=1
+      and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+      <if test="order.tenantId != null and order.tenantId != ''">
+        and t1.tenant_id = #{order.tenantId}
+      </if>
+      <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+        <if test="order.permissonType == 5 or order.permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="order.permissonType == 4 or order.permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="order.permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+    </where>
+    group by t1.order_type_id
+  </select>
+
+  <!--工单时长统计-->
+  <select id="orderDurationStatistics" resultMap="StatisticsMap">
+    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
+      from
+      (
+      select TIMESTAMPDIFF(DAY,date_create,finish_date) duration
+      from sc_work_order_manage t1
+      <where>
+        (t1.order_status=2 or t1.order_status=3)
+        and t1.date_create &gt;= date_format(#{order.startDate,jdbcType=VARCHAR},'%Y-%m-%d')
+        and t1.date_create &lt; date_format(#{order.endDate,jdbcType=VARCHAR},'%Y-%m-%d')
+        <if test="order.tenantId != null and order.tenantId != ''">
+            and t1.tenant_id = #{order.tenantId}
+          </if>
+          <if test="order.userType!=null and order.userType!=-999 and order.userType!=-9999 and  order.programItems != null and order.programItems.size() > 0">
+            <if test="order.permissonType == 5 or order.permissonType == 2">
+              and ( t1.department_org_id in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+              or
+              t1.COMPANY_ORG_ID in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+              )
+            </if>
+            <if test="order.permissonType == 4 or order.permissonType == 3">
+              and t1.department_org_id in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+            </if>
+            <if test="order.permissonType == 1">
+              and t1.COMPANY_ORG_ID in
+              <foreach collection="order.programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+              </foreach>
+              and (t1.department_org_id is null or t1.department_org_id =0)
+            </if>
+          </if>
+        </where>
+        )a ) b
+      group by duration
   </select>
 </mapper>

+ 226 - 0
operation_manager/src/main/resources/mapper/task/PlanManageMapper.xml

@@ -32,6 +32,7 @@
     <result column="task_count" property="taskCount" jdbcType="VARCHAR" />
     <result column="finished_count" property="finishedCount" jdbcType="VARCHAR" />
     <result column="in_process_status" property="inProcessStatus" jdbcType="INTEGER" />
+    <result column="interval_count" property="intervalCount" jdbcType="INTEGER" />
   </resultMap>
 
   <resultMap id="workFlowLogResultMap" type="com.huaxu.order.entity.WorkFlowLog">
@@ -544,4 +545,229 @@
     group by task_type
   </select>
 
+  <select id="selectTaskFinishedByDate" resultMap="BaseResultMap" >
+    select task_type,sum(task_count) task_count,sum(case when plan_status=2 or plan_status=3 then task_count else 0 end) finished_count
+    from(
+      select task_type,plan_status,count(1) task_count
+      from sc_plan_manage t1
+      where
+      <if test="statsType == 0">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + INTERVAL 1 MONTH
+      </if>
+      <if test="statsType == 1">
+        t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + INTERVAL 1 YEAR
+      </if>
+      <if test="statsType == 2">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + INTERVAL 1 MONTH
+      </if>
+      <if test="tenantId != null and tenantId != ''">
+        and t1.tenant_id=#{tenantId}
+      </if>
+      <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+        <if test="permissonType == 5 or permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="permissonType == 4 or permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+      group by task_type,plan_status
+    )tab1
+    group by task_type
+  </select>
+
+  <select id="selectTaskCondition" resultMap="BaseResultMap" >
+    select count(1) task_count,ifnull(sum(case when plan_status=2 or plan_status=3 then 1 else 0 end),0) finished_count
+    from sc_plan_manage t1
+    where
+    <if test="statsType == 0">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + interval 1 month
+    </if>
+    <if test="statsType == 1">
+      t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + interval 1 year
+    </if>
+    <if test="statsType == 2">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + interval 1 month
+    </if>
+    <if test="tenantId != null and tenantId != ''">
+      and t1.tenant_id=#{tenantId}
+    </if>
+    <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+      <if test="permissonType == 5 or permissonType == 2">
+        and ( t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        or
+        t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        )
+      </if>
+      <if test="permissonType == 4 or permissonType == 3">
+        and t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+      </if>
+      <if test="permissonType == 1">
+        and t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        and (t1.department_org_id is null or t1.department_org_id =0)
+      </if>
+    </if>
+  </select>
+  <select id="selectTaskChangeTrend" resultType="com.huaxu.task.dto.TaskChangeTendDto" >
+    select
+      tab1.dateCreate,
+      right(tab1.dateCreate,2) dateLabel,
+      ifnull(TaskCount, 0) TaskCount
+      <if test="maintainerCount != 0">
+        ,ifnull(TaskCount, 0) / #{maintainerCount} taskCountAvg
+      </if>
+    from(
+        select
+        <if test="statsType == 0 or statsType == 2">
+          date_format(date_add(concat(#{startDate}, '-1'),interval rownum day),'%Y-%m-%d') dateCreate
+        </if>
+        <if test="statsType == 1">
+          date_format(date_add(concat(#{startDate}, '-1-1'),interval rownum month),'%Y-%m') dateCreate
+        </if>
+        from(
+            select @rowNum :=@rowNum + 1 rownum
+            from sc_gps_data_his a,(select @rowNum :=- 1) b limit #{intervalCount}
+        ) duration
+    ) tab1
+    left join (
+      select
+      <if test="statsType == 0 or statsType == 2">
+        date_format(t1.date_create, '%Y-%m-%d') dateCreate
+      </if>
+      <if test="statsType == 1">
+        date_format(t1.date_create, '%Y-%m') dateCreate
+      </if>,count(1) TaskCount
+      from sc_plan_manage t1
+      where
+      <if test="statsType == 0">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + interval 1 month
+      </if>
+      <if test="statsType == 1">
+        t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + interval 1 year
+      </if>
+      <if test="statsType == 2">
+        t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + interval 1 month
+      </if>
+      <if test="tenantId != null and tenantId != ''">
+        and t1.tenant_id=#{tenantId}
+      </if>
+      <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+        <if test="permissonType == 5 or permissonType == 2">
+          and ( t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          or
+          t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          )
+        </if>
+        <if test="permissonType == 4 or permissonType == 3">
+          and t1.department_org_id in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+        </if>
+        <if test="permissonType == 1">
+          and t1.COMPANY_ORG_ID in
+          <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+            #{item.orgId}
+          </foreach>
+          and (t1.department_org_id is null or t1.department_org_id =0)
+        </if>
+      </if>
+      <if test="statsType == 0 or statsType == 2">
+        group by date_format(t1.date_create, '%Y-%m-%d')
+      </if>
+      <if test="statsType == 1">
+        group by date_format(t1.date_create, '%Y-%m')
+      </if>
+    ) tab2 on tab1.dateCreate = tab2.dateCreate
+    <if test="statsType == 0 or statsType == 2">
+      where tab1.dateCreate &lt;=date_format(now(),'%Y-%m-%d')
+    </if>
+    <if test="statsType == 1">
+      where tab1.dateCreate &lt;=date_format(now(),'%Y-%m')
+    </if>
+    order by tab1.dateCreate
+  </select>
+
+  <select id="selectTaskDuration" resultMap="BaseResultMap" >
+    SELECT timestampdiff(day,date_create,finish_date) interval_count,count(1) finished_count
+    FROM sc_plan_manage t1
+    where (plan_status=2 or plan_status=3) and
+    <if test="statsType == 0">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{startDate}, '-1') + interval 1 month
+    </if>
+    <if test="statsType == 1">
+      t1.date_create >= concat(#{startDate}, '-1-1') and t1.date_create &lt; concat(#{startDate}, '-1-1') + interval 1 year
+    </if>
+    <if test="statsType == 2">
+      t1.date_create >= concat(#{startDate}, '-1') and t1.date_create &lt; concat(#{endDate}, '-1') + interval 1 month
+    </if>
+    <if test="tenantId != null and tenantId != ''">
+      and t1.tenant_id=#{tenantId}
+    </if>
+    <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+      <if test="permissonType == 5 or permissonType == 2">
+        and ( t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        or
+        t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        )
+      </if>
+      <if test="permissonType == 4 or permissonType == 3">
+        and t1.department_org_id in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+      </if>
+      <if test="permissonType == 1">
+        and t1.COMPANY_ORG_ID in
+        <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+          #{item.orgId}
+        </foreach>
+        and (t1.department_org_id is null or t1.department_org_id =0)
+      </if>
+    </if>
+    group by timestampdiff(day,date_create,finish_date)
+  </select>
 </mapper>

+ 115 - 0
sms_water/src/main/java/com/huaxu/common/HttpRequest.java

@@ -0,0 +1,115 @@
+package com.huaxu.common;
+
+
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class HttpRequest {
+    public static String doGet(String url) throws IOException {
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        HttpGet httpGet = new HttpGet(url);
+        CloseableHttpResponse response = httpclient.execute(httpGet);
+        HttpEntity entity = response.getEntity();
+        String result = null;
+        if (entity != null) {
+            result = EntityUtils.toString(entity, "UTF-8");
+        }
+        //消耗掉response
+        EntityUtils.consume(entity);
+        return result;
+    }
+
+    public static String doPost(String url, Map<String, String> params) throws IOException {
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost(url);
+        //拼接参数
+        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
+        if (params != null && params.size() > 0) {
+            for (String key : params.keySet()) {
+                nvps.add(new BasicNameValuePair(key, params.get(key)));
+            }
+        }
+        httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
+
+
+        CloseableHttpResponse response = httpclient.execute(httpPost);
+        HttpEntity entity = response.getEntity();
+        String result = null;
+        if (entity != null) {
+            result = EntityUtils.toString(entity, "UTF-8");
+        }
+        //消耗掉response
+        EntityUtils.consume(entity);
+        return result;
+
+    }
+
+    /**
+     * 发送 Request Body
+     *
+     * @param url
+     * @param body
+     * @return
+     * @throws IOException
+     */
+    public static String doPost(String url, String body) throws IOException {
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.addHeader("Content-Type", "application/json");
+
+        StringEntity s = new StringEntity(body, "UTF-8");
+        httpPost.setEntity(s);
+
+
+        CloseableHttpResponse response = httpclient.execute(httpPost);
+        HttpEntity entity = response.getEntity();
+        String result = null;
+        if (entity != null) {
+            result = EntityUtils.toString(entity, "UTF-8");
+        }
+        //消耗掉response
+        EntityUtils.consume(entity);
+        return result;
+
+    }
+
+    public static String doDelete(String url, Map<String, String> params) throws IOException {
+        CloseableHttpClient httpclient = HttpClients.createDefault();
+        HttpDelete httpDelete = new HttpDelete(url);
+        //拼接参数
+        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
+        if (params != null && params.size() > 0) {
+            for (String key : params.keySet()) {
+                nvps.add(new BasicNameValuePair(key, params.get(key)));
+            }
+        }
+        //httpDelete.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
+
+
+        CloseableHttpResponse response = httpclient.execute(httpDelete);
+        HttpEntity entity = response.getEntity();
+        String result = null;
+        if (entity != null) {
+            result = EntityUtils.toString(entity, "UTF-8");
+        }
+        //消耗掉response
+        EntityUtils.consume(entity);
+        return result;
+
+    }
+}

+ 103 - 0
sms_water/src/main/java/com/huaxu/common/JacksonUtil.java

@@ -0,0 +1,103 @@
+package com.huaxu.common;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
+
+import java.text.SimpleDateFormat;
+
+/**
+ * Jackson实现对象和json字符串之间的转换
+ * Created by lin
+ */
+@Slf4j
+public class JacksonUtil {
+
+    private static ObjectMapper objectMapper = new ObjectMapper();
+
+    static {
+        //对象的所有字段全部列入
+        objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);
+
+        //取消默认转换timestamps形式
+        objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+
+        //忽略空Bean转json的错误
+        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+
+        //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss
+        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+
+        //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+    }
+
+
+    public static <T> String obj2String(T obj) {
+        if (obj == null) {
+            return null;
+        }
+        try {
+            return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
+        } catch (Exception e) {
+            log.warn("Parse Object to String error", e);
+            return null;
+        }
+    }
+
+    public static <T> String obj2StringPretty(T obj) {
+        if (obj == null) {
+            return null;
+        }
+        try {
+            return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
+        } catch (Exception e) {
+            log.warn("Parse Object to String error", e);
+            return null;
+        }
+    }
+
+
+    public static <T> T string2Obj(String str, Class<T> clazz) {
+        if (StringUtils.isEmpty(str) || clazz == null) {
+            return null;
+        }
+
+        try {
+            return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
+        } catch (Exception e) {
+            log.warn("Parse String to Object error", e);
+            return null;
+        }
+    }
+
+
+    public static <T> T string2Obj(String str, TypeReference<T> typeReference) {
+        if (StringUtils.isEmpty(str) || typeReference == null) {
+            return null;
+        }
+        try {
+            return (T) (typeReference.getType().equals(String.class) ? str : objectMapper.readValue(str, typeReference));
+        } catch (Exception e) {
+            log.warn("Parse String to Object error", e);
+            return null;
+        }
+    }
+
+
+    public static <T> T string2Obj(String str, Class<?> collectionClass, Class<?>... elementClasses) {
+        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
+        try {
+            return objectMapper.readValue(str, javaType);
+        } catch (Exception e) {
+            log.warn("Parse String to Object error", e);
+            return null;
+        }
+    }
+}
+

+ 0 - 2
sms_water/src/main/java/com/huaxu/controller/AppPageReportController.java

@@ -133,8 +133,6 @@ public class AppPageReportController {
     @RequestMapping(value = "getProductionComparisonForLast12Month",method = RequestMethod.GET)
     @ApiOperation(value = "App总览——生产数据-取水环比、供水环比、售水环比(近一年)")
     public AjaxMessage<Object> getProductionComparisonForLast12Month(@ApiParam(value = "公司id,总公司传空值") @RequestParam(required = false) Integer companyOrgId){
-        LocalDate now = LocalDate.now();
-
 
         List<DeviceWaterSupply> intakeComparisonList = appPageReportService.deviceWaterReportForMonth(companyOrgId,"水源",4,24);
         List<DeviceWaterSupply> makingComparisonList =  appPageReportService.deviceWaterReportForMonth(companyOrgId,"水厂",3,24);

+ 77 - 23
sms_water/src/main/java/com/huaxu/controller/MonitorInfoController.java

@@ -18,6 +18,7 @@ import org.springframework.stereotype.Controller;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.ui.ModelMap;
 
+import java.lang.management.MonitorInfo;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -42,7 +43,7 @@ public class MonitorInfoController {
     @Autowired
     private DeviceParmService deviceParmService;
     @Autowired
-    private  RedisUtil redisUtil;
+    private RedisUtil redisUtil;
     @Autowired
     private SceneService sceneService;
     @Autowired
@@ -50,40 +51,45 @@ public class MonitorInfoController {
     @Autowired
     private AlarmDetailsService alarmDetailsService;
     @Autowired
-    private  DeviceAttributeSpecsService deviceAttributeSpecsService;
+    private DeviceAttributeSpecsService deviceAttributeSpecsService;
     @Autowired
-    private  DeviceAttributeService deviceAttributeService;
+    private DeviceAttributeService deviceAttributeService;
     @Autowired
     private MonitorDataReportService monitorDataReportService;
+    @Autowired
+    private DeviceSetupMethodService deviceSetupMethodService;
+    @Autowired
+    private DeviceSetupRecordService deviceSetupRecordService;
+
 
     @ApiOperation(value = "按场景ID查询供水量出水量耗药量耗电量(已废弃)")
-    @RequestMapping(value = "/findTotalUsageBySceneId",method = RequestMethod.GET)
+    @RequestMapping(value = "/findTotalUsageBySceneId", method = RequestMethod.GET)
     @ResponseBody
-    public  AjaxMessage<SceneUsageDto> findTotalUsageBySceneId(@ApiParam(value = "场景ID", required = true) @RequestParam Long id,@ApiParam(value = "类型(0综合调度 1综合展示)", required = false) @RequestParam(required = false) Integer... type) {
+    public AjaxMessage<SceneUsageDto> findTotalUsageBySceneId(@ApiParam(value = "场景ID", required = true) @RequestParam Long id, @ApiParam(value = "类型(0综合调度 1综合展示)", required = false) @RequestParam(required = false) Integer... type) {
         SceneUsageDto sceneUsageDto = new SceneUsageDto();
         //查询场景下的所有设备信息
-        sceneUsageDto.setYieldWaterUsage(monitorDataReportService.getAmountCount(null,id.intValue(),null,3,1).doubleValue());
-        sceneUsageDto.setIntakeWaterUsage(monitorDataReportService.getAmountCount(null,id.intValue(),null,4,1).doubleValue());
-        sceneUsageDto.setPowerUsage(monitorDataReportService.getAmountCount(null,id.intValue(),null,5,1).doubleValue());
-        sceneUsageDto.setDrugUsage(monitorDataReportService.getAmountCount(null,id.intValue(),null,6,1).doubleValue());
+        sceneUsageDto.setYieldWaterUsage(monitorDataReportService.getAmountCount(null, id.intValue(), null, 3, 1).doubleValue());
+        sceneUsageDto.setIntakeWaterUsage(monitorDataReportService.getAmountCount(null, id.intValue(), null, 4, 1).doubleValue());
+        sceneUsageDto.setPowerUsage(monitorDataReportService.getAmountCount(null, id.intValue(), null, 5, 1).doubleValue());
+        sceneUsageDto.setDrugUsage(monitorDataReportService.getAmountCount(null, id.intValue(), null, 6, 1).doubleValue());
         if (type != null && type.length > 0) {
             sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getYieldWaterUsage()).divide(BigDecimal.valueOf(10000), 3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
             sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getIntakeWaterUsage()).divide(BigDecimal.valueOf(10000), 3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
             sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getPowerUsage()).divide(BigDecimal.valueOf(10000), 3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
-            sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getDrugUsage()).setScale( 3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
-        }else {
+            sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getDrugUsage()).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
+        } else {
             sceneUsageDto.setYieldWaterUsage(sceneUsageDto.getYieldWaterUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getYieldWaterUsage()).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
             sceneUsageDto.setIntakeWaterUsage(sceneUsageDto.getIntakeWaterUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getIntakeWaterUsage()).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
             sceneUsageDto.setPowerUsage(sceneUsageDto.getPowerUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getPowerUsage()).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
             sceneUsageDto.setDrugUsage(sceneUsageDto.getDrugUsage() != null ? BigDecimal.valueOf(sceneUsageDto.getDrugUsage()).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue() : 0d);
         }
-        return new AjaxMessage<>(ResultStatus.OK,sceneUsageDto);
+        return new AjaxMessage<>(ResultStatus.OK, sceneUsageDto);
     }
 
     @ApiOperation(value = "按场景ID查询供水量出水量耗药量耗电量")
-    @RequestMapping(value = "/findTotalUsageBySceneIdForComDsiplay",method = RequestMethod.GET)
+    @RequestMapping(value = "/findTotalUsageBySceneIdForComDsiplay", method = RequestMethod.GET)
     @ResponseBody
-    public  AjaxMessage<SceneUsageDto> findTotalUsageBySceneIdForComDsiplay(@ApiParam(value = "场景ID", required = true) @RequestParam Long id,@ApiParam(value = "场景类型(0水源 1水厂 2泵站)", required = false) @RequestParam(required = false) Integer type) {
+    public AjaxMessage<SceneUsageDto> findTotalUsageBySceneIdForComDsiplay(@ApiParam(value = "场景ID", required = true) @RequestParam Long id, @ApiParam(value = "场景类型(0水源 1水厂 2泵站)", required = false) @RequestParam(required = false) Integer type) {
         SceneUsageDto sceneUsageDto = new SceneUsageDto();
 
         //查询场景下的所有设备信息
@@ -112,14 +118,14 @@ public class MonitorInfoController {
     }
 
     @ApiOperation(value = "按场景ID查询所有标签信息")
-    @RequestMapping(value = "/findBySceneId",method = RequestMethod.GET)
+    @RequestMapping(value = "/findBySceneId", method = RequestMethod.GET)
     @ResponseBody
     public AjaxMessage<List<MonitorInfoEntity>> findBySceneId(
             @ApiParam(value = "场景ID", required = true) @RequestParam Long id,
             @ApiParam(value = "图片类型(0鸟瞰图 1工艺图)", required = false) @RequestParam(required = false) Integer imageType,
             @ApiParam(value = "设备ID", required = false) @RequestParam(required = false) Long deviceId,
             @ApiParam(value = "类型(0综合调度 1综合展示)", required = false) @RequestParam(required = false) Integer... type
-            ) {
+    ) {
         MonitorInfoEntity monitorInfoEntity = new MonitorInfoEntity();
         monitorInfoEntity.setSceneId(id);
         if (imageType != null) {
@@ -138,8 +144,13 @@ public class MonitorInfoController {
                     getMonitorInfo(id, item);
                     break;
                 case 3:
+                    updateCommonState(id, 3, item);
+                    break;
                 case 4:
+                    updateCommonState(id, 4, item);
+                    break;
                 case 5:
+                    updateCommonState(id, 5, item);
                     break;
             }
         }
@@ -148,19 +159,28 @@ public class MonitorInfoController {
 
     /**
      * 更新指令状态
+     *
      * @param sceneId
      * @param item
      */
-    public  void updateCommonState(Long sceneId,MonitorInfoEntity item) {
-
+    public void updateCommonState(Long sceneId, Integer type, MonitorInfoEntity item) {
+        DeviceSetupRecordEntity parm = new DeviceSetupRecordEntity();
+        parm.setDeviceId(item.getDeviceId());
+        parm.setAttributeId(item.getAttributeId());
+        parm.setType(type);
+        DeviceSetupRecordEntity recordEntity = deviceSetupRecordService.selectLastOne(parm);
+        if (recordEntity != null) {
+            item.setCommonState(recordEntity.getState());
+        }
     }
 
     /**
      * 更新标签值
+     *
      * @param sceneId
      * @param item
      */
-    public  void getMonitorInfo(Long sceneId,MonitorInfoEntity item) {
+    public void getMonitorInfo(Long sceneId, MonitorInfoEntity item) {
         //查询报警信息
         List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailsService.selectByDeviceId(sceneId, item.getDeviceId().intValue());
         Map<Integer, AlarmDetailsDto> mapAlarm = new HashMap<>();
@@ -212,11 +232,12 @@ public class MonitorInfoController {
         }
     }
 
-    @RequestMapping(value="getDeviceParmByDeviceId" , method = RequestMethod.GET)
+    @RequestMapping(value = "getDeviceParmByDeviceId", method = RequestMethod.GET)
     @ApiOperation(value = "查询单个设备参数信息(标签设置)")
-    public AjaxMessage<List<DeviceParmEntity>> getByDeviceId(@ApiParam(value = "场景id",required = true) @RequestParam Integer sceneId,@ApiParam(value = "设备id",required = true) @RequestParam Integer id){
-        return new AjaxMessage<>(ResultStatus.OK, deviceParmService.selectByDeviceIdForGis(sceneId,id));
+    public AjaxMessage<List<DeviceParmEntity>> getByDeviceId(@ApiParam(value = "场景id", required = true) @RequestParam Integer sceneId, @ApiParam(value = "设备id", required = true) @RequestParam Integer id) {
+        return new AjaxMessage<>(ResultStatus.OK, deviceParmService.selectByDeviceIdForGis(sceneId, id));
     }
+
     /**
      * 新增
      */
@@ -238,6 +259,7 @@ public class MonitorInfoController {
         int result = monitorInfoService.addMonitorInfo(monitorInfo) ? 1 : 0;
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
+
     /**
      * 批量新增
      */
@@ -277,7 +299,7 @@ public class MonitorInfoController {
     @ApiOperation(value = "单个编辑")
     @RequestMapping(value = "/edit", method = RequestMethod.POST)
     @ResponseBody
-    public  AjaxMessage<Integer> editMonitorInfo(@ApiParam(value = "标签信息", required = true) @RequestBody MonitorInfoEntity monitorInfo) {
+    public AjaxMessage<Integer> editMonitorInfo(@ApiParam(value = "标签信息", required = true) @RequestBody MonitorInfoEntity monitorInfo) {
         int result = monitorInfoService.updateMonitorInfoById(monitorInfo) ? 1 : 0;
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
@@ -292,6 +314,7 @@ public class MonitorInfoController {
         int result = monitorInfoService.delMonitorInfoByIds(ids) ? 1 : 0;
         return new AjaxMessage<>(ResultStatus.OK, result);
     }
+
     /**
      * 操作标签--查询设备属性
      */
@@ -303,4 +326,35 @@ public class MonitorInfoController {
         return new AjaxMessage<>(ResultStatus.OK, deviceParmEntities);
     }
 
+    /**
+     * 操作标签--进行指令操作
+     */
+    @ApiOperation(value = "操作标签--进行指令操作")
+    @RequestMapping(value = "/setSetupForDevice", method = RequestMethod.GET)
+    @ResponseBody
+    public AjaxMessage<Integer> setSetupForDevice(
+            @ApiParam(value = "标签ID", required = true) @RequestParam Long id,
+            @ApiParam(value = "参数", required = true) @RequestParam String parms,
+            @ApiParam(value = "密钥", required = true) @RequestParam String password) {
+        //校验密钥
+        boolean isPass = deviceSetupMethodService.checkPassword(password);
+        if (!isPass) {
+            return new AjaxMessage<>(ResultStatus.OP_PASSWORD_ERROR);
+        }
+        //查询操作方法
+        try {
+            MonitorInfoEntity monitorInfo = monitorInfoService.findMonitorInfoById(id);
+            if (monitorInfo != null) {
+                Integer type = monitorInfo.getMonitorType().intValue();
+                long deviceId = monitorInfo.getDeviceId();
+                long attributeId = monitorInfo.getAttributeId();
+                long sceneId = monitorInfo.getSceneId();
+                int result = deviceSetupMethodService.setSetupForDevice(type, sceneId, deviceId, attributeId, parms) ? 1 : 0;
+                return new AjaxMessage<>(ResultStatus.OK, result);
+            }
+        } catch (Exception ex) {
+            return new AjaxMessage<>(ResultStatus.ERROR_500, 0);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, 0);
+    }
 }

+ 138 - 0
sms_water/src/main/java/com/huaxu/controller/ParmSettingController.java

@@ -0,0 +1,138 @@
+package com.huaxu.controller;
+
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.ui.ModelMap;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Date;
+import org.springframework.web.bind.annotation.*;
+import com.huaxu.entity.ParmSettingEntity;
+import com.huaxu.service.ParmSettingService;
+
+/**
+ * 参数设置页面控制器
+ * @author WYY
+ * @date 2021-05-11 10:30
+ */
+@RestController
+@RequestMapping("/parmsetting")
+@Api(tags = "参数设置")
+public class ParmSettingController{
+    @Autowired
+    private ParmSettingService parmSettingService;
+
+    @RequestMapping(value = "/findList", method = RequestMethod.GET)
+    @ResponseBody
+    public AjaxMessage<List<ParmSettingEntity>> list(@RequestParam(required = false) Long companyOrgId) {
+        ParmSettingEntity parmSettingEntity = new ParmSettingEntity();
+        parmSettingEntity.setCompanyOrgId(companyOrgId);
+        List<ParmSettingEntity> list = parmSettingService.findList(parmSettingEntity);
+        return new AjaxMessage<>(ResultStatus.OK, list);
+    }
+
+
+    /**
+     * 新增
+     */
+    @ApiOperation(value = "新增参数信息")
+    @RequestMapping(value = "/add", method = RequestMethod.POST)
+    public AjaxMessage<Integer> addParm(@ApiParam(value = "参数信息", required = true) @RequestBody ParmSettingEntity parmSetting) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        if (currentUser != null) {
+            parmSetting.setUpdateBy(currentUser.getUsername());
+            parmSetting.setCreateBy(currentUser.getUsername());
+            parmSetting.setDateCreate(new Date());
+            parmSetting.setDateUpdate(new Date());
+            parmSetting.setTenantId(currentUser.getTenantId());
+        }
+        parmSetting.setStatus(1);
+        parmSettingService.addParmSetting(parmSetting);
+        return new AjaxMessage<>(ResultStatus.OK, 1);
+    }
+
+    @ApiOperation(value = "按ID查询参数")
+    @GetMapping(value = "/findParmById")
+    public  AjaxMessage<ParmSettingEntity> findParmById(@ApiParam(value = "参数ID", required = true) @RequestParam  Long id){
+        ParmSettingEntity parmSetting = parmSettingService.findParmSettingById(id);
+        return new AjaxMessage<>(ResultStatus.OK, parmSetting);
+    }
+
+    /**
+     * 修改保存考评等级
+     */
+    @ApiOperation(value = "修改保存参数")
+    @RequestMapping(value = "/edit", method = RequestMethod.POST)
+    public  AjaxMessage<Integer> editParm(@ApiParam(value = "参数信息", required = true) @RequestBody ParmSettingEntity parmSetting){
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        if (currentUser != null) {
+            parmSetting.setUpdateBy(currentUser.getUsername());
+            parmSetting.setDateUpdate(new Date());
+        }
+        int result= parmSettingService.updateParmSettingById(parmSetting)? 1: 0;
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    /**
+     * 修改保存考评等级
+     */
+    @ApiOperation(value = "批量保存或更新参数")
+    @RequestMapping(value = "/batchSave", method = RequestMethod.POST)
+    public  AjaxMessage<Integer> editEvaluationGrade(@ApiParam(value = "参数信息", required = true) @RequestBody List<ParmSettingEntity> parmSettings) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        for (ParmSettingEntity item : parmSettings) {
+            if (currentUser != null) {
+                item.setUpdateBy(currentUser.getUsername());
+                item.setCreateBy(currentUser.getUsername());
+                item.setDateCreate(new Date());
+                item.setDateUpdate(new Date());
+                item.setTenantId(currentUser.getTenantId());
+            }
+            item.setStatus(1);
+            parmSettingService.saveOrUpdate(item);
+        }
+        return new AjaxMessage<>(ResultStatus.OK, 1);
+    }
+    /**
+     * 删除
+     */
+    @ApiOperation(value = "批量删除参数")
+    @RequestMapping(value = "/deleteByIds", method = RequestMethod.POST)
+    @ResponseBody
+    public AjaxMessage<Integer> deleteByIds(@ApiParam(value = "参数IDS", required = true) @RequestBody Long[] ids) {
+        if (ids == null || ids.length == 0) {
+            return new AjaxMessage<>(ResultStatus.PARAM_ERROR);
+        }
+        int result = parmSettingService.delParmSettingByIds(ids) ? 1 : 0;
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+    /**
+     * 删除
+     */
+    @ApiOperation(value = "单个删除参数")
+    @RequestMapping(value = "/deleteById", method = RequestMethod.POST)
+    public AjaxMessage<Integer> deleteById(@ApiParam(value = "参数ID", required = true) @RequestParam Long id) {
+        if (id == null) {
+            return new AjaxMessage<>(ResultStatus.PARAM_ERROR);
+        }
+        List<Long> longIds = new ArrayList<>();
+        longIds.add(id);
+        ParmSettingEntity parmSetting = parmSettingService.findParmSettingById(id);
+        if (parmSetting == null) {
+            return new AjaxMessage<>(ResultStatus.EXSIT_IS_PARENT_ERROR, 0);
+        } else {
+            int result = parmSettingService.delParmSettingById(id) ? 1 : 0;
+            return new AjaxMessage<>(ResultStatus.OK, result);
+        }
+    }
+}

+ 9 - 0
sms_water/src/main/java/com/huaxu/controller/SceneController.java

@@ -209,4 +209,13 @@ public class SceneController {
         sceneService.saveUpdateBatch(deviceScenes);
         return new AjaxMessage<>(ResultStatus.OK,1 );
     }
+
+    @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);
+    }
+
 }

+ 26 - 0
sms_water/src/main/java/com/huaxu/dao/DeviceSetupMethodMapper.java

@@ -0,0 +1,26 @@
+package com.huaxu.dao;
+
+import com.huaxu.entity.DeviceSetupMethodEntity;
+import java.io.Serializable;
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+/**
+ *
+ * sms_device_setup_methodDAO接口
+ * @author: WYY
+ * @date 2021-05-10 14:39
+ */
+@Mapper
+public interface DeviceSetupMethodMapper extends BaseMapper<DeviceSetupMethodEntity> {
+
+     DeviceSetupMethodEntity findDeviceSetupMethodById(Serializable id);
+
+
+     List<DeviceSetupMethodEntity> findList(DeviceSetupMethodEntity deviceSetupMethodEntity);
+
+     /**删除相关方法  使用mybatis-plus集成的 **/
+}

+ 28 - 0
sms_water/src/main/java/com/huaxu/dao/DeviceSetupRecordMapper.java

@@ -0,0 +1,28 @@
+package com.huaxu.dao;
+
+import com.huaxu.entity.DeviceSetupRecordEntity;
+import java.io.Serializable;
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+/**
+ *
+ * sms_device_setup_recordDAO接口
+ * @author: WYY
+ * @date 2021-05-10 14:39
+ */
+@Mapper
+public interface DeviceSetupRecordMapper extends BaseMapper<DeviceSetupRecordEntity> {
+
+     DeviceSetupRecordEntity findDeviceSetupRecordById(Serializable id);
+
+
+     List<DeviceSetupRecordEntity> findList(DeviceSetupRecordEntity deviceSetupRecordEntity);
+
+     DeviceSetupRecordEntity selectLastOne(DeviceSetupRecordEntity deviceSetupRecordEntity);
+
+     /**删除相关方法  使用mybatis-plus集成的 **/
+}

+ 34 - 0
sms_water/src/main/java/com/huaxu/dao/ParmSettingMapper.java

@@ -0,0 +1,34 @@
+package com.huaxu.dao;
+
+import com.huaxu.entity.ParmSettingEntity;
+import java.io.Serializable;
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+/**
+ *
+ * sms_parm_settingDAO接口
+ * @author: WYY
+ * @date 2021-05-11 10:30
+ */
+@Mapper
+public interface ParmSettingMapper extends BaseMapper<ParmSettingEntity> {
+
+	/**
+     * 自定义分页查询
+     * @param  page 
+     * @param  parmSettingEntity 实体类
+     */
+     Page<ParmSettingEntity> findPage(IPage<ParmSettingEntity> page,
+                                       @Param("parmSetting") ParmSettingEntity parmSettingEntity);
+
+     ParmSettingEntity findParmSettingById(Serializable id);
+
+
+     List<ParmSettingEntity> findList(ParmSettingEntity parmSettingEntity);
+
+     /**删除相关方法  使用mybatis-plus集成的 **/
+}

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

@@ -46,5 +46,6 @@ public interface SceneMapper extends BaseMapper<SceneEntity> {
 
     List<Map<String,Object>> findSceneAmount(@Param("scene") SceneEntity sceneEntity,@Param("months") Integer months);
 
+    List<Map<String,Object>> selectAlarmSceneAndDevice(@Param("scene") SceneEntity sceneEntity, @Param("startDate") String startDate, @Param("endDate") String endDate);
     /**删除相关方法  使用mybatis-plus集成的 **/
 }

+ 17 - 0
sms_water/src/main/java/com/huaxu/dto/SetupMethod.java

@@ -0,0 +1,17 @@
+package com.huaxu.dto;
+
+import cn.hutool.core.date.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class SetupMethod {
+    private String deviceId;
+    private String method;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    private Date receiveTime;
+    private String unitIdentifier;
+    private Object params;
+}

+ 61 - 0
sms_water/src/main/java/com/huaxu/entity/DeviceSetupMethodEntity.java

@@ -0,0 +1,61 @@
+package com.huaxu.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * sms_device_setup_method
+ * @author: WYY
+ * @date 2021-05-10 14:39
+ */
+@Data
+@TableName("sms_device_setup_method")
+public class DeviceSetupMethodEntity{
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */ 
+	@TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 设备ID */
+    private Long deviceId;
+
+    /** 属性ID */
+    private Long attributeId;
+
+    /** 类型(0水泵控制 1压力调节 2水表开关阀) */
+    private Integer type;
+
+    /** 方法名 */
+    private String method;
+
+    /** 参数(json) */
+    private String params;
+
+    /** 数据删除标记 */
+    @TableLogic
+    @ApiModelProperty(value = "数据删除标记")
+    @JsonIgnore
+    private Integer status;
+
+    @JsonIgnore
+    private Date dateCreate;
+
+    @JsonIgnore
+    private String createBy;
+
+    /** 更新者 */
+    @JsonIgnore
+    private String updateBy;
+    /** 更新时间 */
+    @JsonIgnore
+    private Date dateUpdate;
+}

+ 74 - 0
sms_water/src/main/java/com/huaxu/entity/DeviceSetupRecordEntity.java

@@ -0,0 +1,74 @@
+package com.huaxu.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * sms_device_setup_record
+ * @author: WYY
+ * @date 2021-05-10 14:39
+ */
+@Data
+@TableName("sms_device_setup_record")
+public class DeviceSetupRecordEntity{
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */ 
+	@TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 租户标识 */
+    @ApiModelProperty(value = "租户标识")
+    private String tenantId;
+
+    /** 场景ID */
+    private Long sceneId;
+
+    /** 设备ID */
+    private Long deviceId;
+
+    /** 属性ID */
+    private Long attributeId;
+
+    /** 设置指令ID */
+    private Long setupMethodId;
+
+    /** 执行状态(0执行中 1执行成功 2执行失败) */
+    private Integer state;
+    /**
+     * 操作类型
+     */
+    @TableField(exist = false)
+    private Integer type;
+
+    /** 参数 */
+    private String params;
+
+    /** 数据删除标记 */
+    @TableLogic
+    @ApiModelProperty(value = "数据删除标记")
+    @JsonIgnore
+    private Integer status;
+
+    @JsonIgnore
+    private Date dateCreate;
+
+    @JsonIgnore
+    private String createBy;
+
+    /** 更新者 */
+    @JsonIgnore
+    private String updateBy;
+    /** 更新时间 */
+    @JsonIgnore
+    private Date dateUpdate;
+
+}

+ 0 - 1
sms_water/src/main/java/com/huaxu/entity/MonitorInfoEntity.java

@@ -41,7 +41,6 @@ public class MonitorInfoEntity{
 
     /** 设备信息 */
     @ApiModelProperty(value = "设备编号")
-    @JsonIgnore
     @TableField(exist = false)
     private String deviceCode;
 

+ 75 - 0
sms_water/src/main/java/com/huaxu/entity/ParmSettingEntity.java

@@ -0,0 +1,75 @@
+package com.huaxu.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * sms_parm_setting
+ * @author: WYY
+ * @date 2021-05-11 10:30
+ */
+@Data
+@TableName("sms_parm_setting")
+public class ParmSettingEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */ 
+	@TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 租户标识 */
+    @ApiModelProperty(value = "租户标识")
+    private String tenantId;
+
+    /** 所属公司 */
+    @ApiModelProperty(value = "所属公司")
+    private Long companyOrgId;
+
+    /** 参数类型 */
+    @ApiModelProperty(value = "参数类型")
+    private Integer parmType;
+
+    /** 参数值 */
+    @ApiModelProperty(value = "参数值")
+    private String parmValue;
+
+    /** 是否启用(0不启用1启用) */
+    @ApiModelProperty(value = "是否启用(0不启用1启用)")
+    private Integer enableState;
+
+    /**
+     * 数据删除标识
+     */
+    @ApiModelProperty(value = "数据删除标识")
+    @TableLogic
+    private Integer status;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @ApiModelProperty(value = "创建时间")
+    private Date dateCreate;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" , timezone = "GMT+8")
+    @ApiModelProperty(value = "更新时间")
+    private Date dateUpdate;
+}

+ 215 - 0
sms_water/src/main/java/com/huaxu/service/DeviceSetupMethodService.java

@@ -0,0 +1,215 @@
+package com.huaxu.service;
+
+
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.huaxu.common.HttpRequest;
+import com.huaxu.common.JacksonUtil;
+import com.huaxu.dao.DeviceSetupMethodMapper;
+import com.huaxu.dto.SetupMethod;
+import com.huaxu.entity.DeviceEntity;
+import com.huaxu.entity.DeviceSetupMethodEntity;
+import com.huaxu.entity.DeviceSetupRecordEntity;
+import com.huaxu.entity.ParmSettingEntity;
+import com.huaxu.model.LoginUser;
+import com.huaxu.util.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+
+import javax.annotation.Resource;
+
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Map;
+import java.util.List;
+import java.util.Arrays;
+
+/**
+ * 参数设置指令Service接口
+ *
+ * @author: WYY
+ * @date 2021-05-10 14:39
+ */
+@Service
+public class DeviceSetupMethodService extends ServiceImpl<DeviceSetupMethodMapper, DeviceSetupMethodEntity> {
+
+    @Resource
+    private DeviceSetupMethodMapper deviceSetupMethodMapper;
+    @Autowired
+    private DeviceSetupRecordService deviceSetupRecordService;
+    @Autowired
+    private DeviceService deviceService;
+    @Value("${send.setsetup.url}")
+    private  String setSetupUrl;
+    @Autowired
+    private ParmSettingService parmSettingService;
+
+    /**
+     * 查列表
+     */
+    public List<DeviceSetupMethodEntity> findList(DeviceSetupMethodEntity deviceSetupMethodEntity) {
+        return deviceSetupMethodMapper.findList(deviceSetupMethodEntity);
+    }
+
+    /**
+     * 批量删除
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delDeviceSetupMethodByIds(Long[] ids) {
+
+        return this.removeByIds(Arrays.asList(ids));
+
+    }
+
+    /**
+     * 单个删除
+     */
+    public boolean delDeviceSetupMethodById(Long id) {
+
+
+        return this.removeById(id);
+
+    }
+
+    /**
+     * 保存
+     */
+    public boolean addDeviceSetupMethod(DeviceSetupMethodEntity deviceSetupMethod) {
+
+        if (this.save(deviceSetupMethod)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 修改根居ID
+     */
+    public boolean updateDeviceSetupMethodById(DeviceSetupMethodEntity deviceSetupMethod) {
+
+        if (this.updateById(deviceSetupMethod)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 根居ID获取对象
+     */
+    public DeviceSetupMethodEntity findDeviceSetupMethodById(Long id) {
+        return deviceSetupMethodMapper.findDeviceSetupMethodById(id);
+    }
+
+    /**
+     * 添加设备指令
+     *
+     * @param type
+     * @param deviceId
+     * @param attributeId
+     * @param parms
+     * @return
+     */
+    public boolean setSetupForDevice(Integer type, Long  sceneId,Long deviceId, Long attributeId, String parms) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        String methodParms = "";
+        //查询设备
+        DeviceEntity deviceEntity = deviceService.selectById(deviceId);
+        if (deviceEntity == null)
+            return false;
+        //查询操作方法
+        DeviceSetupMethodEntity info = new DeviceSetupMethodEntity();
+        info.setType(type);
+        info.setDeviceId(deviceId);
+        info.setAttributeId(attributeId);
+        List<DeviceSetupMethodEntity> deviceSetupMethodEntities = deviceSetupMethodMapper.findList(info);
+        //查询到操作方法后执行操作
+        if (deviceSetupMethodEntities.size() > 0) {
+            String method = deviceSetupMethodEntities.get(0).getMethod();
+            methodParms = deviceSetupMethodEntities.get(0).getParams();
+            SetupMethod setupMethod = new SetupMethod();
+            setupMethod.setMethod(method);
+            setupMethod.setUnitIdentifier(deviceEntity.getDeviceCode());
+            setupMethod.setReceiveTime(new Date());
+            //封装指令
+            String[] parm = parms.split(",");
+            ObjectMapper mapper = new ObjectMapper();
+            for (String item : parm) {
+                methodParms = methodParms.replaceFirst("%", item);
+            }
+            JsonNode node = null;
+            try {
+                node = mapper.readTree(methodParms);
+            } catch (IOException e) {
+                return false;
+            }
+            setupMethod.setParams(node);
+            String result = "";
+            try {
+                result = HttpRequest.doPost(setSetupUrl, JacksonUtil.obj2String(setupMethod));
+            } catch (IOException e) {
+                return false;
+            }
+
+            //添加操作记录
+            DeviceSetupRecordEntity deviceSetupRecordEntity = new DeviceSetupRecordEntity();
+            deviceSetupRecordEntity.setType(type);
+            deviceSetupRecordEntity.setAttributeId(attributeId);
+            deviceSetupRecordEntity.setDeviceId(deviceId);
+            deviceSetupRecordEntity.setCreateBy(currentUser.getUsername());
+            deviceSetupRecordEntity.setUpdateBy(currentUser.getUsername());
+
+            try {
+                JsonNode resultNode = mapper.readTree(result);
+                if (resultNode.get("status").toString().equals("0")) {
+                    deviceSetupRecordEntity.setState(1);
+                } else {
+                    deviceSetupRecordEntity.setState(1);
+                }
+            } catch (IOException e) {
+                return false;
+            }
+            deviceSetupRecordEntity.setStatus(1);
+            deviceSetupRecordEntity.setDateCreate(new Date());
+            deviceSetupRecordEntity.setDateUpdate(new Date());
+            deviceSetupRecordEntity.setSceneId(sceneId);
+            deviceSetupRecordEntity.setParams(methodParms);
+            deviceSetupRecordEntity.setTenantId(currentUser.getTenantId());
+            deviceSetupRecordEntity.setSetupMethodId(deviceSetupMethodEntities.get(0).getId());
+
+            deviceSetupRecordService.addDeviceSetupRecord(deviceSetupRecordEntity);
+        }
+        return true;
+    }
+    /**
+     * 校验密码
+     * @param password
+     * @return
+     */
+    public Boolean checkPassword(String password) {
+        //校验密钥
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        ParmSettingEntity parmSettingEntity = new ParmSettingEntity();
+        parmSettingEntity.setEnableState(1);
+        parmSettingEntity.setParmType(1);
+        parmSettingEntity.setCompanyOrgId(Long.valueOf(currentUser.getCompanyId()));
+        parmSettingEntity.setTenantId(currentUser.getTenantId());
+        List<ParmSettingEntity> parmSettingEntities = parmSettingService.findList(parmSettingEntity);
+        if (parmSettingEntities.size() == 0) {
+            return false;
+        }
+        if (password.equals(parmSettingEntities.get(0).getParmValue())) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}

+ 94 - 0
sms_water/src/main/java/com/huaxu/service/DeviceSetupRecordService.java

@@ -0,0 +1,94 @@
+package com.huaxu.service;
+
+
+import com.huaxu.dao.DeviceSetupRecordMapper;
+import com.huaxu.entity.DeviceSetupRecordEntity;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+
+import javax.annotation.Resource;
+
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Map;
+import java.util.List;
+import java.util.Arrays;
+
+/**
+ * 参数设置指令记录Service接口
+ *
+ * @author: WYY
+ * @date 2021-05-10 14:39
+ */
+@Service
+public class DeviceSetupRecordService extends ServiceImpl<DeviceSetupRecordMapper, DeviceSetupRecordEntity> {
+
+    @Resource
+    private DeviceSetupRecordMapper deviceSetupRecordMapper;
+    /**
+     * 查列表
+     */
+    public List<DeviceSetupRecordEntity> findList(DeviceSetupRecordEntity deviceSetupRecordEntity) {
+        return deviceSetupRecordMapper.findList(deviceSetupRecordEntity);
+    }
+
+    /**
+     * 批量删除
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delDeviceSetupRecordByIds(Long[] ids) {
+
+        return this.removeByIds(Arrays.asList(ids));
+
+    }
+
+    /**
+     * 单个删除
+     */
+    public boolean delDeviceSetupRecordById(Long id) {
+
+
+        return this.removeById(id);
+
+    }
+
+    /**
+     * 保存
+     */
+    public boolean addDeviceSetupRecord(DeviceSetupRecordEntity deviceSetupRecord) {
+
+        if (this.save(deviceSetupRecord)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 修改根居ID
+     */
+    public boolean updateDeviceSetupRecordById(DeviceSetupRecordEntity deviceSetupRecord) {
+
+        if (this.updateById(deviceSetupRecord)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 根居ID获取对象
+     */
+    public DeviceSetupRecordEntity findDeviceSetupRecordById(Long id) {
+        return deviceSetupRecordMapper.findDeviceSetupRecordById(id);
+    }
+
+    /**
+     * 查询最后一条操作记录
+     * @param deviceSetupRecordEntity
+     * @return
+     */
+    public DeviceSetupRecordEntity selectLastOne(DeviceSetupRecordEntity deviceSetupRecordEntity) {
+        return deviceSetupRecordMapper.selectLastOne(deviceSetupRecordEntity);
+    }
+}

+ 91 - 0
sms_water/src/main/java/com/huaxu/service/ParmSettingService.java

@@ -0,0 +1,91 @@
+package com.huaxu.service;
+
+
+import com.huaxu.dao.ParmSettingMapper;
+import com.huaxu.entity.ParmSettingEntity;
+import com.huaxu.model.LoginUser;
+import com.huaxu.util.UserUtil;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+
+import javax.annotation.Resource;
+
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Map;
+import java.util.List;
+import java.util.Arrays;
+
+/**
+ * 参数设置Service接口
+ *
+ * @author: WYY
+ * @date 2021-05-11 10:30
+ */
+@Service
+public class ParmSettingService extends ServiceImpl<ParmSettingMapper, ParmSettingEntity> {
+
+    @Resource
+    private ParmSettingMapper parmSettingMapper;
+
+    /**
+     * 查列表
+     */
+    public List<ParmSettingEntity> findList(ParmSettingEntity parmSettingEntity) {
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        if(currentUser!=null) {
+            parmSettingEntity.setTenantId(currentUser.getTenantId());
+        }
+        return parmSettingMapper.findList(parmSettingEntity);
+    }
+
+    /**
+     * 批量删除
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delParmSettingByIds(Long[] ids) {
+
+        return this.removeByIds(Arrays.asList(ids));
+
+    }
+
+    /**
+     * 单个删除
+     */
+    public boolean delParmSettingById(Long id) {
+
+
+        return this.removeById(id);
+
+    }
+
+    /**
+     * 保存
+     */
+    public boolean addParmSetting(ParmSettingEntity parmSetting) {
+        if (this.save(parmSetting)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 修改根居ID
+     */
+    public boolean updateParmSettingById(ParmSettingEntity parmSetting) {
+
+        if (this.updateById(parmSetting)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 根居ID获取对象
+     */
+    public ParmSettingEntity findParmSettingById(Long id) {
+        return parmSettingMapper.findParmSettingById(id);
+    }
+}

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

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

+ 15 - 4
sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java

@@ -265,6 +265,19 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
 
         //处理完成后,剩下的标记为历史数据
         if(alarmDetailsDtoMap.values().size() > 0) {
+            //循环更新历史报警数据
+            Long currentTime =System.currentTimeMillis(); //系统时间
+            for(AlarmDetailsDto value : alarmDetailsDtoMap.values()){
+                value.setDateUpdate(new Date());
+                //从对象中拿到时间
+                Long startTime = value.getAlarmStartTime().getTime();
+                Long diff=(currentTime-startTime)/1000/60;
+                value.setAlarmValue(diff.doubleValue());
+                value.setAlarmEndTime(new Date());
+                value.setState(0);
+                alarmDetailMapper.update(value);//直接更新
+            }
+
             //恢复正常的设备id
             Set<Long> deviceIds = alarmDetailsDtoMap.values().stream()
                     .map(a -> a.getDeviceId().longValue())
@@ -274,8 +287,6 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
             //对报警信息分组
             Map<Integer,List<AlarmDetailsDto>> deviceIdAlarmDetailsMap = alarmDetailsDtoMap.values().stream().collect(Collectors.groupingBy(AlarmDetailsDto::getDeviceId));
             if (workOrders.size() > 0) {
-                //系统时间
-                Long currentTime =System.currentTimeMillis();
                 List<WorkOrderManageByAlarmDto> orderUpdate = new ArrayList<>();
                 List<Long> orderDelete = new ArrayList<>();
 
@@ -285,14 +296,14 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
                     List<AlarmDetailsDto> alarmDetailsDtoList = deviceIdAlarmDetailsMap.get(orderManageByAlarmDto.getDeviceId().intValue());
                     //标记为历史数据 并 修改工单描述
                     for (AlarmDetailsDto alarmDetailsDto : alarmDetailsDtoList) {
-                        alarmDetailsDto.setDateUpdate(new Date());
+                        /*alarmDetailsDto.setDateUpdate(new Date());
                         //从对象中拿到时间
                         Long startTime = alarmDetailsDto.getAlarmStartTime().getTime();
                         Long diff=(currentTime-startTime)/1000/60;
                         alarmDetailsDto.setAlarmValue(diff.doubleValue());
                         alarmDetailsDto.setAlarmEndTime(new Date());
                         alarmDetailsDto.setState(0);
-                        alarmDetailMapper.update(alarmDetailsDto);//直接更新
+                        alarmDetailMapper.update(alarmDetailsDto);//直接更新*/
                         taskDesc = taskDesc.replace(";" + alarmDetailsDto.getAlarmContent(), "")
                                 .replace(alarmDetailsDto.getAlarmContent(), "");
                     }

+ 2 - 0
sms_water/src/main/resources/application-dev.properties

@@ -171,6 +171,8 @@ aysnc.pool.keep-alive=200
 aysnc.queue-capacity=100000
 #线程名称前缀
 aysnc.thread-name-prefix=aysnc-thread-
+#指令下发调用接口地址
+send.setsetup.url=http://114.135.61.188:48322/center/command/send
 
 
 

+ 2 - 0
sms_water/src/main/resources/application-prd.properties

@@ -160,4 +160,6 @@ aysnc.pool.keep-alive=200
 aysnc.queue-capacity=100000
 #线程名称前缀
 aysnc.thread-name-prefix=aysnc-thread-
+#指令下发调用接口地址
+send.setsetup.url=http://114.135.61.188:48322/center/command/send
 

+ 3 - 1
sms_water/src/main/resources/application-sit.properties

@@ -161,4 +161,6 @@ aysnc.pool.keep-alive=200
 #队列容量
 aysnc.queue-capacity=100000
 #线程名称前缀
-aysnc.thread-name-prefix=aysnc-thread-
+aysnc.thread-name-prefix=aysnc-thread-
+#指令下发调用接口地址
+send.setsetup.url=http://114.135.61.188:48322/center/command/send

+ 75 - 0
sms_water/src/main/resources/mapper/DeviceSetupMethodMapper.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huaxu.dao.DeviceSetupMethodMapper">
+
+
+    <resultMap type="com.huaxu.entity.DeviceSetupMethodEntity" id="DeviceSetupMethodResult">
+        <result property="id" column="id"/>
+        <result property="deviceId" column="device_id"/>
+        <result property="attributeId" column="attribute_id"/>
+        <result property="type" column="type"/>
+        <result property="method" column="method"/>
+        <result property="params" column="params"/>
+        <result property="status" column="status"/>
+        <result property="dateCreate" column="date_create"/>
+        <result property="createBy" column="create_by"/>
+        <result property="dateUpdate" column="date_update"/>
+        <result property="updateBy" column="update_by"/>
+    </resultMap>
+
+    <!--  实体栏位  -->
+    <sql id="deviceSetupMethodColumns">
+         a.id as "id" ,
+         a.device_id as "deviceId" ,
+         a.attribute_id as "attributeId" ,
+         a.type as "type" ,
+         a.method as "method" ,
+         a.params as "params" ,
+         a.status as "status" ,
+         a.date_create as "dateCreate" ,
+         a.create_by as "createBy" ,
+         a.date_update as "dateUpdate" ,
+         a.update_by as "updateBy" 
+     </sql>
+
+
+    <!--  根据主键获取实体   -->
+    <select id="findDeviceSetupMethodById" resultType="com.huaxu.entity.DeviceSetupMethodEntity">
+        SELECT
+        <include refid="deviceSetupMethodColumns"/>
+        FROM sms_device_setup_method a
+        WHERE a.id = #{id} and a.status=1
+    </select>
+
+    <!--  根据获取实体List   -->
+    <select id="findList" resultType="com.huaxu.entity.DeviceSetupMethodEntity">
+        SELECT
+        <include refid="deviceSetupMethodColumns"/>
+        FROM sms_device_setup_method a
+        <where>
+            <if test="deviceId != null ">and a.device_id = #{deviceId}</if>
+            <if test="attributeId != null ">and a.attribute_id = #{attributeId}</if>
+            <if test="type != null ">and a.type = #{type}</if>
+            <if test="method != null  and method != ''">and a.method = #{method}</if>
+            and a.status=1
+        </where>
+    </select>
+
+    <!--  根据获取实体 page   -->
+    <select id="findPage" resultType="com.huaxu.entity.DeviceSetupMethodEntity">
+        SELECT
+        <include refid="deviceSetupMethodColumns"/>
+        FROM sms_device_setup_method a
+        <where>
+            <if test="deviceSetupMethod.deviceId != null ">and a.device_id = #{deviceSetupMethod.deviceId}</if>
+            <if test="deviceSetupMethod.attributeId != null ">and a.attribute_id = #{deviceSetupMethod.attributeId}</if>
+            <if test="deviceSetupMethod.type != null ">and a.type = #{deviceSetupMethod.type}</if>
+            <if test="deviceSetupMethod.method != null  and deviceSetupMethod.method != ''">and a.method =
+                #{deviceSetupMethod.method}
+            </if>
+            and a.status=1
+        </where>
+    </select>
+</mapper>

+ 105 - 0
sms_water/src/main/resources/mapper/DeviceSetupRecordMapper.xml

@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huaxu.dao.DeviceSetupRecordMapper">
+
+
+    <resultMap type="DeviceSetupRecordEntity" id="DeviceSetupRecordResult">
+        <result property="id" column="id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="sceneId" column="scene_id"/>
+        <result property="deviceId" column="device_id"/>
+        <result property="attributeId" column="attribute_id"/>
+        <result property="setupMethodId" column="setup_method_id"/>
+        <result property="state" column="state"/>
+        <result property="params" column="params"/>
+        <result property="status" column="status"/>
+        <result property="dateCreate" column="date_create"/>
+        <result property="createBy" column="create_by"/>
+        <result property="dateUpdate" column="date_update"/>
+        <result property="updateBy" column="update_by"/>
+    </resultMap>
+
+    <!--  实体栏位  -->
+    <sql id="deviceSetupRecordColumns">
+         a.id as "id" ,
+         a.scene_id as "sceneId" ,
+         a.TENANT_ID as "tenantId",
+         a.device_id as "deviceId" ,
+         a.attribute_id as "attributeId" ,
+         a.setup_method_id as "setupMethodId" ,
+         a.state as "state" ,
+         a.params as "params" ,
+         a.status as "status" ,
+         a.date_create as "dateCreate" ,
+         a.create_by as "createBy" ,
+         a.date_update as "dateUpdate" ,
+         a.update_by as "updateBy" 
+     </sql>
+
+
+    <!--  根据主键获取实体   -->
+    <select id="findDeviceSetupRecordById" resultType="com.huaxu.entity.DeviceSetupRecordEntity">
+        SELECT
+        <include refid="deviceSetupRecordColumns"/>
+        FROM sms_device_setup_record a
+
+        WHERE a.id = #{id}
+    </select>
+
+    <!--  根据获取实体List   -->
+    <select id="findList" resultType="com.huaxu.entity.DeviceSetupRecordEntity">
+        SELECT
+        <include refid="deviceSetupRecordColumns"/>
+        FROM sms_device_setup_record a
+
+        <where>
+            <if test="tenantId != null  and tenantId != ''">and a.tenant_id = #{tenantId}</if>
+            <if test="sceneId != null ">and a.scene_id = #{sceneId}</if>
+            <if test="deviceId != null ">and a.device_id = #{deviceId}</if>
+            <if test="attributeId != null ">and a.attribute_id = #{attributeId}</if>
+            <if test="setupMethodId != null ">and a.setup_method_id = #{setupMethodId}</if>
+            <if test="state != null  and state != ''">and a.state = #{state}</if>
+        </where>
+    </select>
+
+    <!--  根据获取实体List   -->
+    <select id="selectLastOne" resultType="com.huaxu.entity.DeviceSetupRecordEntity">
+        SELECT
+        <include refid="deviceSetupRecordColumns"/>
+        FROM sms_device_setup_record a
+        inner join sms_device_setup_method b on a.setup_method_id=b.id
+        <where>
+            <if test="tenantId != null  and tenantId != ''">and a.tenant_id = #{tenantId}</if>
+            <if test="sceneId != null ">and a.scene_id = #{sceneId}</if>
+            <if test="deviceId != null ">and a.device_id = #{deviceId}</if>
+            <if test="attributeId != null ">and a.attribute_id = #{attributeId}</if>
+            <if test="setupMethodId != null ">and a.setup_method_id = #{setupMethodId}</if>
+            <if test="state != null  and state != ''">and a.state = #{state}</if>
+            <if test="type != null">and b.type = #{type}</if>
+        </where>
+        order by a.date_create desc
+        limit 1
+    </select>
+
+    <!--  根据获取实体 page   -->
+    <select id="findPage" resultType="com.huaxu.entity.DeviceSetupRecordEntity">
+        SELECT
+        <include refid="deviceSetupRecordColumns"/>
+        FROM sms_device_setup_record a
+
+        <where>
+            <if test="tenantId != null  and tenantId != ''">and a.tenant_id = #{tenantId}</if>
+            <if test="deviceSetupRecord.sceneId != null ">and a.scene_id = #{deviceSetupRecord.sceneId}</if>
+            <if test="deviceSetupRecord.deviceId != null ">and a.device_id = #{deviceSetupRecord.deviceId}</if>
+            <if test="deviceSetupRecord.attributeId != null ">and a.attribute_id = #{deviceSetupRecord.attributeId}</if>
+            <if test="deviceSetupRecord.setupMethodId != null ">and a.setup_method_id =
+                #{deviceSetupRecord.setupMethodId}
+            </if>
+            <if test="deviceSetupRecord.state != null  and deviceSetupRecord.state != ''">and a.state =
+                #{deviceSetupRecord.state}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 82 - 0
sms_water/src/main/resources/mapper/ParmSettingMapper.xml

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huaxu.dao.ParmSettingMapper">
+
+
+    <resultMap type="com.huaxu.entity.ParmSettingEntity" id="ParmSettingResult">
+        <result property="id" column="id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="companyOrgId" column="company_org_id"/>
+        <result property="parmType" column="parm_type"/>
+        <result property="parmValue" column="parm_value"/>
+        <result property="enableState" column="enable_state"/>
+        <result property="status" column="status"/>
+        <result property="dateCreate" column="date_create"/>
+        <result property="createBy" column="create_by"/>
+        <result property="dateUpdate" column="date_update"/>
+        <result property="updateBy" column="update_by"/>
+    </resultMap>
+
+    <!--  实体栏位  -->
+    <sql id="parmSettingColumns">
+         a.id as "id" ,
+         a.tenant_id as "tenantId" ,
+         a.company_org_id as "companyOrgId" ,
+         a.parm_type as "parmType" ,
+         a.parm_value as "parmValue" ,
+         a.enable_state as "enableState" ,
+         a.status as "status" ,
+         a.date_create as "dateCreate" ,
+         a.create_by as "createBy" ,
+         a.date_update as "dateUpdate" ,
+         a.update_by as "updateBy" 
+     </sql>
+
+
+    <!--  根据主键获取实体   -->
+    <select id="findParmSettingById" resultType="com.huaxu.entity.ParmSettingEntity">
+        SELECT
+        <include refid="parmSettingColumns"/>
+        FROM sms_parm_setting a
+
+        WHERE a.id = #{id} and a.status=1
+    </select>
+
+    <!--  根据获取实体List   -->
+    <select id="findList" resultType="com.huaxu.entity.ParmSettingEntity">
+        SELECT
+        <include refid="parmSettingColumns"/>
+        FROM sms_parm_setting a
+
+        <where>
+            <if test="tenantId != null  and tenantId != ''">and a.tenant_id = #{tenantId}</if>
+            <if test="companyOrgId != null ">and a.company_org_id = #{companyOrgId}</if>
+            <if test="parmType != null ">and a.parm_type = #{parmType}</if>
+            <if test="parmValue != null  and parmValue != ''">and a.parm_value = #{parmValue}</if>
+            <if test="enableState != null ">and a.enable_state = #{enableState}</if>
+            and a.status=1
+        </where>
+    </select>
+
+    <!--  根据获取实体 page   -->
+    <select id="findPage" resultType="com.huaxu.entity.ParmSettingEntity">
+        SELECT
+        <include refid="parmSettingColumns"/>
+        FROM sms_parm_setting a
+
+        <where>
+            <if test="parmSetting.tenantId != null  and parmSetting.tenantId != ''">and a.tenant_id =
+                #{parmSetting.tenantId}
+            </if>
+            <if test="parmSetting.companyOrgId != null ">and a.company_org_id = #{parmSetting.companyOrgId}</if>
+            <if test="parmSetting.parmType != null ">and a.parm_type = #{parmSetting.parmType}</if>
+            <if test="parmSetting.parmValue != null  and parmSetting.parmValue != ''">and a.parm_value =
+                #{parmSetting.parmValue}
+            </if>
+            <if test="parmSetting.enableState != null ">and a.enable_state = #{parmSetting.enableState}</if>
+            and a.status=1
+        </where>
+    </select>
+</mapper>

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

@@ -428,4 +428,95 @@
             </if>
         </where>
     </select>
+    <!--报警场景及报警设备查询-->
+    <select id="selectAlarmSceneAndDevice" resultType="map">
+        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>
+            a.PARENT_SCENE_ID=0 and a.STATUS=1
+            <if test="scene.tenantId != null  and scene.tenantId != ''">
+                and a.tenant_id = #{scene.tenantId}
+            </if>
+            <if test="scene.userType!=null and scene.userType!=-999 and scene.userType!=-9999 and  scene.programItems != null and scene.programItems.size() > 0">
+                <if test="scene.permissonType == 5 or scene.permissonType == 2">
+                    and ( a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    or
+                    a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    )
+                </if>
+                <if test="scene.permissonType == 4 or scene.permissonType == 3">
+                    and a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                </if>
+                <if test="scene.permissonType == 1">
+                    and a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    and (a.DEPT_ORG_ID is null or a.DEPT_ORG_ID =0)
+                </if>
+            </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')
+            and SCENE_TYPE_NAME in('水源','水厂','泵站')
+        </where>
+        group by a.SCENE_NAME, a.ID, 2
+
+        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
+        INNER JOIN sms_device d on c.DEVICE_ID=d.ID
+        <where>
+            a.PARENT_SCENE_ID=0 and a.STATUS=1
+            <if test="scene.tenantId != null  and scene.tenantId != ''">
+                and a.tenant_id = #{scene.tenantId}
+            </if>
+            <if test="scene.userType!=null and scene.userType!=-999 and scene.userType!=-9999 and  scene.programItems != null and scene.programItems.size() > 0">
+                <if test="scene.permissonType == 5 or scene.permissonType == 2">
+                    and ( a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    or
+                    a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    )
+                </if>
+                <if test="scene.permissonType == 4 or scene.permissonType == 3">
+                    and a.DEPT_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                </if>
+                <if test="scene.permissonType == 1">
+                    and a.COMPANY_ORG_ID in
+                    <foreach collection="scene.programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    and (a.DEPT_ORG_ID is null or a.DEPT_ORG_ID =0)
+                </if>
+            </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')
+            and SCENE_TYPE_NAME='管网'
+        </where>
+        group by d.DEVICE_NAME, d.ID, 1
+    </select>
+
+
+
+
 </mapper>

+ 11 - 4
user_center/src/main/java/com/huaxu/controller/UserController.java

@@ -311,11 +311,18 @@ public class UserController {
     @ApiOperation(value = "查询运维人员数量情况")
     @RequestMapping(value = "/findMaintainer", method = RequestMethod.GET)
     public AjaxMessage<MaintainerCountDto> findMaintainer(
-            @ApiParam(value = "开始时间", required = true) @RequestParam String startTime,
-            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endTime,
-            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer type) {
-        MaintainerCountDto maintainerCountDto = userService.findMaintainer(startTime,endTime,type);
+            @ApiParam(value = "开始时间", required = true) @RequestParam String startDate,
+            @ApiParam(value = "结束时间", required = false) @RequestParam(required = false) String endDate,
+            @ApiParam(value = "统计类型0按月、1按年、2自定义", required = true)@RequestParam Integer statsType) {
+        MaintainerCountDto maintainerCountDto = userService.findMaintainer(startDate,endDate,statsType);
         return new AjaxMessage<>(ResultStatus.OK, maintainerCountDto);
     }
 
+    @ApiOperation(value = "查询运维人员数量")
+    @RequestMapping(value = "/findMaintainerCount", method = RequestMethod.GET)
+    public Integer findMaintainerCount(
+            @ApiParam(value = "结束时间(YYYY-MM)", required = true) @RequestParam String endDate) {
+        return userService.findMaintainerCount(endDate);
+    }
+
 }

+ 29 - 8
user_center/src/main/java/com/huaxu/service/UserService.java

@@ -472,7 +472,7 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		List<UserEntity> userEntities = userMapper.findUserListByType(userEntity);
 		return userEntities;
 	}
-	public MaintainerCountDto findMaintainer(String startTime, String endTime, Integer type){
+	public MaintainerCountDto findMaintainer(String startDate, String endDate, Integer statsType){
 		MaintainerCountDto result=new MaintainerCountDto();
 		try {
 			LoginUser currentUser = UserUtil.getCurrentUser();
@@ -484,22 +484,22 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 			Calendar c=Calendar.getInstance();
 			Date thisDate=null, dateMtoM=null,dateYtoY=null;
-			if(type==0){
-				dateMtoM=sdf.parse(startTime+"-1");
+			if(statsType==0){
+				dateMtoM=sdf.parse(startDate+"-1");
 				c.setTime(dateMtoM);
 				c.add(Calendar.MONTH,1);
 				thisDate=c.getTime();
 				c.add(Calendar.YEAR,-1);
 				dateYtoY=c.getTime();
-			}else if(type==1){
-				dateMtoM=sdf.parse(startTime+"-1-1");
+			}else if(statsType==1){
+				dateMtoM=sdf.parse(startDate+"-1-1");
 				dateYtoY=dateMtoM;
 				c.setTime(dateMtoM);
 				c.add(Calendar.YEAR,1);
 				thisDate=c.getTime();
-			}else if(type==2){
-				dateMtoM=sdf.parse(startTime+"-1");
-				thisDate=sdf.parse(endTime+"-1");
+			}else if(statsType==2){
+				dateMtoM=sdf.parse(startDate+"-1");
+				thisDate=sdf.parse(endDate+"-1");
 				c.setTime(thisDate);
 				c.add(Calendar.MONTH,1);
 				thisDate=c.getTime();
@@ -519,4 +519,25 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		}
 		return result;
 	}
+
+	public Integer findMaintainerCount(String endDate){
+		Integer maintainerCount=0;
+		try {
+			LoginUser currentUser = UserUtil.getCurrentUser();
+			UserEntity userEntity = new UserEntity();
+			userEntity.setTenantId(currentUser.getTenantId());
+			userEntity.setProgramItems(currentUser.getProgramItemList());
+			//1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+			userEntity.setPermissonType(currentUser.getPermissonType());
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+			Calendar c=Calendar.getInstance();
+			c.setTime(sdf.parse(endDate+"-1"));
+			c.add(Calendar.MONTH,1);
+			userEntity.setDateCreate(c.getTime());
+			maintainerCount=userMapper.findMaintainer(userEntity);
+		}catch (Exception e){
+			e.printStackTrace();
+		}
+		return maintainerCount;
+	}
 }