Ver código fonte

Merge remote-tracking branch 'origin/master'

wangbo 4 anos atrás
pai
commit
f788f49c4c
23 arquivos alterados com 485 adições e 34 exclusões
  1. 3 6
      operation_manager/src/main/java/com/huaxu/order/dto/WorkOrderManageByAlarmDto.java
  2. 2 2
      operation_manager/src/main/resources/mapper/order/WorkOrderManageMapper.xml
  3. 18 6
      sms_water/src/main/java/com/huaxu/async/CheckDeviceStateAsync.java
  4. 27 0
      sms_water/src/main/java/com/huaxu/client/OperationManagerClient.java
  5. 3 0
      sms_water/src/main/java/com/huaxu/client/UserCenterClient.java
  6. 6 2
      sms_water/src/main/java/com/huaxu/config/FeignConfig.java
  7. 4 4
      sms_water/src/main/java/com/huaxu/dao/AlarmDetailMapper.java
  8. 58 0
      sms_water/src/main/java/com/huaxu/dto/DeviceAlarmInfoForOrder.java
  9. 1 0
      sms_water/src/main/java/com/huaxu/dto/DeviceCheckAlarmDto.java
  10. 42 0
      sms_water/src/main/java/com/huaxu/dto/WorkOrderManageByAlarmDto.java
  11. 33 0
      sms_water/src/main/java/com/huaxu/rabbitmq/ReceiveData.java
  12. 5 0
      sms_water/src/main/java/com/huaxu/service/AlarmDetailsService.java
  13. 109 7
      sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java
  14. 3 1
      sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java
  15. 19 4
      sms_water/src/main/resources/application-dev.properties
  16. 36 1
      sms_water/src/main/resources/mapper/AlarmDetailMapper.xml
  17. 1 0
      user_center/src/main/java/com/huaxu/config/ResourceServerConfig.java
  18. 9 0
      user_center/src/main/java/com/huaxu/controller/UserController.java
  19. 2 0
      user_center/src/main/java/com/huaxu/dao/OrgMapper.java
  20. 3 1
      user_center/src/main/java/com/huaxu/dao/UserMapper.java
  21. 52 0
      user_center/src/main/java/com/huaxu/service/UserService.java
  22. 10 0
      user_center/src/main/resources/mapper/OrgMapper.xml
  23. 39 0
      user_center/src/main/resources/mapper/UserMapper.xml

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

