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); + } + +}