|
@@ -9,6 +9,7 @@ import com.bz.zoneiot.core.oauth2.util.UserUtil;
|
|
|
import com.bz.zoneiot.water.api.dto.AlarmDetailsAddDto;
|
|
|
import com.bz.zoneiot.water.api.dto.AlarmTypeDetailsDto;
|
|
|
import com.bz.zoneiot.water.api.enums.AlarmStateEnum;
|
|
|
+import com.bz.zoneiot.water.api.enums.SceneTypeEnum;
|
|
|
import com.bz.zoneiot.water.api.vo.AlarmTypeDetailsEntityVo;
|
|
|
import com.bz.zoneiot.water.api.vo.DeviceSceneVo;
|
|
|
import com.bz.zoneiot.water.core.dao.AlarmTypeDetailMapper;
|
|
@@ -19,6 +20,7 @@ import com.bz.zoneiot.water.core.entity.DeviceAttributeEntity;
|
|
|
import com.bz.zoneiot.water.core.entity.Org;
|
|
|
import com.bz.zoneiot.water.web.client.UserCenterClient;
|
|
|
import com.bz.zoneiot.water.web.component.MessageComponent;
|
|
|
+import com.bz.zoneiot.water.web.config.MessageConfig;
|
|
|
import com.bz.zoneiot.water.web.service.AlarmTypeDetailsService;
|
|
|
import com.bz.zoneiot.water.web.service.AlarmTypeService;
|
|
|
import lombok.extern.log4j.Log4j2;
|
|
@@ -26,6 +28,7 @@ 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 org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
@@ -50,6 +53,9 @@ public class AlarmTypeDetailsServiceImpl implements AlarmTypeDetailsService {
|
|
|
@Value("${dispath.routing.key}")
|
|
|
private String dispathRoutingKey;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private MessageConfig messageConfig;
|
|
|
+
|
|
|
@Resource
|
|
|
private MessageComponent messageComponent;
|
|
|
|
|
@@ -67,20 +73,14 @@ public class AlarmTypeDetailsServiceImpl implements AlarmTypeDetailsService {
|
|
|
|
|
|
@Override
|
|
|
public Integer insert(AlarmDetailsAddDto dto) {
|
|
|
- List<AlarmDetailsEntity> entities = this.convert(dto);
|
|
|
- if (entities == null) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
- return alarmTypeDetailMapper.batchInsert(entities);
|
|
|
+ this.saveOrUpdate(this.convert(dto));
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Integer batchInsert(List<AlarmDetailsAddDto> alarmDetails) {
|
|
|
- List<AlarmDetailsEntity> entities = this.convert(alarmDetails);
|
|
|
- if (entities == null) {
|
|
|
- return 0;
|
|
|
- }
|
|
|
- return alarmTypeDetailMapper.batchInsert(entities);
|
|
|
+ this.saveOrUpdate(this.convert(alarmDetails));
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -99,6 +99,27 @@ public class AlarmTypeDetailsServiceImpl implements AlarmTypeDetailsService {
|
|
|
return alarmTypeDetailMapper.updateStateByDeviceId(deviceId, state);
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void saveOrUpdate(List<AlarmDetailsEntity> entities) {
|
|
|
+ StringBuilder builder = new StringBuilder();
|
|
|
+ List<AlarmDetailsEntity> addList = new ArrayList<>();
|
|
|
+ for (AlarmDetailsEntity entity : entities) {
|
|
|
+ if (entity.getId() != null) {
|
|
|
+ alarmTypeDetailMapper.update(entity);
|
|
|
+ builder.append(",").append(entity.getId());
|
|
|
+ } else {
|
|
|
+ addList.add(entity);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (builder.length() > 0 ){
|
|
|
+ log.info("【接收告警信息】:更新数:{}", builder.toString());
|
|
|
+ }
|
|
|
+ if (addList.size() > 0){
|
|
|
+ alarmTypeDetailMapper.batchInsert(addList);
|
|
|
+ log.info("【接收告警信息】:添加数量 {}", addList.size());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 转换实体
|
|
@@ -132,12 +153,15 @@ public class AlarmTypeDetailsServiceImpl implements AlarmTypeDetailsService {
|
|
|
private List<AlarmDetailsEntity> convert(AlarmDetailsAddDto dto){
|
|
|
BigDecimal value;
|
|
|
String deviceName;
|
|
|
+ Integer sceneType;
|
|
|
String attrName = null;
|
|
|
AlarmType alarmType = alarmTypeService.findByIotAlarmId(dto.getAlarmTypeId());
|
|
|
if (alarmType == null) {
|
|
|
log.error("【接收告警信息失败】:告警信息为空 ,请求参数:{}", dto.toString());
|
|
|
return null;
|
|
|
}
|
|
|
+ sceneType = alarmType.getSceneType();
|
|
|
+ long alarmId = alarmTypeDetailMapper.selectLastAlarmId(alarmType.getId());
|
|
|
List<AlarmDetailsEntity> result = new ArrayList<>();
|
|
|
// 离线告警
|
|
|
if (alarmType.getAlarmCategory() == 2 || alarmType.getAttributeId() == null) {
|
|
@@ -154,7 +178,9 @@ public class AlarmTypeDetailsServiceImpl implements AlarmTypeDetailsService {
|
|
|
List<DeviceSceneVo> sceneVos = deviceSceneMapper.findSceneByDeviceId(alarmType.getDeviceId());
|
|
|
for (DeviceSceneVo sceneVo : sceneVos) {
|
|
|
AlarmDetailsEntity alarmDetailsEntity = new AlarmDetailsEntity();
|
|
|
-
|
|
|
+ if (alarmId != 0) {
|
|
|
+ alarmDetailsEntity.setId(alarmId);
|
|
|
+ }
|
|
|
alarmDetailsEntity.setAlarmStartTime(dto.getAlarmTime());
|
|
|
alarmDetailsEntity.setAlarmContent(dto.getDescription());
|
|
|
|
|
@@ -180,21 +206,21 @@ public class AlarmTypeDetailsServiceImpl implements AlarmTypeDetailsService {
|
|
|
alarmDetailsEntity.setState(AlarmStateEnum.REALTIME_ALARM.getCode());
|
|
|
alarmDetailsEntity.setDateCreate(new Date());
|
|
|
deviceName = sceneVo.getDeviceName();
|
|
|
- sendMessage(alarmDetailsEntity, alarmType.getAlarmCategory(), attrName, deviceName);
|
|
|
+ sendMessage(alarmDetailsEntity, alarmType.getAlarmCategory(), attrName, deviceName, sceneType);
|
|
|
result.add(alarmDetailsEntity);
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- private void sendMessage(AlarmDetailsEntity alarmDetailsEntity, int category , String attrName, String deviceName){
|
|
|
+ private void sendMessage(AlarmDetailsEntity alarmDetailsEntity, int category , String attrName, String deviceName, Integer sceneType){
|
|
|
Message message = new Message();
|
|
|
message.setStatus(1);
|
|
|
message.setTenantId(alarmDetailsEntity.getTenantId());
|
|
|
message.setMessageId(UUID.randomUUID().toString());
|
|
|
JSONObject jsonContent = new JSONObject();
|
|
|
- jsonContent.put("场景名称",alarmDetailsEntity.getSceneName());
|
|
|
- jsonContent.put("设备名称",deviceName);
|
|
|
+ jsonContent.put("场景名称", alarmDetailsEntity.getSceneName());
|
|
|
+ jsonContent.put("设备名称", deviceName);
|
|
|
jsonContent.put("报警字段", attrName);
|
|
|
if (category == 1) {
|
|
|
jsonContent.put("报警字段", attrName);
|
|
@@ -204,11 +230,15 @@ public class AlarmTypeDetailsServiceImpl implements AlarmTypeDetailsService {
|
|
|
// 消息内容,如果需要动态使用,配合模板使用{key:value}
|
|
|
message.setMessageContent(jsonContent.toJSONString());
|
|
|
// 消息类型、模板id、渠道
|
|
|
- message.setMessageType(1);
|
|
|
+ message.setMessageType(category == 1 ? 1 : 2);
|
|
|
message.setMessageTemplateId(category == 1 ? 1 : 2);
|
|
|
message.setChannel(0);
|
|
|
+ message.setSceneType(sceneType);
|
|
|
message.setCompanyOrgId(alarmDetailsEntity.getCompanyOrgId());
|
|
|
message.setDepartmentOrgId(alarmDetailsEntity.getDeptOrgId());
|
|
|
+ String url = messageConfig.getAlarmSkipUrl(SceneTypeEnum.get(sceneType));
|
|
|
+ message.setUrl(url);
|
|
|
+ message.setSceneType(sceneType);
|
|
|
messageComponent.sendMessageToAllTenantUsers(message, receiveExchangeName, dispathRoutingKey);
|
|
|
}
|
|
|
|