@@ -15,18 +15,15 @@ public class WorkOrderManageByAlarmDto implements Serializable {
     @ApiModelProperty(value = "报警信息id")
     private Long id;
 
-    @ApiModelProperty(value = "报警信息id")
-    private Long alarmId;
-
-    @ApiModelProperty(value = "设备id")
-    private Long deviceId;
-
     @ApiModelProperty(value = "租户id")
     private String tenantId;
 
     @ApiModelProperty(value = "工单描述")
     private String taskDesc;
 
+    @ApiModelProperty(value = "工单编号")
+    private String taskNo;
+
     @ApiModelProperty(value = "地址")
     private String address;
 

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

@@ -505,11 +505,11 @@
     order by t1.order_pid
   </select>
 
-  <insert id="batchInsertByAlarms" parameterType="com.huaxu.order.entity.WorkOrderManage" keyProperty="id" useGeneratedKeys="true">
+  <insert id="batchInsertByAlarms" parameterType="com.huaxu.order.dto.WorkOrderManageByAlarmDto" keyProperty="id" useGeneratedKeys="true">
   insert into sc_work_order_manage( task_no, task_desc, address, order_time, company_org_id, department_org_id, order_status, event_type, order_pid, tenant_id, current_task_name, create_by,  date_create, update_by, date_update, geo)
  values
   <foreach collection="workOrderManages" item="item" index="index" separator=",">
-    (CONCAT(DATE_FORMAT(now(), '%Y%m%d%H%i%s'),FLOOR(RAND()*8999)+1000) , #{item.taskDesc}, #{item.address}, #{item.orderTime}, #{item.companyOrgId}, #{item.departmentOrgId}, 0, 3, 0, #{item.tenantId}, '设备报警工单', 'system',  now(), 'system', now(), #{item.geo})
+    (#{item.taskNo} , #{item.taskDesc}, #{item.address}, #{item.orderTime}, #{item.companyOrgId}, #{item.departmentOrgId}, 0, 3, 0, #{item.tenantId}, '设备报警工单', 'system',  now(), 'system', now(), #{item.geo})
   </foreach>
   </insert>
 

+ 18 - 6
sms_water/src/main/java/com/huaxu/async/CheckDeviceStateAsync.java

@@ -1,16 +1,12 @@
 package com.huaxu.async;
 
-import com.alibaba.fastjson.JSONArray;
-import com.huaxu.dao.AlarmDetailMapper;
-import com.huaxu.dto.AlarmDetailsDto;
+import com.huaxu.client.OperationManagerClient;
 import com.huaxu.service.AlarmDetailsService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
-
 /**
  * @description 在初始化完成后启动一个线程
  * @auto wangli
@@ -23,7 +19,6 @@ public class CheckDeviceStateAsync implements InitializingBean {
     @Autowired
     private AlarmDetailsService alarmDetailsService;
 
-
     @Override
     public void afterPropertiesSet() {
         new Thread(() -> {
@@ -42,5 +37,22 @@ public class CheckDeviceStateAsync implements InitializingBean {
                 }
             }
         }).start();
+        //报警信息生产工单信息
+        new Thread(() -> {
+            while (true) {
+                try {
+                    alarmDetailsService.saveWorkOrderManageInfo();
+                } catch (Exception e){
+                    e.printStackTrace();
+                    log.error("报警生成工单信息异常:{}",e.getMessage());
+                }
+                try {
+                    Thread.sleep(60000);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                    log.error(e.getMessage());
+                }
+            }
+        }).start();
     }
 }

+ 27 - 0
sms_water/src/main/java/com/huaxu/client/OperationManagerClient.java

@@ -0,0 +1,27 @@
+package com.huaxu.client;
+
+import com.huaxu.config.FeignConfig;
+import com.huaxu.dto.WorkOrderManageByAlarmDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
+
+/**
+ * @description 服务调用(运维管理)
+ * @auto wangli
+ * @data 2021/1/15 10:57
+ */
+@FeignClient(value = "operation-manager",configuration={FeignConfig.class})
+public interface OperationManagerClient {
+
+    /**
+     * 报警信息生产工单信息
+     * @param workOrderManages
+     * @return
+     */
+    @PostMapping("/order/workOrderManage/saveByAlarms")
+    Integer saveByAlarms(List<WorkOrderManageByAlarmDto> workOrderManages);
+
+
+}

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

@@ -6,6 +6,7 @@ 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.RequestParam;
 
 import java.util.List;
 
@@ -27,4 +28,6 @@ public interface UserCenterClient {
     @PostMapping("/org/getAllByTenantId")
     List<Org> getAllByTenantId();
 
+    @PostMapping("/user/findUserIdsByPermissonOrg")
+    List<Integer> findUserIdsByPermissonOrg(@RequestParam("tenantId")String tenantId, @RequestParam("companyOrgId")Integer companyOrgId, @RequestParam("deptOrgId")Integer deptOrgId);
 }

+ 6 - 2
sms_water/src/main/java/com/huaxu/config/FeignConfig.java

@@ -19,7 +19,11 @@ public class FeignConfig implements RequestInterceptor {
     @Override
     public void apply(RequestTemplate requestTemplate) {
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-        HttpServletRequest request = attributes.getRequest();
-        requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
+        if(attributes != null){
+            HttpServletRequest request = attributes.getRequest();
+            if(request != null){
+                requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
+            }
+        }
     }
 }

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

@@ -1,10 +1,7 @@
 package com.huaxu.dao;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.huaxu.dto.AlarmDetailsDto;
-import com.huaxu.dto.AlarmDetailsHistoryDto;
-import com.huaxu.dto.AlarmDetailsRealTimeDto;
-import com.huaxu.dto.DeviceCheckAlarmDto;
+import com.huaxu.dto.*;
 import com.huaxu.entity.AlarmDetailsEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -131,4 +128,7 @@ public interface AlarmDetailMapper {
 
     Integer udpateLastUpdateTime(@Param("deviceId") Integer deviceId, @Param("lastUpdateTime") Date lastUpdateTime);
 
+    List<DeviceAlarmInfoForOrder> getAlarmInfoForWorkOrderManage();
+
+    Integer updateAlarmSendMessageState(List<DeviceAlarmInfoForOrder> list);
 }

+ 58 - 0
sms_water/src/main/java/com/huaxu/dto/DeviceAlarmInfoForOrder.java

@@ -0,0 +1,58 @@
+package com.huaxu.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel(value = "报警信息")
+@Data
+public class DeviceAlarmInfoForOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "报警id")
+    private Long alarmId;
+
+    @ApiModelProperty(value = "场景名称")
+    private String sceneName;
+
+    @ApiModelProperty(value = "报警类型:状态报警,参数报警")
+    private String alarmType;
+
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+
+    @ApiModelProperty(value = "属性名称")
+    private String attributeName;
+
+    @ApiModelProperty(value = "单位")
+    private String unit;
+
+    @ApiModelProperty(value = "设备id")
+    private Long deviceId;
+
+
+    @ApiModelProperty(value = "租户id")
+    private String tenantId;
+
+    @ApiModelProperty(value = "公司机构id")
+    private String companyOrgId;
+
+    @ApiModelProperty(value = "部门机构id")
+    private String departmentOrgId;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "报警时间")
+    private String orderTime;
+
+    @ApiModelProperty(value = "工单描述")
+    private String taskDesc;
+
+    @ApiModelProperty(value = "经纬度")
+    private String geo;
+
+}

