Explorar el Código

报警工单修改

wangli hace 4 años
padre
commit
8352c164e1

+ 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;
+
 }

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

@@ -552,6 +552,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

+ 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;
+
 }

+ 44 - 22
sms_water/src/main/java/com/huaxu/rabbitmq/ReceiveData.java

@@ -14,6 +14,7 @@ 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;
@@ -30,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
@@ -76,7 +79,7 @@ public class ReceiveData {
 
 
     private void send(Message message){
-        log.info("消息发送 exchange={}  routingkey={} 用户id={}",receiveExchangeName,dispathRoutingKey,message.getUserId());
+        log.debug("消息发送 exchange={}  routingkey={} 用户id={}",receiveExchangeName,dispathRoutingKey,message.getUserId());
         messageRabbitTemplate.convertAndSend(receiveExchangeName,dispathRoutingKey, JSONObject.toJSONString(message));
     }
 
@@ -85,7 +88,7 @@ public class ReceiveData {
     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));
@@ -230,7 +233,6 @@ public class ReceiveData {
                            message.setChannel(0);   //渠道
                            Integer companyOrgId = deviceCheckAlarmDto.getCompanyOrgId();
                            Integer departmentOrgId = deviceCheckAlarmDto.getDeptOrgId();
-                           log.info("推送报警消息开始");
                            try{
                                List<Integer> taskUsers = userCenterClient.findUserIdsByPermissonOrg(deviceCheckAlarmDto.getTenantId(),companyOrgId,departmentOrgId);
                                if(taskUsers!=null){
@@ -248,32 +250,52 @@ 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() == 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));
+//               }
            }
-
         }
-
     }
-
 }

+ 68 - 21
sms_water/src/main/java/com/huaxu/service/impl/AlarmDetailsServiceImpl.java

@@ -51,7 +51,7 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService {
 
 
     private void send(Message message){
-        log.info("消息发送 exchange={}  routingkey={} 用户id={}",receiveExchangeName,dispathRoutingKey,message.getUserId());
+        log.debug("消息发送 exchange={}  routingkey={} 用户id={}",receiveExchangeName,dispathRoutingKey,message.getUserId());
         messageRabbitTemplate.convertAndSend(receiveExchangeName,dispathRoutingKey, JSONObject.toJSONString(message));
     }
 
@@ -256,29 +256,76 @@ 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);//直接更新
+
+
+        //处理完成后,剩下的标记为历史数据
+        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() == 0
+                            && com.huaxu.common.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);
+                }
+
+            }
         }
 
+
+
         //报警恢复的删除工单
-        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));
-        }
+//        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()
+//                .map(a -> a.getDeviceId().longValue())
+//                .collect(Collectors.toSet());
+//        if(deviceIds.size()>0){
+//            operationManagerClient.batchDeleteByAlarms(new ArrayList<>(deviceIds));
+//        }
     }
 
    public void saveWorkOrderManageInfo(){

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

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

+ 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