Bläddra i källkod

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

wangyangyang 4 år sedan
förälder
incheckning
4e1af56f5a
63 ändrade filer med 2125 tillägg och 284 borttagningar
  1. 2 2
      message/src/main/java/com/huaxu/controller/MessageController.java
  2. 1 1
      message/src/main/java/com/huaxu/dao/MessageMapper.java
  3. 11 6
      message/src/main/java/com/huaxu/mq/DispatchMessage.java
  4. 1 1
      message/src/main/java/com/huaxu/service/MessageService.java
  5. 2 3
      message/src/main/java/com/huaxu/service/impl/MessageServiceImpl.java
  6. 23 0
      message/src/main/resources/logback-spring.xml
  7. 3 0
      message/src/main/resources/mapper/MessageMapper.xml
  8. 1 1
      operation_manager/src/main/java/com/huaxu/config/ResourceServerConfig.java
  9. 3 0
      operation_manager/src/main/java/com/huaxu/order/dto/WorkOrderManageByAlarmDto.java
  10. 39 37
      operation_manager/src/main/java/com/huaxu/process/activiti/Service/ProgressSevice.java
  11. 6 2
      operation_manager/src/main/java/com/huaxu/process/controller/WorkFlowController.java
  12. 2 0
      operation_manager/src/main/java/com/huaxu/process/entity/ProcessDefinition.java
  13. 4 1
      operation_manager/src/main/java/com/huaxu/process/service/impl/WorkFlowServiceImpl.java
  14. 10 13
      operation_manager/src/main/resources/application-prd.properties
  15. 9 2
      operation_manager/src/main/resources/mapper/ProcessDefinitionMapper.xml
  16. 1 0
      operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml
  17. 5 0
      sms_water/src/main/java/com/huaxu/client/UserCenterClient.java
  18. 197 0
      sms_water/src/main/java/com/huaxu/config/RabbitConfig.java
  19. 45 0
      sms_water/src/main/java/com/huaxu/controller/ComDisplayController.java
  20. 132 0
      sms_water/src/main/java/com/huaxu/controller/HomePageReportController.java
  21. 1 1
      sms_water/src/main/java/com/huaxu/dao/AlarmDetailMapper.java
  22. 65 0
      sms_water/src/main/java/com/huaxu/dao/HomePageReportMapper.java
  23. 2 0
      sms_water/src/main/java/com/huaxu/dao/MonitorDataMapper.java
  24. 5 2
      sms_water/src/main/java/com/huaxu/dao/MonitorDataReportMapper.java
  25. 6 2
      sms_water/src/main/java/com/huaxu/dto/MonitorDataCollectDto.java
  26. 5 1
      sms_water/src/main/java/com/huaxu/dto/OnlineDataDto.java
  27. 3 0
      sms_water/src/main/java/com/huaxu/dto/WorkOrderManageByAlarmDto.java
  28. 3 1
      sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterSupply.java
  29. 10 0
      sms_water/src/main/java/com/huaxu/dto/generalView/WaterSupplyChart.java
  30. 28 0
      sms_water/src/main/java/com/huaxu/dto/homePage/CompanyCount.java
  31. 43 0
      sms_water/src/main/java/com/huaxu/dto/homePage/CompanyProduce.java
  32. 47 0
      sms_water/src/main/java/com/huaxu/dto/homePage/WaterQualityRate.java
  33. 35 0
      sms_water/src/main/java/com/huaxu/dto/homePage/WaterQualityRateForScene.java
  34. 65 30
      sms_water/src/main/java/com/huaxu/rabbitmq/ReceiveData.java
  35. 51 3
      sms_water/src/main/java/com/huaxu/service/AlarmSettingService.java
  36. 52 0
      sms_water/src/main/java/com/huaxu/service/HomePageReportService.java
  37. 5 0
      sms_water/src/main/java/com/huaxu/service/MonitorDataReportService.java
  38. 2 2
      sms_water/src/main/java/com/huaxu/service/MonitorDataService.java
  39. 76 28
      sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java
  40. 355 0
      sms_water/src/main/java/com/huaxu/service/impl/HomePageReportServiceImpl.java
  41. 12 8
      sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java
  42. 42 40
      sms_water/src/main/java/com/huaxu/service/impl/MonitorDataServiceImpl.java
  43. 44 28
      sms_water/src/main/resources/application-dev.properties
  44. 44 11
      sms_water/src/main/resources/application-prd.properties
  45. 40 7
      sms_water/src/main/resources/application-sit.properties
  46. 8 0
      sms_water/src/main/resources/mapper/AlarmDetailMapper.xml
  47. 369 0
      sms_water/src/main/resources/mapper/HomePageReportMapper.xml
  48. 13 0
      sms_water/src/main/resources/mapper/MonitorDataMapper.xml
  49. 7 0
      sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml
  50. 65 8
      sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml
  51. 9 1
      user_auth/src/main/resources/application-prd.properties
  52. 1 1
      user_auth/src/main/resources/application.properties
  53. 19 1
      user_center/src/main/java/com/huaxu/controller/OrgController.java
  54. 2 2
      user_center/src/main/java/com/huaxu/controller/UserController.java
  55. 5 0
      user_center/src/main/java/com/huaxu/dao/OrgMapper.java
  56. 4 0
      user_center/src/main/java/com/huaxu/entity/Org.java
  57. 3 0
      user_center/src/main/java/com/huaxu/service/OrgService.java
  58. 43 32
      user_center/src/main/java/com/huaxu/service/UserService.java
  59. 6 0
      user_center/src/main/java/com/huaxu/service/impl/OrgServiceImpl.java
  60. 5 0
      user_center/src/main/resources/application-dev.properties
  61. 3 3
      user_center/src/main/resources/application-prd.properties
  62. 3 3
      user_center/src/main/resources/application-sit.properties
  63. 22 0
      user_center/src/main/resources/mapper/OrgMapper.xml

+ 2 - 2
message/src/main/java/com/huaxu/controller/MessageController.java

@@ -73,9 +73,9 @@ public class MessageController {
      */
     @RequestMapping(value = "queryLastMessage", method = RequestMethod.POST)
     @ApiOperation(value = "查询最新消息")
-    public AjaxMessage<List<Message>> queryLastMessage(int num) {
+    public AjaxMessage<List<Message>> queryLastMessage(int num,Integer type) {
 
-       return new AjaxMessage<>(ResultStatus.OK,messageService.queryLastMessage(num));
+       return new AjaxMessage<>(ResultStatus.OK,messageService.queryLastMessage(num,type));
     }
     /**
      * 分页查询

+ 1 - 1
message/src/main/java/com/huaxu/dao/MessageMapper.java

@@ -83,7 +83,7 @@ public interface MessageMapper {
 
     IPage<Message> selectPage(IPage<Message> page, Message message);
 
-    List<Message> queryLastMessage(@Param("num") int num,@Param("id") Integer id);
+    List<Message> queryLastMessage(@Param("num") int num, @Param("id") Integer id, Integer type);
 
     List<MessageStatic> queryUnreadMessageStatic(Integer id);
 

+ 11 - 6
message/src/main/java/com/huaxu/mq/DispatchMessage.java

@@ -53,12 +53,17 @@ public class DispatchMessage {
         MessageType messageType = messageTypeMapper.selectById(messageTypeId);
         MessageDto messageDto = new MessageDto();
         String receiveMessageContent=receiveMessage.getMessageContent();
-        if(messageTemplate!=null&&receiveMessageContent.contains("{")){
-            String content = messageTemplate.getContent();
-            Map<String,String> param = JSONObject.parseObject(receiveMessageContent, Map.class);
-            String replaceContent = Parser.replaceAllClearBlanks(content, param);
-            receiveMessage.setMessageContent(replaceContent);
-        }
+       try {
+           if(messageTemplate!=null&&receiveMessageContent.contains("{")){
+               String content = messageTemplate.getContent();
+               Map<String,String> param = JSONObject.parseObject(receiveMessageContent, Map.class);
+               String replaceContent = Parser.replaceAllClearBlanks(content, param);
+               receiveMessage.setMessageContent(replaceContent);
+           }
+       }catch (Exception e){
+           e.printStackTrace();
+       }
+
         Integer channel=0;
         if(receiveMessage.getChannel()!=null){
             channel=receiveMessage.getChannel();

+ 1 - 1
message/src/main/java/com/huaxu/service/MessageService.java

@@ -85,5 +85,5 @@ public interface MessageService {
 
     List<MessageStatic> queryUnreadMessageStatic();
 
-    List<Message> queryLastMessage(int num);
+    List<Message> queryLastMessage(int num, Integer type);
 }

+ 2 - 3
message/src/main/java/com/huaxu/service/impl/MessageServiceImpl.java

@@ -12,7 +12,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -174,9 +173,9 @@ public class MessageServiceImpl implements MessageService {
     }
 
     @Override
-    public List<Message> queryLastMessage(int num) {
+    public List<Message> queryLastMessage(int num, Integer type) {
        ;
 
-        return messageMapper.queryLastMessage(num, UserUtil.getCurrentUser().getId());
+        return messageMapper.queryLastMessage(num, UserUtil.getCurrentUser().getId(),type);
     }
 }

+ 23 - 0
message/src/main/resources/logback-spring.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <springProperty scope="context" name="LOG_PATH" source="logging.path" defaultValue="/tmp" />
+    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
+    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
+    <appender name="TIME_FILE"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <encoder>
+            <pattern>${FILE_LOG_PATTERN}</pattern>
+        </encoder>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_PATH}/msg.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <maxHistory>365</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+    </appender>
+    <root level="INFO">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="TIME_FILE" />
+    </root>
+</configuration>

+ 3 - 0
message/src/main/resources/mapper/MessageMapper.xml

@@ -253,6 +253,9 @@
             join uims_message_type b
          on a.message_type=b.id
          where user_id=#{id} and a.status=1
+        <if test="type!= null">
+            and message_status =0
+        </if>
         order by date_create desc limit #{num}
     </select>
     <select id="queryUnreadMessageStatic" resultType="com.huaxu.Dto.MessageStatic">

+ 1 - 1
operation_manager/src/main/java/com/huaxu/config/ResourceServerConfig.java

@@ -23,7 +23,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/workflow/process/image*",
                         "/v2/**")
                 .permitAll() //配置不需要身份认证的请求路径
-                .anyRequest().authenticated() //其他所有访问路径都需要身份认证
+                //.anyRequest().authenticated() //其他所有访问路径都需要身份认证
                 .and()
                 .httpBasic();
     }

+ 3 - 0
operation_manager/src/main/java/com/huaxu/order/dto/WorkOrderManageByAlarmDto.java

@@ -51,4 +51,7 @@ public class WorkOrderManageByAlarmDto implements Serializable {
     @ApiModelProperty(value = "经纬度")
     private String geo;
 
+    @ApiModelProperty(value = "0未接单、1进行中、2完成")
+    private Integer orderStatus;
+
 }

+ 39 - 37
operation_manager/src/main/java/com/huaxu/process/activiti/Service/ProgressSevice.java

@@ -7,9 +7,11 @@ import com.huaxu.process.dto.TaskUserDTO;
 import com.huaxu.process.service.UserFormService;
 import com.huaxu.util.MessageSendUtil;
 import com.huaxu.util.UserUtil;
+import org.activiti.engine.TaskService;
 import org.activiti.engine.delegate.DelegateExecution;
 import org.activiti.engine.delegate.Expression;
 import org.activiti.engine.delegate.JavaDelegate;
+import org.activiti.engine.task.Task;
 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -21,55 +23,55 @@ import java.util.Set;
 import java.util.UUID;
 
 @Component
-public class ProgressSevice  implements JavaDelegate{
-    private Expression expression;
+public class ProgressSevice {
+
 
     @Autowired
     private UserFormService userFormService;
     @Autowired
     private MessageSendUtil messageSendUtil;
-
+    @Autowired
+    TaskService taskService;
     public void execute(DelegateExecution delegateExecution) throws Exception {
-        System.out.println("serviceTask已经执行已经执行!");
-        Map<String, Object> variables = delegateExecution.getVariables();
-        Message message=new Message();
-
-        message.setStatus(1);
-        LoginUser currentUser = UserUtil.getCurrentUser();
-        message.setCreateBy(currentUser.getUsername());
-        message.setTenantId(currentUser.getTenantId());
-        message.setMessageContent(JSONObject.toJSONString(variables));
-        message.setMessageId(UUID.randomUUID().toString());
-        message.setMessageType((Integer) variables.get("msgType"));
-        message.setUrl((String) variables.get("url"));
-        message.setMessageTemplateId((Integer) variables.get("templateId"));
-        String value = (String) expression.getValue(delegateExecution);
-        TaskUserDTO taskUserDTO = JSONObject.parseObject(value, TaskUserDTO.class);
-        message.setChannel(taskUserDTO.getChannel());
-
-        Set<Integer> taskUsers = userFormService.getTaskUsers(taskUserDTO);
-        if(taskUserDTO.getUserFormFlag()==1){
-            String assineeFormUserId = (String)variables.get("assineeFormUserId");
-            if(assineeFormUserId!=null){
-                String[] userIds=assineeFormUserId.split(",");
-                for (String userId : userIds) {
-                    taskUsers.add(Integer.parseInt(userId));
-                }
 
-            }
-        }
-        if(taskUsers!=null){
+     }
+     public void runWithParticipants(DelegateExecution execution,String param){
+         System.out.println("serviceTask已经执行已经执行!");
+         Map<String, Object> variables = execution.getVariables();
 
-            taskUsers.forEach(id->{
-                message.setUserId(id);
-                messageSendUtil.send(message);
-            });
-        }
+         Message message=new Message();
 
+         message.setStatus(1);
+         LoginUser currentUser = UserUtil.getCurrentUser();
+         message.setCreateBy(currentUser.getUsername());
+         message.setTenantId(currentUser.getTenantId());
+         message.setMessageContent(JSONObject.toJSONString(variables));
+         message.setMessageId(UUID.randomUUID().toString());
+         message.setMessageType((Integer) variables.get("msgType"));
+         message.setUrl((String) variables.get("url"));
+         message.setMessageTemplateId((Integer) variables.get("templateId"));
 
+         TaskUserDTO taskUserDTO = JSONObject.parseObject(param, TaskUserDTO.class);
+         message.setChannel(taskUserDTO.getChannel());
 
+         Set<Integer> taskUsers = userFormService.getTaskUsers(taskUserDTO);
+         if(taskUserDTO.getUserFormFlag()==1){
+             String assineeFormUserId = (String)variables.get("assineeFormUserId");
+             if(assineeFormUserId!=null){
+                 String[] userIds=assineeFormUserId.split(",");
+                 for (String userId : userIds) {
+                     taskUsers.add(Integer.parseInt(userId));
+                 }
 
+             }
+         }
+         if(taskUsers!=null){
 
+             taskUsers.forEach(id->{
+                 message.setUserId(id);
+                 messageSendUtil.send(message);
+             });
+         }
 
-    }
+     }
 }

+ 6 - 2
operation_manager/src/main/java/com/huaxu/process/controller/WorkFlowController.java

@@ -64,6 +64,8 @@ public class WorkFlowController {
     @GetMapping("/getPage")
     @ApiOperation(value = "流程查询(分页)")
     public AjaxMessage<Pagination<ProcessDefinitionDTO>> queryProcessDefinition(
+            @ApiParam(value = "公司id", required = false) @RequestParam(required = false) Integer companyId,
+
             @ApiParam(value = "流程名称", required = false) @RequestParam(required = false) String name,
             @ApiParam(value = "页数,非必传,默认第一页", required = false, defaultValue = "1") @RequestParam(required = false, defaultValue = "1") int pageNum,
             @ApiParam(value = "条数,非必传,默认15条", required = false, defaultValue = "15") @RequestParam(required = false, defaultValue = "15") int pageSize
@@ -71,6 +73,8 @@ public class WorkFlowController {
 
         IPage<ProcessDefinitionDTO> iPage = new Page<>(pageNum, pageSize);
         ProcessDefinition processDefinition=new ProcessDefinition();
+        processDefinition.setProcessName(name);
+        processDefinition.setCompanyOrgId(companyId);
         iPage = workFlowService.selectPage(processDefinition, iPage);
         Pagination<ProcessDefinitionDTO> pages = new Pagination<>(iPage);
         return new AjaxMessage<>(ResultStatus.OK, pages);
@@ -152,8 +156,8 @@ public class WorkFlowController {
     }
     @GetMapping("/testStartProgress")
     @ApiOperation(value = "开启流程")
-    public AjaxMessage testStartProgress( @RequestParam Integer id) {
-        ProcessDefinition processDefinition=workFlowService.findProcessDefinition("test1",1,id);
+    public AjaxMessage testStartProgress( @RequestParam Integer id,@RequestParam String  tid,@RequestParam Integer cid) {
+        ProcessDefinition processDefinition=workFlowService.findProcessDefinition(tid,cid,id);
 
         Map<String, Object> vars=new HashMap<>();
         vars.put("assineeFormUserId","55,66");

+ 2 - 0
operation_manager/src/main/java/com/huaxu/process/entity/ProcessDefinition.java

@@ -1,6 +1,7 @@
 package com.huaxu.process.entity;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.huaxu.model.ProgramItem;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -127,6 +128,7 @@ public class ProcessDefinition implements Serializable {
      */
     @ApiModelProperty(value = "更新时间",hidden = true)
     private Date dateUpdate;
+    private List<ProgramItem> programItems;
     @ApiModelProperty(value = "公司ids")
     private List<Integer>companyIds;
 }

+ 4 - 1
operation_manager/src/main/java/com/huaxu/process/service/impl/WorkFlowServiceImpl.java

@@ -149,6 +149,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
     public IPage<ProcessDefinitionDTO> selectPage(ProcessDefinition processDefinition, IPage<ProcessDefinitionDTO> iPage) {
         LoginUser loginUser = UserUtil.getCurrentUser();
         processDefinition.setTenantId(loginUser.getTenantId());
+        processDefinition.setProgramItems(loginUser.getProgramItemList());
         //processDefinition.setCompanyOrgId(loginUser.getCompanyId());
         IPage<ProcessDefinitionDTO> processDefinitionDTOIPage = processDefinitionMapper.selectPage(iPage, processDefinition);
         return processDefinitionDTOIPage;
@@ -174,6 +175,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
                 processDefinition.setStatus(1);
                 processDefinition.setCreateBy(UserUtil.getCurrentUser().getUsername());
                 processDefinition.setDateCreate(new Date());
+                processDefinition.setId(null);
                 processDefinitionMapper.insert(processDefinition);
 
             }
@@ -195,6 +197,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
 
 
         processDefinition.setUpdateBy(UserUtil.getCurrentUser().getUsername());
+        processDefinition.setProcessStatus("3");
         int result = processDefinitionMapper.update(processDefinition);
         log.info("end edit ProcessDefinition result=" + result);
     }