+ 1 - 0
sms_water/src/main/java/com/huaxu/dto/DeviceCheckAlarmDto.java

@@ -31,6 +31,7 @@ public class DeviceCheckAlarmDto {
     private String deviceName;//设备名称
     private Integer companyOrgId;//公司id
     private Integer deptOrgId;//部门id
+    private String address;//地址
     private String alarmType;//报警类型
     private Integer attributeId;//设备属性
     private Date lastUpdateTime;//上次上报时间

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

@@ -0,0 +1,42 @@
+package com.huaxu.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@ApiModel(value = "报警信息生成的工单信息")
+@Data
+public class WorkOrderManageByAlarmDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "报警信息id")
+    private Long id;
+
+    @ApiModelProperty(value = "租户id")
+    private String tenantId;
+
+    @ApiModelProperty(value = "工单描述")
+    private String taskDesc;
+
+    @ApiModelProperty(value = "工单编号")
+    private String taskNo;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    @ApiModelProperty(value = "报警时间")
+    private String orderTime;
+
+    @ApiModelProperty(value = "公司机构id")
+    private String companyOrgId;
+
+    @ApiModelProperty(value = "部门机构id")
+    private String departmentOrgId;
+
+    @ApiModelProperty(value = "经纬度")
+    private String geo;
+
+}

+ 33 - 0
sms_water/src/main/java/com/huaxu/rabbitmq/ReceiveData.java

@@ -7,15 +7,18 @@ package com.huaxu.rabbitmq;
  */
 
 import com.alibaba.fastjson.JSONObject;
+import com.huaxu.client.UserCenterClient;
 import com.huaxu.common.CalcUtil;
 import com.huaxu.common.StringUtils;
 import com.huaxu.dao.AlarmDetailMapper;
 import com.huaxu.dto.AlarmDetailsDto;
 import com.huaxu.dto.DeviceCheckAlarmDto;
 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;
