feat(pigx-mp-platform): 新增按wxUserId精确过滤微信消息查询

- 分页查询新增 wxUserId 精确匹配条件,字段为空时不参与过滤
- 更新接口注释,明确各过滤字段的匹配规则
- 新增 WxFansMsgControllerTests 单元测试,验证按公众号和粉丝维度过滤

(cherry picked from commit 66870cc38f44ccc6c116a09c5e5620ac4b43f9b3)
This commit is contained in:
PIGCLOUD committed 2026-11-03 14:49:20 +08:00
1 parent b8fda524f8
commit ca84985d63
2 files changed
+45 -2

No files matched your search

@@ -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<WxMsg> wrapper = Wrappers.<WxMsg>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));
@@ -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<WxMsg> page = new Page<>(1, 20);
controller.getWxMsgPage(page, filter);
ArgumentCaptor<LambdaQueryWrapper<WxMsg>> captor = ArgumentCaptor.forClass(LambdaQueryWrapper.class);
verify(service).page(same(page), captor.capture());
LambdaQueryWrapper<WxMsg> query = captor.getValue();
assertThat(query.getSqlSegment()).contains("app_id =", "wx_user_id =");
assertThat(query.getParamNameValuePairs()).containsValues("test-account", 42L);
}
}