|
|
@@ -1,52 +1,25 @@
|
|
|
package com.zksy.api.service.impl;
|
|
|
|
|
|
-import static com.zksy.common.utils.CollectionSideEffects.*;
|
|
|
-
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.zksy.api.domain.*;
|
|
|
-import com.zksy.api.enums.EquipmentTypeEnum;
|
|
|
-import com.zksy.api.mapper.*;
|
|
|
+import com.zksy.api.domain.AlarmData;
|
|
|
+import com.zksy.api.mapper.AlarmDataMapper;
|
|
|
import com.zksy.api.service.AlarmDataService;
|
|
|
import com.zksy.api.service.CollectionAlarmWriter;
|
|
|
import com.zksy.api.utils.EarlyWarningLevelUtil;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.PlatformTransactionManager;
|
|
|
-import org.springframework.transaction.support.TransactionTemplate;
|
|
|
|
|
|
-import java.time.LocalDateTime;
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
-import java.util.Random;
|
|
|
|
|
|
-@Slf4j
|
|
|
@Service
|
|
|
public class AlarmDataServiceImpl extends ServiceImpl<AlarmDataMapper, AlarmData> implements AlarmDataService {
|
|
|
|
|
|
- @Autowired
|
|
|
- private EquipmentBaseApiMapper equipmentBaseApiMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private CaseInfoApiMapper caseInfoApiMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private PlatformTransactionManager transactionManager;
|
|
|
-
|
|
|
@Autowired
|
|
|
private CollectionAlarmWriter collectionAlarmWriter;
|
|
|
|
|
|
@Override
|
|
|
public boolean saveAlarmData(AlarmData alarmData) {
|
|
|
- boolean inserted = collectionAlarmWriter.saveOrUpdateUnhandled(alarmData);
|
|
|
- if (inserted) {
|
|
|
- try {
|
|
|
- new TransactionTemplate(transactionManager).executeWithoutResult(status -> syncCreateCase(alarmData));
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("保存告警后同步创建案件失败,alarmId={}", alarmData.getId(), e);
|
|
|
- }
|
|
|
- }
|
|
|
+ collectionAlarmWriter.saveOrUpdateUnhandled(alarmData);
|
|
|
// 复用原告警(等级更新/同级跳过)也是正常完成,不影响后续短信、设备状态和采集。
|
|
|
return true;
|
|
|
}
|
|
|
@@ -67,55 +40,4 @@ public class AlarmDataServiceImpl extends ServiceImpl<AlarmDataMapper, AlarmData
|
|
|
return recoverAlarm(deviceCode, warningCode);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 根据设备类别ID同步创建案件
|
|
|
- */
|
|
|
- private void syncCreateCase(AlarmData alarmData) {
|
|
|
- log.info("保存设备告警后同步创建案件-入参:{}", alarmData);
|
|
|
- // 根据设备编码查询设备基础信息
|
|
|
- EquipmentBase equipmentBase = equipmentBaseApiMapper.selectOne(new LambdaQueryWrapper<EquipmentBase>().eq(EquipmentBase::getEquipmentCode, alarmData.getDeviceCode()).last("LIMIT 1"));
|
|
|
- if (equipmentBase == null) {
|
|
|
- log.warn("未找到设备编码对应的设备信息,deviceCode={}", alarmData.getDeviceCode());
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- CaseInfo caseInfo = null;
|
|
|
-
|
|
|
- int caseLevel = alarmData.getAlarmLevel() != null ? alarmData.getAlarmLevel() : 4;
|
|
|
-
|
|
|
- // 构建告警描述
|
|
|
- String desc = alarmData.getWarningType() != null ? alarmData.getWarningType() : "设备告警";
|
|
|
- if (alarmData.getRemark() != null) {
|
|
|
- desc += "-" + alarmData.getRemark();
|
|
|
- }
|
|
|
-
|
|
|
- if (EquipmentTypeEnum.MANHOLE_COVER_MONITOR.getId().equals(equipmentBase.getEquipmentTypeId())) {
|
|
|
- // 同步新增案件信息
|
|
|
- caseInfo = new CaseInfo();
|
|
|
- caseInfo.setCaseNo(generateCaseNo());
|
|
|
- caseInfo.setAlarmId(alarmData.getId());
|
|
|
- caseInfo.setEquipmentId(equipmentBase.getEquipmentId());
|
|
|
- caseInfo.setCaseLevel(caseLevel);
|
|
|
- caseInfo.setCaseDesc(desc);
|
|
|
- caseInfo.setCaseSource(1); // 1-系统自动报警
|
|
|
- caseInfo.setCaseStatus(1); // 1-待核查
|
|
|
- requireSaved(caseInfoApiMapper.insert(caseInfo) > 0);
|
|
|
- log.info("同步新增案件信息成功,caseNo={}, alarmId={}", caseInfo.getCaseNo(), alarmData.getId());
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 生成案件编号:CS + 年月日时分秒 + 4位随机数
|
|
|
- */
|
|
|
- public static String generateCaseNo() {
|
|
|
- // 1. 获取当前时间,格式化为14位年月日时分秒
|
|
|
- String currentDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
|
|
|
- // 2. 生成4位随机数,不足补0
|
|
|
- String randomNum = String.format("%04d", new Random().nextInt(10000));
|
|
|
- // 3. 拼接完整编号
|
|
|
- return "CS" + currentDateTime + randomNum;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
}
|