@@ -43,6 +46,11 @@ public class ReceiveData {
     @Resource
     private AlarmDetailMapper alarmDetailMapper;
 
+    @Autowired
+    private UserCenterClient userCenterClient;
+    @Autowired
+    private MessageSendUtil messageSendUtil;
+
     @Value("${spring.rabbitmq.listener.queue}")
     private   String rabbitmqQueue;
 
@@ -180,6 +188,31 @@ public class ReceiveData {
                            alarmDetailsEntity.setDateUpdate(new Date());
                            alarmDetailsEntity.setCreateBy("system");
                            alarmDetailsEntity.setUpdateBy("system");
+
+                           Message message=new Message();
+                           message.setStatus(1);
+                           message.setCreateBy("system");
+                           message.setTenantId(deviceCheckAlarmDto.getTenantId());
+                           message.setMessageId(UUID.randomUUID().toString());
+                           JSONObject jsonContent = new JSONObject();
+                           //${场景名称}${设备名称}【${报警字段}】异常报警
+                           jsonContent.put("场景名称",deviceCheckAlarmDto.getSceneName());
+                           jsonContent.put("设备名称",deviceCheckAlarmDto.getDeviceName());
+                           jsonContent.put("报警字段",deviceCheckAlarmDto.getAttributeName());
+                           message.setMessageContent(jsonObject.toJSONString());  //消息内容,如果需要动态使用,配合模板使用{key:value}
+                           message.setMessageType(1); //消息类型
+                           message.setMessageTemplateId(1);   //模板id
+                           message.setChannel(0);   //渠道
+                           Integer companyOrgId = deviceCheckAlarmDto.getCompanyOrgId();
+                           Integer departmentOrgId = deviceCheckAlarmDto.getDeptOrgId();
+                           List<Integer> taskUsers = userCenterClient.findUserIdsByPermissonOrg(deviceCheckAlarmDto.getTenantId(),companyOrgId,departmentOrgId);
+                           if(taskUsers!=null){
+                               taskUsers.forEach(id->{
+                                   message.setUserId(id);
+                                   messageSendUtil.send(message);
+                               });
+                           }
+
                            insert.add(alarmDetailsEntity);
                        }
                    }

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

@@ -110,4 +110,9 @@ public interface AlarmDetailsService {
      * 验证设备离线状态
      */
     void checkStateAlarm();
+
+    /**
+     * 报警信息生成工单信息
+     */
+    void saveWorkOrderManageInfo();
 }

+ 109 - 7
sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java

@@ -1,21 +1,24 @@
 package com.huaxu.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.huaxu.client.OperationManagerClient;
+import com.huaxu.client.UserCenterClient;
 import com.huaxu.dao.AlarmDetailMapper;
-import com.huaxu.dto.AlarmDetailsDto;
-import com.huaxu.dto.AlarmDetailsHistoryDto;
-import com.huaxu.dto.AlarmDetailsRealTimeDto;
-import com.huaxu.dto.DeviceCheckAlarmDto;
+import com.huaxu.dto.*;
 import com.huaxu.entity.AlarmDetailsEntity;
+import com.huaxu.entity.Message;
 import com.huaxu.model.LoginUser;
 import com.huaxu.service.AlarmDetailsService;
+import com.huaxu.util.DatesUtil;
+import com.huaxu.util.MessageSendUtil;
 import com.huaxu.util.UserUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -28,6 +31,12 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
 
     @Resource
     private AlarmDetailMapper alarmDetailMapper;
