测试环境配置、新增mtr探测丢包率结果存储方法

This commit is contained in:
gaoyutao
2025-11-20 18:10:17 +08:00
parent 947d60f788
commit 3391b949c8
25 changed files with 934 additions and 49 deletions
@@ -50,7 +50,7 @@ public class RmMtrClientRegistrationController extends BaseController
@RequiresPermissions("mtragent:mtrClientRegistration:export")
@Log(title = "MTR客户端注册", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, RmMtrClientRegistration rmMtrClientRegistration)
public void export(HttpServletResponse response, @RequestBody RmMtrClientRegistration rmMtrClientRegistration)
{
List<RmMtrClientRegistration> list = rmMtrClientRegistrationService.selectRmMtrClientRegistrationList(rmMtrClientRegistration);
ExcelUtil<RmMtrClientRegistration> util = new ExcelUtil<RmMtrClientRegistration>(RmMtrClientRegistration.class);
@@ -101,5 +101,4 @@ public class RmMtrClientRegistrationController extends BaseController
int rows = rmMtrClientRegistrationService.addAgentUpdatePolicy(rmMtrClientRegistration);
return toAjax(rows);
}
}
@@ -0,0 +1,110 @@
package com.ruoyi.mtragent.controller;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.domain.AjaxResult;
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.RmMtrProbeResult;
import com.ruoyi.mtragent.service.IRmMtrProbeResultService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* 网络mtr探测结果Controller
*
* @author gyt
* @date 2025-11-20
*/
@RestController
@RequestMapping("/mtrProbeResult")
public class RmMtrProbeResultController extends BaseController
{
@Autowired
private IRmMtrProbeResultService rmMtrProbeResultService;
/**
* 查询网络mtr探测结果列表
*/
@RequiresPermissions("mtragent:mtrProbeResult:list")
@GetMapping("/list")
public TableDataInfo list(RmMtrProbeResult rmMtrProbeResult)
{
startPage();
List<RmMtrProbeResult> list = rmMtrProbeResultService.selectRmMtrProbeResultList(rmMtrProbeResult);
return getDataTable(list);
}
/**
* 导出网络mtr探测结果列表
*/
@RequiresPermissions("mtragent:mtrProbeResult:export")
@Log(title = "网络mtr探测结果", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, RmMtrProbeResult rmMtrProbeResult)
{
List<RmMtrProbeResult> list = rmMtrProbeResultService.selectRmMtrProbeResultList(rmMtrProbeResult);
ExcelUtil<RmMtrProbeResult> util = new ExcelUtil<RmMtrProbeResult>(RmMtrProbeResult.class);
util.exportExcel(response, list, "网络mtr探测结果数据");
}
/**
* 获取网络mtr探测结果详细信息
*/
@RequiresPermissions("mtragent:mtrProbeResult:query")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(rmMtrProbeResultService.selectRmMtrProbeResultById(id));
}
/**
* 新增网络mtr探测结果
*/
@RequiresPermissions("mtragent:mtrProbeResult:add")
@Log(title = "网络mtr探测结果", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody RmMtrProbeResult rmMtrProbeResult)
{
return toAjax(rmMtrProbeResultService.insertRmMtrProbeResult(rmMtrProbeResult));
}
/**
* 修改网络mtr探测结果
*/
@RequiresPermissions("mtragent:mtrProbeResult:edit")
@Log(title = "网络mtr探测结果", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody RmMtrProbeResult rmMtrProbeResult)
{
return toAjax(rmMtrProbeResultService.updateRmMtrProbeResult(rmMtrProbeResult));
}
/**
* 删除网络mtr探测结果
*/
@RequiresPermissions("mtragent:mtrProbeResult:remove")
@Log(title = "网络mtr探测结果", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(rmMtrProbeResultService.deleteRmMtrProbeResultByIds(ids));
}
/**
* 查看丢包率趋势
*/
@RequiresPermissions("mtragent:mtrProbeResult:list")
@PostMapping("/getLossRateByMtrClientId")
public AjaxResult getLossRateByMtrClientId(@RequestBody RmMtrProbeResult rmMtrProbeResult)
{
Map<String, Object> list = rmMtrProbeResultService.getLossRateByMtrClientId(rmMtrProbeResult);
return success(list);
}
}
@@ -0,0 +1,50 @@
package com.ruoyi.mtragent.domain;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 网络mtr探测结果对象 rm_mtr_probe_result
*
* @author gyt
* @date 2025-11-20
*/
@Data
public class RmMtrProbeResult 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;
/** 丢包率(%) */
@Excel(name = "丢包率(%)")
private BigDecimal packetLossRate;
/** 表名 */
private String tableName;
/** 批量新增集合 */
private List<RmMtrProbeResult> list;
/** 开始时间 */
private String startTime;
/** 结束时间 */
private String endTime;
}
@@ -0,0 +1,15 @@
package com.ruoyi.mtragent.domain.vo;
import lombok.Data;
@Data
public class MtrResultVo {
private String targetIp; // 目标IP
private Long policyId; // 策略ID
private double firstLossPercent; // 第一次探测丢包率
private double finalLossPercent; // 最终丢包率
private long timestamp; // 探测时间戳
private boolean hasRetry; // 是否重试
private String errorMsg; // 错误信息
}
@@ -5,10 +5,7 @@ import com.ruoyi.common.core.enums.MsgEnum;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.mtragent.domain.*;
import com.ruoyi.mtragent.domain.vo.MessageVo;
import com.ruoyi.mtragent.domain.vo.PolicyTypeVo;
import com.ruoyi.mtragent.domain.vo.RegisterMsgVo;
import com.ruoyi.mtragent.domain.vo.RspVo;
import com.ruoyi.mtragent.domain.vo.*;
import com.ruoyi.mtragent.enums.AlarmTypeEnum;
import com.ruoyi.mtragent.enums.PushMethodEnum;
import com.ruoyi.mtragent.model.ProducerMode;
@@ -28,6 +25,7 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Consumer;
@@ -66,6 +64,10 @@ public class MessageHandler {
private IRmMtrPolicyConfigService rmMtrPolicyConfigService;
@Autowired
private ProducerMode producerMode;
@Autowired
private IRmNetworkInterfaceService rmNetworkInterfaceService;
@Autowired
private IRmMtrProbeResultService rmMtrProbeResultService;
/**
@@ -80,7 +82,48 @@ public class MessageHandler {
registerHandler(MsgEnum.获取最新策略.getValue(), this::handleNewPolicyMessage);
registerHandler(MsgEnum.心跳上报.getValue(), this::handleHeartbeatMessage);
registerHandler(MsgEnum.多公网IP探测.getValue(), this::handleNetWorkDelectMessage);
registerHandler(MsgEnum.MTR探测上报.getValue(), this::handleMtrDelectMessage);
}
private void handleMtrDelectMessage(DeviceMessage message) {
List<MtrResultVo> mtrResultVoList = JsonDataParser.parseJsonData(message.getData(), MtrResultVo.class);
if(mtrResultVoList != null && !mtrResultVoList.isEmpty()){
String mtrClientId = message.getClientId();
List<RmMtrProbeResult> rmMtrProbeResultList = new ArrayList<>();
for (MtrResultVo mtrResultVo : mtrResultVoList) {
if(mtrResultVo.getFinalLossPercent() != -1.0){
// 时间戳转换
long timestamp = mtrResultVo.getTimestamp();
long millis = timestamp * 1000;
Date createTime = new Date(millis / 1000 * 1000); // 去除毫秒
RmMtrProbeResult rmMtrProbeResult = new RmMtrProbeResult();
rmMtrProbeResult.setCreateTime(createTime);
// 拿到ip
String ip = mtrResultVo.getTargetIp();
// 查询clientId
RmNetworkInterface networkInfo = new RmNetworkInterface();
networkInfo.setPublicIp(ip);
networkInfo.setNewFlag(1);
List<RmNetworkInterface> rmNetworkInterfaceList = rmNetworkInterfaceService.selectRmNetworkInterfaceList(networkInfo);
if(rmNetworkInterfaceList != null && !rmNetworkInterfaceList.isEmpty()){
RmNetworkInterface rmNetworkInterface = rmNetworkInterfaceList.get(0);
rmMtrProbeResult.setClientId(rmNetworkInterface.getClientId());
}
rmMtrProbeResult.setMtrClientId(mtrClientId);
rmMtrProbeResult.setPublicIp(ip);
rmMtrProbeResult.setPacketLossRate(new BigDecimal(mtrResultVo.getFinalLossPercent()));
rmMtrProbeResultList.add(rmMtrProbeResult);
}else{
log.debug("探测失败,失败原因:{}", mtrResultVo.getErrorMsg());
}
}
RmMtrProbeResult insertData = new RmMtrProbeResult();
insertData.setList(rmMtrProbeResultList);
// 结果批量入库
rmMtrProbeResultService.batchInsertRmMtrProbeResult(insertData);
}
}
private void handleRegisterMessage(DeviceMessage message) {
MessageProducer messageProducer = new MessageProducer();
List<RegisterMsgVo> interfaces = JsonDataParser.parseJsonData(message.getData(), RegisterMsgVo.class);
@@ -0,0 +1,71 @@
package com.ruoyi.mtragent.mapper;
import com.ruoyi.mtragent.domain.RmMtrProbeResult;
import java.util.List;
/**
* 网络mtr探测结果Mapper接口
*
* @author gyt
* @date 2025-11-20
*/
public interface RmMtrProbeResultMapper
{
/**
* 查询网络mtr探测结果
*
* @param id 网络mtr探测结果主键
* @return 网络mtr探测结果
*/
public RmMtrProbeResult selectRmMtrProbeResultById(Long id);
/**
* 查询网络mtr探测结果列表
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 网络mtr探测结果集合
*/
public List<RmMtrProbeResult> selectRmMtrProbeResultList(RmMtrProbeResult rmMtrProbeResult);
/**
* 新增网络mtr探测结果
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 结果
*/
public int insertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
/**
* 修改网络mtr探测结果
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 结果
*/
public int updateRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
/**
* 删除网络mtr探测结果
*
* @param id 网络mtr探测结果主键
* @return 结果
*/
public int deleteRmMtrProbeResultById(Long id);
/**
* 批量删除网络mtr探测结果
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteRmMtrProbeResultByIds(Long[] ids);
void batchInsertRmMtrProbeResult(RmMtrProbeResult batchData);
/**
* 分表查询
* @param condition
* @return
*/
List<RmMtrProbeResult> selectByCondition(RmMtrProbeResult condition);
}
@@ -66,4 +66,5 @@ public interface IRmMtrClientRegistrationService
* @return
*/
int addAgentUpdatePolicy(RmMtrClientRegistration rmMtrClientRegistration);
}
@@ -0,0 +1,72 @@
package com.ruoyi.mtragent.service;
import com.ruoyi.mtragent.domain.RmMtrProbeResult;
import java.util.List;
import java.util.Map;
/**
* 网络mtr探测结果Service接口
*
* @author gyt
* @date 2025-11-20
*/
public interface IRmMtrProbeResultService
{
/**
* 查询网络mtr探测结果
*
* @param id 网络mtr探测结果主键
* @return 网络mtr探测结果
*/
public RmMtrProbeResult selectRmMtrProbeResultById(Long id);
/**
* 查询网络mtr探测结果列表
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 网络mtr探测结果集合
*/
public List<RmMtrProbeResult> selectRmMtrProbeResultList(RmMtrProbeResult rmMtrProbeResult);
/**
* 新增网络mtr探测结果
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 结果
*/
public int insertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
/**
* 修改网络mtr探测结果
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 结果
*/
public int updateRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult);
/**
* 批量删除网络mtr探测结果
*
* @param ids 需要删除的网络mtr探测结果主键集合
* @return 结果
*/
public int deleteRmMtrProbeResultByIds(Long[] ids);
/**
* 删除网络mtr探测结果信息
*
* @param id 网络mtr探测结果主键
* @return 结果
*/
public int deleteRmMtrProbeResultById(Long id);
public void batchInsertRmMtrProbeResult(RmMtrProbeResult result);
/**
* 查看丢包率趋势
* @param rmMtrProbeResult
* @return
*/
Map<String, Object> getLossRateByMtrClientId(RmMtrProbeResult rmMtrProbeResult);
}
@@ -209,4 +209,5 @@ public class RmMtrClientRegistrationServiceImpl implements IRmMtrClientRegistrat
}
return 1;
}
}
@@ -243,9 +243,8 @@ public class RmMtrPolicyConfigServiceImpl implements IRmMtrPolicyConfigService
private List<String> getServerIdsFromPolicy(RmMtrPolicyConfig policy) {
List<String> serverIds = new ArrayList<>();
if (policy.getServerGroup() != null) {
// 先还原换行符分割
String serverGroup = policy.getServerGroup().replace(";", "\n");
String[] ids = serverGroup.split("\\r?\\n");
String serverGroup = policy.getServerGroup();
String[] ids = serverGroup.split("\n");
for (String id : ids) {
if (id != null && !id.trim().isEmpty()) {
serverIds.add(id.trim());
@@ -0,0 +1,219 @@
package com.ruoyi.mtragent.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.EchartsDataUtils;
import com.ruoyi.common.core.utils.TableSubUtil;
import com.ruoyi.mtragent.domain.RmMtrProbeResult;
import com.ruoyi.mtragent.mapper.RmMtrProbeResultMapper;
import com.ruoyi.mtragent.service.IRmMtrProbeResultService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 网络mtr探测结果Service业务层处理
*
* @author gyt
* @date 2025-11-20
*/
@Service
@Slf4j
public class RmMtrProbeResultServiceImpl implements IRmMtrProbeResultService
{
@Autowired
private RmMtrProbeResultMapper rmMtrProbeResultMapper;
private final static String TABLE_PREFIX = "rm_mtr_probe_result";
/**
* 查询网络mtr探测结果
*
* @param id 网络mtr探测结果主键
* @return 网络mtr探测结果
*/
@Override
public RmMtrProbeResult selectRmMtrProbeResultById(Long id)
{
return rmMtrProbeResultMapper.selectRmMtrProbeResultById(id);
}
/**
* 查询网络mtr探测结果列表
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 网络mtr探测结果
*/
@Override
public List<RmMtrProbeResult> selectRmMtrProbeResultList(RmMtrProbeResult rmMtrProbeResult)
{
return rmMtrProbeResultMapper.selectRmMtrProbeResultList(rmMtrProbeResult);
}
/**
* 新增网络mtr探测结果
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 结果
*/
@Override
public int insertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult)
{
Date createTime = rmMtrProbeResult.getCreateTime();
String tableName = TableSubUtil.getTableName(createTime, TABLE_PREFIX);
return rmMtrProbeResultMapper.insertRmMtrProbeResult(rmMtrProbeResult);
}
/**
* 修改网络mtr探测结果
*
* @param rmMtrProbeResult 网络mtr探测结果
* @return 结果
*/
@Override
public int updateRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult)
{
rmMtrProbeResult.setUpdateTime(DateUtils.getNowDate());
return rmMtrProbeResultMapper.updateRmMtrProbeResult(rmMtrProbeResult);
}
/**
* 批量删除网络mtr探测结果
*
* @param ids 需要删除的网络mtr探测结果主键
* @return 结果
*/
@Override
public int deleteRmMtrProbeResultByIds(Long[] ids)
{
return rmMtrProbeResultMapper.deleteRmMtrProbeResultByIds(ids);
}
/**
* 删除网络mtr探测结果信息
*
* @param id 网络mtr探测结果主键
* @return 结果
*/
@Override
public int deleteRmMtrProbeResultById(Long id)
{
return rmMtrProbeResultMapper.deleteRmMtrProbeResultById(id);
}
@Override
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
public void batchInsertRmMtrProbeResult(RmMtrProbeResult rmMtrProbeResult) {
if (rmMtrProbeResult == null) {
return;
}
List<RmMtrProbeResult> dataList = rmMtrProbeResult.getList();
if (dataList == null || dataList.isEmpty()) {
return;
}
// 按表名分组批量插入
Map<String, List<RmMtrProbeResult>> groupedData = dataList.stream()
.map(data -> {
try {
RmMtrProbeResult processed = new RmMtrProbeResult();
BeanUtils.copyProperties(data, processed);
if (data.getCreateTime() == null) {
processed.setCreateTime(new Date());
}
if(data.getUpdateTime() == null){
processed.setUpdateTime(new Date());
}
processed.setTableName(TableSubUtil.getTableName(data.getCreateTime(), TABLE_PREFIX));
return processed;
} catch (Exception e) {
log.error("RmMtrProbeResult数据处理失败", e);
return null;
}
})
.filter(Objects::nonNull) // 过滤掉处理失败的数据
.collect(Collectors.groupingBy(
RmMtrProbeResult::getTableName,
LinkedHashMap::new, // 保持插入顺序
Collectors.toList()));
groupedData.forEach((tableName, list) -> {
try {
RmMtrProbeResult batchData = new RmMtrProbeResult();
BeanUtils.copyProperties(rmMtrProbeResult, batchData);
batchData.setTableName(tableName);
batchData.setList(list);
rmMtrProbeResultMapper.batchInsertRmMtrProbeResult(batchData);
} catch (Exception e) {
log.error("表{}插入失败", tableName, e);
throw new RuntimeException("批量插入失败", e);
}
});
}
/**
* 分表查询探测结果
* @param queryParam
* @return
*/
public List<RmMtrProbeResult> getListByTime(RmMtrProbeResult queryParam){
// 获取涉及的表名
Set<String> tableNames = TableSubUtil.getTableNamesBetween(
queryParam.getStartTime(),
queryParam.getEndTime(),
TABLE_PREFIX
);
// 并行查询各表
return tableNames.parallelStream()
.flatMap(tableName -> {
RmMtrProbeResult condition = new RmMtrProbeResult();
condition.setTableName(tableName);
condition.setMtrClientId(queryParam.getMtrClientId());
condition.setClientId(queryParam.getClientId());
condition.setStartTime(queryParam.getStartTime());
condition.setEndTime(queryParam.getEndTime());
return rmMtrProbeResultMapper.selectByCondition(condition).stream();
})
.collect(Collectors.toList());
}
/**
* 查看丢包率趋势
* @param rmMtrProbeResult
* @return
*/
@Override
public Map<String, Object> getLossRateByMtrClientId(RmMtrProbeResult rmMtrProbeResult) {
if(rmMtrProbeResult.getStartTime() == null && rmMtrProbeResult.getEndTime() == null){
String[] timeRange = DateUtils.getTodayTimeRange();
rmMtrProbeResult.setStartTime(timeRange[0]);
rmMtrProbeResult.setEndTime(timeRange[1]);
}
List<RmMtrProbeResult> list = getListByTime(rmMtrProbeResult);
if(list == null){
list = new ArrayList<>();
}
try {
Map<String, Function<RmMtrProbeResult, ?>> extractors = new LinkedHashMap<>();
extractors.put("packetLossRate", info ->
info != null && info.getPacketLossRate() != null ?
info.getPacketLossRate() :
0);
Map<String, Object> resultMap = EchartsDataUtils.buildEchartsDataAutoPadding(
list, RmMtrProbeResult::getCreateTime, extractors, rmMtrProbeResult.getStartTime(), rmMtrProbeResult.getEndTime()
);
return resultMap;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
}
@@ -14,16 +14,18 @@ spring:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
server-addr: 172.16.15.52:8848
# server-addr: 172.16.15.103:8848
# username: ${spring.cloud.nacos.config.username}
# password: ${spring.cloud.nacos.config.password}
namespace: ${spring.cloud.nacos.config.namespace}
username: ${spring.cloud.nacos.config.username}
password: ${spring.cloud.nacos.config.password}
config:
# 配置中心地址
server-addr: 127.0.0.1:8848
server-addr: 172.16.15.52:8848
# server-addr: 172.16.15.103:8848
# username: nacos
# password: nacos
namespace: saas-local
username: nacos
password: nacos
# 配置文件格式
file-extension: yml
# 共享配置
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.mtragent.mapper.RmMtrProbeResultMapper">
<resultMap type="RmMtrProbeResult" id="RmMtrProbeResultResult">
<result property="id" column="id" />
<result property="mtrClientId" column="mtr_client_id" />
<result property="clientId" column="client_id" />
<result property="publicIp" column="public_ip" />
<result property="packetLossRate" column="packet_loss_rate" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="createBy" column="create_by" />
<result property="updateBy" column="update_by" />
</resultMap>
<sql id="selectRmMtrProbeResultVo">
select id, mtr_client_id, client_id, public_ip, packet_loss_rate, create_time, update_time, create_by, update_by from rm_mtr_probe_result
</sql>
<select id="selectRmMtrProbeResultList" parameterType="RmMtrProbeResult" resultMap="RmMtrProbeResultResult">
<include refid="selectRmMtrProbeResultVo"/>
<where>
<if test="mtrClientId != null and mtrClientId != ''"> and mtr_client_id = #{mtrClientId}</if>
<if test="clientId != null and clientId != ''"> and client_id = #{clientId}</if>
<if test="publicIp != null and publicIp != ''"> and public_ip = #{publicIp}</if>
<if test="packetLossRate != null "> and packet_loss_rate = #{packetLossRate}</if>
</where>
</select>
<select id="selectRmMtrProbeResultById" parameterType="Long" resultMap="RmMtrProbeResultResult">
<include refid="selectRmMtrProbeResultVo"/>
where id = #{id}
</select>
<insert id="insertRmMtrProbeResult" parameterType="RmMtrProbeResult" useGeneratedKeys="true" keyProperty="id">
insert into rm_mtr_probe_result
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="mtrClientId != null and mtrClientId != ''">mtr_client_id,</if>
<if test="clientId != null and clientId != ''">client_id,</if>
<if test="publicIp != null and publicIp != ''">public_ip,</if>
<if test="packetLossRate != null">packet_loss_rate,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
<if test="createBy != null">create_by,</if>
<if test="updateBy != null">update_by,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="mtrClientId != null and mtrClientId != ''">#{mtrClientId},</if>
<if test="clientId != null and clientId != ''">#{clientId},</if>
<if test="publicIp != null and publicIp != ''">#{publicIp},</if>
<if test="packetLossRate != null">#{packetLossRate},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if>
</trim>
</insert>
<update id="updateRmMtrProbeResult" parameterType="RmMtrProbeResult">
update rm_mtr_probe_result
<trim prefix="SET" suffixOverrides=",">
<if test="mtrClientId != null and mtrClientId != ''">mtr_client_id = #{mtrClientId},</if>
<if test="clientId != null and clientId != ''">client_id = #{clientId},</if>
<if test="publicIp != null and publicIp != ''">public_ip = #{publicIp},</if>
<if test="packetLossRate != null">packet_loss_rate = #{packetLossRate},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteRmMtrProbeResultById" parameterType="Long">
delete from rm_mtr_probe_result where id = #{id}
</delete>
<delete id="deleteRmMtrProbeResultByIds" parameterType="String">
delete from rm_mtr_probe_result where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<insert id="batchInsertRmMtrProbeResult" parameterType="RmMtrProbeResult">
INSERT INTO ${tableName}
(
mtr_client_id,
client_id,
public_ip,
packet_loss_rate,
create_time,
update_time
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.mtrClientId},
#{item.clientId},
#{item.publicIp},
#{item.packetLossRate},
#{item.createTime},
#{item.updateTime}
)
</foreach>
</insert>
<!-- 在 RmMtrProbeResultMapper.xml 中添加 -->
<select id="selectByCondition" parameterType="RmMtrProbeResult" resultMap="RmMtrProbeResultResult">
SELECT
id, mtr_client_id, client_id, public_ip, packet_loss_rate,
create_time, update_time, create_by, update_by
FROM ${tableName}
<where>
<if test="mtrClientId != null and mtrClientId != ''">
AND mtr_client_id = #{mtrClientId}
</if>
<if test="clientId != null and clientId != ''">
AND client_id = #{clientId}
</if>
<!-- 时间范围查询 -->
<if test="startTime != null">
AND create_time &gt;= #{startTime}
</if>
<if test="endTime != null">
AND create_time &lt;= #{endTime}
</if>
</where>
ORDER BY create_time DESC
</select>
</mapper>