| 
					
				 | 
			
			
				@@ -20,6 +20,7 @@ import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.annotation.Resource; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.function.Function; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -228,7 +229,7 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //需要更新的 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<AlarmDetailsEntity>  DeviceStateAlarmDtoOlds =alarmlist.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<AlarmDetailsEntity>  deviceStateAlarmDtoOlds =alarmlist.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .filter(deviceCheckAlarmDto -> alarmDetailsDtoMap.containsKey(deviceCheckAlarmDto.getAlarmSettingId())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .map(d ->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     AlarmDetailsDto alarmDetailsDto = alarmDetailsDtoMap.get(d.getAlarmSettingId()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -252,19 +253,47 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             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)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public void saveWorkOrderManageInfo(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<DeviceAlarmInfoForOrder> deviceAlarmInfoForOrders = alarmDetailMapper.getAlarmInfoForWorkOrderManage(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(deviceAlarmInfoForOrders.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           //获取已经存在的设备工单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           Set<Long> deviceIdSet = deviceAlarmInfoForOrders.stream().map(DeviceAlarmInfoForOrder::getDeviceId).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           List<WorkOrderManageByAlarmDto> workOrders = operationManagerClient.findWorkOrderByDeviceIds(new ArrayList<>(deviceIdSet)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           Map<Long,WorkOrderManageByAlarmDto> workOrderMap = workOrders.stream().collect(Collectors.toMap(WorkOrderManageByAlarmDto::getDeviceId, Function.identity(), (key1, key2) -> key2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<WorkOrderManageByAlarmDto> workOrderManageByAlarms = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           List<WorkOrderManageByAlarmDto> updates = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            List<DeviceAlarmInfoForOrder> errData= new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //组合工单,并发送消息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for(DeviceAlarmInfoForOrder deviceAlarmInfoForOrder : deviceAlarmInfoForOrders){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               if(workOrderMap.containsKey(deviceAlarmInfoForOrder.getDeviceId()) && workOrderMap.get(deviceAlarmInfoForOrder.getDeviceId()) != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   WorkOrderManageByAlarmDto orderManageByAlarmDto = workOrderMap.get(deviceAlarmInfoForOrder.getDeviceId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   orderManageByAlarmDto.setTaskDesc(orderManageByAlarmDto.getTaskDesc()+";"+deviceAlarmInfoForOrder.getTaskDesc()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   updates.add(orderManageByAlarmDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                WorkOrderManageByAlarmDto workOrderManageByAlarm = new WorkOrderManageByAlarmDto(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                workOrderManageByAlarm.setTaskNo(DatesUtil.formatDate(new Date(),"yyyyMMddHHmmssSSS")+((int) (Math.random()*(9999-1000)+1000))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                workOrderManageByAlarm.setTenantId(deviceAlarmInfoForOrder.getTenantId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               workOrderManageByAlarm.setParentSceneId(deviceAlarmInfoForOrder.getParentSceneId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               workOrderManageByAlarm.setParentSceneName(deviceAlarmInfoForOrder.getParentSceneName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               workOrderManageByAlarm.setDeviceId(deviceAlarmInfoForOrder.getDeviceId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               workOrderManageByAlarm.setDeviceName(deviceAlarmInfoForOrder.getDeviceName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                workOrderManageByAlarm.setCompanyOrgId(deviceAlarmInfoForOrder.getCompanyOrgId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                workOrderManageByAlarm.setDepartmentOrgId(deviceAlarmInfoForOrder.getDepartmentOrgId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                workOrderManageByAlarm.setAddress(deviceAlarmInfoForOrder.getAddress()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -278,7 +307,7 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                message.setTenantId(deviceAlarmInfoForOrder.getTenantId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                message.setMessageId(UUID.randomUUID().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                JSONObject jsonObject = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-               jsonObject.put("工单类型",""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               jsonObject.put("工单类型"," "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                jsonObject.put("工单编号",workOrderManageByAlarm.getTaskNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                message.setMessageContent(jsonObject.toJSONString());  //消息内容,如果需要动态使用,配合模板使用{key:value} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                message.setMessageType(7); //消息类型 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -311,9 +340,14 @@ public class AlarmDetailsServiceImpl implements AlarmDetailsService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                deviceAlarmInfoForOrders.removeAll(errData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //保存工单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           Integer resut = operationManagerClient.saveByAlarms(workOrderManageByAlarms); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           if(resut > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           if(workOrderManageByAlarms.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                operationManagerClient.saveByAlarms(workOrderManageByAlarms); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           if(updates.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                operationManagerClient.updateByAlarms(updates); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           if(deviceAlarmInfoForOrders.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               //标记报警已生成工单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                alarmDetailMapper.updateAlarmSendMessageState(deviceAlarmInfoForOrders); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 |