+    @Autowired
+    private OperationManagerClient operationManagerClient;
+    @Autowired
+    private UserCenterClient userCenterClient;
+    @Autowired
+    private MessageSendUtil messageSendUtil;
 
     @Override
     public AlarmDetailsDto selectById(Integer id) {
@@ -179,6 +188,32 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
                     alarmDetailsEntity.setDeviceId(d.getDeviceId());
                     alarmDetailsEntity.setTenantId(d.getTenantId());
                     alarmDetailsEntity.setAlarmSettingId(d.getAlarmSettingId());
+
+                    Message message=new Message();
+                    message.setStatus(1);
+                    message.setCreateBy("system");
+                    message.setTenantId(d.getTenantId());
+                    message.setMessageId(UUID.randomUUID().toString());
+                    JSONObject jsonObject = new JSONObject();
+                    //${场景名称}${设备名称}${状态}${报警规则}【${数值单位}】
+                    jsonObject.put("场景名称",d.getSceneName());
+                    jsonObject.put("设备名称",d.getDeviceName());
+                    jsonObject.put("状态","离线");
+                    jsonObject.put("报警规则",d.getAlarmCondition() +d.getAlarmValue());
+                    jsonObject.put("数值单位","分钟");
+                    message.setMessageContent(jsonObject.toJSONString());  //消息内容,如果需要动态使用,配合模板使用{key:value}
+                    message.setMessageType(2); //消息类型
+                    message.setMessageTemplateId(2);   //模板id
+                    message.setChannel(0);   //渠道
+                    Integer companyOrgId = d.getCompanyOrgId();
+                    Integer departmentOrgId = d.getDeptOrgId();
+                    List<Integer> taskUsers = userCenterClient.findUserIdsByPermissonOrg(d.getTenantId(),companyOrgId,departmentOrgId);
+                    if(taskUsers!=null){
+                        taskUsers.forEach(id->{
+                            message.setUserId(id);
+                            messageSendUtil.send(message);
+                        });
+                    }
                     return alarmDetailsEntity;
                 })
                 .collect(Collectors.toList());
@@ -213,4 +248,71 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
         }
     }
 
+   public void saveWorkOrderManageInfo(){
+       List<DeviceAlarmInfoForOrder> deviceAlarmInfoForOrders = alarmDetailMapper.getAlarmInfoForWorkOrderManage();
+       if(deviceAlarmInfoForOrders.size()>0){
+           List<WorkOrderManageByAlarmDto> workOrderManageByAlarms = new ArrayList<>();
+           List<DeviceAlarmInfoForOrder> errData= new ArrayList<>();
+
+           //组合工单,并发送消息
+           for(DeviceAlarmInfoForOrder deviceAlarmInfoForOrder : deviceAlarmInfoForOrders){
+               WorkOrderManageByAlarmDto workOrderManageByAlarm = new WorkOrderManageByAlarmDto();
+               workOrderManageByAlarm.setTaskNo(DatesUtil.formatDate(new Date(),"yyyyMMddHHmmssSSS")+((int) (Math.random()*(9999-1000)+1000)));
+               workOrderManageByAlarm.setTenantId(deviceAlarmInfoForOrder.getTenantId());
+               workOrderManageByAlarm.setCompanyOrgId(deviceAlarmInfoForOrder.getCompanyOrgId());
+               workOrderManageByAlarm.setDepartmentOrgId(deviceAlarmInfoForOrder.getDepartmentOrgId());
+               workOrderManageByAlarm.setAddress(deviceAlarmInfoForOrder.getAddress());
+               workOrderManageByAlarm.setGeo(deviceAlarmInfoForOrder.getGeo());
+               workOrderManageByAlarm.setOrderTime(deviceAlarmInfoForOrder.getOrderTime());
+               workOrderManageByAlarm.setTaskDesc(deviceAlarmInfoForOrder.getTaskDesc());
+
+
+               Message message=new Message();
+               message.setStatus(1);
+               message.setCreateBy("system");
+               message.setTenantId(deviceAlarmInfoForOrder.getTenantId());
+               message.setMessageId(UUID.randomUUID().toString());
+               JSONObject jsonObject = new JSONObject();
+               jsonObject.put("工单类型","");
+               jsonObject.put("工单编号",workOrderManageByAlarm.getTaskNo());
+               message.setMessageContent(jsonObject.toJSONString());  //消息内容,如果需要动态使用,配合模板使用{key:value}
+               message.setMessageType(7); //消息类型
+               message.setMessageTemplateId(7);   //模板id
+               message.setChannel(0);   //渠道
+               Integer companyOrgId = null;
+               Integer departmentOrgId = null;
+               if(StringUtils.isNotBlank(workOrderManageByAlarm.getCompanyOrgId())){
+                   companyOrgId=Integer.valueOf(workOrderManageByAlarm.getCompanyOrgId());
+               }
+               if(StringUtils.isNotBlank(workOrderManageByAlarm.getDepartmentOrgId())){
+                   departmentOrgId=Integer.valueOf(workOrderManageByAlarm.getDepartmentOrgId());
+               }
+               try{
+                   List<Integer> taskUsers = userCenterClient.findUserIdsByPermissonOrg(workOrderManageByAlarm.getTenantId(),companyOrgId,departmentOrgId);
+                   if(taskUsers!=null){
+                       taskUsers.forEach(id->{
+                           message.setUserId(id);
+                           messageSendUtil.send(message);
+                       });
+                   }
+                   workOrderManageByAlarms.add(workOrderManageByAlarm);
+               }catch (Exception e){
+                   e.printStackTrace();
+                   errData.add(deviceAlarmInfoForOrder);
+               }
+           }
+           //去掉推送失败的数据
+           if(errData.size()>0){
+               deviceAlarmInfoForOrders.removeAll(errData);
+           }
+           //保存工单
+           Integer resut = operationManagerClient.saveByAlarms(workOrderManageByAlarms);
+
+           if(resut > 0) {
+               alarmDetailMapper.updateAlarmSendMessageState(deviceAlarmInfoForOrders);
+           }
+       }
+   }
+
+
 }