@@ -251,7 +254,7 @@ public class WorkFlowServiceImpl implements WorkFlowService {
         }
         processDef.setId(processId);
         processDef.setBpmnContent(content);
-        processDef.setProcessStatus("1"); // 保存流程草稿状态
+        processDef.setProcessStatus("3"); // 保存流程草稿状态
         ProcessDefinition processDefTemp = processDefinitionMapper.selectById(processId);
         processDef.setVersion(processDefTemp.getVersion() + 1);//更新版本号
         int result = processDefinitionMapper.update(processDef);

+ 10 - 13
operation_manager/src/main/resources/application-prd.properties

@@ -67,22 +67,19 @@ spring.activiti.database-schema-update=true
 spring.activiti.check-process-definitions=false
 spring.activiti.job-executor-activate=false
 spring.activiti.async-executor-enabled=false
-
-
 #rabbit
-spring.rabbitmq.addresses=114.135.61.188:55672
-spring.rabbitmq.username=zoniot
-spring.rabbitmq.password=zcxk100
+spring.rabbitmq.host=47.112.217.10
+spring.rabbitmq.port=5672
+spring.rabbitmq.username=huaxu
+spring.rabbitmq.password=huaxu123
 spring.rabbitmq.virtual-host=/
 spring.rabbitmq.connection-timeout=15000
 spring.rabbitmq.publisher-confirm-type=correlated
 spring.rabbitmq.publisher-returns=true
 spring.rabbitmq.template.mandatory=true
-
-
-dispath.queue=dispathTest
 receive.exchange.name=messageExchangeTest
 dispath.routing.key=dipathKeyTest
+dispath.queue=dispathTest
 #nacos
 spring.cloud.nacos.discovery.server-addr=10.0.0.136:8848
 UMIS.sys_config_path=/UMIS_USER_IMAGES/
@@ -90,10 +87,10 @@ UMIS.sys_excel_path=/UMIS_USER_EXCEL/
 UMIS.sys_video_path=/UMIS_USER_VIDEOS/
 wf.svg.file.path=D:/test/
 
-
-
-
-
-
+# 设置 feign 客户端超时时间(OpenFeign 默认支持 ribbon)
+# 值的是建立连接所用的时间,使用与网络状态正常的情况,两端连接所用的时间
+ribbon.ReadTimeout=5000
+# 指的是建立连接后从服务器读取到可用资源所用的时间
+ribbon.ConnectionTimeout=5000
 
 

+ 9 - 2
operation_manager/src/main/resources/mapper/ProcessDefinitionMapper.xml

@@ -53,6 +53,7 @@
         <include refid="Base_Column_List"/>
         from sc_process_definition
         <where>
+             status=1
             <if test="id != null">
                 and id = #{id}
             </if>
@@ -242,11 +243,17 @@
         from sc_process_definition
         <where>
             status =1
+            <if test="processDefinition.programItems !=null">
+               and company_org_id in
+                <foreach collection="processDefinition.programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
             <if test="processDefinition.id != null">
                 and id = #{processDefinition.id}
             </if>
             <if test="processDefinition.processName != null and processDefinition.processName != ''">
-                and process_name = #{processDefinition.processName}
+                and process_name like CONCAT('%',#{processDefinition.processName},'%')
             </if>
             <if test="processDefinition.processKey != null and processDefinition.processKey != ''">
                 and process_key = #{processDefinition.processKey}
@@ -326,6 +333,6 @@
         </where>
     </select>
     <select id="getBpmnContent" resultType="java.lang.String">
-        select bpmn_content from sc_process_def where status = 1 and id = #{id}
+        select bpmn_content from sc_process_definition where status = 1 and id = #{id}
     </select>
 </mapper>

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

@@ -554,6 +554,7 @@
     id
     ,device_id as "deviceId"
     , task_desc as "taskDesc"
+    , order_status as "orderStatus"
     from sc_work_order_manage
     where (order_status = 0 or order_status = 1)
     and device_id in

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

@@ -6,6 +6,8 @@ import com.huaxu.entity.Org;
 import com.huaxu.model.AjaxMessage;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
@@ -30,4 +32,7 @@ public interface UserCenterClient {
 
     @PostMapping("/user/findUserIdsByPermissonOrg")
     List<Integer> findUserIdsByPermissonOrg(@RequestParam("tenantId")String tenantId, @RequestParam("companyOrgId")Integer companyOrgId, @RequestParam("deptOrgId")Integer deptOrgId);
+
+    @PostMapping(value = "/org/countCompanyByUser")
+    Integer countCompanyByUser();
 }

+ 197 - 0
sms_water/src/main/java/com/huaxu/config/RabbitConfig.java

@@ -0,0 +1,197 @@
+package com.huaxu.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.*;
+import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Scope;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输,
+ Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
+ Queue:消息的载体,每个消息都会被投到一个或多个队列。
+ Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来.
+ Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
+ vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离。
+ Producer:消息生产者,就是投递消息的程序.
+ Consumer:消息消费者,就是接受消息的程序.
+ Channel:消息通道,在客户端的每个连接里,可建立多个channel.
+ */
+@Configuration
+public class RabbitConfig {
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    @Value("${message.spring.rabbitmq.host}")
+    private String messageHost;
+    @Value("${message.spring.rabbitmq.port}")
+    private int messagePort;
+    @Value("${message.spring.rabbitmq.username}")
+    private String messagePsername;
+    @Value("${message.spring.rabbitmq.password}")
+    private String messagePassword;
+    @Value("${message.spring.rabbitmq.virtual-host}")
+    private String messageVirtualHost;
+
+    @Value("${message.spring.rabbitmq.requested-heartbeat}")
+    private int messageRequestedHeartbeat;
+    @Value("${message.spring.rabbitmq.connection-timeout}")
+    private int messageConnectionTimeout;
+//    @Value("${message.spring.rabbitmq.publisher-confirm-type}")
+//    private CachingConnectionFactory.ConfirmType messagePublisherConfirms;
+
+    @Value("${message.spring.rabbitmq.publisher-confirms}")
+    private Boolean messagePublisherConfirms;
+    @Value("${message.spring.rabbitmq.publisher-returns}")
+    private Boolean messagePublisherReturns;
+
+    @Value("${message.spring.rabbitmq.listener.simple.acknowledge-mode}")
+    private AcknowledgeMode messageAcknowledgeMode;
+    @Value("${message.spring.rabbitmq.listener.simple.prefetch}")
+    private int messagePrefetch;
+
+    @Value("${receive.exchange.name}")
+    private  String receiveExchangeName;
+    @Value("${dispath.routing.key}")
+    private  String dispathRoutingKey;
+    @Value("${dispath.queue}")
+    private  String dispathQueue;
+
+    @Bean
+    @Primary
+    public ConnectionFactory MessageconnectionFactory() {
+        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(messageHost,messagePort);
+        connectionFactory.setUsername(messagePsername);
+        connectionFactory.setPassword(messagePassword);
+        connectionFactory.setVirtualHost(messageVirtualHost);
+        connectionFactory.setRequestedHeartBeat(messageRequestedHeartbeat);
+        connectionFactory.setConnectionTimeout(messageConnectionTimeout);
+//        connectionFactory.
+//        connectionFactory.setPublisherConfirmType(messagePublisherConfirms);
+        connectionFactory.setPublisherConfirms(messagePublisherConfirms);
+        connectionFactory.setPublisherReturns(messagePublisherReturns);
+        return connectionFactory;
+    }
+
+    @Bean(name = "messageRabbitTemplate")
+    @Primary
+    public RabbitTemplate MessageRabbitTemplate() {
+        RabbitTemplate template = new RabbitTemplate(MessageconnectionFactory());
+        return template;
+    }
+
+    //配置消费者监听的容器
+    @Bean(name = "messageContainerFactory")
+    @Primary
+    public SimpleRabbitListenerContainerFactory MessageRabbitListenerContainerFactory() {
+        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
+        factory.setConnectionFactory(MessageconnectionFactory());
+//        factory.setConcurrentConsumers(3);
+//        factory.setMaxConcurrentConsumers(10);
+        factory.setPrefetchCount(messagePrefetch);
+        factory.setAcknowledgeMode(messageAcknowledgeMode);//设置确认模式
+        return factory;
+    }
+    
+    @Bean(name = "messageRabbitAdmin")
+    @Primary
+    public RabbitAdmin RabbitAdmin() {
+        RabbitAdmin rabbitAdmin = new RabbitAdmin(MessageconnectionFactory());
+        rabbitAdmin.setAutoStartup(true);
+//        Map<String, Object> args = new HashMap<>();
+//        args.put("x-queue-type", "classic");
+        rabbitAdmin.declareQueue(QueueBuilder.nonDurable(dispathQueue).build());
+        rabbitAdmin.declareExchange(new TopicExchange(receiveExchangeName, false, false, null));
+        rabbitAdmin.declareBinding(
+                BindingBuilder
+                        .bind(QueueBuilder.nonDurable(dispathQueue).build())        //队列
+                        .to(new TopicExchange(receiveExchangeName, false, false, null))    //直接创建交换机 建立关联关系
+                        .with(dispathRoutingKey));    //指定路由Key
+    return rabbitAdmin;
+    }
+
+
+
+    @Value("${receiveData.spring.rabbitmq.host}")
+    private String dataHost;
+    @Value("${receiveData.spring.rabbitmq.port}")
+    private int dataPort;
+    @Value("${receiveData.spring.rabbitmq.username}")
+    private String dataUsername;
+    @Value("${receiveData.spring.rabbitmq.password}")
+    private String dataPassword;
+    @Value("${receiveData.spring.rabbitmq.virtual-host}")
+    private String dataVirtualHost;
+
+    @Value("${receiveData.spring.rabbitmq.requested-heartbeat}")
+    private int dataRequestedHeartbeat;
+    @Value("${receiveData.spring.rabbitmq.connection-timeout}")
+    private int dataConnectionTimeout;
+//    @Value("${receiveData.spring.rabbitmq.publisher-confirm-type}")
+//    private CachingConnectionFactory.ConfirmType dataPublisherConfirms;
+
+    @Value("${receiveData.spring.rabbitmq.publisher-confirms}")
+    private Boolean dataPublisherConfirms;
+
+    @Value("${receiveData.spring.rabbitmq.publisher-returns}")
+    private Boolean dataPublisherReturns;
+
+    @Value("${receiveData.spring.rabbitmq.listener.simple.acknowledge-mode}")
+    private AcknowledgeMode dataAcknowledgeMode;
+    @Value("${receiveData.spring.rabbitmq.listener.simple.prefetch}")
+    private int dataPrefetch;
+
+    @Bean
+    public ConnectionFactory ReceiveDataconnectionFactory() {
+        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(messageHost,messagePort);
+        connectionFactory.setUsername(messagePsername);
+        connectionFactory.setPassword(messagePassword);
+        connectionFactory.setVirtualHost(dataVirtualHost);
+        connectionFactory.setRequestedHeartBeat(dataRequestedHeartbeat);
+        connectionFactory.setConnectionTimeout(dataConnectionTimeout);
+//        connectionFactory.setPublisherConfirmType(dataPublisherConfirms);
+            connectionFactory.setPublisherConfirms(dataPublisherConfirms);
+        connectionFactory.setPublisherReturns(dataPublisherReturns);
+        return connectionFactory;
+    }
+
+    @Bean(name = "receiveDataRabbitTemplate")
+    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+    //必须是prototype类型
+    public RabbitTemplate ReceiveDatarabbitTemplate() {
+        RabbitTemplate template = new RabbitTemplate(ReceiveDataconnectionFactory());
+        return template;
+    }
+
+    //配置消费者监听的容器
+    @Bean(name = "receiveDataContainerFactory")
+    public SimpleRabbitListenerContainerFactory ReceiveDatarabbitListenerContainerFactory() {
+        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
+        factory.setConnectionFactory(ReceiveDataconnectionFactory());
+//        factory.setConcurrentConsumers(3);
+//        factory.setMaxConcurrentConsumers(10);
+        factory.setPrefetchCount(dataPrefetch);
+        factory.setAcknowledgeMode(dataAcknowledgeMode);//设置确认模式手工确认
+        return factory;
+    }
+
+
+
+
+
+
+
+
+}

+ 45 - 0
sms_water/src/main/java/com/huaxu/controller/ComDisplayController.java

@@ -163,5 +163,50 @@ public class ComDisplayController {
         return new AjaxMessage<>(ResultStatus.OK, receFee);
     }
 
+    @RequestMapping(value="selectPipeNetLayer" , method = RequestMethod.GET)
+    @ApiOperation(value = "查询管网地图图层及设备")
+    public AjaxMessage<List<PipeNetLayerDto>> selectPipeNetLayer(
+            @ApiParam(value = "公司机构id", required = true)@RequestParam Integer companyOrgId){
+        OnlineDataDto onlineDataDto=new OnlineDataDto();
+        onlineDataDto.setFlag(1);
+        onlineDataDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId)));
+        List<PipeNetLayerDto> result=onlineMonitorService.selectPipeNetLayer(onlineDataDto);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    @RequestMapping(value="selectDeviceMapParam" , method = RequestMethod.GET)
+    @ApiOperation(value = "查询设备地图参数数据")
+    public AjaxMessage<List<MonitorDataCollectDto>> selectDeviceMapParam(
+            @ApiParam(value = "一级场景id", required = true) @RequestParam Long deviceId){
+        MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
+        monitorDataCollectDto.setDeviceId(deviceId);
+        monitorDataCollectDto.setFlag(1);
+        monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
+        List<MonitorDataCollectDto> result=onlineMonitorService.selectDeviceMapParam(monitorDataCollectDto);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    @RequestMapping(value="selectMapSuspension" , method = RequestMethod.GET)
+    @ApiOperation(value = "查询地图悬浮数据")
+    public AjaxMessage<List<MonitorDataCollectDto>> selectMapSuspension(
+            @ApiParam(value = "公司机构id", required = true)@RequestParam Integer companyOrgId){
+        MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
+        monitorDataCollectDto.setFlag(1);
+        monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsByCom(Long.valueOf(companyOrgId)));
+        List<MonitorDataCollectDto> result=onlineMonitorService.selectMapSuspension(monitorDataCollectDto);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
+
+    @RequestMapping(value="selectMapParam" , method = RequestMethod.GET)
+    @ApiOperation(value = "查询地图参数数据")
+    public AjaxMessage<List<MonitorDataCollectDto>> selectMapParam(
+            @ApiParam(value = "一级场景id", required = true) @RequestParam Long sceneId){
+        MonitorDataCollectDto monitorDataCollectDto=new MonitorDataCollectDto();
+        monitorDataCollectDto.setSceneId(sceneId);
+        monitorDataCollectDto.setFlag(1);
+        monitorDataCollectDto.setSceneIds(sceneService.findByParentIdsLike(null));
+        List<MonitorDataCollectDto> result=onlineMonitorService.selectMapParam(monitorDataCollectDto);
+        return new AjaxMessage<>(ResultStatus.OK, result);
+    }
 
 }

+ 132 - 0
sms_water/src/main/java/com/huaxu/controller/HomePageReportController.java

