From c0f51ef00758135f2354d72f0ee6403a9b0b19fa Mon Sep 17 00:00:00 2001 From: gaoyutao Date: Mon, 24 Nov 2025 14:00:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=A4=E6=8D=A2=E6=9C=BA?= =?UTF-8?q?=E5=88=86=E8=A1=A8=E3=80=81=E6=96=B0=E5=A2=9E=E4=B8=A2=E5=8C=85?= =?UTF-8?q?=E7=8E=87clientId=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/utils/TableSubUtil.java | 94 ++++++++++------ .../controller/AllMtrClientController.java | 105 ++++++++++++++++++ .../RmMtrClientRegistrationController.java | 34 ++++++ .../ruoyi/mtragent/domain/AllMtrClient.java | 86 ++++++++++++++ .../mtragent/handler/MessageHandler.java | 11 +- .../mtragent/mapper/AllMtrClientMapper.java | 69 ++++++++++++ .../mapper/RmMtrClientRegistrationMapper.java | 17 ++- .../service/IAllMtrClientService.java | 69 ++++++++++++ .../IRmMtrClientRegistrationService.java | 13 +++ .../service/impl/AllMtrClientServiceImpl.java | 103 +++++++++++++++++ .../RmMtrClientRegistrationServiceImpl.java | 18 +++ .../impl/RmMtrProbeResultServiceImpl.java | 2 +- .../mapper/mtragent/AllMtrClientMapper.xml | 92 +++++++++++++++ .../RmMtrClientRegistrationMapper.xml | 22 ++++ .../EpsServerRevenueConfigServiceImpl.java | 29 ++--- .../InitialSwitchInfoDetailsServiceImpl.java | 37 ++---- .../impl/InitialSwitchInfoServiceImpl.java | 3 +- 17 files changed, 718 insertions(+), 86 deletions(-) create mode 100644 ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/AllMtrClientController.java create mode 100644 ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/domain/AllMtrClient.java create mode 100644 ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/AllMtrClientMapper.java create mode 100644 ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IAllMtrClientService.java create mode 100644 ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/AllMtrClientServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/AllMtrClientMapper.xml diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/TableSubUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/TableSubUtil.java index 9f31b63..b53712f 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/TableSubUtil.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/TableSubUtil.java @@ -1,28 +1,50 @@ package com.ruoyi.common.core.utils; +import org.springframework.stereotype.Component; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.Date; import java.util.LinkedHashSet; import java.util.Set; +@Component public class TableSubUtil { // 日期格式 private static final String YEAR_MONTH_FORMAT = "yyyy_MM"; private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + /** - * 根据创建时间获取表名 - * @param createTime 记录创建时间 - * @param prefix 表名前缀 - * @return 对应的分表名称 - * @throws IllegalArgumentException 如果createTime为null - * - * 示例: - * 2023-08-05 14:30:00 → rm_mtr_probe_result_2023_08_1_10 - * 2023-08-15 09:15:00 → rm_mtr_probe_result_2023_08_11_20 - * 2023-08-25 18:45:00 → rm_mtr_probe_result_2023_08_21_31 + * 根据创建时间获取表名(过滤不存在的表) + */ + public static String getExistingTableName(Date createTime, String prefix) { + String tableName = getTableName(createTime, prefix); + return tableExists(tableName) ? tableName : null; + } + + /** + * 获取时间范围内涉及的所有存在的表名 + */ + public static Set getExistingTableNamesBetween(String startTime, String endTime, String prefix) { + Set allTables = getTableNamesBetween(startTime, endTime, prefix); + Set existingTables = new LinkedHashSet<>(); + + for (String table : allTables) { + if (tableExists(table)) { + existingTables.add(table); + } + } + return existingTables; + } + + /** + * 根据创建时间获取表名(原始方法) */ public static String getTableName(Date createTime, String prefix) { if (createTime == null) { @@ -35,18 +57,11 @@ public class TableSubUtil { SimpleDateFormat dayFormat = new SimpleDateFormat("dd"); int day = Integer.parseInt(dayFormat.format(createTime)); - return String.format("%s_%s_%s", - prefix, - yearMonth, - getDayRange(day)); + return String.format("%s_%s_%s", prefix, yearMonth, getDayRange(day)); } /** - * 获取时间范围内涉及的所有表名 - * @param startTime 开始时间 (格式: "yyyy-MM-dd HH:mm:ss") - * @param endTime 结束时间 (格式: "yyyy-MM-dd HH:mm:ss") - * @param prefix 表名前缀 - * @return 按时间顺序排列的表名集合 + * 获取时间范围内涉及的所有表名(原始方法) */ public static Set getTableNamesBetween(String startTime, String endTime, String prefix) { Date start = parseDateTime(startTime); @@ -54,27 +69,45 @@ public class TableSubUtil { validateTimeRange(start, end); Set tableNames = new LinkedHashSet<>(); - - // 使用java.util.Calendar进行日期操作 - java.util.Calendar current = java.util.Calendar.getInstance(); + Calendar current = Calendar.getInstance(); current.setTime(start); - current.set(java.util.Calendar.HOUR_OF_DAY, 0); - current.set(java.util.Calendar.MINUTE, 0); - current.set(java.util.Calendar.SECOND, 0); - current.set(java.util.Calendar.MILLISECOND, 0); + current.set(Calendar.HOUR_OF_DAY, 0); + current.set(Calendar.MINUTE, 0); + current.set(Calendar.SECOND, 0); + current.set(Calendar.MILLISECOND, 0); - java.util.Calendar endCal = java.util.Calendar.getInstance(); + Calendar endCal = Calendar.getInstance(); endCal.setTime(end); while (!current.after(endCal)) { tableNames.add(getTableName(current.getTime(), prefix)); - current.add(java.util.Calendar.DAY_OF_MONTH, 1); + current.add(Calendar.DAY_OF_MONTH, 1); } return tableNames; } - // 解析字符串为Date + /** + * 检查表是否存在 + */ + private static boolean tableExists(String tableName) { + try { + // 直接从SpringUtils获取数据源 + javax.sql.DataSource dataSource = SpringUtils.getBean(javax.sql.DataSource.class); + + try (Connection conn = dataSource.getConnection()) { + DatabaseMetaData metaData = conn.getMetaData(); + try (ResultSet rs = metaData.getTables(conn.getCatalog(), null, tableName, new String[]{"TABLE"})) { + return rs.next(); + } + } + } catch (Exception e) { + System.err.println("检查表是否存在失败: " + tableName + ", error: " + e.getMessage()); + return false; + } + } + + // 以下为原有辅助方法保持不变 private static Date parseDateTime(String dateTimeStr) { if (dateTimeStr == null || dateTimeStr.trim().isEmpty()) { throw new IllegalArgumentException("时间字符串不能为空"); @@ -87,18 +120,15 @@ public class TableSubUtil { } } - // 获取日期区间 private static String getDayRange(int day) { if (day < 1 || day > 31) { throw new IllegalArgumentException("日期必须在1-31之间"); } - if (day <= 10) return "1_10"; if (day <= 20) return "11_20"; return "21_31"; } - // 验证时间范围 private static void validateTimeRange(Date start, Date end) { if (start == null || end == null) { throw new IllegalArgumentException("时间范围参数不能为null"); diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/AllMtrClientController.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/AllMtrClientController.java new file mode 100644 index 0000000..89583e1 --- /dev/null +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/AllMtrClientController.java @@ -0,0 +1,105 @@ +package com.ruoyi.mtragent.controller; + +import java.util.List; +import java.io.IOException; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.mtragent.domain.AllMtrClient; +import com.ruoyi.mtragent.service.IAllMtrClientService; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.page.TableDataInfo; + +/** + * mtr探测丢包clinetId记录Controller + * + * @author gyt + * @date 2025-11-24 + */ +@RestController +@RequestMapping("/allMtrClient") +public class AllMtrClientController extends BaseController +{ + @Autowired + private IAllMtrClientService allMtrClientService; + + /** + * 查询mtr探测丢包clinetId记录列表 + */ + @RequiresPermissions("mtragent:allMtrClient:list") + @GetMapping("/list") + public TableDataInfo list(AllMtrClient allMtrClient) + { + startPage(); + List list = allMtrClientService.selectAllMtrClientList(allMtrClient); + return getDataTable(list); + } + + /** + * 导出mtr探测丢包clinetId记录列表 + */ + @RequiresPermissions("mtragent:allMtrClient:export") + @Log(title = "mtr探测丢包clinetId记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, AllMtrClient allMtrClient) + { + List list = allMtrClientService.selectAllMtrClientList(allMtrClient); + ExcelUtil util = new ExcelUtil(AllMtrClient.class); + util.exportExcel(response, list, "mtr探测丢包clinetId记录数据"); + } + + /** + * 获取mtr探测丢包clinetId记录详细信息 + */ + @RequiresPermissions("mtragent:allMtrClient:query") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(allMtrClientService.selectAllMtrClientById(id)); + } + + /** + * 新增mtr探测丢包clinetId记录 + */ + @RequiresPermissions("mtragent:allMtrClient:add") + @Log(title = "mtr探测丢包clinetId记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody AllMtrClient allMtrClient) + { + return toAjax(allMtrClientService.insertAllMtrClient(allMtrClient)); + } + + /** + * 修改mtr探测丢包clinetId记录 + */ + @RequiresPermissions("mtragent:allMtrClient:edit") + @Log(title = "mtr探测丢包clinetId记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody AllMtrClient allMtrClient) + { + return toAjax(allMtrClientService.updateAllMtrClient(allMtrClient)); + } + + /** + * 删除mtr探测丢包clinetId记录 + */ + @RequiresPermissions("mtragent:allMtrClient:remove") + @Log(title = "mtr探测丢包clinetId记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(allMtrClientService.deleteAllMtrClientByIds(ids)); + } +} diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/RmMtrClientRegistrationController.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/RmMtrClientRegistrationController.java index 1d37d55..7604a9f 100644 --- a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/RmMtrClientRegistrationController.java +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/controller/RmMtrClientRegistrationController.java @@ -8,6 +8,7 @@ import com.ruoyi.common.core.web.page.TableDataInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.mtragent.domain.AllMtrClient; import com.ruoyi.mtragent.domain.RmMtrClientRegistration; import com.ruoyi.mtragent.service.IRmMtrClientRegistrationService; import org.springframework.beans.factory.annotation.Autowired; @@ -101,4 +102,37 @@ public class RmMtrClientRegistrationController extends BaseController int rows = rmMtrClientRegistrationService.addAgentUpdatePolicy(rmMtrClientRegistration); return toAjax(rows); } + + /** + * 查询所有MTR客户端注册 + */ + @RequiresPermissions("mtragent:mtrClientRegistration:list") + @PostMapping("/getAllMtrMsg") + public AjaxResult getAllMtrMsg(@RequestBody RmMtrClientRegistration rmMtrClientRegistration) + { + List list = rmMtrClientRegistrationService.selectRmMtrClientRegistrationList(rmMtrClientRegistration); + return success(list); + } + /** + * 查询MTR客户端注册列表 + */ + @RequiresPermissions("mtragent:mtrClientRegistration:list") + @PostMapping("/getAllLogicalNode") + public AjaxResult getAllLogicalNode(@RequestBody RmMtrClientRegistration rmMtrClientRegistration) + { + List list = rmMtrClientRegistrationService.getAllLogicalNode(rmMtrClientRegistration); + return success(list); + } + /** + * 根据mtrClientId查询包含的clientId + * @param rmMtrClientRegistration + * @return + */ + @RequiresPermissions("mtragent:mtrClientRegistration:list") + @PostMapping("/getClientIdByMtrClientId") + public AjaxResult getClientIdByMtrClientId(@RequestBody RmMtrClientRegistration rmMtrClientRegistration) + { + List list = rmMtrClientRegistrationService.getClientIdByMtrClientId(rmMtrClientRegistration); + return success(list); + } } diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/domain/AllMtrClient.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/domain/AllMtrClient.java new file mode 100644 index 0000000..71b6407 --- /dev/null +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/domain/AllMtrClient.java @@ -0,0 +1,86 @@ +package com.ruoyi.mtragent.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * mtr探测丢包clinetId记录对象 all_mtr_client + * + * @author gyt + * @date 2025-11-24 + */ +public class AllMtrClient extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 主键ID */ + private Long id; + + /** MTR客户端ID */ + @Excel(name = "MTR客户端ID") + private String mtrClientId; + + /** 客户端ID */ + @Excel(name = "客户端ID") + private String clientId; + + /** 公网IP地址 */ + @Excel(name = "公网IP地址") + private String publicIp; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setMtrClientId(String mtrClientId) + { + this.mtrClientId = mtrClientId; + } + + public String getMtrClientId() + { + return mtrClientId; + } + + public void setClientId(String clientId) + { + this.clientId = clientId; + } + + public String getClientId() + { + return clientId; + } + + public void setPublicIp(String publicIp) + { + this.publicIp = publicIp; + } + + public String getPublicIp() + { + return publicIp; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("mtrClientId", getMtrClientId()) + .append("clientId", getClientId()) + .append("publicIp", getPublicIp()) + .append("createTime", getCreateTime()) + .append("updateTime", getUpdateTime()) + .append("createBy", getCreateBy()) + .append("updateBy", getUpdateBy()) + .toString(); + } +} diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/handler/MessageHandler.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/handler/MessageHandler.java index f652a1b..23e47d9 100644 --- a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/handler/MessageHandler.java +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/handler/MessageHandler.java @@ -15,6 +15,7 @@ import com.ruoyi.mtragent.utils.JsonDataParser; import com.ruoyi.mtragent.utils.WeChatWorkBot; import com.ruoyi.system.api.domain.NetworkInfo; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.core.RedisOperations; @@ -65,9 +66,9 @@ public class MessageHandler { @Autowired private ProducerMode producerMode; @Autowired - private IRmNetworkInterfaceService rmNetworkInterfaceService; - @Autowired private IRmMtrProbeResultService rmMtrProbeResultService; + @Autowired + private IAllMtrClientService allMtrClientService; /** @@ -90,6 +91,7 @@ public class MessageHandler { if(mtrResultVoList != null && !mtrResultVoList.isEmpty()){ String mtrClientId = message.getClientId(); List rmMtrProbeResultList = new ArrayList<>(); + List allMtrClientList = new ArrayList<>(); for (MtrResultVo mtrResultVo : mtrResultVoList) { if(mtrResultVo.getFinalLossPercent() != -1.0){ // 时间戳转换 @@ -103,6 +105,9 @@ public class MessageHandler { rmMtrProbeResult.setPublicIp(mtrResultVo.getTargetIp()); rmMtrProbeResult.setPacketLossRate(new BigDecimal(mtrResultVo.getFinalLossPercent())); rmMtrProbeResultList.add(rmMtrProbeResult); + AllMtrClient allMtrClient = new AllMtrClient(); + BeanUtils.copyProperties(rmMtrProbeResult, allMtrClient); + allMtrClientList.add(allMtrClient); }else{ log.debug("探测失败,失败原因:{}", mtrResultVo.getErrorMsg()); } @@ -111,6 +116,8 @@ public class MessageHandler { insertData.setList(rmMtrProbeResultList); // 结果批量入库 rmMtrProbeResultService.batchInsertRmMtrProbeResult(insertData); + // 记录下发策略的clientId + allMtrClientService.batchInsertAllMtrClient(allMtrClientList); } } diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/AllMtrClientMapper.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/AllMtrClientMapper.java new file mode 100644 index 0000000..a4f8f24 --- /dev/null +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/AllMtrClientMapper.java @@ -0,0 +1,69 @@ +package com.ruoyi.mtragent.mapper; + +import com.ruoyi.mtragent.domain.AllMtrClient; + +import java.util.List; + +/** + * mtr探测丢包clinetId记录Mapper接口 + * + * @author gyt + * @date 2025-11-24 + */ +public interface AllMtrClientMapper +{ + /** + * 查询mtr探测丢包clinetId记录 + * + * @param id mtr探测丢包clinetId记录主键 + * @return mtr探测丢包clinetId记录 + */ + public AllMtrClient selectAllMtrClientById(Long id); + + /** + * 查询mtr探测丢包clinetId记录列表 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return mtr探测丢包clinetId记录集合 + */ + public List selectAllMtrClientList(AllMtrClient allMtrClient); + + /** + * 新增mtr探测丢包clinetId记录 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return 结果 + */ + public int insertAllMtrClient(AllMtrClient allMtrClient); + + /** + * 修改mtr探测丢包clinetId记录 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return 结果 + */ + public int updateAllMtrClient(AllMtrClient allMtrClient); + + /** + * 删除mtr探测丢包clinetId记录 + * + * @param id mtr探测丢包clinetId记录主键 + * @return 结果 + */ + public int deleteAllMtrClientById(Long id); + + /** + * 批量删除mtr探测丢包clinetId记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteAllMtrClientByIds(Long[] ids); + + /** + * 批量新增 + * @param allMtrClientList + * @return + */ + int batchInsertAllMtrClient(List allMtrClientList); +} diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/RmMtrClientRegistrationMapper.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/RmMtrClientRegistrationMapper.java index 98dfdbf..f80fb82 100644 --- a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/RmMtrClientRegistrationMapper.java +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/mapper/RmMtrClientRegistrationMapper.java @@ -1,8 +1,9 @@ package com.ruoyi.mtragent.mapper; -import java.util.List; import com.ruoyi.mtragent.domain.RmMtrClientRegistration; +import java.util.List; + /** * MTR客户端注册Mapper接口 * @@ -58,4 +59,18 @@ public interface RmMtrClientRegistrationMapper * @return 结果 */ public int deleteRmMtrClientRegistrationByIds(Long[] ids); + + /** + * 获取所有标识 + * @param rmMtrClientRegistration + * @return + */ + List getAllLogicalNode(RmMtrClientRegistration rmMtrClientRegistration); + + /** + * 根据mtrClientId查询mtr管理信息 + * @param rmMtrClientRegistration + * @return + */ + RmMtrClientRegistration getMsgByMtrClientId(RmMtrClientRegistration rmMtrClientRegistration); } diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IAllMtrClientService.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IAllMtrClientService.java new file mode 100644 index 0000000..7f01ca5 --- /dev/null +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IAllMtrClientService.java @@ -0,0 +1,69 @@ +package com.ruoyi.mtragent.service; + +import com.ruoyi.mtragent.domain.AllMtrClient; + +import java.util.List; + +/** + * mtr探测丢包clinetId记录Service接口 + * + * @author gyt + * @date 2025-11-24 + */ +public interface IAllMtrClientService +{ + /** + * 查询mtr探测丢包clinetId记录 + * + * @param id mtr探测丢包clinetId记录主键 + * @return mtr探测丢包clinetId记录 + */ + public AllMtrClient selectAllMtrClientById(Long id); + + /** + * 查询mtr探测丢包clinetId记录列表 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return mtr探测丢包clinetId记录集合 + */ + public List selectAllMtrClientList(AllMtrClient allMtrClient); + + /** + * 新增mtr探测丢包clinetId记录 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return 结果 + */ + public int insertAllMtrClient(AllMtrClient allMtrClient); + + /** + * 修改mtr探测丢包clinetId记录 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return 结果 + */ + public int updateAllMtrClient(AllMtrClient allMtrClient); + + /** + * 批量删除mtr探测丢包clinetId记录 + * + * @param ids 需要删除的mtr探测丢包clinetId记录主键集合 + * @return 结果 + */ + public int deleteAllMtrClientByIds(Long[] ids); + + /** + * 删除mtr探测丢包clinetId记录信息 + * + * @param id mtr探测丢包clinetId记录主键 + * @return 结果 + */ + public int deleteAllMtrClientById(Long id); + + /** + * 批量插入client记录 + * @param allMtrClientList + * @return + */ + int batchInsertAllMtrClient(List allMtrClientList); +} diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IRmMtrClientRegistrationService.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IRmMtrClientRegistrationService.java index 59b7fa1..5a5a5b4 100644 --- a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IRmMtrClientRegistrationService.java +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/IRmMtrClientRegistrationService.java @@ -1,5 +1,6 @@ package com.ruoyi.mtragent.service; +import com.ruoyi.mtragent.domain.AllMtrClient; import com.ruoyi.mtragent.domain.RmMtrClientRegistration; import java.util.List; @@ -67,4 +68,16 @@ public interface IRmMtrClientRegistrationService */ int addAgentUpdatePolicy(RmMtrClientRegistration rmMtrClientRegistration); + /** + * 获取所有标识 + * @param rmMtrClientRegistration + * @return + */ + List getAllLogicalNode(RmMtrClientRegistration rmMtrClientRegistration); + /** + * 根据mtrClientId查询包含的clientId + * @param rmMtrClientRegistration + * @return clientId列表 + */ + List getClientIdByMtrClientId(RmMtrClientRegistration rmMtrClientRegistration); } diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/AllMtrClientServiceImpl.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/AllMtrClientServiceImpl.java new file mode 100644 index 0000000..6bd5259 --- /dev/null +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/AllMtrClientServiceImpl.java @@ -0,0 +1,103 @@ +package com.ruoyi.mtragent.service.impl; + +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.mtragent.domain.AllMtrClient; +import com.ruoyi.mtragent.mapper.AllMtrClientMapper; +import com.ruoyi.mtragent.service.IAllMtrClientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * mtr探测丢包clinetId记录Service业务层处理 + * + * @author gyt + * @date 2025-11-24 + */ +@Service +public class AllMtrClientServiceImpl implements IAllMtrClientService +{ + @Autowired + private AllMtrClientMapper allMtrClientMapper; + + /** + * 查询mtr探测丢包clinetId记录 + * + * @param id mtr探测丢包clinetId记录主键 + * @return mtr探测丢包clinetId记录 + */ + @Override + public AllMtrClient selectAllMtrClientById(Long id) + { + return allMtrClientMapper.selectAllMtrClientById(id); + } + + /** + * 查询mtr探测丢包clinetId记录列表 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return mtr探测丢包clinetId记录 + */ + @Override + public List selectAllMtrClientList(AllMtrClient allMtrClient) + { + return allMtrClientMapper.selectAllMtrClientList(allMtrClient); + } + + /** + * 新增mtr探测丢包clinetId记录 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return 结果 + */ + @Override + public int insertAllMtrClient(AllMtrClient allMtrClient) + { + allMtrClient.setCreateTime(DateUtils.getNowDate()); + return allMtrClientMapper.insertAllMtrClient(allMtrClient); + } + + /** + * 修改mtr探测丢包clinetId记录 + * + * @param allMtrClient mtr探测丢包clinetId记录 + * @return 结果 + */ + @Override + public int updateAllMtrClient(AllMtrClient allMtrClient) + { + allMtrClient.setUpdateTime(DateUtils.getNowDate()); + return allMtrClientMapper.updateAllMtrClient(allMtrClient); + } + + /** + * 批量删除mtr探测丢包clinetId记录 + * + * @param ids 需要删除的mtr探测丢包clinetId记录主键 + * @return 结果 + */ + @Override + public int deleteAllMtrClientByIds(Long[] ids) + { + return allMtrClientMapper.deleteAllMtrClientByIds(ids); + } + + /** + * 删除mtr探测丢包clinetId记录信息 + * + * @param id mtr探测丢包clinetId记录主键 + * @return 结果 + */ + @Override + public int deleteAllMtrClientById(Long id) + { + return allMtrClientMapper.deleteAllMtrClientById(id); + } + + @Override + public int batchInsertAllMtrClient(List allMtrClientList) { + int rows = allMtrClientMapper.batchInsertAllMtrClient(allMtrClientList); + return rows; + } +} diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java index 32657c8..04d7278 100644 --- a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrClientRegistrationServiceImpl.java @@ -3,11 +3,13 @@ package com.ruoyi.mtragent.service.impl; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.core.enums.MsgEnum; import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.mtragent.domain.AllMtrClient; import com.ruoyi.mtragent.domain.DeviceMessage; import com.ruoyi.mtragent.domain.RmMtrClientRegistration; import com.ruoyi.mtragent.domain.vo.AgentUpdateMsgVo; import com.ruoyi.mtragent.domain.vo.PolicyTypeVo; import com.ruoyi.mtragent.domain.vo.PolicyVo; +import com.ruoyi.mtragent.mapper.AllMtrClientMapper; import com.ruoyi.mtragent.mapper.RmMtrClientRegistrationMapper; import com.ruoyi.mtragent.model.ProducerMode; import com.ruoyi.mtragent.producer.MessageProducer; @@ -35,6 +37,8 @@ public class RmMtrClientRegistrationServiceImpl implements IRmMtrClientRegistrat @Autowired private RmMtrClientRegistrationMapper rmMtrClientRegistrationMapper; @Autowired + private AllMtrClientMapper allMtrClientMapper; + @Autowired private ProducerMode producerMode; /** @@ -210,4 +214,18 @@ public class RmMtrClientRegistrationServiceImpl implements IRmMtrClientRegistrat return 1; } + @Override + public List getAllLogicalNode(RmMtrClientRegistration rmMtrClientRegistration) { + List list = rmMtrClientRegistrationMapper.getAllLogicalNode(rmMtrClientRegistration); + return list; + } + + @Override + public List getClientIdByMtrClientId(RmMtrClientRegistration rmMtrClientRegistration) { + AllMtrClient allMtrClient = new AllMtrClient(); + allMtrClient.setMtrClientId(rmMtrClientRegistration.getMtrClientId()); + List allMtrClientList = allMtrClientMapper.selectAllMtrClientList(allMtrClient); + return allMtrClientList; + } + } diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrProbeResultServiceImpl.java b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrProbeResultServiceImpl.java index 2c029a1..f29be30 100644 --- a/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrProbeResultServiceImpl.java +++ b/ruoyi-modules/ruoyi-mtragent/src/main/java/com/ruoyi/mtragent/service/impl/RmMtrProbeResultServiceImpl.java @@ -164,7 +164,7 @@ public class RmMtrProbeResultServiceImpl implements IRmMtrProbeResultService */ public List getListByTime(RmMtrProbeResult queryParam){ // 获取涉及的表名 - Set tableNames = TableSubUtil.getTableNamesBetween( + Set tableNames = TableSubUtil.getExistingTableNamesBetween( queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/AllMtrClientMapper.xml b/ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/AllMtrClientMapper.xml new file mode 100644 index 0000000..6650c70 --- /dev/null +++ b/ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/AllMtrClientMapper.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + select id, mtr_client_id, client_id, public_ip, create_time, update_time, create_by, update_by from all_mtr_client + + + + + + + + insert into all_mtr_client + + mtr_client_id, + client_id, + public_ip, + create_time, + update_time, + create_by, + update_by, + + + #{mtrClientId}, + #{clientId}, + #{publicIp}, + #{createTime}, + #{updateTime}, + #{createBy}, + #{updateBy}, + + + + + update all_mtr_client + + mtr_client_id = #{mtrClientId}, + client_id = #{clientId}, + public_ip = #{publicIp}, + create_time = #{createTime}, + update_time = #{updateTime}, + create_by = #{createBy}, + update_by = #{updateBy}, + + where id = #{id} + + + + delete from all_mtr_client where id = #{id} + + + + delete from all_mtr_client where id in + + #{id} + + + + insert into all_mtr_client + (mtr_client_id, client_id, public_ip, create_by, update_by) + values + + (#{item.mtrClientId}, #{item.clientId}, #{item.publicIp}, #{item.createBy}, #{item.updateBy}) + + ON DUPLICATE KEY UPDATE + public_ip = IF(VALUES(public_ip) != public_ip, VALUES(public_ip), public_ip) + + \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml b/ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml index f18b651..3f64be2 100644 --- a/ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml +++ b/ruoyi-modules/ruoyi-mtragent/src/main/resources/mapper/mtragent/RmMtrClientRegistrationMapper.xml @@ -52,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and last_update_time = #{lastUpdateTime} and network_info = #{networkInfo} + order by create_time desc + + + and logical_node != '' + + group by logical_node + + \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java index e76fbce..5c77bf1 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EpsServerRevenueConfigServiceImpl.java @@ -10,8 +10,9 @@ import com.ruoyi.system.service.EpsInitialTrafficDataService; import com.ruoyi.system.service.IEpsServerRevenueConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Transactional; import java.util.*; @@ -237,7 +238,8 @@ public class EpsServerRevenueConfigServiceImpl implements IEpsServerRevenueConfi /** * 批量处理接口名称 */ - private void processInterfaceNames(List trafficDataList) { + @Transactional(rollbackFor = Exception.class, isolation = Isolation.REPEATABLE_READ) + public void processInterfaceNames(List trafficDataList) { // 分类处理:新增列表 vs 更新列表 List namesToInsert = new ArrayList<>(); List namesToUpdate = new ArrayList<>(); @@ -308,30 +310,13 @@ public class EpsServerRevenueConfigServiceImpl implements IEpsServerRevenueConfi try { allInterfaceNameMapper.batchInsert(namesToInsert); log.info("新增接口名称数量:{}", namesToInsert.size()); - } catch (DuplicateKeyException e) { - // 如果批量插入出现重复,转为逐条插入(带异常处理) - log.warn("批量插入出现重复,转为逐条处理"); - namesToInsert.forEach(record -> { - try { - allInterfaceNameMapper.insertAllInterfaceName(record); - } catch (DuplicateKeyException ex) { - // 重复记录转为更新 - AllInterfaceName query = new AllInterfaceName(); - query.setInterfaceName(record.getInterfaceName()); - query.setClientId(record.getClientId()); - query.setServerIp(record.getServerIp()); - - List existing = allInterfaceNameMapper.selectByNames(query); - if (!existing.isEmpty()) { - record.setId(existing.get(0).getId()); - allInterfaceNameMapper.updateAllInterfaceName(record); - } - } - }); + } catch (Exception e) { + log.error("新增接口名称失败:{}", e.getMessage()); } } if (!namesToUpdate.isEmpty()) { + namesToUpdate.sort(Comparator.comparing(AllInterfaceName::getId)); allInterfaceNameMapper.batchUpdate(namesToUpdate); log.info("更新接口名称数量:{}", namesToUpdate.size()); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java index 681f1f2..60acda6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/InitialSwitchInfoDetailsServiceImpl.java @@ -13,7 +13,6 @@ import com.ruoyi.system.util.PaginationUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; @@ -225,7 +224,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ public List getSwitchTrafficMsgSharding(InitialSwitchInfoDetails queryParam) { // 获取涉及的表名 - Set tableNames = TableSubUtil.getTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), "initial_switch_info"); + Set tableNames = TableSubUtil.getExistingTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), "initial_switch_info"); // 并行查询各表 return tableNames.parallelStream() @@ -353,6 +352,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe /** * 批量处理接口名称 */ + @Transactional(rollbackFor = Exception.class, isolation = Isolation.REPEATABLE_READ) private void processSwitchInterfaceNames(List initialSwitchInfoDetails) { // 分类处理:新增列表 vs 更新列表 List namesToInsert = new ArrayList<>(); @@ -421,33 +421,16 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe if (!namesToInsert.isEmpty()) { try { allInterfaceNameMapper.batchInsert(namesToInsert); - log.info("新增接口名称数量:{}", namesToInsert.size()); - } catch (DuplicateKeyException e) { - // 如果批量插入出现重复,转为逐条插入(带异常处理) - log.warn("批量插入出现重复,转为逐条处理"); - namesToInsert.forEach(record -> { - try { - allInterfaceNameMapper.insertAllInterfaceName(record); - } catch (DuplicateKeyException ex) { - // 重复记录转为更新 - AllInterfaceName query = new AllInterfaceName(); - query.setInterfaceName(record.getInterfaceName()); - query.setClientId(record.getClientId()); - query.setServerIp(record.getServerIp()); - - List existing = allInterfaceNameMapper.selectByNames(query); - if (!existing.isEmpty()) { - record.setId(existing.get(0).getId()); - allInterfaceNameMapper.updateAllInterfaceName(record); - } - } - }); + log.info("交换机新增接口名称数量:{}", namesToInsert.size()); + } catch (Exception e) { + log.error("交换机接口名称批量插入失败:{}", e.getMessage()); } } if (!namesToUpdate.isEmpty()) { + namesToUpdate.sort(Comparator.comparing(AllInterfaceName::getId)); allInterfaceNameMapper.batchUpdate(namesToUpdate); - log.info("更新接口名称数量:{}", namesToUpdate.size()); + log.info("交换机更新接口名称数量:{}", namesToUpdate.size()); } } @@ -1141,7 +1124,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ public List getSwitchTrafficDetailsMsgSharding(InitialSwitchInfoDetails queryParam) { // 获取涉及的表名 - Set tableNames = TableSubUtil.getTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); + Set tableNames = TableSubUtil.getExistingTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); // 并行查询各表 return tableNames.parallelStream() @@ -1164,7 +1147,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe @Override public List sumSwitchTrafficDetailsSharding(InitialSwitchInfoDetails queryParam) { // 获取涉及的表名 - Set tableNames = TableSubUtil.getTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); + Set tableNames = TableSubUtil.getExistingTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); // 并行查询各表 return tableNames.parallelStream() @@ -1188,7 +1171,7 @@ public class InitialSwitchInfoDetailsServiceImpl implements IInitialSwitchInfoDe */ public List getSwitchTrafficDetailsListSharding(InitialSwitchInfoDetails queryParam) { // 获取涉及的表名 - Set tableNames = TableSubUtil.getTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); + Set tableNames = TableSubUtil.getExistingTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); // 并行查询各表 return tableNames.parallelStream() diff --git a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java index b0885b0..8fc256c 100644 --- a/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java +++ b/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/service/impl/InitialSwitchInfoServiceImpl.java @@ -178,7 +178,7 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService */ public List getSwitchMsgSharding(InitialSwitchInfo queryParam) { // 获取涉及的表名 - Set tableNames = TableSubUtil.getTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); + Set tableNames = TableSubUtil.getExistingTableNamesBetween(queryParam.getStartTime(), queryParam.getEndTime(), TABLE_PREFIX); // 并行查询各表 return tableNames.parallelStream() @@ -186,6 +186,7 @@ public class InitialSwitchInfoServiceImpl implements IInitialSwitchInfoService InitialSwitchInfo condition = new InitialSwitchInfo(); condition.setTableName(tableName); condition.setClientId(queryParam.getClientId()); + condition.setName(queryParam.getName()); condition.setStartTime(queryParam.getStartTime()); condition.setEndTime(queryParam.getEndTime()); return initialSwitchInfoMapper.selectInitialSwitchInfoListSharding(condition).stream();