+ 3 - 1
sms_water/src/main/java/com/huaxu/service/impl/MonitorDataReportServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.sound.midi.Receiver;
 import java.math.BigDecimal;
 import java.time.Duration;
 import java.time.LocalDate;
@@ -579,6 +580,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
                 deviceWaterSupplies.get(i).setDate(newLocalDate);
             }
         }
+        deviceWaterSupplies.sort(Comparator.comparing(DeviceWaterSupply::getOrderNo).reversed());
         return deviceWaterSupplies;
     }
 
@@ -901,7 +903,7 @@ public class MonitorDataReportServiceImpl implements MonitorDataReportService {
                 waterSupplyCharts.add(i,new WaterSupplyChart(i+1));
             }
         }
-
+        waterSupplyCharts.sort(Comparator.comparing(WaterSupplyChart::getSort).reversed());
         return waterSupplyCharts;
     }
 

+ 19 - 4
sms_water/src/main/resources/application-dev.properties

@@ -73,16 +73,31 @@ 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.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
 http_pool.max_total=200
 http_pool.default_max_per_route=100

+ 36 - 1
sms_water/src/main/resources/mapper/AlarmDetailMapper.xml

@@ -603,7 +603,7 @@
             ,d.DEVICE_NAME as "deviceName"
             ,d.COMPANY_ORG_ID as "companyOrgId"
             ,d.DEPT_ORG_ID as "deptOrgId"
-
+            ,d.address as "address"
             ,a.PARENT_SCENE_ID as "parentSceneId"
             ,a.PARENT_SCENE_NAME as "parentSceneName"
             ,a.SCENE_ID as "sceneId"
@@ -673,4 +673,39 @@
         where a.`STATUS` = 1
         and a.DEVICE_ID=#{deviceId} and a.state=1
     </select>
+
+    <select id="getAlarmInfoForWorkOrderManage" resultType="com.huaxu.dto.DeviceAlarmInfoForOrder">
+        select
+            ad.id as "alarmId"
+
+            ,ad.SCENE_NAME as "sceneName"
+            ,ad.ALARM_TYPE as "alarmType"
+            ,d.DEVICE_NAME as "deviceName"
+            ,da.NAME as "attributeName"
+            ,CONCAT(ast.ALARM_CONDITION,ast.ALARM_VALUE) as "alarmContent"
+            ,da.UNIT as "unit"
+
+            ,d.id as "deviceId"
+            ,d.TENANT_ID as "tenantId"
+            ,d.COMPANY_ORG_ID as "companyOrgId"
+            ,d.DEPT_ORG_ID as "departmentOrgId"
+            ,d.ADDRESS as "address"
+            ,DATE_FORMAT(ad.ALARM_START_TIME, '%Y-%m-%d %H:%i:%s') as "orderTime"
+            ,ad.ALARM_CONTENT as "taskDesc"
+            ,CONCAT(d.POINT_X,',',d.POINT_Y) as "geo"
+        from sms_alarm_details ad
+        left join sms_device d on ad.DEVICE_ID =d.ID
+        left join sms_device_attribute da on ad.ATTRIBUTE_ID =da.id
+        left join sms_alarm_setting ast on ast.id=ad.ALARM_SETTING_ID
+        where  ad.OP_STATE=1 and ad.STATE=1 and ad.is_send_message = 0 and d.status = 1 and d.ENABLE_STATE = 1
+        and timestampdiff(MINUTE,ad.ALARM_START_TIME,now())>10
+    </select>
+
+    <update id="updateAlarmSendMessageState" >
+        update sms_alarm_details set is_send_message =1
+        where id in
+        <foreach collection="list" item="item" open="(" close=")" separator=",">
+            #{item.alarmId}
+        </foreach>
+    </update>
 </mapper>

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