@@ -0,0 +1,132 @@
+package com.huaxu.controller;
+
+import com.huaxu.dto.generalView.DeviceWaterSupply;
+import com.huaxu.dto.generalView.WaterSupplyChart;
+import com.huaxu.dto.homePage.CompanyCount;
+import com.huaxu.dto.homePage.CompanyProduce;
+import com.huaxu.dto.homePage.WaterQualityRate;
+import com.huaxu.dto.homePage.WaterQualityRateForScene;
+import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.ResultStatus;
+import com.huaxu.service.HomePageReportService;
+import com.huaxu.service.MonitorDataReportService;
+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.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/2/24 9:09
+ */
+@RestController
+@RequestMapping("/homePageReport")
+@Api(tags = "主页大屏报表")
+public class HomePageReportController {
+
+    @Autowired
+    private HomePageReportService homePageReportService;
+
+
+
+
+    @RequestMapping(value = "getDeviceWaterIntake",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——取水图表")
+    public AjaxMessage<List<DeviceWaterSupply>> getDeviceWaterIntake(
+            @ApiParam(value = "公司id,总公司传空值") Integer companyOrgId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.deviceWaterReportForSixMonth(companyOrgId,"水源",4));
+    }
+
+    @RequestMapping(value = "getDeviceWaterMaking",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——制水图表")
+    public AjaxMessage<List<DeviceWaterSupply>> getDeviceWaterMaking(
+            @ApiParam(value = "公司id,总公司传空值") Integer companyOrgId
+    ){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.deviceWaterReportForSixMonth(companyOrgId,"水厂",3));
+    }
+
+
+    @RequestMapping(value = "getCompanyResouces",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——公司资源统计")
+    public AjaxMessage<CompanyCount> getCompanyResouces(
+            @ApiParam(value = "公司id,总公司传空值") Integer companyOrgId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.countSceneByType(companyOrgId));
+    }
+
+    @RequestMapping(value = "getDeviceWaterAmount",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——生产经营(制水售水)统计")
+    public AjaxMessage<CompanyProduce> getDeviceWaterAmount(
+            @ApiParam(value = "公司id,总公司传空值") Integer companyOrgId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.deviceWaterAmount(companyOrgId));
+    }
+
+    @RequestMapping(value = "getWaterQualification",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——水质安全")
+    public AjaxMessage<WaterQualityRate> getWaterQualification(
+            @ApiParam(value = "公司id,总公司传空值") Integer companyOrgId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.getWaterQualification(companyOrgId));
+    }
+
+    @RequestMapping(value = "getWaterIntakeFifteenDays",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——水库取水15天")
+    public AjaxMessage<List<DeviceWaterSupply>> getWaterIntakeFifteenDays(
+            @ApiParam(value = "水库id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.monitorDataFifteenDays(sceneId,"水源",4));
+    }
+    @RequestMapping(value = "getWaterLevelFifteenDays",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——水库水位15天")
+    public AjaxMessage<List<DeviceWaterSupply>> getWaterLevelFifteenDays(
+            @ApiParam(value = "水库id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.monitorDataFifteenDays(sceneId,"水源",12));
+    }
+
+    @RequestMapping(value = "getWaterMakingFifteenDays",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——水厂制水15天")
+    public AjaxMessage<List<DeviceWaterSupply>> getWaterMakingFifteenDays(
+            @ApiParam(value = "水厂id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.monitorDataFifteenDays(sceneId,"水厂",3));
+    }
+
+    @RequestMapping(value = "getWaterQualityRateForWaterSource",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——水库水质")
+    public AjaxMessage<WaterQualityRateForScene> waterQualityRateForWaterSource(
+            @ApiParam(value = "水库id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.waterQualityRateForWaterSource(sceneId));
+    }
+
+    @RequestMapping(value = "waterQualityRateForWaterFactory",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——水厂水质")
+    public AjaxMessage<WaterQualityRateForScene> waterQualityRateForWaterFactory(
+            @ApiParam(value = "水厂id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.waterQualityRateForWaterFactory(sceneId));
+    }
+
+    @RequestMapping(value = "waterQualityRateForPumpingStation",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——泵站水质")
+    public AjaxMessage<WaterQualityRateForScene> waterQualityRateForPumpingStation(
+            @ApiParam(value = "泵站id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.waterQualityRateForPumpingStation(sceneId));
+    }
+
+    @RequestMapping(value = "waterEnergyConsumptionForWaterFactory",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——水厂能耗")
+    public AjaxMessage<List<WaterSupplyChart>> waterEnergyConsumptionForWaterFactory(
+            @ApiParam(value = "水厂id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.waterEnergyConsumption(sceneId,"水厂"));
+    }
+
+    @RequestMapping(value = "waterEnergyConsumptionForPumpingStation",method = RequestMethod.GET)
+    @ApiOperation(value = "综合展示——泵站能耗")
+    public AjaxMessage<List<WaterSupplyChart>> waterEnergyConsumptionForPumpingStation(
+            @ApiParam(value = "泵站id",required = true) @RequestParam Integer sceneId){
+        return new AjaxMessage<>(ResultStatus.OK,homePageReportService.waterEnergyConsumption(sceneId,"泵站"));
+    }
+
+}

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

@@ -123,7 +123,7 @@ public interface AlarmDetailMapper {
      * 查询设备报警信息
      * @return
      */
-    List<AlarmDetailsDto> selectStateAlarm(@Param("deviceId") Integer deviceId, @Param("alarmType") String alarmType);
+    List<AlarmDetailsDto> selectStateAlarm(@Param("deviceId") Integer deviceId, @Param("alarmType") String alarmType,@Param("alarmSettingIds") List<Long> alarmSettingIds);
 
 
     Integer udpateLastUpdateTime(@Param("deviceId") Integer deviceId, @Param("lastUpdateTime") Date lastUpdateTime);

+ 65 - 0
sms_water/src/main/java/com/huaxu/dao/HomePageReportMapper.java

@@ -0,0 +1,65 @@
+package com.huaxu.dao;
+
+import com.huaxu.dto.generalView.DeviceWaterSupply;
+import com.huaxu.dto.generalView.WaterSupplyData;
+import com.huaxu.dto.homePage.CompanyCount;
+import com.huaxu.dto.homePage.CompanyProduce;
+import com.huaxu.dto.homePage.WaterQualityRate;
+import com.huaxu.model.ProgramItem;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/2/24 13:43
+ */
+@Mapper
+public interface HomePageReportMapper {
+
+
+    List<DeviceWaterSupply> getDeviceWaterForSixMonth(@Param("companyOrgId")Integer companyOrgId,
+                                                      @Param("sceneType")String sceneType, @Param("parmType")Integer parmType,
+                                                      @Param("tenantId")String tenantId, @Param("userType")String userType,
+                                                      @Param("permissonType")Integer permissonType,
+                                                      @Param("programItems")List<ProgramItem> programItems);
+
+
+    CompanyCount countSceneByType(@Param("companyOrgId")Integer companyOrgId,
+                                        @Param("tenantId")String tenantId, @Param("userType")String userType,
+                                        @Param("permissonType")Integer permissonType,
+                                        @Param("programItems")List<ProgramItem> programItems);
+
+    CompanyProduce getWaterSalesDetails(@Param("companyOrgId")Integer companyOrgId,
+                                        @Param("tenantId")String tenantId, @Param("userType")String userType,
+                                        @Param("programItems")List<ProgramItem> programItems);
+
+    WaterQualityRate getPipeNetworkQualification(@Param("companyOrgId")Integer companyOrgId,
+                                             @Param("tenantId")String tenantId, @Param("userType")String userType,
+                                             @Param("permissonType")Integer permissonType,
+                                             @Param("programItems")List<ProgramItem> programItems);
+
+    WaterQualityRate getWaterQualification(@Param("companyOrgId")Integer companyOrgId,@Param("sceneType")String sceneType,
+                                             @Param("tenantId")String tenantId, @Param("userType")String userType,
+                                             @Param("permissonType")Integer permissonType,
+                                             @Param("programItems")List<ProgramItem> programItems);
+
+    List<DeviceWaterSupply> getMonitorDataFifteenDays(@Param("sceneId")Integer sceneId,@Param("sceneType")String sceneType,@Param("parmType")Integer parmType,
+                                                        @Param("tenantId")String tenantId,
+                                                      @Param("userType")String userType,@Param("permissonType")Integer permissonType,
+                                                      @Param("programItems")List<ProgramItem> programItems);
+
+    BigDecimal getWaterQualificationForScene(@Param("parmType")Integer parmType,@Param("sceneId")Integer sceneId,@Param("sceneType")String sceneType,
+                                             @Param("tenantId")String tenantId, @Param("userType")String userType,
+                                             @Param("permissonType")Integer permissonType,
+                                             @Param("programItems")List<ProgramItem> programItems);
+
+    List<WaterSupplyData> getWaterSupplyData( @Param("sceneId")Integer sceneId,@Param("sceneType")String sceneType,
+                                              @Param("tenantId")String tenantId,
+                                             @Param("userType")String userType, @Param("permissonType")Integer permissonType,
+                                             @Param("programItems")List<ProgramItem> programItems);
+
+}

+ 2 - 0
sms_water/src/main/java/com/huaxu/dao/MonitorDataMapper.java

@@ -21,4 +21,6 @@ public interface MonitorDataMapper {
     void batchInsertYearReport(@Param("year") Integer year, @Param("month")Integer month);
     void batchInsertMonthReport(@Param("year") Integer year, @Param("month")Integer month, @Param("day")Integer day);
     void batchInsertDayReport( @Param("dayReportEntities") List<DayReportEntity> dayReportEntities);
+
+    List<Integer> checkReportDataExit(@Param("year") Integer year, @Param("month")Integer month, @Param("day")Integer day, @Param("hour")Integer hour, @Param("deviceIds") List<Integer> deviceIds);
 }

+ 5 - 2
sms_water/src/main/java/com/huaxu/dao/MonitorDataReportMapper.java

@@ -98,11 +98,14 @@ public interface MonitorDataReportMapper {
     List<DeviceWaterDetail> getDeviceWaterDetailForNow(@Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId,
                                                        @Param("userType")String userType,@Param("permissonType")Integer permissonType,
                                                        @Param("programItems")List<ProgramItem> programItems);
-    List<DeviceWaterDetail> getDeviceWaterDetailForDay(@Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId,
+
+    List<DeviceWaterDetail> getDeviceWaterDetailForDay(@Param("companyOrgId")Integer companyOrgId,
+                                                        @Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId,
                                                        @Param("year")Integer year, @Param("month")Integer month, @Param("day")Integer day,
                                                        @Param("userType")String userType,@Param("permissonType")Integer permissonType,
                                                        @Param("programItems")List<ProgramItem> programItems);
-    BigDecimal getDeviceWaterDetailForMonth(@Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId,
+    BigDecimal getDeviceWaterDetailForMonth(@Param("companyOrgId")Integer companyOrgId,
+                                            @Param("sceneTypeName")String sceneTypeName,@Param("parmType")Integer parmType,@Param("tenantId")String tenantId,
                                             @Param("year")Integer year, @Param("month")Integer month,
                                             @Param("userType")String userType,@Param("permissonType")Integer permissonType,
                                             @Param("programItems")List<ProgramItem> programItems);

+ 6 - 2
sms_water/src/main/java/com/huaxu/dto/MonitorDataCollectDto.java

@@ -64,7 +64,7 @@ public class MonitorDataCollectDto {
     @ApiModelProperty("今日耗药量")
     private Double drugUsage;
 
-    @ApiModelProperty("场景状态 1报警 0正常")
+    @ApiModelProperty("场景状态 1报警 0正常 2离线")
     private Integer sceneState;
 
     @ApiModelProperty("实时数据")
@@ -108,6 +108,10 @@ public class MonitorDataCollectDto {
     @ApiModelProperty("设备名称")
     private String deviceName;
 
-    @ApiModelProperty("设备状态 1报警 0正常")
+    @ApiModelProperty("设备状态 1报警 0正常 2离线")
     private Integer deviceState;
+
+    @ApiModelProperty(value ="0或空无离线、1有离线",hidden = true)
+    @JsonIgnore
+    private Integer flag;
 }

+ 5 - 1
sms_water/src/main/java/com/huaxu/dto/OnlineDataDto.java

@@ -128,6 +128,10 @@ public class OnlineDataDto {
     @ApiModelProperty("设备名称")
     private String deviceName;
 
-    @ApiModelProperty("设备状态 1报警 0正常")
+    @ApiModelProperty("设备状态 1报警 0正常 2离线")
     private Integer deviceState;
+
+    @ApiModelProperty(value ="0或空无离线、1有离线",hidden = true)
+    @JsonIgnore
+    private Integer flag;
 }

+ 3 - 0
sms_water/src/main/java/com/huaxu/dto/WorkOrderManageByAlarmDto.java

@@ -51,4 +51,7 @@ public class WorkOrderManageByAlarmDto implements Serializable {
     @ApiModelProperty(value = "经纬度")
     private String geo;
 
+    @ApiModelProperty(value = "0未接单、1进行中、2完成")
+    private Integer orderStatus;
+
 }

+ 3 - 1
sms_water/src/main/java/com/huaxu/dto/generalView/DeviceWaterSupply.java

@@ -16,7 +16,7 @@ import java.time.LocalDate;
  * @data 2020/12/31 14:05
  */
 @Data
-@Api("供水")
+@Api("数据统计")
 public class DeviceWaterSupply implements Serializable {
     private static final long serialVersionUID = 3472349298203388378L;
 
@@ -33,6 +33,8 @@ public class DeviceWaterSupply implements Serializable {
     private BigDecimal amount = BigDecimal.ZERO;
     @ApiModelProperty("日期")
     private LocalDate date;
+    @ApiModelProperty("日期格式化")
+    private String dateLabel;
 
 
 }

+ 10 - 0
sms_water/src/main/java/com/huaxu/dto/generalView/WaterSupplyChart.java

@@ -12,6 +12,7 @@ import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -50,4 +51,13 @@ public class WaterSupplyChart implements Serializable {
         this.date= DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDate.now().plusDays(-i));
 
     }
+
+    public WaterSupplyChart (Integer i,String dateString){
+        this.sort=i;
+        this.waterData=BigDecimal.ZERO;
+        this.powerData=BigDecimal.ZERO;
+        this.drugData=BigDecimal.ZERO;
+        this.date= dateString;
+
+    }
 }

+ 28 - 0
sms_water/src/main/java/com/huaxu/dto/homePage/CompanyCount.java

@@ -0,0 +1,28 @@
+package com.huaxu.dto.homePage;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @description 公司(场景)个数统计
+ * @auto wangli
+ * @data 2021/2/24 16:01
+ */
+@Data
+@Api("公司(场景)个数统计")
+public class CompanyCount {
+
+    @ApiModelProperty("公司数量")
+    private Integer company;
+    @ApiModelProperty("水源数量")
+    private Integer waterSource;
+    @ApiModelProperty("泵站数量")
+    private Integer pumpingStation;
+    @ApiModelProperty("管网数量")
+    private Integer pipeNetwork;
+    @ApiModelProperty("水厂数量")
+    private Integer waterFactory;
+    @ApiModelProperty("水表数量")
+    private Integer waterMeter;
+}

+ 43 - 0
sms_water/src/main/java/com/huaxu/dto/homePage/CompanyProduce.java

@@ -0,0 +1,43 @@
+package com.huaxu.dto.homePage;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.util.jsonSerializer.BigDecimalJsonSerializer;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/3/1 10:17
+ */
+@Data
+@Api("制水售水统计")
+public class CompanyProduce {
+
+    @ApiModelProperty("取水量")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal waterIntake;
+    @ApiModelProperty("制水量")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal waterSupply;
+    @ApiModelProperty("售水量")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal waterSale;
+    @ApiModelProperty("营收金额")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal receivableAmount;
+    @ApiModelProperty("实收金额")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal receivedAmount ;
+
+    public CompanyProduce(){
+        this.waterIntake = BigDecimal.ZERO;
+        this.waterSupply = BigDecimal.ZERO;
+        this.waterSale = BigDecimal.ZERO;
+        this.receivableAmount = BigDecimal.ZERO;
+        this.receivedAmount = BigDecimal.ZERO;
+    }
+}

+ 47 - 0
sms_water/src/main/java/com/huaxu/dto/homePage/WaterQualityRate.java

@@ -0,0 +1,47 @@
+package com.huaxu.dto.homePage;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.util.jsonSerializer.BigDecimalJsonSerializer;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/3/1 16:25
+ */
+@Api("水质安全")
+@Data
+public class WaterQualityRate {
+
+    @ApiModelProperty("异常数量")
+    private Integer abnormal;
+    @ApiModelProperty("综合(平均)水质")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal averageQuality;
+    @ApiModelProperty("水源水质")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal waterSourceQuality;
+    @ApiModelProperty("水厂水质")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal waterFactoryQuality;
+    @ApiModelProperty("二供(泵站)水质")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal pumpingStationQuality;
+    @ApiModelProperty("管网水质")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal pipeNetworkQuality;
+
+    public WaterQualityRate(){
+        this.abnormal=0;
+        this.averageQuality=BigDecimal.ZERO;
+        this.waterSourceQuality=BigDecimal.ZERO;
+        this.waterFactoryQuality=BigDecimal.ZERO;
+        this.pumpingStationQuality=BigDecimal.ZERO;
+        this.pipeNetworkQuality=BigDecimal.ZERO;
+    }
+
+}

+ 35 - 0
sms_water/src/main/java/com/huaxu/dto/homePage/WaterQualityRateForScene.java

@@ -0,0 +1,35 @@
+package com.huaxu.dto.homePage;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.huaxu.util.jsonSerializer.BigDecimalJsonSerializer;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/3/1 16:25
+ */
+@Api("合格率")
+@Data
+public class WaterQualityRateForScene {
+
+    @ApiModelProperty("余氯")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal chlorine;
+    @ApiModelProperty("浊度")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal turbidity;
+    @ApiModelProperty("PH")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal ph;
+    @ApiModelProperty("压力")
+    @JsonSerialize(using = BigDecimalJsonSerializer.class)
+    private BigDecimal pressure;
+
+
+
+}

+ 65 - 30
sms_water/src/main/java/com/huaxu/rabbitmq/ReceiveData.java

@@ -14,12 +14,12 @@ import com.huaxu.common.StringUtils;
 import com.huaxu.dao.AlarmDetailMapper;
 import com.huaxu.dto.AlarmDetailsDto;
 import com.huaxu.dto.DeviceCheckAlarmDto;
+import com.huaxu.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.entity.AlarmDetailsEntity;
 import com.huaxu.entity.Message;
 import com.huaxu.entity.MonitorDataEntity;
 import com.huaxu.entity.MonitorDataValueEntity;
 import com.huaxu.service.MonitorDataService;
-import com.huaxu.util.MessageSendUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.springframework.amqp.core.AmqpTemplate;
@@ -31,9 +31,11 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.awt.*;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.List;
 import java.util.stream.Collectors;
 
 @Component
@@ -41,18 +43,19 @@ import java.util.stream.Collectors;
 public class ReceiveData {
 
 
-    @Autowired
-    private AmqpTemplate rabbitTemplate;
+    @Resource(name = "messageRabbitTemplate")
+    private AmqpTemplate messageRabbitTemplate;
+
+    @Resource(name = "receiveDataRabbitTemplate")
+    private AmqpTemplate receiveDataRabbitTemplate;
 
     @Resource
     private AlarmDetailMapper alarmDetailMapper;
 
     @Autowired
     private UserCenterClient userCenterClient;
-    @Autowired
-    private MessageSendUtil messageSendUtil;
 
-    @Value("${spring.rabbitmq.listener.queue}")
+    @Value("${receiveData.spring.rabbitmq.listener.queue}")
     private   String rabbitmqQueue;
 
     @Autowired
@@ -69,17 +72,28 @@ public class ReceiveData {
         return rabbitmqQueue;
     }
 
+    @Value("${receive.exchange.name}")
+    private  String receiveExchangeName;
+    @Value("${dispath.routing.key}")
+    private  String dispathRoutingKey;
+
+
+    private void send(Message message){
+        log.debug("消息发送 exchange={}  routingkey={} 用户id={}",receiveExchangeName,dispathRoutingKey,message.getUserId());
+        messageRabbitTemplate.convertAndSend(receiveExchangeName,dispathRoutingKey, JSONObject.toJSONString(message));
+    }
+
     @RabbitHandler
-    @RabbitListener(queues = "#{rabbitmqQueue}")
+    @RabbitListener(queues = "#{rabbitmqQueue}",containerFactory = "receiveDataContainerFactory")
     public void received(byte[] receivedData) {
 
         try {
-            log.info("rabbitMq接收消息:"+new String(receivedData));
+            log.debug("rabbitMq接收消息:"+new String(receivedData));
             receivedDataHandle(receivedData);
         } catch (Exception e) {
             log.error(ExceptionUtils.getStackTrace(e));
             // 发送异常时消息返回队列
-            rabbitTemplate.convertAndSend(rabbitmqQueue, receivedData);
+//            receiveDataRabbitTemplate.convertAndSend(rabbitmqQueue, receivedData);
         }
 
     }
@@ -151,7 +165,7 @@ public class ReceiveData {
            if(deviceCheckAlarmDtos.size()>0 && StringUtils.isNotBlank(deviceCheckAlarmDtos.get(0).getIdentifiter())){
                Integer deviceId= deviceCheckAlarmDtos.get(0).getDeviceId();
                //系统中已存在的报警信息
-               List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailMapper.selectStateAlarm(deviceId,"参数报警");
+               List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailMapper.selectStateAlarm(deviceId,"参数报警",null);
                //已存在的报警信息转为map方便匹配alarmSettingId
                Map<Integer,AlarmDetailsDto> alarmDetailsDtoMap = alarmDetailsDtos.stream().collect(Collectors.toMap(AlarmDetailsDto::getAlarmSettingId, a -> a,(k1, k2)->k1));
 
@@ -224,7 +238,7 @@ public class ReceiveData {
                                if(taskUsers!=null){
                                    taskUsers.forEach(id->{
                                        message.setUserId(id);
-                                       messageSendUtil.send(message);
+                                       this.send(message);
                                    });
                                }
                            }catch(Exception e){
@@ -236,32 +250,53 @@ public class ReceiveData {
                        }
                    }
                 }
-               //处理完成后,剩下的标记为历史数据
-               for(AlarmDetailsDto alarmDetailsDto:alarmDetailsDtoMap.values()){
-                   alarmDetailsDto.setState(0);
-                   alarmDetailsDto.setAlarmEndTime(receiveDateTime);
-                   alarmDetailsDto.setDateUpdate(new Date());
-                   alarmDetailMapper.update(alarmDetailsDto);
-               }
+
                //批量插入新增报警
                if(insert.size()>0){
                 alarmDetailMapper.batchInsert(insert);
                }
 
+                if(alarmDetailsDtoMap.values().size() > 0){
+                   //处理完成后,剩下的标记为历史数据
+                   List<Long> deviceIds = new ArrayList<>();
+                   deviceIds.add(monitorDataEntity.getDeviceId().longValue());
+                   List<WorkOrderManageByAlarmDto> workOrders = operationManagerClient.findWorkOrderByDeviceIds(deviceIds);
+                   if(workOrders.size()>0){
+                       WorkOrderManageByAlarmDto orderManageByAlarmDto = workOrders.get(0);
+                       String taskDesc = orderManageByAlarmDto.getTaskDesc();
+                       //标记为历史数据 并 修改工单描述
+                       for(AlarmDetailsDto alarmDetailsDto : alarmDetailsDtoMap.values()){
+                           alarmDetailsDto.setState(0);
+                           alarmDetailsDto.setAlarmEndTime(receiveDateTime);
+                           alarmDetailsDto.setDateUpdate(new Date());
+                           alarmDetailMapper.update(alarmDetailsDto);
+
+                           taskDesc = taskDesc.replace(";"+alarmDetailsDto.getAlarmContent(),"")
+                                   .replace(alarmDetailsDto.getAlarmContent(),"");
+                       }
+                       orderManageByAlarmDto.setTaskDesc(taskDesc);
+                       if(orderManageByAlarmDto != null
+                               && (orderManageByAlarmDto.getOrderStatus() == null || orderManageByAlarmDto.getOrderStatus() == 0)
+                               && StringUtils.isBlank(taskDesc)){
+                           //工单未派单且无报警信息,删除工单
+                           operationManagerClient.batchDeleteByAlarms(new ArrayList<>(deviceIds));
+                       }else{
+                           //其他情况修改描述
+                           operationManagerClient.updateByAlarms(workOrders);
+                       }
+                   }
+                }
+
                //报警恢复的删除工单
-               Map<Integer,AlarmDetailsEntity> AlarmDtoNewsMap =  insert.stream().collect(Collectors.toMap(AlarmDetailsEntity::getDeviceId, a -> a,(k1, k2)->k1));
-               Map<Integer,AlarmDetailsEntity> AlarmDtoOldsMap =  update.stream().collect(Collectors.toMap(AlarmDetailsEntity::getDeviceId, a -> a,(k1, k2)->k1));
-               Set<Long> deviceIds = alarmDetailsDtoMap.values().stream()
-                       .filter(a -> !(AlarmDtoNewsMap.containsKey(a.getDeviceId())||AlarmDtoOldsMap.containsKey(a.getDeviceId())))
-                       .map(a -> a.getDeviceId().longValue())
-                       .collect(Collectors.toSet());
-               if(deviceIds.size()>0){
-                operationManagerClient.batchDeleteByAlarms(new ArrayList<>(deviceIds));
-               }
+//               Map<Integer,AlarmDetailsEntity> AlarmDtoOldsMap =  update.stream().collect(Collectors.toMap(AlarmDetailsEntity::getDeviceId, a -> a,(k1, k2)->k1));
+//               Set<Long> deviceIds = alarmDetailsDtoMap.values().stream()
+//                       .filter(a -> !AlarmDtoOldsMap.containsKey(a.getDeviceId()))
+//                       .map(a -> a.getDeviceId().longValue())
+//                       .collect(Collectors.toSet());
+//               if(deviceIds.size()>0){
+//                operationManagerClient.batchDeleteByAlarms(new ArrayList<>(deviceIds));
+//               }
            }
-
         }
-
     }
-
 }

+ 51 - 3
sms_water/src/main/java/com/huaxu/service/AlarmSettingService.java

@@ -4,15 +4,22 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaxu.client.OperationManagerClient;
+import com.huaxu.common.StringUtils;
+import com.huaxu.dao.AlarmDetailMapper;
 import com.huaxu.dao.AlarmSettingMapper;
+import com.huaxu.dto.AlarmDetailsDto;
 import com.huaxu.dto.AlarmSettingDto;
+import com.huaxu.dto.WorkOrderManageByAlarmDto;
 import com.huaxu.entity.AlarmSetting;
-import org.apache.commons.lang3.StringUtils;
+import com.huaxu.model.LoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -25,6 +32,11 @@ import java.util.List;
 public class AlarmSettingService extends ServiceImpl<AlarmSettingMapper, AlarmSetting> {
     @Resource
     private AlarmSettingMapper alarmSettingMapper;
+
+    @Resource
+    private AlarmDetailMapper alarmDetailMapper;
+    @Autowired
+    private OperationManagerClient operationManagerClient;
     /**
      * 删除数据
      *
@@ -83,7 +95,43 @@ public class AlarmSettingService extends ServiceImpl<AlarmSettingMapper, AlarmSe
      * @param
      * @return
      */
-    public Integer updateRealtimeAlarm(Long[] ids,String updateBy) {
-        return alarmSettingMapper.updateRealtimeAlarm(Arrays.asList(ids),updateBy);
+    public void updateRealtimeAlarm(Long[] ids,String updateBy) {
+        //系统中已存在的报警
+        List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailMapper.selectStateAlarm(null,null,Arrays.asList(ids));
+
+        if(alarmDetailsDtos.size() > 0){
+            //标记为历史数据
+            List<Long> deviceIds = new ArrayList<>();
+            deviceIds.add(alarmDetailsDtos.get(0).getDeviceId().longValue());
+            List<WorkOrderManageByAlarmDto> workOrders = operationManagerClient.findWorkOrderByDeviceIds(deviceIds);
+            if(workOrders.size()>0){
+                WorkOrderManageByAlarmDto orderManageByAlarmDto = workOrders.get(0);
+                String taskDesc = orderManageByAlarmDto.getTaskDesc();
+                //标记为历史数据 并 修改工单描述
+                for(AlarmDetailsDto alarmDetailsDto : alarmDetailsDtos){
+                    alarmDetailsDto.setState(0);
+                    alarmDetailsDto.setAlarmEndTime(new Date());
+                    alarmDetailsDto.setDateUpdate(new Date());
+                    alarmDetailsDto.setUpdateBy(updateBy);
+                    alarmDetailMapper.update(alarmDetailsDto);
+
+                    taskDesc = taskDesc.replace(";"+alarmDetailsDto.getAlarmContent(),"")
+                            .replace(alarmDetailsDto.getAlarmContent(),"");
+                }
+                orderManageByAlarmDto.setTaskDesc(taskDesc);
+                if(orderManageByAlarmDto != null
+                        && (orderManageByAlarmDto.getOrderStatus() == null || orderManageByAlarmDto.getOrderStatus() == 0)
+                        && StringUtils.isBlank(taskDesc)){
+                    //工单未派单且无报警信息,删除工单
+                    operationManagerClient.batchDeleteByAlarms(new ArrayList<>(deviceIds));
+                }else{
+                    //其他情况修改描述
+                    operationManagerClient.updateByAlarms(workOrders);
+                }
+            }else{
+                alarmSettingMapper.updateRealtimeAlarm(Arrays.asList(ids),updateBy);
+            }
+        }
+//        return alarmSettingMapper.updateRealtimeAlarm(Arrays.asList(ids),updateBy);
     }
 }

+ 52 - 0
sms_water/src/main/java/com/huaxu/service/HomePageReportService.java

@@ -0,0 +1,52 @@
+package com.huaxu.service;
+
+import com.huaxu.dto.generalView.DeviceWaterAmount;
+import com.huaxu.dto.generalView.DeviceWaterSupply;
+import com.huaxu.dto.generalView.WaterSupplyChart;
+import com.huaxu.dto.homePage.CompanyCount;
+import com.huaxu.dto.homePage.CompanyProduce;
+import com.huaxu.dto.homePage.WaterQualityRate;
+import com.huaxu.dto.homePage.WaterQualityRateForScene;
+
+import java.util.List;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/2/24 10:42
+ */
+public interface HomePageReportService {
+
+    //近6月取水量(水源:4)
+    //近6月制水量(水厂:3)
+    List<DeviceWaterSupply> deviceWaterReportForSixMonth(Integer companyOrgId,String sceneType, Integer parmType);
+
+    //公司投资统计(公司场景)
+    CompanyCount countSceneByType(Integer companyOrgId);
+
+    //取水制水售水统计
+    CompanyProduce deviceWaterAmount(Integer companyOrgId);
+
+    //水质统计
+    WaterQualityRate getWaterQualification(Integer companyOrgId);
+
+    //水库取水15天
+    //水库水位15天
+    //水厂制水15天
+    // 水厂 3 水源 4 水位 12
+    List<DeviceWaterSupply> monitorDataFifteenDays(Integer sceneId, String sceneType, Integer parmType);
+
+    //水库水质
+    WaterQualityRateForScene waterQualityRateForWaterSource(Integer sceneId);
+
+
+    //水厂水质合格率
+    WaterQualityRateForScene waterQualityRateForWaterFactory(Integer sceneId);
+    //泵站水质合格率
+    WaterQualityRateForScene waterQualityRateForPumpingStation(Integer sceneId);
+
+    //泵站能耗分析
+    //水厂能耗分析
+    List<WaterSupplyChart> waterEnergyConsumption(Integer sceneId, String sceneType);
+
+}

+ 5 - 0
sms_water/src/main/java/com/huaxu/service/MonitorDataReportService.java

@@ -3,9 +3,12 @@ package com.huaxu.service;
 import com.huaxu.dto.MonitorDataChartReportDeviceDto;
 import com.huaxu.dto.generalView.*;
 import com.huaxu.entity.DeviceEntity;
+import com.huaxu.entity.MonitorDataEntity;
+import com.huaxu.model.LoginUser;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @description
@@ -59,6 +62,8 @@ public interface MonitorDataReportService {
 
 
     List<WaterSupplyChart>  waterSupplyChartsByMonth(String sceneTypeName, Integer companyOrgId);
+
+    Map<Integer, MonitorDataEntity> getIntegerMonitorDataEntityMap(LoginUser loginUser);
 }
 
 

+ 2 - 2
sms_water/src/main/java/com/huaxu/service/MonitorDataService.java

@@ -48,13 +48,13 @@ public interface MonitorDataService {
      */
     MonitorDataEntity getDeviceMonitorInfoByDeviceCode(String deviceCode);
 
-    List<DayReportEntity> getMonitorDataGroupByHour(LocalDateTime dateTime);
+    List<DayReportEntity> getMonitorDataGroupByHour(LocalDateTime dateTime,List<Integer> deviceIds);
 
     /**
      * 生成每小时数据的日报
      * @return
      */
-    List<DayReportEntity> getMonitorDataReportByHour();
+    void getMonitorDataReportByHour();
     /**
      * 生成每天数据的月报
      * @return

+ 76 - 28
sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java

@@ -15,7 +15,9 @@ import com.huaxu.util.MessageSendUtil;
 import com.huaxu.util.UserUtil;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -38,8 +40,20 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
     private OperationManagerClient operationManagerClient;
     @Autowired
     private UserCenterClient userCenterClient;
-    @Autowired
-    private MessageSendUtil messageSendUtil;
+
+    @Resource(name = "messageRabbitTemplate")
+    private AmqpTemplate messageRabbitTemplate;
+
+    @Value("${receive.exchange.name}")
+    private  String receiveExchangeName;
+    @Value("${dispath.routing.key}")
+    private  String dispathRoutingKey;
+
+
+    private void send(Message message){
+        log.debug("消息发送 exchange={}  routingkey={} 用户id={}",receiveExchangeName,dispathRoutingKey,message.getUserId());
+        messageRabbitTemplate.convertAndSend(receiveExchangeName,dispathRoutingKey, JSONObject.toJSONString(message));
+    }
 
     @Override
     public AlarmDetailsDto selectById(Integer id) {
@@ -164,14 +178,15 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
         //根据设置筛选出离线设备
         List<DeviceCheckAlarmDto>  alarmlist = deviceCheckAlarmDtos.stream().filter(deviceCheckAlarmDto -> deviceCheckAlarmDto.checkdeviceOffLine()).collect(Collectors.toList());
         //系统中已存在的离线报警
-        List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailMapper.selectStateAlarm(null,"状态报警");
+        List<AlarmDetailsDto> alarmDetailsDtos = alarmDetailMapper.selectStateAlarm(null,"状态报警",null);
         //已存在的报警信息转为map方便匹配
         Map<Integer,AlarmDetailsDto> alarmDetailsDtoMap = alarmDetailsDtos.stream().collect(Collectors.toMap(AlarmDetailsDto::getAlarmSettingId, a -> a,(k1, k2)->k1));
         //需要新增的
         List<AlarmDetailsEntity>  deviceStateAlarmDtoNews =alarmlist.stream()
                 .filter(deviceCheckAlarmDto -> !alarmDetailsDtoMap.containsKey(deviceCheckAlarmDto.getAlarmSettingId()))
                 .map(d ->{
-                    AlarmDetailsEntity alarmDetailsEntity = new AlarmDetailsEntity();
+
+                     AlarmDetailsEntity alarmDetailsEntity = new AlarmDetailsEntity();
                     alarmDetailsEntity.setDateUpdate(new Date());
                     alarmDetailsEntity.setDateCreate(new Date());
                     alarmDetailsEntity.setStatus(1);
@@ -214,12 +229,12 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
                         if(taskUsers!=null){
                             taskUsers.forEach(id->{
                                 message.setUserId(id);
-                                messageSendUtil.send(message);
+                                this.send(message);
                             });
                         }
                     }catch(Exception e){
                         e.printStackTrace();
-                        log.info("推送报警消息失败:{}"+e.getMessage());
+                        log.info("推送报警消息失败:{}",e.getMessage());
                     }
                     return alarmDetailsEntity;
                 })
@@ -241,28 +256,61 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
                     return alarmDetailsDto;
                 })
                 .collect(Collectors.toList());
-        //集合中剩下未处理的需要修改状态
-        Long currentTime =System.currentTimeMillis();
-        for(AlarmDetailsDto alarmDetailsDto:alarmDetailsDtoMap.values()){
-            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);//直接更新
-        }
 
-        //报警恢复的删除工单
-        Map<Integer,AlarmDetailsEntity> AlarmDtoNewsMap =  deviceStateAlarmDtoNews.stream().collect(Collectors.toMap(AlarmDetailsEntity::getDeviceId, a -> a,(k1, k2)->k1));
-        Map<Integer,AlarmDetailsEntity> AlarmDtoOldsMap =  deviceStateAlarmDtoOlds.stream().collect(Collectors.toMap(AlarmDetailsEntity::getDeviceId, a -> a,(k1, k2)->k1));
-        Set<Long> deviceIds = alarmDetailsDtoMap.values().stream()
-                .filter(a -> !(AlarmDtoNewsMap.containsKey(a.getDeviceId())||AlarmDtoOldsMap.containsKey(a.getDeviceId())))
-                .map(a -> a.getDeviceId().longValue())
-                .collect(Collectors.toSet());
-        if(deviceIds.size()>0){
-            operationManagerClient.batchDeleteByAlarms(new ArrayList<>(deviceIds));
+
+        //处理完成后,剩下的标记为历史数据
+        if(alarmDetailsDtoMap.values().size() > 0) {
+            //恢复正常的设备id
+            Set<Long> deviceIds = alarmDetailsDtoMap.values().stream()
+                    .map(a -> a.getDeviceId().longValue())
+                    .collect(Collectors.toSet());
+            //获取恢复正常的设备工单
+            List<WorkOrderManageByAlarmDto> workOrders = operationManagerClient.findWorkOrderByDeviceIds(new ArrayList<>(deviceIds));
+            //对报警信息分组
+            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<>();
+
+                //处理工单
+                for(WorkOrderManageByAlarmDto orderManageByAlarmDto :workOrders){
+                    String taskDesc = orderManageByAlarmDto.getTaskDesc();
+                    List<AlarmDetailsDto> alarmDetailsDtoList = deviceIdAlarmDetailsMap.get(orderManageByAlarmDto.getDeviceId().intValue());
+                    //标记为历史数据 并 修改工单描述
+                    for (AlarmDetailsDto alarmDetailsDto : alarmDetailsDtoList) {
+                        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);//直接更新
+                        taskDesc = taskDesc.replace(";" + alarmDetailsDto.getAlarmContent(), "")
+                                .replace(alarmDetailsDto.getAlarmContent(), "");
+                    }
+                    if (orderManageByAlarmDto != null
+                            && (orderManageByAlarmDto.getOrderStatus() == null || orderManageByAlarmDto.getOrderStatus() == 0)
+                            && StringUtils.isBlank(taskDesc)) {
+                        //工单未派单且无报警信息,删除工单
+                        orderDelete.add(orderManageByAlarmDto.getDeviceId());
+                    } else {
+                        //其他情况修改描述
+                        orderManageByAlarmDto.setTaskDesc(taskDesc);
+                        orderUpdate.add(orderManageByAlarmDto);
+                    }
+                }
+                //批量处理工单
+                if(orderDelete.size()>0){
+                    operationManagerClient.batchDeleteByAlarms(orderDelete);
+                }
+                if(orderUpdate.size()>0){
+                    operationManagerClient.updateByAlarms(orderUpdate);
+                }
+
+            }
         }
     }
 
@@ -326,7 +374,7 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
                    if(taskUsers!=null){
                        taskUsers.forEach(id->{
                            message.setUserId(id);
-                           messageSendUtil.send(message);
+                           this.send(message);
                        });
                    }
                    workOrderManageByAlarms.add(workOrderManageByAlarm);

+ 355 - 0
sms_water/src/main/java/com/huaxu/service/impl/HomePageReportServiceImpl.java

@@ -0,0 +1,355 @@
+package com.huaxu.service.impl;
+
+import com.huaxu.client.UserCenterClient;
+import com.huaxu.dao.HomePageReportMapper;
+import com.huaxu.dao.MonitorDataReportMapper;
+import com.huaxu.dto.generalView.DeviceWaterDetail;
+import com.huaxu.dto.generalView.DeviceWaterSupply;
+import com.huaxu.dto.generalView.WaterSupplyChart;
+import com.huaxu.dto.generalView.WaterSupplyData;
+import com.huaxu.dto.homePage.CompanyCount;
+import com.huaxu.dto.homePage.CompanyProduce;
+import com.huaxu.dto.homePage.WaterQualityRate;
+import com.huaxu.dto.homePage.WaterQualityRateForScene;
+import com.huaxu.entity.MonitorDataEntity;
+import com.huaxu.entity.MonitorDataValueEntity;
+import com.huaxu.model.LoginUser;
+import com.huaxu.service.HomePageReportService;
+import com.huaxu.service.MonitorDataReportService;
+import com.huaxu.util.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @description
+ * @auto wangli
+ * @data 2021/2/24 10:42
+ */
+@Service
+public class HomePageReportServiceImpl implements HomePageReportService {
+
+    @Resource
+    private HomePageReportMapper homePageReportMapper;
+
+    @Autowired
+    private UserCenterClient userCenterClient;
+
+    @Resource
+    private MonitorDataReportMapper monitorDataReportMapper;
+
+    @Autowired
+    private MonitorDataReportService MonitorDataReportService;
+
+    @Override
+    public List<DeviceWaterSupply> deviceWaterReportForSixMonth(Integer companyOrgId,String sceneType, Integer parmType) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+        List<DeviceWaterSupply> deviceWaterSupplies = homePageReportMapper.getDeviceWaterForSixMonth(companyOrgId,sceneType,parmType ,tenantId,loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        LocalDate localDate = LocalDate.now();
+
+        for (int i = 0; i < 6; i++) {
+            LocalDate newLocalDate = localDate.plusMonths(-i - 1);
+            if (i == deviceWaterSupplies.size()
+                    || newLocalDate.getMonthValue() != deviceWaterSupplies.get(i).getMonth().intValue()
+                    || newLocalDate.getYear() != deviceWaterSupplies.get(i).getYear().intValue()) {
+
+                DeviceWaterSupply deviceWaterSupply = new DeviceWaterSupply();
+                deviceWaterSupply.setOrderNo(i + 1);
+                deviceWaterSupply.setAmount(BigDecimal.ZERO);
+                deviceWaterSupply.setYear(newLocalDate.getYear());
+                deviceWaterSupply.setMonth(newLocalDate.getMonthValue());
+                deviceWaterSupply.setDate(newLocalDate);
+                deviceWaterSupply.setDateLabel(newLocalDate.getYear()+"-"+newLocalDate.getMonthValue());
+                deviceWaterSupplies.add(i, deviceWaterSupply);
+            } else {
+                deviceWaterSupplies.get(i).setOrderNo(i + 1);
+                deviceWaterSupplies.get(i).setDate(newLocalDate);
+                deviceWaterSupplies.get(i).setDateLabel(newLocalDate.getYear()+"-"+newLocalDate.getMonthValue());
+            }
+        }
+        deviceWaterSupplies.sort(Comparator.comparing(DeviceWaterSupply::getOrderNo).reversed());
+        return deviceWaterSupplies;
+    }
+
+
+    @Override
+    public CompanyCount countSceneByType(Integer companyOrgId) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        CompanyCount companyCount = homePageReportMapper.countSceneByType(companyOrgId,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        Integer company = userCenterClient.countCompanyByUser();
+        companyCount.setCompany(company != null ? company:0);
+        return companyCount;
+    }
+
+
+    @Override
+    public CompanyProduce deviceWaterAmount(Integer companyOrgId) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+        Map<Integer, MonitorDataEntity> MonitorDataMap = MonitorDataReportService.getIntegerMonitorDataEntityMap(loginUser);
+
+        LocalDate localDate = LocalDate.now();
+
+        CompanyProduce companyProduce = homePageReportMapper.getWaterSalesDetails(companyOrgId,loginUser.getTenantId(),loginUser.getType(),loginUser.getProgramItemList());
+
+        if(companyProduce == null ){
+            companyProduce = new CompanyProduce();
+        }
+        BigDecimal waterSupplyAmountForDay = BigDecimal.ZERO;
+        BigDecimal waterIntakeAmountForDay = BigDecimal.ZERO;
+
+        //3供水 4取水
+        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay(companyOrgId,"水厂", 3, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        List<DeviceWaterDetail> deviceIntakeWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay(companyOrgId,"水源", 4, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        //水厂获取实时流量并计算出当天流量
+        for (DeviceWaterDetail deviceWaterDetail : deviceSupplyWaterDetailsForDay) {
+            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0
+                    && deviceWaterDetail != null && deviceWaterDetail.getLatestValue() != null) {
+                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
+                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
+                        //累计当天流量
+                        waterSupplyAmountForDay = waterSupplyAmountForDay.add(new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()));
+                    }
+                }
+            }
+        }
+        //水源获取实时流量并计算出当天流量
+        for (DeviceWaterDetail deviceWaterDetail : deviceIntakeWaterDetailsForDay) {
+            MonitorDataEntity monitorDataEntity = MonitorDataMap.get(deviceWaterDetail.getDeviceId());
+            if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0
+                    && deviceWaterDetail != null && deviceWaterDetail.getLatestValue() != null) {
+                for (MonitorDataValueEntity monitorDataValueEntity : monitorDataEntity.getDataValues()) {
+                    if (monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId())) {
+                        //累计当天流量
+                        waterIntakeAmountForDay = waterIntakeAmountForDay.add(new BigDecimal(monitorDataValueEntity.getDataValue()).subtract(deviceWaterDetail.getLatestValue()));
+                    }
+                }
+            }
+        }
+
+        BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth(companyOrgId,"水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        if (waterSupplyAmountForMonth == null) {
+            waterSupplyAmountForMonth = BigDecimal.ZERO;
+        }
+        //水厂当月流量
+        companyProduce.setWaterSupply(
+                (waterSupplyAmountForMonth.add(waterSupplyAmountForDay)).divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP));
+
+        BigDecimal waterIntakeAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth(companyOrgId,"水源", 4, tenantId, localDate.getYear(), localDate.getMonthValue(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        if (waterIntakeAmountForMonth == null) {
+            waterIntakeAmountForMonth = BigDecimal.ZERO;
+        }
+        //水源当月流量
+        companyProduce.setWaterIntake(
+                (waterIntakeAmountForMonth.add(waterIntakeAmountForDay)).divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP));
+
+        return companyProduce;
+    }
+
+
+    @Override
+    public WaterQualityRate getWaterQualification(Integer companyOrgId) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        WaterQualityRate waterQualityRate = new WaterQualityRate();
+        //管网水质
+        WaterQualityRate pipeNetworkQuality = homePageReportMapper.getPipeNetworkQualification(companyOrgId,loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //水源水质
+        WaterQualityRate waterSourceQuality = homePageReportMapper.getWaterQualification(companyOrgId,"水源",loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //水厂水质
+        WaterQualityRate waterFactoryQuality = homePageReportMapper.getWaterQualification(companyOrgId,"水厂",loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //二供水质
+        WaterQualityRate pumpingStationQuality = homePageReportMapper.getWaterQualification(companyOrgId,"泵站",loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        if(pipeNetworkQuality != null){
+            waterQualityRate.setAbnormal(waterQualityRate.getAbnormal()+pipeNetworkQuality.getAbnormal());
+            waterQualityRate.setPipeNetworkQuality(pipeNetworkQuality.getAverageQuality());
+            waterQualityRate.setAverageQuality(waterQualityRate.getAverageQuality().add(pipeNetworkQuality.getAverageQuality()));
+        }
+        if(waterSourceQuality != null){
+            waterQualityRate.setAbnormal(waterQualityRate.getAbnormal()+waterSourceQuality.getAbnormal());
+            waterQualityRate.setWaterSourceQuality(waterSourceQuality.getAverageQuality());
+            waterQualityRate.setAverageQuality(waterQualityRate.getAverageQuality().add(waterSourceQuality.getAverageQuality()));
+        }
+        if(waterFactoryQuality != null){
+            waterQualityRate.setAbnormal(waterQualityRate.getAbnormal()+waterFactoryQuality.getAbnormal());
+            waterQualityRate.setWaterFactoryQuality(waterFactoryQuality.getAverageQuality());
+            waterQualityRate.setAverageQuality(waterQualityRate.getAverageQuality().add(waterFactoryQuality.getAverageQuality()));
+        }
+        if(pumpingStationQuality != null){
+            waterQualityRate.setAbnormal(waterQualityRate.getAbnormal()+pumpingStationQuality.getAbnormal());
+            waterQualityRate.setPumpingStationQuality(pumpingStationQuality.getAverageQuality());
+            waterQualityRate.setAverageQuality(waterQualityRate.getAverageQuality().add(pumpingStationQuality.getAverageQuality()));
+        }
+        waterQualityRate.setAverageQuality(waterQualityRate.getAverageQuality().divide(new BigDecimal("4"),3,BigDecimal.ROUND_HALF_UP));
+
+        return waterQualityRate;
+    }
+
+
+    /**
+     * 水厂 3 水源 4 水位 12
+     * @return
+     */
+    @Override
+    public List<DeviceWaterSupply> monitorDataFifteenDays(Integer sceneId, String sceneType, Integer parmType) {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+
+        List<DeviceWaterSupply> deviceWaterSupplies = homePageReportMapper.getMonitorDataFifteenDays( sceneId, sceneType, parmType,
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        LocalDate localDate = LocalDate.now();
+        for (int i = 0; i < 15; i++) {
+            LocalDate newLocalDate = localDate.plusDays(-i - 1);
+            if (i == deviceWaterSupplies.size()
+                    || !newLocalDate.isEqual(LocalDate.of(deviceWaterSupplies.get(i).getYear(),
+                    deviceWaterSupplies.get(i).getMonth(),
+                    deviceWaterSupplies.get(i).getDay()))) {
+
+                DeviceWaterSupply deviceWaterSupply = new DeviceWaterSupply();
+                deviceWaterSupply.setOrderNo(i + 1);
+                deviceWaterSupply.setAmount(BigDecimal.ZERO);
+                deviceWaterSupply.setYear(newLocalDate.getYear());
+                deviceWaterSupply.setMonth(newLocalDate.getMonthValue());
+                deviceWaterSupply.setDay(newLocalDate.getDayOfMonth());
+                deviceWaterSupply.setDate(newLocalDate);
+                deviceWaterSupplies.add(i, deviceWaterSupply);
+            } else {
+                deviceWaterSupplies.get(i).setOrderNo(i + 1);
+                deviceWaterSupplies.get(i).setDate(newLocalDate);
+            }
+        }
+        deviceWaterSupplies.sort(Comparator.comparing(DeviceWaterSupply::getOrderNo).reversed());
+
+        return deviceWaterSupplies;
+    }
+
+
+    @Override
+    public WaterQualityRateForScene waterQualityRateForWaterSource(Integer sceneId) {
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        //余氯
+        BigDecimal chlorine =  homePageReportMapper.getWaterQualificationForScene(11,sceneId,"水源",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //浊度
+        BigDecimal turbidity =  homePageReportMapper.getWaterQualificationForScene(9,sceneId,"水源",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //PH
+        BigDecimal ph =  homePageReportMapper.getWaterQualificationForScene(7,sceneId,"水源",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+       //压力
+        BigDecimal pressure =  homePageReportMapper.getWaterQualificationForScene(13,sceneId,"水源",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        WaterQualityRateForScene waterQualityRateForScene = new WaterQualityRateForScene();
+        waterQualityRateForScene.setChlorine(chlorine!=null?chlorine:BigDecimal.ZERO);
+        waterQualityRateForScene.setTurbidity(turbidity!=null?turbidity:BigDecimal.ZERO);
+        waterQualityRateForScene.setPh(ph!=null?ph:BigDecimal.ZERO);
+        waterQualityRateForScene.setPressure(pressure!=null?pressure:BigDecimal.ZERO);
+        return waterQualityRateForScene;
+    }
+
+    @Override
+    public WaterQualityRateForScene waterQualityRateForPumpingStation(Integer sceneId) {
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        //余氯
+        BigDecimal chlorine =  homePageReportMapper.getWaterQualificationForScene(11,sceneId,"泵站",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //浊度
+        BigDecimal turbidity =  homePageReportMapper.getWaterQualificationForScene(10,sceneId,"泵站",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //PH
+        BigDecimal ph =  homePageReportMapper.getWaterQualificationForScene(8,sceneId,"泵站",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //压力
+        BigDecimal pressure =  homePageReportMapper.getWaterQualificationForScene(13,sceneId,"泵站",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        WaterQualityRateForScene waterQualityRateForScene = new WaterQualityRateForScene();
+        waterQualityRateForScene.setChlorine(chlorine!=null?chlorine:BigDecimal.ZERO);
+        waterQualityRateForScene.setTurbidity(turbidity!=null?turbidity:BigDecimal.ZERO);
+        waterQualityRateForScene.setPh(ph!=null?ph:BigDecimal.ZERO);
+        waterQualityRateForScene.setPressure(pressure!=null?pressure:BigDecimal.ZERO);
+        return waterQualityRateForScene;
+    }
+
+    @Override
+    public WaterQualityRateForScene waterQualityRateForWaterFactory(Integer sceneId) {
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        //余氯
+        BigDecimal chlorine =  homePageReportMapper.getWaterQualificationForScene(11,sceneId,"水厂",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //浊度
+        BigDecimal turbidity =  homePageReportMapper.getWaterQualificationForScene(10,sceneId,"水厂",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //PH
+        BigDecimal ph =  homePageReportMapper.getWaterQualificationForScene(8,sceneId,"水厂",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        //压力
+        BigDecimal pressure =  homePageReportMapper.getWaterQualificationForScene(13,sceneId,"水厂",
+                loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+
+        WaterQualityRateForScene waterQualityRateForScene = new WaterQualityRateForScene();
+        waterQualityRateForScene.setChlorine(chlorine!=null?chlorine:BigDecimal.ZERO);
+        waterQualityRateForScene.setTurbidity(turbidity!=null?turbidity:BigDecimal.ZERO);
+        waterQualityRateForScene.setPh(ph!=null?ph:BigDecimal.ZERO);
+        waterQualityRateForScene.setPressure(pressure!=null?pressure:BigDecimal.ZERO);
+        return waterQualityRateForScene;
+    }
+    //水厂制水、药耗、电耗对比曲线
+    @Override
+    public List<WaterSupplyChart> waterEnergyConsumption( Integer sceneId,String sceneType) {
+
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        String tenantId = loginUser.getTenantId();
+
+        List<WaterSupplyData> waterSupplyDatas = homePageReportMapper.getWaterSupplyData(sceneId,sceneType,tenantId,loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        List<WaterSupplyChart> waterSupplyCharts = new ArrayList<>();
+        waterSupplyDatas.stream()
+                .collect(Collectors.groupingBy(item -> item.getYear() + "-" + item.getMonth() + "-" + item.getDay()))
+                .forEach((key, value) -> {
+                    WaterSupplyChart waterSupplyChart = new WaterSupplyChart();
+                    waterSupplyChart.setDate(key);
+                    value.stream().forEach(waterSupplyData -> {
+                        waterSupplyChart.setSort(waterSupplyData.getDay());
+
+                        if (waterSupplyData.getParmType() == 3) { //供水
+                            waterSupplyChart.setWaterData(waterSupplyData.getAmount().divide(new BigDecimal("10000"),3,BigDecimal.ROUND_HALF_UP));
+                        } else if (waterSupplyData.getParmType() == 5) {//电耗
+                            waterSupplyChart.setPowerData(waterSupplyData.getAmount().divide(new BigDecimal("1000"),3,BigDecimal.ROUND_HALF_UP));
+                        } else if (waterSupplyData.getParmType() == 6) {//药耗
+                            waterSupplyChart.setDrugData(waterSupplyData.getAmount());
+                        }
+                    });
+                    waterSupplyCharts.add(waterSupplyChart);
+                });
+
+        waterSupplyCharts.sort(Comparator.comparing(WaterSupplyChart::getSort));
+
+        Integer maxDay =  LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth();
+        for(int i=0;i<maxDay;i++){
+
+            if(i == waterSupplyCharts.size() || !waterSupplyCharts.get(i).getSort().equals(i+1)){
+                waterSupplyCharts.add(i,new WaterSupplyChart(i+1, LocalDate.now().getYear()+"-"+LocalDate.now().getMonthValue()+"-"+(i+1)));
+            }
+        }
+//        waterSupplyCharts.sort(Comparator.comparing(WaterSupplyChart::getSort).reversed());
+        return waterSupplyCharts;
+    }
+
+}

+ 12 - 8
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java

@@ -625,8 +625,8 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         }
 
         //3供水 4取水
-        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水厂", 3, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
-        List<DeviceWaterDetail> deviceIntakeWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水源", 4, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay(null,"水厂", 3, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        List<DeviceWaterDetail> deviceIntakeWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay(null,"水源", 4, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
 
         //水厂获取实时流量并计算出当天流量
         for (DeviceWaterDetail deviceWaterDetail : deviceSupplyWaterDetailsForDay) {
@@ -656,7 +656,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
             }
         }
 
-        BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        BigDecimal waterSupplyAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth(null,"水厂", 3, tenantId, localDate.getYear(), localDate.getMonthValue(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         BigDecimal waterSupplyAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水厂", 3, tenantId, localDate.getYear(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         if (waterSupplyAmountForMonth == null) {
             waterSupplyAmountForMonth = BigDecimal.ZERO;
@@ -678,7 +678,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         }
 
 
-        BigDecimal waterIntakeAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth("水源", 4, tenantId, localDate.getYear(), localDate.getMonthValue(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        BigDecimal waterIntakeAmountForMonth = monitorDataReportMapper.getDeviceWaterDetailForMonth(null,"水源", 4, tenantId, localDate.getYear(), localDate.getMonthValue(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         BigDecimal waterIntakeAmountForYear = monitorDataReportMapper.getDeviceWaterDetailForYear("水源", 4, tenantId, localDate.getYear(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
         if (waterIntakeAmountForMonth == null) {
             waterIntakeAmountForMonth = BigDecimal.ZERO;
@@ -775,9 +775,12 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
                         if (monitorDataEntity != null && monitorDataEntity.getDataValues() != null && monitorDataEntity.getDataValues().size() > 0) {
                             monitorDataEntity.getDataValues().stream()
                                     .filter(monitorDataValueEntity -> monitorDataValueEntity.getAttributeId().equals(deviceWaterDetail.getAttributeId()))
-                                    .forEach(monitorDataValueEntity ->
+                                    .forEach(monitorDataValueEntity -> {
                                             //累计当前压力
-                                            sceneWaterAmount.setWaterAmount(sceneWaterAmount.getWaterAmount().add(new BigDecimal(monitorDataValueEntity.getDataValue())))
+                                            if (monitorDataValueEntity.getDataValue() != null) {
+                                                sceneWaterAmount.setWaterAmount(sceneWaterAmount.getWaterAmount().add(new BigDecimal(monitorDataValueEntity.getDataValue())));
+                                            }
+                                        }
                                     );
                         }
                     });
@@ -839,7 +842,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
         Map<Integer, MonitorDataEntity> MonitorDataMap = getIntegerMonitorDataEntityMap(loginUser);
 
         LocalDate localDate = LocalDate.now();
-        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay("水厂", 3, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        List<DeviceWaterDetail> deviceSupplyWaterDetailsForDay = monitorDataReportMapper.getDeviceWaterDetailForDay(null,"水厂", 3, tenantId, localDate.plusDays(-1).getYear(), localDate.plusDays(-1).getMonthValue(), localDate.plusDays(-1).getDayOfMonth(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
 
         List<SceneWaterAmount> sceneWaterAmounts = new ArrayList<>();
         deviceSupplyWaterDetailsForDay.stream()
@@ -943,10 +946,11 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
     }
 
     //查询设备实时数据
-    private Map<Integer, MonitorDataEntity> getIntegerMonitorDataEntityMap(LoginUser loginUser) {
+    public Map<Integer, MonitorDataEntity> getIntegerMonitorDataEntityMap(LoginUser loginUser) {
 
         //查询设备编码
         List<String> deviceCodes = monitorDataReportMapper.selectDeviceCode(loginUser.getTenantId(),loginUser.getType(),loginUser.getPermissonType(),loginUser.getProgramItemList());
+        deviceCodes.add("300220070692");
         //根据编码获取redis中的实时数据
         List<MonitorDataEntity> monitorDataEntities = new ArrayList<>();
         for (String deviceCode : deviceCodes) {

+ 42 - 40
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataServiceImpl.java

@@ -120,7 +120,7 @@ public class MonitorDataServiceImpl implements MonitorDataService , Initializing
     }
 
     @Override
-    public List<DayReportEntity> getMonitorDataGroupByHour(LocalDateTime dateTime ){
+    public List<DayReportEntity> getMonitorDataGroupByHour(LocalDateTime dateTime ,List<Integer> deviceIds ){
 
         if(dateTime == null ){
             return null;
@@ -130,6 +130,9 @@ public class MonitorDataServiceImpl implements MonitorDataService , Initializing
         criteria.and("month").is(dateTime.getMonthValue());
         criteria.and("day").is(dateTime.getDayOfMonth());
         criteria.and("hour").is(dateTime.getHour());
+        if(deviceIds!=null && deviceIds.size()>0){
+            criteria.and("deviceId").in(deviceIds);
+        }
         AggregationOptions aggregationOptions = AggregationOptions.builder().allowDiskUse(true).build();
         Aggregation agg = Aggregation.newAggregation(
                 Aggregation.match(criteria),    //查询条件
@@ -153,60 +156,59 @@ public class MonitorDataServiceImpl implements MonitorDataService , Initializing
     }
 
     @Override
-    public List<DayReportEntity> getMonitorDataReportByHour(){
+    public void getMonitorDataReportByHour(){
         //取前一个小时的时间
         LocalDateTime dateTime = LocalDateTime.now().plusHours(-1);
 
-        List<DayReportEntity> hourDatas = getMonitorDataGroupByHour(dateTime);
-        List<DayReportEntity> lastHourDatas = getMonitorDataGroupByHour(dateTime.plusHours(-1));
+        List<DayReportEntity> hourDatas = getMonitorDataGroupByHour(dateTime,null);
+        List<DayReportEntity> lastHourDatas = getMonitorDataGroupByHour(dateTime.plusHours(-1),null);
 
         Map<String,DayReportEntity> lastHourDataMap = lastHourDatas.stream().collect(Collectors.toMap(DayReportEntity::getMapkey, a -> a,(k1, k2)->k1));
         //保存日报表数据
-        if(hourDatas.size()>0){
+        saveReportDataByHour(hourDatas, lastHourDataMap);
+
+        //设备id
+        List<Integer> deviceIds = lastHourDataMap.values().stream().map(d -> d.getDeviceId().intValue()).distinct().collect(Collectors.toList());
+        //补数据,前24小时没有统计数据的
+        if(deviceIds.size()>0){
+            for(int i=1;i<24;i++){
+                dateTime = LocalDateTime.now().plusHours(-i);
+                //前几小时有统计数据的设备id
+                List<Integer> deviceIdsIsExit = monitorDataMapper.checkReportDataExit(dateTime.getYear(),dateTime.getMonthValue(),dateTime.getDayOfMonth(),dateTime.getHour(),deviceIds);
+                //需要补充数据的设备
+                deviceIds = deviceIds.stream().filter(deviceId -> !deviceIdsIsExit.contains(deviceId)).collect(Collectors.toList());
+
+                //查询需要补充数据的设备数据信息
+                hourDatas = new ArrayList<>(lastHourDataMap.values());
+
+                lastHourDatas = getMonitorDataGroupByHour(dateTime.plusHours(-i),deviceIds);
+                lastHourDataMap = lastHourDatas.stream().collect(Collectors.toMap(DayReportEntity::getMapkey, a -> a,(k1, k2)->k1));
+                //保存日报表数据
+                saveReportDataByHour(hourDatas, lastHourDataMap);
+            }
+        }
+
+    }
+    //保存日报表数据
+    private void saveReportDataByHour(List<DayReportEntity> hourDatas, Map<String, DayReportEntity> lastHourDataMap) {
+        if (hourDatas.size() > 0) {
             //计算累计值
-            for(DayReportEntity dayReportEntity : hourDatas){
-                if(dayReportEntity.getLatestValue()!=null && lastHourDataMap.containsKey(dayReportEntity.getMapkey())){
+            for (DayReportEntity dayReportEntity : hourDatas) {
+                if (dayReportEntity.getLatestValue() != null && lastHourDataMap.containsKey(dayReportEntity.getMapkey())) {
                     //上一个小时有值
-                    if(  lastHourDataMap.get(dayReportEntity.getMapkey()).getLatestValue() != null){
+                    if (lastHourDataMap.get(dayReportEntity.getMapkey()).getLatestValue() != null) {
                         dayReportEntity.setSumValue(new BigDecimal(dayReportEntity.getLatestValue().toString()).subtract(new BigDecimal(lastHourDataMap.get(dayReportEntity.getMapkey()).getLatestValue().toString())).doubleValue());
-                    }else if(dayReportEntity.getFirstValue() != null){//上一个小时没有值,取本小时的初始值
-                        dayReportEntity.setSumValue(new BigDecimal(dayReportEntity.getLatestValue().toString()).subtract(new BigDecimal(dayReportEntity.getFirstValue().toString())).doubleValue());
+                    } else {
+                        if (dayReportEntity.getFirstValue() != null) {//上一个小时没有值,取本小时的初始值
+                            dayReportEntity.setSumValue(new BigDecimal(dayReportEntity.getLatestValue().toString()).subtract(new BigDecimal(dayReportEntity.getFirstValue().toString())).doubleValue());
+                        }
+                        lastHourDataMap.remove(dayReportEntity.getMapkey());
                     }
 
                 }
             }
             monitorDataMapper.batchInsertDayReport(hourDatas);
         }
-        return hourDatas;
-
-//        Map<String,DayReportEntity> hourDataMap = hourDatas.stream().collect(Collectors.toMap(DayReportEntity::getMapkey, a -> a,(k1, k2)->k1));
-//        //需要统计的属性值(租户——场景——设备——属性)
-//        List<DayReportEntity> dayReportEntities = monitorDataMapper.getReportBaseInfo();
-//        //保存日报表数据
-//        if(hourDatas.size()>0 && dayReportEntities.size()>0){
-//           //填充数据
-//
-//            dayReportEntities =  dayReportEntities.stream()
-//                            .filter(d ->StringUtils.isNotBlank(d.getMapkey()) && hourDataMap.containsKey(d.getMapkey()))
-//                            .map(dayReportEntity ->{
-//                                DayReportEntity hourData = hourDataMap.get(dayReportEntity.getMapkey());
-//                                dayReportEntity.setYear(hourData.getYear());
-//                                dayReportEntity.setMonth(hourData.getMonth());
-//                                dayReportEntity.setDay(hourData.getDay());
-//                                dayReportEntity.setHour(hourData.getHour());
-//                                dayReportEntity.setMinValue(hourData.getMinValue());
-//                                dayReportEntity.setMaxValue(hourData.getMaxValue());
-//                                dayReportEntity.setAvgValue(hourData.getAvgValue());
-//                                dayReportEntity.setCollectDate(hourData.getCollectDate());
-//                                dayReportEntity.setLatestValue(hourData.getLatestValue());
-//                                if(lastHourDataMap.containsKey(dayReportEntity.getMapkey()) && lastHourDataMap.get(dayReportEntity.getMapkey()).getLatestValue() != null){
-//                                    dayReportEntity.setSumValue(new BigDecimal(hourDataMap.get(dayReportEntity.getMapkey()).getLatestValue().toString()).subtract(new BigDecimal(lastHourDataMap.get(dayReportEntity.getMapkey()).getLatestValue().toString())).doubleValue());
-//                                }
-//                                return dayReportEntity;
-//                            }).collect(Collectors.toList());
-//            monitorDataMapper.batchInsertDayReport(dayReportEntities);
-//        }
-//        return dayReportEntities;
     }
 
     @Override

+ 44 - 28
sms_water/src/main/resources/application-dev.properties

@@ -73,29 +73,7 @@ spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
 SMS.sys_config_path=/UMIS_SMS_IMAGES/
 SMS.sys_excel_path=/UMIS_SMS_EXCEL/
 
-#请求处理的超时时间
-ribbon.ReadTimeout: 30000
-#请求连接的超时时间
-ribbon.ConnectTimeout: 30000
 
-##rabbitmq
-spring.rabbitmq.host=114.135.61.188
-spring.rabbitmq.port=55672
-#spring.rabbitmq.host=47.112.217.10
-#spring.rabbitmq.port=5672
-spring.rabbitmq.username=huaxu
-spring.rabbitmq.password=huaxu123
-spring.rabbitmq.virtual-host=/
-spring.rabbitmq.listener.queue=new_hx_queue
-spring.rabbitmq.listener.simple.acknowledge-mode = NONE
-
-#spring.rabbitmq.host=127.0.0.1
-#spring.rabbitmq.port=5672
-#spring.rabbitmq.username=guest
-#spring.rabbitmq.password=guest
-#spring.rabbitmq.virtual-host=/
-#spring.rabbitmq.listener.queue=new_test_queues
-#spring.rabbitmq.listener.simple.acknowledge-mode = NONE
 
 
 #http
@@ -128,13 +106,51 @@ spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThre
 spring.quartz.properties.org.quartz.threadPool.threadCount=10
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
+
+
+
+
+
+# 设置 feign 客户端超时时间(OpenFeign 默认支持 ribbon)
+# 值的是建立连接所用的时间,使用与网络状态正常的情况,两端连接所用的时间
+ribbon.ReadTimeout=5000
+# 指的是建立连接后从服务器读取到可用资源所用的时间
+ribbon.ConnectionTimeout=5000
+
+##rabbitmq
+message.spring.rabbitmq.host=127.0.0.1
+message.spring.rabbitmq.port=5672
+message.spring.rabbitmq.username=guest
+message.spring.rabbitmq.password=guest
+message.spring.rabbitmq.virtual-host= /
+message.spring.rabbitmq.requested-heartbeat = 10
+message.spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+message.spring.rabbitmq.listener.simple.prefetch = 20
+message.spring.rabbitmq.connection-timeout=15000
+message.spring.rabbitmq.publisher-confirm-type=correlated
+message.spring.rabbitmq.publisher-confirms=true
+message.spring.rabbitmq.publisher-returns=true
+
+dispath.queue=dispath
 receive.exchange.name=messageExchange
 dispath.routing.key=dipathKey
 
-#rabbit
 
-spring.rabbitmq.connection-timeout=15000
-spring.rabbitmq.publisher-confirm-type=correlated
-spring.rabbitmq.publisher-returns=true
-spring.rabbitmq.template.mandatory=true
-dispath.queue=dispath
+
+
+receiveData.spring.rabbitmq.host=127.0.0.1
+receiveData.spring.rabbitmq.port=5672
+receiveData.spring.rabbitmq.username=guest
+receiveData.spring.rabbitmq.password=guest
+receiveData.spring.rabbitmq.virtual-host=/
+receiveData.spring.rabbitmq.listener.queue=new_test_queues
+receiveData.spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+receiveData.spring.rabbitmq.listener.simple.prefetch = 20
+
+receiveData.spring.rabbitmq.requested-heartbeat = 10
+receiveData.spring.rabbitmq.connection-timeout=15000
+receiveData.spring.rabbitmq.publisher-confirm-type=correlated
+receiveData.spring.rabbitmq.publisher-confirms=true
+receiveData.spring.rabbitmq.publisher-returns=true
+
+

+ 44 - 11
sms_water/src/main/resources/application-prd.properties

@@ -74,16 +74,7 @@ spring.cloud.nacos.discovery.server-addr=10.0.0.136:8848
 SMS.sys_config_path=/UMIS_SMS_IMAGES/
 SMS.sys_excel_path=/UMIS_SMS_EXCEL/
 
-##rabbitmq
-#spring.rabbitmq.host=114.135.61.188
-#spring.rabbitmq.port=55672
-spring.rabbitmq.host=47.112.217.10
-spring.rabbitmq.port=5672
-spring.rabbitmq.username=huaxu
-spring.rabbitmq.password=huaxu123
-spring.rabbitmq.virtual-host=/
-spring.rabbitmq.listener.queue=new_hx_queue
-spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+
 #http
 http_pool.max_total=200
 http_pool.default_max_per_route=100
@@ -115,5 +106,47 @@ spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThre
 spring.quartz.properties.org.quartz.threadPool.threadCount=10
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
+
+
+##rabbitmq
+#message.spring.rabbitmq.host=114.135.61.188
+#message.spring.rabbitmq.port=55672
+#message.spring.rabbitmq.username=zoniot
+#message.spring.rabbitmq.password=zcxk100
+message.spring.rabbitmq.host=47.112.217.10
+message.spring.rabbitmq.port=5672
+message.spring.rabbitmq.username=huaxu
+message.spring.rabbitmq.password=huaxu123
+message.spring.rabbitmq.virtual-host= /
+message.spring.rabbitmq.requested-heartbeat = 10
+message.spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+message.spring.rabbitmq.listener.simple.prefetch = 20
+message.spring.rabbitmq.connection-timeout=15000
+message.spring.rabbitmq.publisher-confirm-type=correlated
+message.spring.rabbitmq.publisher-confirms=true
+message.spring.rabbitmq.publisher-returns=true
+
 receive.exchange.name=messageExchangeTest
-dispath.routing.key=dipathKeyTest
+dispath.routing.key=dipathKeyTest
+dispath.queue=dispathTest
+
+
+
+
+receiveData.spring.rabbitmq.host=47.112.217.10
+receiveData.spring.rabbitmq.port=5672
+receiveData.spring.rabbitmq.username=huaxu
+receiveData.spring.rabbitmq.password=huaxu123
+receiveData.spring.rabbitmq.virtual-host=/
+receiveData.spring.rabbitmq.listener.queue=new_hx_queue
+receiveData.spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+receiveData.spring.rabbitmq.listener.simple.prefetch = 20
+
+receiveData.spring.rabbitmq.requested-heartbeat = 10
+receiveData.spring.rabbitmq.connection-timeout=15000
+receiveData.spring.rabbitmq.publisher-confirm-type=correlated
+receiveData.spring.rabbitmq.publisher-confirms=true
+receiveData.spring.rabbitmq.publisher-returns=true
+
+
+

+ 40 - 7
sms_water/src/main/resources/application-sit.properties

@@ -77,13 +77,13 @@ SMS.sys_excel_path=/UMIS_SMS_EXCEL/
 ##rabbitmq
 #spring.rabbitmq.host=114.135.61.188
 #spring.rabbitmq.port=55672
-spring.rabbitmq.host=47.112.217.10
-spring.rabbitmq.port=5672
-spring.rabbitmq.username=huaxu
-spring.rabbitmq.password=huaxu123
-spring.rabbitmq.virtual-host=/
-spring.rabbitmq.listener.queue=new_hx_queue
-spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+#spring.rabbitmq.host=47.112.217.10
+#spring.rabbitmq.port=5672
+#spring.rabbitmq.username=huaxu
+#spring.rabbitmq.password=huaxu123
+#spring.rabbitmq.virtual-host=/
+#spring.rabbitmq.listener.queue=new_hx_queue
+#spring.rabbitmq.listener.simple.acknowledge-mode = NONE
 #http
 http_pool.max_total=200
 http_pool.default_max_per_route=100
@@ -115,6 +115,39 @@ spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThre
 spring.quartz.properties.org.quartz.threadPool.threadCount=10
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
+
+
+##rabbitmq 报警消息和工单消息数据
+message.spring.rabbitmq.host=114.135.61.188
+message.spring.rabbitmq.port=55672
+message.spring.rabbitmq.username=zoniot
+message.spring.rabbitmq.password=zcxk100
+message.spring.rabbitmq.virtual-host= /
+message.spring.rabbitmq.requested-heartbeat = 10
+message.spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+message.spring.rabbitmq.listener.simple.prefetch = 20
+message.spring.rabbitmq.connection-timeout=15000
+message.spring.rabbitmq.publisher-confirm-type=correlated
+message.spring.rabbitmq.publisher-confirms=true
+message.spring.rabbitmq.publisher-returns=true
 receive.exchange.name=messageExchangeTest
 dispath.routing.key=dipathKeyTest1
+dispath.queue=dispathTest1
+
+#设备数据采集
+receiveData.spring.rabbitmq.host=47.112.217.10
+receiveData.spring.rabbitmq.port=5672
+receiveData.spring.rabbitmq.username=huaxu
+receiveData.spring.rabbitmq.password=huaxu123
+receiveData.spring.rabbitmq.virtual-host=/
+receiveData.spring.rabbitmq.listener.queue=new_hx_queue
+receiveData.spring.rabbitmq.listener.simple.acknowledge-mode = NONE
+receiveData.spring.rabbitmq.listener.simple.prefetch = 20
+
+receiveData.spring.rabbitmq.requested-heartbeat = 10
+receiveData.spring.rabbitmq.connection-timeout=15000
+receiveData.spring.rabbitmq.publisher-confirm-type=correlated
+receiveData.spring.rabbitmq.publisher-confirms=true
+receiveData.spring.rabbitmq.publisher-returns=true
+
 

+ 8 - 0
sms_water/src/main/resources/mapper/AlarmDetailMapper.xml

@@ -629,6 +629,7 @@
             left join sms_device_attribute da on da.id=a.ATTRIBUTE_ID
         </if>
         where  a.ALARM_VALUE is not null and a.ALARM_CONDITION is not null and d.status = 1 and a.status = 1
+        and a.status = 1
         <if test="deviceId != null">
             and d.id=#{deviceId}
         </if>
@@ -657,6 +658,13 @@
         <if test="deviceId != null">
             and DEVICE_ID=#{deviceId}
         </if>
+        <if test="alarmSettingIds != null and alarmSettingIds.size() > 0">
+            and alarm_setting_id IN
+            <foreach collection="alarmSettingIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+
 
 
     </select>

+ 369 - 0
sms_water/src/main/resources/mapper/HomePageReportMapper.xml

@@ -0,0 +1,369 @@
+<?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.HomePageReportMapper">
+
+    <select id="getDeviceWaterForSixMonth" resultType="com.huaxu.dto.generalView.DeviceWaterSupply">
+        select
+        r.year,r.month,
+        sum(r.SUM_VALUE)/10000 as "amount"
+        from sms_scene_type st
+        left join sms_scene s on s.SCENE_TYPE_ID =st.id
+        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
+        left join sms_year_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
+
+        where  dp.`STATUS`=1  and s.ENABLE_STATE = 1 and dp.TENANT_ID=#{tenantId}
+        <if test="companyOrgId != null">
+            and s.COMPANY_ORG_ID = #{companyOrgId}
+        </if>
+        and dp.PARM_TYPE = #{parmType} and st.SCENE_TYPE_NAME = #{sceneType}
+        and r.year*12 + r.month >=  year(CURDATE())*12 + month(CURDATE()) - 6
+        <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 ( s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
+            </if>
+        </if>
+        group by r.year,r.month
+        order by r.year desc,r.month desc
+    </select>
+
+    <select id="countSceneByType" resultType="com.huaxu.dto.homePage.CompanyCount">
+
+        select
+            sum(if(SCENE_TYPE_NAME = "水源",1,0)) as "waterSource"
+            ,sum(if(SCENE_TYPE_NAME = "水厂",1,0)) as "waterFactory"
+            ,sum(if(SCENE_TYPE_NAME = "管网",1,0)) as "pipeNetwork"
+            ,sum(if(SCENE_TYPE_NAME = "泵站",1,0)) as "pumpingStation"
+            ,0 as "waterMeter"
+        from  sms_scene s
+        left join sms_scene_type st on s.SCENE_TYPE_ID =st.ID
+        where s.PARENT_SCENE_ID= 0 and s.`STATUS` = 1 and st.`STATUS` = 1
+         and st.SCENE_TYPE_NAME in ('水源','水厂','管网','泵站')
+         <if test="companyOrgId != null">
+            and s.COMPANY_ORG_ID = #{companyOrgId}
+         </if>
+        and s.TENANT_ID=#{tenantId}
+        <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 ( s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
+            </if>
+        </if>
+    </select>
+
+    <select id="getWaterSalesDetails" resultType="com.huaxu.dto.homePage.CompanyProduce">
+        select
+            RECEIVABLE_TOTAL_AMOUNT/10000  as "receivableAmount"
+            ,RECEIVED_TOTAL_AMOUNT/10000 as "receivedAmount"
+            ,METER_READING_USAGE/10000 as "waterSale"
+        from sms_month_revenue r
+        where r.TENANT_ID = #{tenantId}
+        <if test="companyOrgId != null">
+            and r.COMPANY_ORG_ID = #{companyOrgId}
+        </if>
+        and year(r.COLLECT_DATE) =year(CURDATE()) and month(r.COLLECT_DATE) = month(CURDATE())
+        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+            and r.COMPANY_ORG_ID in
+            <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="getPipeNetworkQualification" resultType="com.huaxu.dto.homePage.WaterQualityRate">
+        select
+            sum(alarmNumber ) as  "abnormal",
+            ROUND(sum(if(alarmNumber > 0 ,0,1))/if(count(1) != 0, count(1),1) * 100,2) as "averageQuality"
+        from
+        (
+            select
+                s.id as "sceneId"
+                ,d.id as "deviceId"
+                ,count(ad.id) as  "alarmNumber"
+            from sms_scene_type st
+            left join sms_scene s on s.SCENE_TYPE_ID =st.ID
+            left join sms_device_scene ds on ds.PARENT_SCENE_ID = s.ID
+            left join sms_device d on d.id=ds.DEVICE_ID
+            left join sms_device_parm dp on dp.SCENE_ID =ds.SCENE_ID and dp.DEVICE_ID =ds.DEVICE_ID and dp.PARM_TYPE in (7,9,11)
+            left join sms_alarm_details ad on dp.SCENE_ID =ad.SCENE_ID and dp.DEVICE_ID =ad.DEVICE_ID and dp.ATTRIBUTE_ID =ad.ATTRIBUTE_ID
+            and ad.STATE = 1  and ad.`STATUS` =1
+            where st.`STATUS` = 1 and s.`STATUS` = 1 and ds.`STATUS` = 1 and d.`STATUS` = 1 and dp.`STATUS` = 1
+            and st.SCENE_TYPE_NAME ='管网'
+            <if test="companyOrgId != null">
+            and s.COMPANY_ORG_ID = #{companyOrgId}
+        </if>
+            and s.TENANT_ID=#{tenantId}
+            <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 ( s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
+            </if>
+        </if>
+
+        group by s.id,d.id
+        ) a
+    </select>
+
+    <select id="getWaterQualification" resultType="com.huaxu.dto.homePage.WaterQualityRate">
+        select
+        sum(alarmNumber ) as  "abnormal",
+        ROUND(sum(if(alarmNumber > 0 ,0,1))/if(count(1) != 0, count(1),1) * 100,2) as "averageQuality"
+        from (
+            select
+            s.SCENE_NAME as "sceneName"
+            ,sum( if(dp.PARM_TYPE IN ( 15,7, 8, 10, 11, 18, 19 ) and ad.id is not null,1,0) ) AS "alarmNumber"
+            from sms_scene_type st
+            left join sms_scene s on s.SCENE_TYPE_ID =st.id and PARENT_SCENE_ID ='0'
+            left join sms_device_parm dp on dp.PARENT_SCENE_ID =s.ID
+            left join sms_alarm_details ad on ad.STATE = 1 and ad.PARENT_SCENE_ID=dp.PARENT_SCENE_ID and ad.DEVICE_ID =dp.DEVICE_ID and ad.ATTRIBUTE_ID =dp.ATTRIBUTE_ID
+
+            where s.`STATUS`=1  and s.ENABLE_STATE = 1 and dp.`STATUS` = 1 and st.SCENE_TYPE_NAME = #{sceneType}
+            <if test="companyOrgId != null">
+                and s.COMPANY_ORG_ID = #{companyOrgId}
+            </if>
+            and s.TENANT_ID =#{tenantId}
+            <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 ( s.DEPT_ORG_ID in
+                    <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    or
+                    s.COMPANY_ORG_ID in
+                    <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    )
+                </if>
+                <if test="permissonType == 4 or permissonType == 3">
+                    and s.DEPT_ORG_ID in
+                    <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                </if>
+                <if test="permissonType == 1">
+                    and s.COMPANY_ORG_ID in
+                    <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                        #{item.orgId}
+                    </foreach>
+                    and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
+                </if>
+            </if>
+            group by s.SCENE_NAME
+        ) a
+
+    </select>
+
+    <select id="getMonitorDataFifteenDays" resultType="com.huaxu.dto.generalView.DeviceWaterSupply">
+        select
+        r.year,r.month,r.day,
+        sum(r.SUM_VALUE)/10000 as "amount"
+        from sms_scene_type st
+        left join sms_scene s on s.SCENE_TYPE_ID =st.id
+        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
+        left join sms_month_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
+        where  st.`STATUS`=1 and dp.`STATUS`=1  and s.ENABLE_STATE = 1
+        and s.id = #{sceneId}
+        and st.SCENE_TYPE_NAME = #{sceneType}
+        and dp.PARM_TYPE = #{parmType}
+        and dp.TENANT_ID=#{tenantId}
+        and r.COLLECT_DATE >= DATE_SUB(CURDATE(),INTERVAL 15 day)
+        <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 ( s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
+            </if>
+        </if>
+        group by r.year,r.month,r.day
+        order by r.year desc,r.month desc,r.day desc
+    </select>
+
+    <select id="getWaterQualificationForScene" resultType="java.math.BigDecimal">
+        select
+            ROUND(sum(if(alarmNumber > 0 ,0,1))/if(count(1) != 0, count(1),1) * 100,2)
+        from
+        (
+        select
+            s.id as "sceneId"
+            ,d.id as "deviceId"
+            ,count(ad.id) as  "alarmNumber"
+        from sms_scene_type st
+        left join sms_scene s on s.SCENE_TYPE_ID =st.ID
+        left join sms_device_scene ds on ds.PARENT_SCENE_ID = s.ID
+        left join sms_device d on d.id=ds.DEVICE_ID
+        left join sms_device_parm dp on dp.SCENE_ID =ds.SCENE_ID and dp.DEVICE_ID =ds.DEVICE_ID and dp.PARM_TYPE =#{parmType}
+        left join sms_alarm_details ad on dp.SCENE_ID =ad.SCENE_ID and dp.DEVICE_ID =ad.DEVICE_ID and dp.ATTRIBUTE_ID =ad.ATTRIBUTE_ID
+        and ad.STATE = 1  and ad.`STATUS` =1
+        where st.`STATUS` = 1 and s.`STATUS` = 1 and ds.`STATUS` = 1 and d.`STATUS` = 1 and dp.`STATUS` = 1
+        and s.id= #{sceneId}
+        and st.SCENE_TYPE_NAME = #{sceneType}
+        and s.TENANT_ID=#{tenantId}
+        <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 ( s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
+            </if>
+        </if>
+
+        group by s.id,d.id
+        ) a
+
+    </select>
+
+    <select id="getWaterSupplyData" resultType="com.huaxu.dto.generalView.WaterSupplyData">
+        select
+        r.year
+        ,r.month
+        ,r.day
+        ,dp.PARM_TYPE as "parmType"
+        ,sum(r.SUM_VALUE) as "amount"
+        ,da.UNIT as "unit"
+        from sms_scene_type st
+        left join sms_scene s on s.SCENE_TYPE_ID =st.id
+        left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
+        left join sms_device_attribute da on dp.ATTRIBUTE_ID =da.ID
+        left join sms_month_report r on r.DEVICE_ID =dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID
+        where  dp.`STATUS`=1  and st.`STATUS`=1 and s.`STATUS`=1 and s.ENABLE_STATE = 1
+        and r.COLLECT_DATE >= date_add(curdate(), interval - day(curdate()) + 1 day)
+        and dp.PARM_TYPE in (3,5,6)
+        and s.id= #{sceneId}
+        and st.SCENE_TYPE_NAME = #{sceneType}
+        and dp.TENANT_ID=#{tenantId}
+        <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 ( s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                or
+                s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                )
+            </if>
+            <if test="permissonType == 4 or permissonType == 3">
+                and s.DEPT_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+            </if>
+            <if test="permissonType == 1">
+                and s.COMPANY_ORG_ID in
+                <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                    #{item.orgId}
+                </foreach>
+                and (s.DEPT_ORG_ID is null or s.DEPT_ORG_ID =0)
+            </if>
+        </if>
+
+        group by r.year,r.month,r.day,dp.PARM_TYPE,da.UNIT
+    </select>
+
+
+</mapper>

+ 13 - 0
sms_water/src/main/resources/mapper/MonitorDataMapper.xml

@@ -71,4 +71,17 @@
         where year = #{year} and month =#{month} and day=#{day}
         group by TENANT_ID, DEVICE_ID, DEVICE_NAME, DEVICE_CODE, ATTRIBUTE_ID, ATTRIBUTE_NAME,  YEAR, MONTH, DAY
     </insert>
+
+
+    <select id="checkReportDataExit" resultType="java.lang.Integer">
+        select
+            distinct device_id
+        from sms_day_report
+        where year=#{year} and month = #{month} and day =#{day} and hour =#{hour}
+        and device_id in
+        <foreach collection="deviceIds" item="item" index="index" open="(" separator="," close=")">
+             #{item}
+        </foreach>
+
+    </select>
 </mapper>

+ 7 - 0
sms_water/src/main/resources/mapper/MonitorDataReportMapper.xml

@@ -1007,6 +1007,9 @@
         left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
         left join sms_month_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year} and r.month= #{month} and r.day = #{day}
         where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName} and s.ENABLE_STATE = 1
+        <if test="companyOrgId != null">
+            and s.COMPANY_ORG_ID = #{companyOrgId}
+        </if>
         and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
         <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
             <if test="permissonType == 5 or permissonType == 2">
@@ -1045,6 +1048,9 @@
         left join sms_device_parm dp on s.id=dp.PARENT_SCENE_ID
         left join sms_month_report r on r.DEVICE_ID= dp.DEVICE_ID and r.ATTRIBUTE_ID = dp.ATTRIBUTE_ID and r.year = #{year} and r.month= #{month}
         where  dp.`STATUS`=1 and st.SCENE_TYPE_NAME = #{sceneTypeName} and s.ENABLE_STATE = 1
+        <if test="companyOrgId != null">
+            and s.COMPANY_ORG_ID = #{companyOrgId}
+        </if>
         and dp.PARM_TYPE =#{parmType}   and dp.TENANT_ID=#{tenantId}
         <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
             <if test="permissonType == 5 or permissonType == 2">
@@ -1254,6 +1260,7 @@
 
         group by r.year,r.month,r.day,dp.PARM_TYPE,da.UNIT
     </select>
+
     <select id="getWaterSupplyDataByMonth" resultType="com.huaxu.dto.generalView.WaterSupplyData">
         select
         r.year

+ 65 - 8
sms_water/src/main/resources/mapper/OnlineMonitorMapper.xml

@@ -91,7 +91,14 @@
 
     <sql id="sceneAlarmJoins">
         left join (
-            select parent_scene_id,count(1) alarm_count
+            select parent_scene_id
+            <if test="flag == null or flag ==0">
+                ,count(1) alarm_count
+            </if>
+            <if test="flag == 1">
+                ,sum(case when alarm_type='参数报警' then 1 else 0 end) alarm_count
+                ,sum(case when alarm_type='状态报警' then 1 else 0 end) offline_alarm_count
+            </if>
             from sms_alarm_details a1
             where a1.`status` = 1 and a1.state = 1
             <if test="sceneIds != null and sceneIds.size() > 0">
@@ -102,6 +109,14 @@
             </if>
             group by parent_scene_id
         )t7 on t7.parent_scene_id=t1.id
+        <if test="flag == 1">
+        left join (
+            select parent_scene_id,count(distinct device_id) setting_device_count
+            from sms_alarm_setting
+            where alarm_type='状态报警' and status=1
+            group by parent_scene_id
+        )t10 on t7.parent_scene_id=t10.parent_scene_id
+        </if>
     </sql>
 
     <sql id="deviceInnerJoins">
@@ -183,8 +198,15 @@
     <!--查询地图悬浮数据-->
     <select id="selectMapSuspension" resultMap="monitorDataMap">
         select
-        <include refid="Base_Column_List"/>,if (t7.alarm_count>0, 1, 0) scene_state,
-        t1.COMPANY_ORG_ID as "companyOrgId"
+        <include refid="Base_Column_List"/>
+        <if test="flag == null or flag ==0">
+            ,if (t7.alarm_count>0, 1, 0) scene_state,
+        </if>
+        <if test="flag == 1">
+            ,case when t7.offline_alarm_count=t10.setting_device_count then 2
+            when t7.alarm_count>0 or t7.offline_alarm_count>0 then 1 else 0 end scene_state,
+        </if>
+        t1.company_org_id as "companyOrgId"
         from sms_scene t1
         <include refid="sceneDeviceJoins"/>
         <include refid="sceneAlarmJoins"/>
@@ -214,7 +236,14 @@
     <!--查询地图参数数据-->
     <select id="selectMapParam" resultMap="monitorDataMap">
         select
-        <include refid="Base_Column_List"/>,if (t7.alarm_count>0, 1, 0) scene_state
+        <include refid="Base_Column_List"/>
+        <if test="flag == null or flag == 0">
+            ,if (t7.alarm_count>0, 1, 0) scene_state
+        </if>
+        <if test="flag == 1">
+            ,case when t7.offline_alarm_count=t10.setting_device_count then 2
+            when t7.alarm_count>0 or t7.offline_alarm_count>0 then 1 else 0 end scene_state
+        </if>
         from sms_scene t1
         <include refid="sceneDeviceJoins"/>
         <include refid="sceneAlarmJoins"/>
@@ -341,12 +370,26 @@
     <!--查询设备地图参数数据-->
     <select id="selectDeviceMapParam" resultMap="deviceDataMap">
         select distinct t1.id device_id,t1.device_code,t1.device_name,t1.point_x,point_y,t1.address,t2.attribute_id, ifnull(t2.remark, t3.`name`) attribute_name,t3.unit,
-         t2.seq,case when t2.attribute_id is  null then null when t6.id is null then 0 else 1 end is_alarm, if (t4.alarm_count>0, 1, 0) device_state
+         t2.seq,case when t2.attribute_id is  null then null when t6.id is null then 0 else 1 end is_alarm
+        <if test="flag == null or flag ==0">
+            ,if (t4.alarm_count>0, 1, 0) device_state
+        </if>
+        <if test="flag == 1">
+            ,case when t4.offline_alarm_count>0 then 2 when t4.alarm_count>0 then 1 else 0 end device_state
+        </if>
         from sms_device  t1
         left join sms_device_parm t2 on t2.device_id=t1.id and t2.is_map=1 and t2.status=1
         left join sms_device_attribute t3 on t2.attribute_id=t3.id and t3.status=1
         left join (
-            select a1.device_id,count(1) alarm_count from sms_alarm_details a1 where a1.device_id= #{deviceId} and a1.`status` = 1 and a1.state = 1
+            select a1.device_id
+            <if test="flag == null or flag ==0">
+                ,count(1) alarm_count
+            </if>
+            <if test="flag == 1">
+                ,sum(case when alarm_type='参数报警' then 1 else 0 end) alarm_count
+                ,sum(case when alarm_type='状态报警' then 1 else 0 end) offline_alarm_count
+            </if>
+            from sms_alarm_details a1 where a1.device_id= #{deviceId} and a1.`status` = 1 and a1.state = 1
         )t4 on t4.device_id=t1.id
         left join sms_alarm_details t6 on t6.device_id=t1.id and t6.attribute_id=t2.attribute_id and t6.status = 1 and t6.state=1
         where t1. status = 1 and t1. enable_state = 1 and t1.id= #{deviceId}
@@ -503,11 +546,25 @@
     </select>
     <!--查询管网地图图层及设备-->
     <select id="selectPipeNetLayer" resultMap="layerMap">
-        select t4.id scene_id,t4.scene_name,t5.scene_type_name,t6.id device_id,t6.device_code,t6.device_name,t6.point_x,t6.point_y,t6.address,if (t7.alarm_count>0, 1, 0) device_state
+        select t4.id scene_id,t4.scene_name,t5.scene_type_name,t6.id device_id,t6.device_code,t6.device_name,t6.point_x,t6.point_y,t6.address
+        <if test="flag == null or flag ==0">
+            ,if (t7.alarm_count>0, 1, 0) device_state
+        </if>
+        <if test="flag == 1">
+            ,case when t7.offline_alarm_count>0 then 2 when t7.alarm_count>0 then 1 else 0 end device_state
+        </if>
         from sms_scene t1
         <include refid="deviceInnerJoins"/>
         left join(
-            select a1.scene_id, a1.device_id ,count(1) alarm_count from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
+            select a1.scene_id, a1.device_id
+            <if test="flag == null or flag ==0">
+                ,count(1) alarm_count
+            </if>
+            <if test="flag == 1">
+                ,sum(case when alarm_type='参数报警' then 1 else 0 end) alarm_count
+                ,sum(case when alarm_type='状态报警' then 1 else 0 end) offline_alarm_count
+            </if>
+            from sms_alarm_details a1 where a1.`status` = 1 and a1.state = 1 group by a1.scene_id, a1.device_id
         )t7 on t7.scene_id=t2.scene_id and t7.device_id=t2.device_id
         where t1.parent_scene_id = 0 and t1. status = 1 and t1. enable_state = 1 and t3.scene_type_name = '管网'
         <choose>

+ 9 - 1
user_auth/src/main/resources/application-prd.properties

@@ -7,7 +7,6 @@ spring.datasource.url=jdbc:mysql://10.0.0.137:3306/uims?characterEncoding=utf8&u
 spring.datasource.username=root
 spring.datasource.password=100Zone@123
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
-
 mybatis-plus.mapper-locations=classpath:mapper/*.xml
 mybatis-plus.type-aliases-package=com.huaxu.entity
 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
@@ -66,6 +65,15 @@ getSendCodeMax=2
 receive.exchange.name=messageExchangeTest
 dispath.routing.key=dipathKeyTest
 dispath.queue=dispathTest
+spring.rabbitmq.host=47.112.217.10
+spring.rabbitmq.port=5672
+spring.rabbitmq.username=huaxu
+spring.rabbitmq.password=huaxu123
+spring.rabbitmq.virtual-host=/
+spring.rabbitmq.connection-timeout=15000
+spring.rabbitmq.publisher-confirm-type=correlated
+spring.rabbitmq.publisher-returns=true
+spring.rabbitmq.template.mandatory=true
 iot.url=http://114.135.61.188:58080
 
 

+ 1 - 1
user_auth/src/main/resources/application.properties

@@ -1,2 +1,2 @@
 #开发环境:dev  测试环境:sit  线上环境:prd
-spring.profiles.active=sit
+spring.profiles.active=dev

+ 19 - 1
user_center/src/main/java/com/huaxu/controller/OrgController.java

@@ -6,6 +6,7 @@ import com.huaxu.dto.OrgTree;
 import com.huaxu.entity.Org;
 import com.huaxu.logAdvice.LogAnnotation;
 import com.huaxu.model.AjaxMessage;
+import com.huaxu.model.LoginUser;
 import com.huaxu.model.Pagination;
 import com.huaxu.model.ResultStatus;
 import com.huaxu.service.OrgService;
@@ -144,8 +145,25 @@ public class OrgController {
     public List<Org> getAllByTenantId(){
         Org org=new Org();
         org.setStatus(1);
-        org.setTenantId(UserUtil.getCurrentUser().getTenantId());
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        org.setTenantId(currentUser.getTenantId());
+
         return orgService.selectList(org);
     }
+    @RequestMapping(value = "getAll", method = RequestMethod.POST)
+    public AjaxMessage<List<Org>> getAll(){
+        Org org=new Org();
+        org.setStatus(1);
+        LoginUser currentUser = UserUtil.getCurrentUser();
+        org.setTenantId(currentUser.getTenantId());
+        org.setProgramItems(currentUser.getProgramItemList());
+        org.setPermissonType(currentUser.getPermissonType());
+
+        return new AjaxMessage<>(ResultStatus.OK, orgService.selectList(org)) ;
+    }
 
+    @RequestMapping(value = "countCompanyByUser", method = RequestMethod.POST)
+    public Integer countCompanyByUser() {
+        return orgService.countCompanyByUser();
+    }
 }

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

@@ -267,8 +267,8 @@ public class UserController {
         return new AjaxMessage<>(ResultStatus.OK,result);
     }
     @RequestMapping(value = "/findUserList", method = RequestMethod.GET)
-    public AjaxMessage<List<UserListDto>> findUserList() {
-        List<UserListDto> userList = userService.findUserList();
+    public AjaxMessage<List<UserListDto>> findUserList(Integer type) {
+        List<UserListDto> userList = userService.findUserList(type);
         return new AjaxMessage<>(ResultStatus.OK,userList);
     }
     @RequestMapping(value = "/findUserIdsByUserIds", method = RequestMethod.POST)

+ 5 - 0
user_center/src/main/java/com/huaxu/dao/OrgMapper.java

@@ -3,6 +3,7 @@ package com.huaxu.dao;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.dto.OrgTree;
 import com.huaxu.entity.Org;
+import com.huaxu.model.ProgramItem;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -90,4 +91,8 @@ public interface OrgMapper {
     List<Org> findOrgByTenant(String tenantId);
 
     String findParentOrgByChildId(@Param(value = "childId") Integer childId);
+
+    Integer countCompanyByUser( @Param("tenantId")String tenantId, @Param("userType")String userType,
+                                @Param("programItems")List<ProgramItem> programItems);
+
 }

+ 4 - 0
user_center/src/main/java/com/huaxu/entity/Org.java

@@ -1,12 +1,14 @@
 package com.huaxu.entity;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.huaxu.model.ProgramItem;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 组织(Org)实体类
@@ -112,4 +114,6 @@ public class Org implements Serializable {
     @ApiModelProperty(value = "区域名称")
     @TableField(exist = false)
     private String areaName;
+    private List<ProgramItem> programItems;
+    private Integer permissonType;
 }

+ 3 - 0
user_center/src/main/java/com/huaxu/service/OrgService.java

@@ -3,6 +3,7 @@ package com.huaxu.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.dto.OrgTree;
 import com.huaxu.entity.Org;
+import com.huaxu.model.ProgramItem;
 
 import java.util.List;
 
@@ -89,4 +90,6 @@ public interface OrgService {
     List<OrgTree> getTrees(Org org);
     List<OrgTree>getUserTrees(Org org);
     String findParentOrgByChildId(Integer childId);
+
+    Integer countCompanyByUser();
 }

+ 43 - 32
user_center/src/main/java/com/huaxu/service/UserService.java

@@ -273,7 +273,7 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		}
 		return userEntities;
 	}
-	public List<UserListDto> findUserList()
+	public List<UserListDto> findUserList(Integer type)
 	{
 		List<UserListDto> userListDtos = new ArrayList<>();
 		LoginUser currentUser = UserUtil.getCurrentUser();
@@ -286,41 +286,52 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		List<UserEntity>userEntities=userMapper.findUserList(userEntity);
 		List<UserEntity>companyUser=new ArrayList<>();
 		List<UserEntity>departmentUser=new ArrayList<>();
-		userEntities.forEach(user->{
-			if(user.getDeptOrgId()!=null){
-				departmentUser.add(user);
-			}else{
-				companyUser.add(user);
+		if(type==null){
+			userEntities.forEach(user->{
+				if(user.getDeptOrgId()!=null){
+					departmentUser.add(user);
+				}else{
+					companyUser.add(user);
+				}
+			});
+			Map<Long, List<UserEntity>> companyGroup = companyUser.stream()
+					.collect(Collectors.groupingBy(d -> d.getCompanyOrgId()));
+			Map<Long, List<UserEntity>> departMentGroup = departmentUser.stream()
+					.collect(Collectors.groupingBy(d -> d.getDeptOrgId()));
+			Iterator<List<UserEntity>> companyIterator = companyGroup.values().iterator();
+			Iterator<List<UserEntity>> departmentIterator = departMentGroup.values().iterator();
+			while(companyIterator.hasNext()){
+				List<UserEntity> users = companyIterator.next();
+				UserListDto userListDto=new UserListDto();
+				UserEntity user = users.get(0);
+				userListDto.setLabel(user.getCompanyOrgName());
+				userListDto.setId(user.getCompanyOrgId());
+				userListDto.setValue(user.getCompanyOrgName());
+				userListDto.setChildren(setChildrens(users));
+				userListDtos.add(userListDto);
+
 			}
-		});
-		Map<Long, List<UserEntity>> companyGroup = companyUser.stream()
-				.collect(Collectors.groupingBy(d -> d.getCompanyOrgId()));
-		Map<Long, List<UserEntity>> departMentGroup = departmentUser.stream()
-				.collect(Collectors.groupingBy(d -> d.getDeptOrgId()));
-		Iterator<List<UserEntity>> companyIterator = companyGroup.values().iterator();
-		Iterator<List<UserEntity>> departmentIterator = departMentGroup.values().iterator();
-		while(companyIterator.hasNext()){
-			List<UserEntity> users = companyIterator.next();
-			UserListDto userListDto=new UserListDto();
-			UserEntity user = users.get(0);
-			userListDto.setLabel(user.getCompanyOrgName());
-			userListDto.setId(user.getCompanyOrgId());
-			userListDto.setValue(user.getCompanyOrgName());
-			userListDto.setChildren(setChildrens(users));
-			userListDtos.add(userListDto);
+			while(departmentIterator.hasNext()){
+				List<UserEntity> users = departmentIterator.next();
+				UserListDto userListDto=new UserListDto();
+				UserEntity user = users.get(0);
+				userListDto.setLabel(user.getDeptOrgName());
+				userListDto.setId(user.getDeptOrgId());
+				userListDto.setValue(user.getDeptOrgName());
+				userListDto.setChildren(setChildrens(users));
+				userListDtos.add(userListDto);
 
+			}
+		}else{
+			userEntities.forEach(userParam->{
+				UserListDto userInfo=new UserListDto();
+				userInfo.setLabel(userParam.getUsername());
+				userInfo.setId(userParam.getId());
+				userInfo.setValue(userParam.getUsername());
+				userListDtos.add(userInfo);
+			});
 		}
-		while(departmentIterator.hasNext()){
-			List<UserEntity> users = departmentIterator.next();
-			UserListDto userListDto=new UserListDto();
-			UserEntity user = users.get(0);
-			userListDto.setLabel(user.getDeptOrgName());
-			userListDto.setId(user.getDeptOrgId());
-			userListDto.setValue(user.getDeptOrgName());
-			userListDto.setChildren(setChildrens(users));
-			userListDtos.add(userListDto);
 
-		}
 		return userListDtos;
 	}
 	private List<UserListDto> setChildrens(List<UserEntity> users){

+ 6 - 0
user_center/src/main/java/com/huaxu/service/impl/OrgServiceImpl.java

@@ -331,4 +331,10 @@ public class OrgServiceImpl implements OrgService {
    {
       return  orgMapper.findParentOrgByChildId(childId);
    }
+
+    @Override
+    public Integer countCompanyByUser() {
+        LoginUser loginUser = UserUtil.getCurrentUser();
+        return orgMapper.countCompanyByUser(loginUser.getTenantId(),loginUser.getType(),loginUser.getProgramItemList());
+    }
 }

+ 5 - 0
user_center/src/main/resources/application-dev.properties

@@ -81,6 +81,11 @@ dispath.queue=dispath
 receive.exchange.name=messageExchange
 dispath.routing.key=dipathKey
 
+ribbon.OkToRetryOnAllOperations=false
+ribbon.ReadTimeout=5000:
+ribbon.ConnectTimeout=3000
+
+
 
 # 设置 feign 客户端超时时间(OpenFeign 默认支持 ribbon)
 # 值的是建立连接所用的时间,使用与网络状态正常的情况,两端连接所用的时间

+ 3 - 3
user_center/src/main/resources/application-prd.properties

@@ -77,6 +77,6 @@ spring.rabbitmq.connection-timeout=15000
 spring.rabbitmq.publisher-confirm-type=correlated
 spring.rabbitmq.publisher-returns=true
 spring.rabbitmq.template.mandatory=true
-dispath.queue=dispath
-receive.exchange.name=messageExchange
-dispath.routing.key=dipathKey
+receive.exchange.name=messageExchangeTest
+dispath.routing.key=dipathKeyTest
+dispath.queue=dispathTest

+ 3 - 3
user_center/src/main/resources/application-sit.properties

@@ -76,9 +76,9 @@ spring.rabbitmq.connection-timeout=15000
 spring.rabbitmq.publisher-confirm-type=correlated
 spring.rabbitmq.publisher-returns=true
 spring.rabbitmq.template.mandatory=true
-dispath.queue=dispath
-receive.exchange.name=messageExchange
-dispath.routing.key=dipathKey
+receive.exchange.name=messageExchangeTest
+dispath.routing.key=dipathKeyTest1
+dispath.queue=dispathTest1
 
 
 

+ 22 - 0
user_center/src/main/resources/mapper/OrgMapper.xml

@@ -54,6 +54,13 @@
 
         from uims_org
         <where>
+        <if test="programItems !=null">
+            id in
+            <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+            </foreach>
+        </if>
+
             <if test="id != null">
                 and ID = #{id}
             </if>
@@ -295,4 +302,19 @@
     <select id="findParentOrgByChildId" resultType="String">
        select getParentList(#{childId})
     </select>
+    <select id="countCompanyByUser" resultType="java.lang.Integer">
+        select count(1)
+        from uims_org p
+        left join uims_org o on p.id=o.PARENT_ORG_ID
+        where p.`STATUS` = 1 and o.`STATUS` =1
+        and p.PARENT_ORG_ID = 0 and o.ORG_TYPE = 'company'
+        and p.TENANT_ID = #{tenantId}
+        <if test="userType!=null and userType!=-999 and userType!=-9999 and  programItems != null and programItems.size() > 0">
+            and o.id in
+            <foreach collection="programItems" item="item" open="(" close=")" separator=",">
+                #{item.orgId}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>