11.3采集规则发送消息的完善

dev
xiaohuo 8 months ago
parent f01dfb2f37
commit f0d66ce892
  1. 22
      ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquBaseController.java
  2. 2
      ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquManuController.java
  3. 2
      ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquSupplierController.java
  4. 2
      ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/EquTypeController.java
  5. 19
      ALOps_sys_backend/alops-admin/src/main/java/com/alops/web/controller/equManagement/ScheduleRulesController.java
  6. 54
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/job/GatherJob.java
  7. 10
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquBaseMapper.java
  8. 4
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/mapper/EquGatherMapper.java
  9. 13
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/EquBaseServiceImpl.java
  10. 30
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/MemoryToolServiceImpl.java
  11. 4
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/ScheduleRulesServiceImpl.java
  12. 31
      ALOps_sys_backend/alops-system/src/main/java/com/alops/system/service/impl/SnmpServiceImpl.java
  13. 39
      ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquBaseMapper.xml
  14. 16
      ALOps_sys_backend/alops-system/src/main/resources/mapper/system/EquGatherMapper.xml

@ -144,7 +144,7 @@ public class EquBaseController extends BaseController
/** /**
* 获取设备基本信息详细信息 * 获取设备基本信息详细信息
*/ */
@PreAuthorize("@ss.hasPermi('device:files:query')") @PreAuthorize("@ss.hasPermi('device:files:query1')")
@GetMapping(value = "/{id}") @GetMapping(value = "/{id}")
@ApiOperation("查询单个设备信息") @ApiOperation("查询单个设备信息")
public AjaxResult getInfo(@PathVariable("id") String id) public AjaxResult getInfo(@PathVariable("id") String id)
@ -224,18 +224,18 @@ public class EquBaseController extends BaseController
@Log(title = "设备基本信息", businessType = BusinessType.INSERT) @Log(title = "设备基本信息", businessType = BusinessType.INSERT)
@PostMapping(value = "/add") @PostMapping(value = "/add")
@ApiOperation("增加设备档案信息") @ApiOperation("增加设备档案信息")
public AjaxResult add( @RequestBody EquBase equBase public AjaxResult add(@RequestBody EquBase equBase) {
) { try {
int rows = equBaseService.insertEquBase(equBase);
// // 处理图片 return toAjax(rows); // 插入成功
// if (file != null && !file.isEmpty()) { } catch (RuntimeException e) {
// equBase.setEquImage(file.getBytes()); return AjaxResult.error(e.getMessage()); // 重复编号或其他业务异常
// } } catch (Exception e) {
return AjaxResult.error("新增设备失败,请联系管理员");
// 调用 Service 插入数据库 }
return toAjax(equBaseService.insertEquBase(equBase));
} }
/** /**
* @ModelAttribute EquBase equBase, // 自动绑定表单字段 * @ModelAttribute EquBase equBase, // 自动绑定表单字段
* @RequestPart(value = "file", required = false) // 使用 @RequestPart * @RequestPart(value = "file", required = false) // 使用 @RequestPart

@ -42,7 +42,7 @@ public class EquManuController extends BaseController
/** /**
* 查询设备厂商管理列表 * 查询设备厂商管理列表
*/ */
@PreAuthorize("@ss.hasPermi('device:deviceManu:query')") @PreAuthorize("@ss.hasPermi('device:deviceManu:list')")
@GetMapping("/query") @GetMapping("/query")
@ApiOperation("查询设备厂商管理列表") @ApiOperation("查询设备厂商管理列表")
public TableDataInfo list(EquManu equManu) public TableDataInfo list(EquManu equManu)

@ -50,7 +50,7 @@ public class EquSupplierController extends BaseController
/** /**
* 查询供应商功能信息列表 * 查询供应商功能信息列表
*/ */
@PreAuthorize("@ss.hasPermi('device:supplier:query')") @PreAuthorize("@ss.hasPermi('device:supplier:list')")
@GetMapping("/query") @GetMapping("/query")
@ApiOperation("查询供应商功能信息列表") @ApiOperation("查询供应商功能信息列表")
public TableDataInfo list(EquSupplier equSupplier) public TableDataInfo list(EquSupplier equSupplier)

@ -42,7 +42,7 @@ public class EquTypeController extends BaseController
/** /**
* 查询设备类型管理列表 * 查询设备类型管理列表
*/ */
@PreAuthorize("@ss.hasPermi('device:deviceType:query')") @PreAuthorize("@ss.hasPermi('device:deviceType:list')")
@GetMapping("/query") @GetMapping("/query")
@ApiOperation("查询设备类型管理列表") @ApiOperation("查询设备类型管理列表")
public TableDataInfo list(EquType equType) public TableDataInfo list(EquType equType)

@ -10,8 +10,12 @@ import com.alops.common.core.domain.AjaxResult;
import com.alops.common.core.page.TableDataInfo; import com.alops.common.core.page.TableDataInfo;
import com.alops.common.enums.BusinessType; import com.alops.common.enums.BusinessType;
import com.alops.common.utils.poi.ExcelUtil; import com.alops.common.utils.poi.ExcelUtil;
import com.alops.system.domain.EquBase;
import com.alops.system.domain.EquGather;
import com.alops.system.domain.ScheduleRules; import com.alops.system.domain.ScheduleRules;
import com.alops.system.domain.vo.Code; import com.alops.system.domain.vo.Code;
import com.alops.system.mapper.EquBaseMapper;
import com.alops.system.mapper.EquGatherMapper;
import com.alops.system.mapper.ScheduleRulesMapper; import com.alops.system.mapper.ScheduleRulesMapper;
import com.alops.system.service.IScheduleRulesService; import com.alops.system.service.IScheduleRulesService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -33,9 +37,8 @@ public class ScheduleRulesController extends BaseController
{ {
@Autowired @Autowired
private IScheduleRulesService scheduleRulesService; private IScheduleRulesService scheduleRulesService;
@Mapper // @Autowired
private ScheduleRulesMapper scheduleRulesMapper; // private EquGatherMapper equGatherMapper;
/** /**
* 立即执行按钮 * 立即执行按钮
*/ */
@ -78,6 +81,16 @@ public class ScheduleRulesController extends BaseController
} }
// @PostMapping("/list1")
// @ApiOperation("测试")
// public AjaxResult list( @RequestBody List<String> updateList)
// {
// if (!updateList.isEmpty()) {
// return AjaxResult.success(equGatherMapper.selectLatestGatherIdsByEquIds(updateList));
//
// }
// return null;
// }

@ -11,9 +11,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
@Component @Component
public class GatherJob implements Job { public class GatherJob implements Job {
@ -58,25 +59,46 @@ public class GatherJob implements Job {
rule.setStatus(1); rule.setStatus(1);
scheduleRulesMapper.updateScheduleRules(rule); scheduleRulesMapper.updateScheduleRules(rule);
// 3.判断是否执行完成 按频率判断时间范围
if (rule.getRuleType() == 0) { // if (rule.getRuleType() == 0) {
Date start = rule.getStartTime(); // Date start = rule.getStartTime();
Date end = rule.getEndTime(); // Date end = rule.getEndTime();
if (start != null && end != null) { // if (start != null && end != null) {
// 当前时间不在范围内 // // 当前时间不在范围内
if ( now.after(end)) { // if ( now.after(end)) {
rule.setStatus(2); // 超出范围标记完成 // rule.setStatus(2); // 超出范围标记完成
scheduleRulesMapper.updateScheduleRules(rule); // scheduleRulesMapper.updateScheduleRules(rule);
iAlertSenderService.sendInternalMessage("采集整体任务成功","按照频率进行采集的任务执行完成","2"); // iAlertSenderService.sendInternalMessage("采集整体任务成功","按照频率进行采集的任务执行完成","2");
//
return; // return;
} // }
} // }
} // }
// 执行任务 // 执行任务
iScheduleRulesService.executeImmediately(); iScheduleRulesService.executeImmediately();
// 3.判断是否执行完成 按频率判断时间范围
if (rule.getRuleType() == 0 && rule.getEndTime() != null && rule.getFrequency() != null) {
// 计算下一次执行时间
Calendar nextRun = Calendar.getInstance();
nextRun.setTime(now);
nextRun.add(Calendar.MINUTE, rule.getFrequency().intValue());
if (nextRun.getTime().after(rule.getEndTime())) {
// 已经超出范围,标记完成 + 取消任务 + 发送通知
rule.setStatus(2);
scheduleRulesMapper.updateScheduleRules(rule);
Scheduler scheduler = context.getScheduler();
JobKey jobKey = context.getJobDetail().getKey();
scheduler.deleteJob(jobKey);
iAlertSenderService.sendInternalMessage("采集整体任务成功",
"按照频率进行采集的任务执行完成","2");
}
}
// 执行成功 // 执行成功
if (rule.getRuleType() == 1 ) { if (rule.getRuleType() == 1 ) {
rule.setStatus(2); rule.setStatus(2);

@ -22,6 +22,13 @@ import org.springframework.data.repository.query.Param;
public interface EquBaseMapper public interface EquBaseMapper
{ {
/**
* 根据设备编号查询数量用于唯一性校验
* @param equNumber 设备编号
* @return 数量0表示不存在>0表示已存在
*/
int countByEquNumber(String equNumber);
String selectEquNameById(@Param("equId") String equId); String selectEquNameById(@Param("equId") String equId);
/** /**
@ -29,7 +36,8 @@ public interface EquBaseMapper
* @param list 待更新的实体列表每个实体必须包含 id version * @param list 待更新的实体列表每个实体必须包含 id version
* @return 更新的行数 * @return 更新的行数
*/ */
int updateEquBaseVersionBatch(@Param("list") List<EquBase> list); // int updateEquBaseVersionBatch(@Param("list") List<EquBase> list);
int updateEquBaseVersionBatch(List<EquBase> list);
/** /**
* 查询状态为1的设备及其最新采集信息和类型名称 * 查询状态为1的设备及其最新采集信息和类型名称

@ -20,7 +20,9 @@ public interface EquGatherMapper
/** /**
* 根据设备ID列表查询每台设备的最新采集ID * 根据设备ID列表查询每台设备的最新采集ID
*/ */
List<String> selectLatestGatherIdsByEquIds(@Param("equIds") List<String> equIds); // List<String> selectLatestGatherIdsByEquIds(@Param("equIds") List<String> equIds);
List<String> selectLatestGatherIdsByEquIds(List<String> equIds);
// 更新 health 字段 // 更新 health 字段
int updateHealth(String collectId, Double totalHealth); int updateHealth(String collectId, Double totalHealth);

@ -305,16 +305,25 @@ public class EquBaseServiceImpl implements IEquBaseService
* @return 结果 * @return 结果
*/ */
@Override @Override
public int insertEquBase(EquBase equBase) public int insertEquBase(EquBase equBase) {
{ // 唯一性校验
int count = equBaseMapper.countByEquNumber(equBase.getEquNumber());
if (count > 0) {
// 抛出异常或者返回特殊值,前端可捕获
throw new RuntimeException("设备编号已存在,请重新输入");
}
// 设置默认值
if (equBase.getCreateDate() == null) { if (equBase.getCreateDate() == null) {
equBase.setCreateDate(new Date()); equBase.setCreateDate(new Date());
} }
equBase.setId(UUID.randomUUID().toString()); equBase.setId(UUID.randomUUID().toString());
equBase.setCreateBy(SecurityUtils.getLoginUser().getUserId()); equBase.setCreateBy(SecurityUtils.getLoginUser().getUserId());
return equBaseMapper.insertEquBase(equBase); return equBaseMapper.insertEquBase(equBase);
} }
/** /**
* 修改设备基本信息 * 修改设备基本信息
* *

@ -62,17 +62,32 @@ public class MemoryToolServiceImpl implements MemoryToolService {
// 🟩 如果是 equ_base,则单独处理为更新型实体 // 🟩 如果是 equ_base,则单独处理为更新型实体
// if ("equ_base".equalsIgnoreCase(param)) {
// if (value instanceof Map) {
// Map<String, Object> row = (Map<String, Object>) value;
// Object entity = createEntityForTable("equ_base", row);
// if (entity != null) {
// // 填入设备ID(更新时使用)
// fillField(entity, "equ_base", "id", device.getId());
// updateEntities.put("equ_base", entity);
// }
// }
// continue; // 跳过普通插入逻辑
// }
if ("equ_base".equalsIgnoreCase(param)) { if ("equ_base".equalsIgnoreCase(param)) {
if (value instanceof Map) { if (value instanceof String) {
Map<String, Object> row = (Map<String, Object>) value; String version = (String) value;
Object entity = createEntityForTable("equ_base", row); // 创建一个实体对象
Object entity = createEntityForTable("equ_base", new HashMap<>());
if (entity != null) { if (entity != null) {
// 填入设备ID(更新时使用) // 填上设备ID
fillField(entity, "equ_base", "id", device.getId()); fillField(entity, "equ_base", "id", device.getId());
// 填上版本号(假设数据库字段叫 soft_version)
fillField(entity, "equ_base", "version", version);
updateEntities.put("equ_base", entity); updateEntities.put("equ_base", entity);
} }
} }
continue; // 跳过普通插入逻辑 continue;
} }
//插入行实体 //插入行实体
@ -209,7 +224,10 @@ public class MemoryToolServiceImpl implements MemoryToolService {
switch (tableName) { switch (tableName) {
case "equ_interface": case "equ_interface":
EquInterface equInterface=new EquInterface(); EquInterface equInterface=new EquInterface();
rowData.forEach((k, v) -> fillField(equInterface, tableName, k, v != null ? v.toString() : null)); rowData.forEach((k, v) -> fillField(equInterface, tableName, k, v != null ? v.toString() :null));
if (equInterface.getLossRate() == null) equInterface.setLossRate(BigDecimal.ZERO);
if (equInterface.getErrorRate() == null) equInterface.setErrorRate(BigDecimal.ZERO);
if (equInterface.getRate() == null) equInterface.setRate(0L);
return equInterface; return equInterface;
case "equ_routing": case "equ_routing":

@ -103,6 +103,7 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService {
} }
rule.setStatus(4); rule.setStatus(4);
scheduleRulesMapper.updateScheduleRules(rule); scheduleRulesMapper.updateScheduleRules(rule);
iAlertSenderService.sendInternalMessage("采集整体任务取消成功","任务执行完此次,已取消后续任务","2");
return false; return false;
default: default:
return true; return true;
@ -275,7 +276,7 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService {
deleteAllEquipmentData(failedEquIds); // 删除依附表,不含 equ_gather deleteAllEquipmentData(failedEquIds); // 删除依附表,不含 equ_gather
// 插入成功设备数据(内部失败会抛异常,触发事务回滚) // 插入成功设备数据(内部失败会抛异常,触发事务回滚)
persistAndUpdate(successList); persistAndUpdate(validationResult.getSuccessList());
// 发送成功日志 // 发送成功日志
log.info("本次采集成功 {} 台,删除旧表并写入最新数据,失败设备:{}", successList.size(), failed); log.info("本次采集成功 {} 台,删除旧表并写入最新数据,失败设备:{}", successList.size(), failed);
@ -380,6 +381,7 @@ public class ScheduleRulesServiceImpl implements IScheduleRulesService {
iAlertLaunchService.executeImmediateAlerts(); iAlertLaunchService.executeImmediateAlerts();
} catch (Exception e) { } catch (Exception e) {
log.error("预警执行异常,不影响采集事务", e); log.error("预警执行异常,不影响采集事务", e);
iAlertSenderService.sendInternalMessage("预警执行异常,不影响采集事务","预警计数失败", "2");
} }
log.info("批量落库、更新完成,共处理设备:{}", allEntities.size()); log.info("批量落库、更新完成,共处理设备:{}", allEntities.size());

@ -17,6 +17,9 @@ import org.springframework.stereotype.Service;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.*; import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//根据截取方式生成结果 //根据截取方式生成结果
@Service @Service
public class SnmpServiceImpl implements SnmpService { public class SnmpServiceImpl implements SnmpService {
@ -233,6 +236,34 @@ private ConvertRawValueService convertRawValueService;
// String value6 = convertRawValueService.convertValue(oid.getConvertRule(), lastValue); // String value6 = convertRawValueService.convertValue(oid.getConvertRule(), lastValue);
result.put(oid.getParam(), lastValue); result.put(oid.getParam(), lastValue);
break; break;
case "7":
// 单值
String singleValue2 = null;
outerLoop:
for (TreeEvent event : events) {
if (event == null || event.isError()) continue;
VariableBinding[] vbs = event.getVariableBindings();
if (vbs == null) continue;
for (VariableBinding vb : vbs) {
singleValue2 = vb.getVariable().toString();
break outerLoop; // 只取第一个
}
}
if (singleValue2 != null) {
// 用正则提取版本号,比如 V200R022C00SPC500
Pattern pattern = Pattern.compile("(V\\d{3}R\\d{3}C\\d{2}(SPC\\d+)?)");
Matcher matcher = pattern.matcher(singleValue2);
if (matcher.find()) {
singleValue2 = matcher.group(1); // 提取到的版本号
} else {
singleValue2 = ""; // 没匹配上就给个空值
}
}
System.out.println(singleValue2);
result.put(oid.getParam(), singleValue2);
break;
default: default:
result.put(oid.getParam(), null); result.put(oid.getParam(), null);
} }

@ -77,6 +77,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</collection> </collection>
</resultMap> </resultMap>
<select id="countByEquNumber" resultType="int" parameterType="String">
SELECT COUNT(1)
FROM equ_base
WHERE equ_number = #{equNumber}
</select>
<select id="selectEquNameById" parameterType="string" resultType="string"> <select id="selectEquNameById" parameterType="string" resultType="string">
SELECT name SELECT name
FROM equ_base FROM equ_base
@ -84,18 +91,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<!-- <update id="updateEquBaseVersionBatch" parameterType="java.util.List">-->
<!-- <foreach collection="list" item="item" separator=";">-->
<!-- UPDATE equ_base-->
<!-- <set>-->
<!-- <if test="version != null">-->
<!-- version = #{item.version}-->
<!-- </if>-->
<!-- </set>-->
<!-- WHERE id = #{item.id}-->
<!-- </foreach>-->
<!-- </update>-->
<update id="updateEquBaseVersionBatch" parameterType="java.util.List"> <update id="updateEquBaseVersionBatch" parameterType="java.util.List">
<foreach collection="list" item="item" separator=";"> UPDATE equ_base
UPDATE equ_base <set>
<set> version = CASE id
<if test="version != null"> <foreach collection="list" item="item">
version = #{item.version} WHEN #{item.id} THEN #{item.version}
</if> </foreach>
</set> END
WHERE id = #{item.id} </set>
WHERE id IN
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item.id}
</foreach> </foreach>
</update> </update>
<sql id="selectEquBaseVo"> <sql id="selectEquBaseVo">
select id,equ_number, name, version, ip, manufacture, location, equ_type, in_charge, install_date, life_cycle, warranty, create_by, create_date, status, device_level, supplier_id from equ_base select id,equ_number, name, version, ip, manufacture, location, equ_type, in_charge, install_date, life_cycle, warranty, create_by, create_date, status, device_level, supplier_id from equ_base
</sql> </sql>

@ -26,11 +26,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap> </resultMap>
<!-- <select id="selectLatestGatherIdsByEquIds" resultType="String">-->
<!-- SELECT id-->
<!-- FROM equ_gather g-->
<!-- WHERE equ_id IN-->
<!-- <foreach item="id" collection="equIds" open="(" separator="," close=")">-->
<!-- #{id}-->
<!-- </foreach>-->
<!-- AND gather_time = (-->
<!-- SELECT MAX(gather_time)-->
<!-- FROM equ_gather t-->
<!-- WHERE t.equ_id = g.equ_id-->
<!-- )-->
<!-- </select>-->
<select id="selectLatestGatherIdsByEquIds" resultType="String"> <select id="selectLatestGatherIdsByEquIds" resultType="String">
SELECT id SELECT id
FROM equ_gather g FROM equ_gather g
WHERE equ_id IN WHERE equ_id IN
<foreach item="id" collection="equIds" open="(" separator="," close=")"> <foreach item="id" collection="list" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>
AND gather_time = ( AND gather_time = (
@ -40,6 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
) )
</select> </select>
<!-- updateHealth 方法 --> <!-- updateHealth 方法 -->
<update id="updateHealth"> <update id="updateHealth">
UPDATE equ_gather UPDATE equ_gather

Loading…
Cancel
Save