@@ -17,6 +17,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 .and()
                 .authorizeRequests()
                 .antMatchers("/swagger-ui.html","/webjars/**", "/webjars/**", "/swagger-resources/**",
+                       "/user/findUserIdsByPermissonOrg",
                        "/v2/**")
                 .permitAll() //配置不需要身份认证的请求路径
                 .anyRequest().authenticated() //其他所有访问路径都需要身份认证

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

@@ -296,4 +296,13 @@ public class UserController {
         }
         return ids;
     }
+
+    @ApiOperation(value = "查询拥有此机构权限的用户")
+    @RequestMapping(value = "/findUserIdsByPermissonOrg", method = RequestMethod.POST)
+    @ResponseBody
+    public List<Integer> findUserIdsByPermissonOrg(
+            String tenantId,Integer companyOrgId,Integer deptOrgId){
+        return userService.findUserIdsByPermissonOrg(tenantId,companyOrgId,deptOrgId);
+    }
+
 }

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

@@ -86,4 +86,6 @@ public interface OrgMapper {
 
     List<OrgTree> selectTrees(Org org);
 
+    List<Org> findOrgByTenant(String tenantId);
+
 }

+ 3 - 1
user_center/src/main/java/com/huaxu/dao/UserMapper.java

@@ -40,5 +40,7 @@ public interface UserMapper extends BaseMapper<UserEntity> {
 
     List<UserEntity> findUserIdsForOrg(@Param("compayId")Integer compayId, @Param("deptId")Integer deptId);
 
-    /**删除相关方法  使用mybatis-plus集成的 **/
+
+
+    List<Integer> findUserIdsByPermissonOrg(@Param("tenantId")String tenantId, @Param("companyOrgId")Integer companyOrgId, @Param("deptOrgId")Integer deptOrgId ,@Param("companyOrgIds")List<Integer> companyOrgIds,@Param("deptOrgIds")List<Integer> deptOrgIds);
 }

+ 52 - 0
user_center/src/main/java/com/huaxu/service/UserService.java

@@ -3,8 +3,10 @@ package com.huaxu.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.huaxu.common.ToolUtil;
+import com.huaxu.dao.OrgMapper;
 import com.huaxu.dao.UserMapper;
 import com.huaxu.dto.UserListDto;
+import com.huaxu.entity.Org;
 import com.huaxu.entity.UserEntity;
 import com.huaxu.entity.UserRoleEntity;
 import com.huaxu.entity.UserTagEntity;
@@ -39,6 +41,8 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 	private UserTagService userTagService;
 	@Resource
 	private UserRoleService userRoleService;
+	@Resource
+	private OrgMapper orgMapper;
 	@Autowired
 	private RedisUtil redisUtil;
 
@@ -345,4 +349,52 @@ public class UserService extends ServiceImpl<UserMapper,UserEntity> {
 		List<UserEntity> list = userMapper.findUserIdsForOrg(compayId,deptId);
 		return list;
 	}
