From 2fb9777342b186f6af0efef55242e5fa5aa6955e Mon Sep 17 00:00:00 2001 From: van Date: Wed, 1 Apr 2026 17:12:47 +0800 Subject: [PATCH] 1 --- .../jarvis/WeComInboundTraceController.java | 11 ++++++ .../domain/dto/WeComTestDataCleanRequest.java | 35 +++++++++++++++++++ .../mapper/WeComInboundTraceMapper.java | 2 ++ .../jarvis/service/ILogisticsService.java | 3 ++ .../service/IWeComChatSessionService.java | 3 ++ .../service/IWeComInboundTraceService.java | 7 ++++ .../service/impl/LogisticsServiceImpl.java | 6 ++++ .../impl/WeComChatSessionServiceImpl.java | 16 +++++++++ .../impl/WeComInboundTraceServiceImpl.java | 29 +++++++++++++++ .../mapper/jarvis/WeComInboundTraceMapper.xml | 4 +++ 10 files changed, 116 insertions(+) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/WeComTestDataCleanRequest.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/WeComInboundTraceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/WeComInboundTraceController.java index 864d470..71b6cae 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/WeComInboundTraceController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/WeComInboundTraceController.java @@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.jarvis.domain.WeComInboundTrace; +import com.ruoyi.jarvis.domain.dto.WeComTestDataCleanRequest; import com.ruoyi.jarvis.service.IWeComInboundTraceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -43,4 +44,14 @@ public class WeComInboundTraceController extends BaseController { public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(weComInboundTraceService.deleteWeComInboundTraceByIds(ids)); } + + /** + * 清理联调/测试数据:追踪表 + 可选 Redis 企微会话与 adhoc 队列 + */ + @PreAuthorize("@ss.hasPermi('jarvis:wecom:inboundTrace:remove')") + @Log(title = "企微消息测试数据清理", businessType = BusinessType.CLEAN) + @PostMapping("/cleanTestData") + public AjaxResult cleanTestData(@RequestBody(required = false) WeComTestDataCleanRequest body) { + return success(weComInboundTraceService.cleanTestData(body)); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/WeComTestDataCleanRequest.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/WeComTestDataCleanRequest.java new file mode 100644 index 0000000..98a7b52 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/domain/dto/WeComTestDataCleanRequest.java @@ -0,0 +1,35 @@ +package com.ruoyi.jarvis.domain.dto; + +/** + * 企微联调/测试数据清理选项(默认全选) + */ +public class WeComTestDataCleanRequest { + + private Boolean clearTraceTable = true; + private Boolean clearWecomSessions = true; + private Boolean clearAdhocQueue = true; + + public Boolean getClearTraceTable() { + return clearTraceTable; + } + + public void setClearTraceTable(Boolean clearTraceTable) { + this.clearTraceTable = clearTraceTable; + } + + public Boolean getClearWecomSessions() { + return clearWecomSessions; + } + + public void setClearWecomSessions(Boolean clearWecomSessions) { + this.clearWecomSessions = clearWecomSessions; + } + + public Boolean getClearAdhocQueue() { + return clearAdhocQueue; + } + + public void setClearAdhocQueue(Boolean clearAdhocQueue) { + this.clearAdhocQueue = clearAdhocQueue; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/WeComInboundTraceMapper.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/WeComInboundTraceMapper.java index de315d3..81da036 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/WeComInboundTraceMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/WeComInboundTraceMapper.java @@ -13,4 +13,6 @@ public interface WeComInboundTraceMapper { List selectWeComInboundTraceList(WeComInboundTrace query); int deleteWeComInboundTraceByIds(Long[] ids); + + int deleteAllWeComInboundTrace(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ILogisticsService.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ILogisticsService.java index 681712a..d9d6c5a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ILogisticsService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ILogisticsService.java @@ -27,6 +27,9 @@ public interface ILogisticsService { * 定时任务内:依次弹出队列并调用 {@link #fetchLogisticsByShareLinkAndPush}。 */ void drainPendingShareLinkQueue(); + + /** 测试清理:删除分享链待扫描队列键 */ + void clearAdhocPendingQueue(); /** * 检查订单是否已处理过(Redis中是否有运单号) diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComChatSessionService.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComChatSessionService.java index 2efe310..400d2f2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComChatSessionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComChatSessionService.java @@ -17,4 +17,7 @@ public interface IWeComChatSessionService { /** @param wecomUserId 成员 UserID,同 FromUserName */ void delete(String wecomUserId); + + /** 测试清理:删除所有 interaction_state:wecom:* */ + int deleteAllWecomSessionsForTest(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComInboundTraceService.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComInboundTraceService.java index 3351b85..4dfee19 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComInboundTraceService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IWeComInboundTraceService.java @@ -2,8 +2,10 @@ package com.ruoyi.jarvis.service; import com.ruoyi.jarvis.domain.WeComInboundTrace; import com.ruoyi.jarvis.domain.dto.WeComInboundRequest; +import com.ruoyi.jarvis.domain.dto.WeComTestDataCleanRequest; import java.util.List; +import java.util.Map; public interface IWeComInboundTraceService { @@ -14,4 +16,9 @@ public interface IWeComInboundTraceService { List selectWeComInboundTraceList(WeComInboundTrace query); int deleteWeComInboundTraceByIds(Long[] ids); + + /** + * 清理联调/测试数据,选项见 {@link WeComTestDataCleanRequest} + */ + Map cleanTestData(WeComTestDataCleanRequest options); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/LogisticsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/LogisticsServiceImpl.java index 7ab7de0..17da29b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/LogisticsServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/LogisticsServiceImpl.java @@ -465,6 +465,12 @@ public class LogisticsServiceImpl implements ILogisticsService { } } + @Override + public void clearAdhocPendingQueue() { + Boolean deleted = stringRedisTemplate.delete(REDIS_ADHOC_PENDING_QUEUE); + logger.info("adhoc 待扫描队列已清理 key={} existed={}", REDIS_ADHOC_PENDING_QUEUE, Boolean.TRUE.equals(deleted)); + } + @Override public boolean fetchLogisticsByShareLinkAndPush(String trackingUrl, String remark, String touser) { if (!StringUtils.hasText(trackingUrl)) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComChatSessionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComChatSessionServiceImpl.java index 87812ff..e8c5941 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComChatSessionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComChatSessionServiceImpl.java @@ -87,6 +87,22 @@ public class WeComChatSessionServiceImpl implements IWeComChatSessionService { stringRedisTemplate.delete(WeComConvention.sessionRedisKey(wecomUserId.trim())); } + @Override + public int deleteAllWecomSessionsForTest() { + Set keys = stringRedisTemplate.keys(WeComConvention.SESSION_REDIS_KEY_PREFIX + "*"); + if (keys == null || keys.isEmpty()) { + return 0; + } + int n = 0; + for (String key : keys) { + if (key != null && stringRedisTemplate.delete(key)) { + n++; + } + } + log.info("企微会话测试清理完成 prefix={} deletedKeys={}", WeComConvention.SESSION_REDIS_KEY_PREFIX, n); + return n; + } + /** * 参考 JDUtil#cleanUpTimeoutStates:按 lastInteractionTime 清理超长空闲会话(Redis TTL 与业务空闲均可生效) */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComInboundTraceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComInboundTraceServiceImpl.java index 2c0253b..1434a19 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComInboundTraceServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/WeComInboundTraceServiceImpl.java @@ -3,8 +3,10 @@ package com.ruoyi.jarvis.service.impl; import com.ruoyi.jarvis.domain.WeComInboundTrace; import com.ruoyi.jarvis.domain.dto.WeComChatSession; import com.ruoyi.jarvis.domain.dto.WeComInboundRequest; +import com.ruoyi.jarvis.domain.dto.WeComTestDataCleanRequest; import com.ruoyi.jarvis.mapper.WeComInboundTraceMapper; import com.ruoyi.jarvis.service.IWeComChatSessionService; +import com.ruoyi.jarvis.service.ILogisticsService; import com.ruoyi.jarvis.service.IWeComInboundTraceService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,7 +15,9 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.Date; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; @Service public class WeComInboundTraceServiceImpl implements IWeComInboundTraceService { @@ -70,4 +74,29 @@ public class WeComInboundTraceServiceImpl implements IWeComInboundTraceService { public int deleteWeComInboundTraceByIds(Long[] ids) { return weComInboundTraceMapper.deleteWeComInboundTraceByIds(ids); } + + @Override + public Map cleanTestData(WeComTestDataCleanRequest options) { + if (options == null) { + options = new WeComTestDataCleanRequest(); + } + boolean trace = options.getClearTraceTable() == null || options.getClearTraceTable(); + boolean sessions = options.getClearWecomSessions() == null || options.getClearWecomSessions(); + boolean adhoc = options.getClearAdhocQueue() == null || options.getClearAdhocQueue(); + Map r = new LinkedHashMap<>(); + if (trace) { + int n = weComInboundTraceMapper.deleteAllWeComInboundTrace(); + r.put("traceRowsDeleted", n); + log.info("企微消息追踪表已清空 deletedRows={}", n); + } + if (sessions) { + int n = weComChatSessionService.deleteAllWecomSessionsForTest(); + r.put("wecomSessionKeysDeleted", n); + } + if (adhoc) { + logisticsService.clearAdhocPendingQueue(); + r.put("adhocQueueCleared", Boolean.TRUE); + } + return r; + } } diff --git a/ruoyi-system/src/main/resources/mapper/jarvis/WeComInboundTraceMapper.xml b/ruoyi-system/src/main/resources/mapper/jarvis/WeComInboundTraceMapper.xml index 6b8b41c..cb93933 100644 --- a/ruoyi-system/src/main/resources/mapper/jarvis/WeComInboundTraceMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/jarvis/WeComInboundTraceMapper.xml @@ -61,4 +61,8 @@ #{id} + + + delete from wecom_inbound_trace +