From ca84985d638bc373231f391b097726008232c916 Mon Sep 17 00:00:00 2001 From: PIGCLOUD Date: Sun, 11 Oct 2026 21:54:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(pigx-mp-platform):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8C=89wxUserId=E7=B2=BE=E7=A1=AE=E8=BF=87=E6=BB=A4=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E6=B6=88=E6=81=AF=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 分页查询新增 wxUserId 精确匹配条件,字段为空时不参与过滤 - 更新接口注释,明确各过滤字段的匹配规则 - 新增 WxFansMsgControllerTests 单元测试,验证按公众号和粉丝维度过滤 (cherry picked from commit 66870cc38f44ccc6c116a09c5e5620ac4b43f9b3) --- .../mp/controller/WxFansMsgController.java | 7 +++- .../controller/WxFansMsgControllerTests.java | 40 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 pigx-visual/pigx-mp-platform/src/test/java/com/pig4cloud/pigx/mp/controller/WxFansMsgControllerTests.java diff --git a/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/controller/WxFansMsgController.java b/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/controller/WxFansMsgController.java index db0ae2a2e..0a829cc8a 100644 --- a/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/controller/WxFansMsgController.java +++ b/pigx-visual/pigx-mp-platform/src/main/java/com/pig4cloud/pigx/mp/controller/WxFansMsgController.java @@ -16,6 +16,7 @@ */ package com.pig4cloud.pigx.mp.controller; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -43,14 +44,16 @@ public class WxFansMsgController { private final WxMsgService wxMsgService; /** - * 分页查询 + * 分页查询微信消息,可按公众号、粉丝、昵称和消息类型过滤 * @param page 分页对象 - * @param msg 查询条件 + * @param msg 查询条件:appId、wxUserId、type 精确匹配,nickName 模糊匹配;字段为空时不参与过滤 + * @return 消息分页结果 */ @GetMapping("/page") public R getWxMsgPage(Page page, WxMsg msg) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() .eq(StrUtil.isNotBlank(msg.getAppId()), WxMsg::getAppId, msg.getAppId()) + .eq(ObjectUtil.isNotNull(msg.getWxUserId()), WxMsg::getWxUserId, msg.getWxUserId()) .like(StrUtil.isNotBlank(msg.getNickName()), WxMsg::getNickName, msg.getNickName()) .eq(StrUtil.isNotBlank(msg.getType()), WxMsg::getType, msg.getType()); return R.ok(wxMsgService.page(page, wrapper)); diff --git a/pigx-visual/pigx-mp-platform/src/test/java/com/pig4cloud/pigx/mp/controller/WxFansMsgControllerTests.java b/pigx-visual/pigx-mp-platform/src/test/java/com/pig4cloud/pigx/mp/controller/WxFansMsgControllerTests.java new file mode 100644 index 000000000..d66429184 --- /dev/null +++ b/pigx-visual/pigx-mp-platform/src/test/java/com/pig4cloud/pigx/mp/controller/WxFansMsgControllerTests.java @@ -0,0 +1,40 @@ +package com.pig4cloud.pigx.mp.controller; + +import com.baomidou.mybatisplus.core.MybatisConfiguration; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.pig4cloud.pigx.mp.entity.WxMsg; +import com.pig4cloud.pigx.mp.service.WxMsgService; +import org.apache.ibatis.builder.MapperBuilderAssistant; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.same; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +class WxFansMsgControllerTests { + + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + void conversationQueryRestrictsMessagesToAccountAndFan() { + TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), "test"), WxMsg.class); + WxMsgService service = mock(WxMsgService.class); + WxFansMsgController controller = new WxFansMsgController(service); + WxMsg filter = new WxMsg(); + filter.setAppId("test-account"); + filter.setWxUserId(42L); + Page page = new Page<>(1, 20); + + controller.getWxMsgPage(page, filter); + + ArgumentCaptor> captor = ArgumentCaptor.forClass(LambdaQueryWrapper.class); + verify(service).page(same(page), captor.capture()); + LambdaQueryWrapper query = captor.getValue(); + assertThat(query.getSqlSegment()).contains("app_id =", "wx_user_id ="); + assertThat(query.getParamNameValuePairs()).containsValues("test-account", 42L); + } + +}