+	public List<Integer> findUserIdsByPermissonOrg(String tenantId,Integer companyOrgId,Integer deptOrgId){
+
+		List<Integer> userIds = new ArrayList<>();
+
+		//1是公司,2是公司及以下,3部门,4部门及以下,5自定义
+		if(companyOrgId == null){
+			return userIds;
+		}
+		//查询租户下所有公司部门
+		List<Org> orgs = orgMapper.findOrgByTenant(tenantId);
+		Map<Integer ,Org> orgMap = orgs.stream().collect(Collectors.toMap(Org::getId, a -> a, (k1, k2) -> k1));
+
+		List<Integer> companyOrgIds = new ArrayList<>();
+		List<Integer> deptOrgIds = new ArrayList<>();
+		Integer deptOrgParentId =deptOrgId;
+		if(deptOrgId != null){
+			//权限类型为4部门及以下
+			while(true){
+				Org org = orgMap.get(deptOrgParentId);
+				if(org == null ){
+					break;
+				}
+				if(org.getOrgType().equals("company") ){
+					break;
+				}
+				deptOrgIds.add(deptOrgParentId);
+				deptOrgParentId = org.getParentOrgId();
+			}
+		}
+		//权限类型为2是公司及以下
+		Integer companyOrgParentId = companyOrgId ;
+		while(true){
+			Org org = orgMap.get(companyOrgParentId);
+			if(org == null ){
+				break;
+			}
+			companyOrgIds.add(companyOrgParentId);
+			companyOrgParentId = org.getParentOrgId();
+			if(org.getParentOrgId() == 0){
+				break;
+			}
+		}
+		//查询客户id
+		if(companyOrgId != null && companyOrgIds.size() > 0){
+			userIds = userMapper.findUserIdsByPermissonOrg(tenantId,companyOrgId,deptOrgId,companyOrgIds,deptOrgIds);
+		}
+		return userIds;
+	}
 }

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

@@ -282,4 +282,14 @@
                          LEFT JOIN uims_org c ON (a.id=c.PARENT_ORG_ID and c.status=1)
         where a.id=#{id}  limit 1
     </select>
+
+    <select id="findOrgByTenant" resultType="com.huaxu.entity.Org">
+
+        select
+            id as "id",
+            PARENT_ORG_ID as "parentOrgId",
+            ORG_TYPE as "orgType"
+        from uims_org
+        where `STATUS` = 1 and TENANT_ID= #{tenantId}
+    </select>
 </mapper>

+ 39 - 0
user_center/src/main/resources/mapper/UserMapper.xml

@@ -228,4 +228,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         )
     </select>
+
+    <select id="findUserIdsByPermissonOrg" resultType="java.lang.Integer">
+        select
+        distinct
+        u.id
+        from uims_user u
+        left join uims_user_role ur on u.id=ur.USER_ID
+        left join uims_role r on ur.ROLE_ID=r.id
+        left join uims_role_org ro on ro.ROLE_ID = r.ID
+        where u.TENANT_ID =#{tenantId}
+        and (
+        u.USER_TYPE='-999'
+        <if test="deptOrgId != null ">
+            or (r.PERMISSION_TYPE = 5 and ro.ORG_ID in (#{companyOrgId},#{deptOrgId}))
+            or (r.PERMISSION_TYPE = 3 and u.DEPT_ORG_ID = #{deptOrgId})
+            <if test="deptOrgIds != null and deptOrgIds.size()>0">
+                or (r.PERMISSION_TYPE = 4 and u.DEPT_ORG_ID in
+                <foreach collection="deptOrgIds" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+                )
+            </if>
+        </if>
+        <if test="deptOrgId == null ">
+            or (r.PERMISSION_TYPE = 5 and ro.ORG_ID = #{companyOrgId})
+            or (r.PERMISSION_TYPE = 1 and u.COMPANY_ORG_ID = #{companyOrgId})
+        </if>
+
+        <if test="companyOrgIds != null and companyOrgIds.size()>0">
+            or (r.PERMISSION_TYPE = 2 and u.COMPANY_ORG_ID in
+            <foreach collection="companyOrgIds" item="item" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+            )
+        </if>
+
+        )
+
+    </select>
 </mapper>