【同步】BOOT 和 CLOUD 的功能

pull/254/head
YunaiV 2026-06-08 00:14:03 +08:00
parent f5a68ce6f3
commit 0c69bedc34
206 changed files with 559 additions and 543 deletions

View File

@ -22,7 +22,7 @@ import cn.iocoder.yudao.framework.web.config.WebProperties;
import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler; import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.im.controller.admin.face; package cn.iocoder.yudao.module.im.controller.admin.face;
import cn.hutool.core.collection.ListUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.im.controller.admin.face.vo.pack.ImFacePackUserRespVO; import cn.iocoder.yudao.module.im.controller.admin.face.vo.pack.ImFacePackUserRespVO;
@ -9,12 +10,12 @@ import cn.iocoder.yudao.module.im.service.face.ImFacePackItemService;
import cn.iocoder.yudao.module.im.service.face.ImFacePackService; import cn.iocoder.yudao.module.im.service.face.ImFacePackService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -39,7 +40,7 @@ public class ImFacePackController {
// 1.1 拉所有启用表情包 // 1.1 拉所有启用表情包
List<ImFacePackDO> packs = facePackService.getEnabledFacePackList(); List<ImFacePackDO> packs = facePackService.getEnabledFacePackList();
if (packs.isEmpty()) { if (packs.isEmpty()) {
return success(List.of()); return success(ListUtil.of());
} }
// 1.2 拉这些包下所有启用表情,按 packId 分组 // 1.2 拉这些包下所有启用表情,按 packId 分组
List<ImFacePackItemDO> items = facePackItemService.getEnabledItemListByPackIds( List<ImFacePackItemDO> items = facePackItemService.getEnabledItemListByPackIds(
@ -49,7 +50,7 @@ public class ImFacePackController {
// 2. 拼装BeanUtils 把 pack 字段映射 + 自己塞 items // 2. 拼装BeanUtils 把 pack 字段映射 + 自己塞 items
List<ImFacePackUserRespVO> result = convertList(packs, pack -> { List<ImFacePackUserRespVO> result = convertList(packs, pack -> {
ImFacePackUserRespVO vo = BeanUtils.toBean(pack, ImFacePackUserRespVO.class); ImFacePackUserRespVO vo = BeanUtils.toBean(pack, ImFacePackUserRespVO.class);
vo.setItems(BeanUtils.toBean(itemsByPackId.getOrDefault(pack.getId(), List.of()), ImFacePackUserRespVO.Item.class)); vo.setItems(BeanUtils.toBean(itemsByPackId.getOrDefault(pack.getId(), ListUtil.of()), ImFacePackUserRespVO.Item.class));
return vo; return vo;
}); });
return success(result); return success(result);

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.im.enums.message; package cn.iocoder.yudao.module.im.enums.message;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.ArrayValuable;
@ -340,7 +341,7 @@ public enum ImMessageTypeEnum implements ArrayValuable<Integer> {
public static final Integer[] ARRAYS = Arrays.stream(values()).map(ImMessageTypeEnum::getType).toArray(Integer[]::new); public static final Integer[] ARRAYS = Arrays.stream(values()).map(ImMessageTypeEnum::getType).toArray(Integer[]::new);
private static final Set<Integer> FRIEND_NOTIFICATION_TYPES = Set.of( private static final Set<Integer> FRIEND_NOTIFICATION_TYPES = CollUtil.newHashSet(
FRIEND_REQUEST_APPROVED.type, FRIEND_REQUEST_APPROVED.type,
FRIEND_REQUEST_REJECTED.type, FRIEND_REQUEST_REJECTED.type,
FRIEND_REQUEST_RECEIVED.type, FRIEND_REQUEST_RECEIVED.type,
@ -351,12 +352,12 @@ public enum ImMessageTypeEnum implements ArrayValuable<Integer> {
FRIEND_INFO_UPDATED.type, FRIEND_INFO_UPDATED.type,
FRIEND_UPDATE.type); FRIEND_UPDATE.type);
private static final Set<Integer> GROUP_REQUEST_NOTIFICATION_TYPES = Set.of( private static final Set<Integer> GROUP_REQUEST_NOTIFICATION_TYPES = CollUtil.newHashSet(
GROUP_REQUEST_RECEIVED.type, GROUP_REQUEST_RECEIVED.type,
GROUP_REQUEST_APPROVED.type, GROUP_REQUEST_APPROVED.type,
GROUP_REQUEST_REJECTED.type); GROUP_REQUEST_REJECTED.type);
private static final Set<Integer> RTC_NOTIFICATION_TYPES = Set.of( private static final Set<Integer> RTC_NOTIFICATION_TYPES = CollUtil.newHashSet(
RTC_CALL.type, RTC_CALL.type,
RTC_PARTICIPANT_CONNECTED.type, RTC_PARTICIPANT_CONNECTED.type,
RTC_PARTICIPANT_DISCONNECTED.type); RTC_PARTICIPANT_DISCONNECTED.type);

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.im.service.friend; package cn.iocoder.yudao.module.im.service.friend;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
@ -22,7 +23,6 @@ import cn.iocoder.yudao.module.im.service.websocket.dto.notification.friend.Frie
import cn.iocoder.yudao.module.im.service.websocket.dto.notification.friend.FriendRequestRejectedNotification; import cn.iocoder.yudao.module.im.service.websocket.dto.notification.friend.FriendRequestRejectedNotification;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -31,6 +31,7 @@ import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -172,7 +173,7 @@ public class ImFriendRequestServiceImpl implements ImFriendRequestService {
// 1.1 校验申请存在、未处理、操作人是接收方 // 1.1 校验申请存在、未处理、操作人是接收方
ImFriendRequestDO request = validateRequestForHandle(userId, requestId); ImFriendRequestDO request = validateRequestForHandle(userId, requestId);
// 1.2 复验双方用户有效 // 1.2 复验双方用户有效
adminUserApi.validateUserList(List.of(request.getFromUserId(), request.getToUserId())); adminUserApi.validateUserList(ListUtil.of(request.getFromUserId(), request.getToUserId()));
// 2. 乐观锁更新申请处理结果 // 2. 乐观锁更新申请处理结果
ImFriendRequestDO updateObj = new ImFriendRequestDO() ImFriendRequestDO updateObj = new ImFriendRequestDO()
@ -224,7 +225,7 @@ public class ImFriendRequestServiceImpl implements ImFriendRequestService {
public List<ImFriendRequestDO> getMyFriendRequestList(Long userId, Long maxId, Integer limit) { public List<ImFriendRequestDO> getMyFriendRequestList(Long userId, Long maxId, Integer limit) {
ImFriendRequestDO maxRequest = maxId != null ? friendRequestMapper.selectById(maxId) : null; ImFriendRequestDO maxRequest = maxId != null ? friendRequestMapper.selectById(maxId) : null;
if (maxId != null && maxRequest == null) { if (maxId != null && maxRequest == null) {
return List.of(); return ListUtil.of();
} }
return friendRequestMapper.selectMyList(userId, return friendRequestMapper.selectMyList(userId,
maxRequest != null ? maxRequest.getUpdateTime() : null, maxRequest != null ? maxRequest.getUpdateTime() : null,

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.im.service.group; package cn.iocoder.yudao.module.im.service.group;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@ -78,7 +79,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService {
public List<ImGroupMemberDO> getGroupMemberListByOwnerAndAdmin(Long groupId) { public List<ImGroupMemberDO> getGroupMemberListByOwnerAndAdmin(Long groupId) {
// TODO DONE @AI把条件往下传这样减少加载数据量 // TODO DONE @AI把条件往下传这样减少加载数据量
return groupMemberMapper.selectListByGroupIdAndStatusAndRoles(groupId, CommonStatusEnum.ENABLE.getStatus(), return groupMemberMapper.selectListByGroupIdAndStatusAndRoles(groupId, CommonStatusEnum.ENABLE.getStatus(),
List.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole())); ListUtil.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()));
} }
/** /**
@ -270,7 +271,7 @@ public class ImGroupMemberServiceImpl implements ImGroupMemberService {
boolean groupRemarkChanged = updateReqVO.getGroupRemark() != null boolean groupRemarkChanged = updateReqVO.getGroupRemark() != null
&& ObjUtil.notEqual(updateReqVO.getGroupRemark(), member.getGroupRemark()); && ObjUtil.notEqual(updateReqVO.getGroupRemark(), member.getGroupRemark());
if (silentChanged || groupRemarkChanged) { if (silentChanged || groupRemarkChanged) {
groupMessageService.sendGroupMessage(userId, List.of(userId), ImGroupMessageSendDTO.ofGroupMemberSettingUpdate( groupMessageService.sendGroupMessage(userId, ListUtil.of(userId), ImGroupMessageSendDTO.ofGroupMemberSettingUpdate(
groupId, userId, updateReqVO.getSilent(), updateReqVO.getGroupRemark())); groupId, userId, updateReqVO.getSilent(), updateReqVO.getGroupRemark()));
} }
} }

View File

@ -413,12 +413,12 @@ public class ImGroupServiceImpl implements ImGroupService {
ImGroupMemberDO newOwner = groupMemberService.validateMemberInGroup(groupId, newOwnerUserId); ImGroupMemberDO newOwner = groupMemberService.validateMemberInGroup(groupId, newOwnerUserId);
// 2.1 更新成员角色 // 2.1 更新成员角色
int newOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, Set.of(newOwner.getUserId()), int newOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, CollUtil.newHashSet(newOwner.getUserId()),
ImGroupMemberRoleEnum.OWNER.getRole()); ImGroupMemberRoleEnum.OWNER.getRole());
if (newOwnerAffected != 1) { if (newOwnerAffected != 1) {
throw exception(GROUP_MEMBER_NOT_IN_GROUP); throw exception(GROUP_MEMBER_NOT_IN_GROUP);
} }
int oldOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, Set.of(userId), int oldOwnerAffected = groupMemberService.updateGroupMemberRole(groupId, CollUtil.newHashSet(userId),
ImGroupMemberRoleEnum.NORMAL.getRole()); ImGroupMemberRoleEnum.NORMAL.getRole());
if (oldOwnerAffected != 1) { if (oldOwnerAffected != 1) {
throw exception(GROUP_MEMBER_NOT_IN_GROUP); throw exception(GROUP_MEMBER_NOT_IN_GROUP);

View File

@ -32,15 +32,16 @@ import cn.iocoder.yudao.module.im.service.websocket.dto.ImGroupMessageDTO;
import cn.iocoder.yudao.module.im.service.websocket.dto.message.QuoteMessage; import cn.iocoder.yudao.module.im.service.websocket.dto.message.QuoteMessage;
import cn.iocoder.yudao.module.im.service.websocket.dto.message.RecallMessage; import cn.iocoder.yudao.module.im.service.websocket.dto.message.RecallMessage;
import cn.iocoder.yudao.module.im.util.ImMessageUtils; import cn.iocoder.yudao.module.im.util.ImMessageUtils;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
@ -295,7 +296,7 @@ public class ImGroupMessageServiceImpl implements ImGroupMessageService {
.filter(msg -> isMessageVisible(msg, memberMap.get(msg.getGroupId()), userId)) .filter(msg -> isMessageVisible(msg, memberMap.get(msg.getGroupId()), userId))
.sorted(Comparator.comparing(ImGroupMessageDO::getId)) .sorted(Comparator.comparing(ImGroupMessageDO::getId))
.limit(size) .limit(size)
.toList(); .collect(Collectors.toList());
} }
/** /**

View File

@ -1,16 +1,18 @@
package cn.iocoder.yudao.module.im.dal.mysql.message; package cn.iocoder.yudao.module.im.dal.mysql.message;
import cn.hutool.core.collection.ListUtil;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
import cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO; import cn.iocoder.yudao.module.im.dal.dataobject.message.ImGroupMessageDO;
import cn.iocoder.yudao.module.im.enums.message.ImGroupMessageReceiptStatusEnum; import cn.iocoder.yudao.module.im.enums.message.ImGroupMessageReceiptStatusEnum;
import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum; import cn.iocoder.yudao.module.im.enums.message.ImMessageStatusEnum;
import javax.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
/** /**
* IM Mapper * IM Mapper
@ -35,7 +37,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
mapper.insert(msg20); mapper.insert(msg20);
// 调用:只查群 10 // 调用:只查群 10
List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 100); List<ImGroupMessageDO> result = mapper.selectListByMinId(ListUtil.of(10L), 0L, FAR_PAST, 100);
// 断言:只有 msg10 // 断言:只有 msg10
assertEquals(1, result.size()); assertEquals(1, result.size());
@ -50,7 +52,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
ImGroupMessageDO recalled = buildMessage(10L, 1L, ImMessageStatusEnum.RECALL); ImGroupMessageDO recalled = buildMessage(10L, 1L, ImMessageStatusEnum.RECALL);
mapper.insert(recalled); mapper.insert(recalled);
List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 100); List<ImGroupMessageDO> result = mapper.selectListByMinId(ListUtil.of(10L), 0L, FAR_PAST, 100);
// 断言:撤回消息一并返回,由客户端按 status 切换渲染 // 断言:撤回消息一并返回,由客户端按 status 切换渲染
assertEquals(2, result.size()); assertEquals(2, result.size());
@ -66,7 +68,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
outWindow.setSendTime(LocalDateTime.now().minusDays(40)); outWindow.setSendTime(LocalDateTime.now().minusDays(40));
mapper.insert(outWindow); mapper.insert(outWindow);
List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L, List<ImGroupMessageDO> result = mapper.selectListByMinId(ListUtil.of(10L), 0L,
LocalDateTime.now().minusDays(30), 100); LocalDateTime.now().minusDays(30), 100);
assertEquals(1, result.size()); assertEquals(1, result.size());
@ -84,7 +86,7 @@ public class ImGroupMessageMapperTest extends BaseDbUnitTest {
mapper.insert(m3); mapper.insert(m3);
// 调用size=2返回 id 最小的 2 条 // 调用size=2返回 id 最小的 2 条
List<ImGroupMessageDO> result = mapper.selectListByMinId(List.of(10L), 0L, FAR_PAST, 2); List<ImGroupMessageDO> result = mapper.selectListByMinId(ListUtil.of(10L), 0L, FAR_PAST, 2);
assertEquals(2, result.size()); assertEquals(2, result.size());
assertTrue(result.get(0).getId() < result.get(1).getId()); assertTrue(result.get(0).getId() < result.get(1).getId());

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.im.service.friend; package cn.iocoder.yudao.module.im.service.friend;
import cn.hutool.core.collection.ListUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
@ -248,7 +249,7 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testGetFriendList() { public void testGetFriendList() {
List<ImFriendDO> list = List.of( List<ImFriendDO> list = ListUtil.of(
ImFriendDO.builder().id(1L).userId(1L).friendUserId(2L) ImFriendDO.builder().id(1L).userId(1L).friendUserId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L) ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L)
@ -276,9 +277,9 @@ public class ImFriendServiceImplTest extends BaseMockitoUnitTest {
ImFriendDO friend3 = ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L) ImFriendDO friend3 = ImFriendDO.builder().id(2L).userId(1L).friendUserId(3L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(imFriendMapper.selectListByUserIdAndStatus(1L, CommonStatusEnum.ENABLE.getStatus())) when(imFriendMapper.selectListByUserIdAndStatus(1L, CommonStatusEnum.ENABLE.getStatus()))
.thenReturn(List.of(friend2, friend3)); .thenReturn(ListUtil.of(friend2, friend3));
when(imFriendMapper.selectListByUserIdsAndFriendUserIdAndStatus(anyCollection(), eq(1L), when(imFriendMapper.selectListByUserIdsAndFriendUserIdAndStatus(anyCollection(), eq(1L),
eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(List.of( eq(CommonStatusEnum.ENABLE.getStatus()))).thenReturn(ListUtil.of(
ImFriendDO.builder().userId(2L).friendUserId(1L) ImFriendDO.builder().userId(2L).friendUserId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build())); .status(CommonStatusEnum.ENABLE.getStatus()).build()));

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.im.service.group; package cn.iocoder.yudao.module.im.service.group;
import cn.hutool.core.collection.ListUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
@ -116,10 +117,10 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO exist4 = ImGroupMemberDO.builder().id(40L).groupId(10L).userId(4L) ImGroupMemberDO exist4 = ImGroupMemberDO.builder().id(40L).groupId(10L).userId(4L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
.thenReturn(List.of(exist3, exist4)); .thenReturn(ListUtil.of(exist3, exist4));
// 调用 // 调用
groupMemberService.addGroupMembers(10L, List.of(2L, 3L, 4L)); groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L, 4L));
// 断言updates 只有用户 3inserts 只有用户 2 // 断言updates 只有用户 3inserts 只有用户 2
verify(groupMemberMapper).updateRejoinFields(eq(30L), eq(CommonStatusEnum.ENABLE.getStatus()), verify(groupMemberMapper).updateRejoinFields(eq(30L), eq(CommonStatusEnum.ENABLE.getStatus()),
@ -131,7 +132,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testAddGroupMembers_allExisting_onlyUpdates() { public void testAddGroupMembers_allExisting_onlyUpdates() {
// 准备:传入的 3 个用户都已有记录(全部 DISABLE → 只做 update不做 insert // 准备:传入的 3 个用户都已有记录(全部 DISABLE → 只做 update不做 insert
List<ImGroupMemberDO> existing = List.of( List<ImGroupMemberDO> existing = ListUtil.of(
ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L) ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L)
.status(CommonStatusEnum.DISABLE.getStatus()).build(), .status(CommonStatusEnum.DISABLE.getStatus()).build(),
ImGroupMemberDO.builder().id(2L).groupId(10L).userId(3L) ImGroupMemberDO.builder().id(2L).groupId(10L).userId(3L)
@ -140,7 +141,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
.thenReturn(existing); .thenReturn(existing);
groupMemberService.addGroupMembers(10L, List.of(2L, 3L)); groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L));
verify(groupMemberMapper, times(2)).updateRejoinFields(anyLong(), eq(CommonStatusEnum.ENABLE.getStatus()), verify(groupMemberMapper, times(2)).updateRejoinFields(anyLong(), eq(CommonStatusEnum.ENABLE.getStatus()),
any(), eq(ImGroupMemberRoleEnum.NORMAL.getRole()), isNull(), isNull()); any(), eq(ImGroupMemberRoleEnum.NORMAL.getRole()), isNull(), isNull());
@ -151,9 +152,9 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
public void testAddGroupMembers_allNew_onlyInserts() { public void testAddGroupMembers_allNew_onlyInserts() {
// 准备:都不存在 → 只做 insert // 准备:都不存在 → 只做 insert
when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
groupMemberService.addGroupMembers(10L, List.of(2L, 3L)); groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L));
verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any()); verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any());
verify(groupMemberMapper).insertBatch(anyList()); verify(groupMemberMapper).insertBatch(anyList());
@ -162,14 +163,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testAddGroupMembers_allExistingEnabled_nothingHappens() { public void testAddGroupMembers_allExistingEnabled_nothingHappens() {
// 准备:都已存在且 ENABLE → 既不 update 也不 insert // 准备:都已存在且 ENABLE → 既不 update 也不 insert
List<ImGroupMemberDO> existing = List.of( List<ImGroupMemberDO> existing = ListUtil.of(
ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L) ImGroupMemberDO.builder().id(1L).groupId(10L).userId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build() .status(CommonStatusEnum.ENABLE.getStatus()).build()
); );
when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
.thenReturn(existing); .thenReturn(existing);
groupMemberService.addGroupMembers(10L, List.of(2L)); groupMemberService.addGroupMembers(10L, ListUtil.of(2L));
verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any()); verify(groupMemberMapper, never()).updateRejoinFields(anyLong(), anyInt(), any(), anyInt(), any(), any());
verify(groupMemberMapper, never()).insertBatch(anyList()); verify(groupMemberMapper, never()).insertBatch(anyList());
@ -179,14 +180,14 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
public void testAddGroupMembers_batchInsertDuplicateFallback() { public void testAddGroupMembers_batchInsertDuplicateFallback() {
// 准备:两个新增成员,批量插入失败时降级为逐个 addGroupMember // 准备:两个新增成员,批量插入失败时降级为逐个 addGroupMember
when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection())) when(groupMemberMapper.selectListByGroupIdAndUserIds(eq(10L), anyCollection()))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
doThrow(new DuplicateKeyException("concurrent batch insert")) doThrow(new DuplicateKeyException("concurrent batch insert"))
.when(groupMemberMapper).insertBatch(anyList()); .when(groupMemberMapper).insertBatch(anyList());
// addGroupMember 单条兜底逻辑 // addGroupMember 单条兜底逻辑
when(groupMemberMapper.selectByGroupIdAndUserId(eq(10L), anyLong())).thenReturn(null); when(groupMemberMapper.selectByGroupIdAndUserId(eq(10L), anyLong())).thenReturn(null);
// 调用 // 调用
groupMemberService.addGroupMembers(10L, List.of(2L, 3L)); groupMemberService.addGroupMembers(10L, ListUtil.of(2L, 3L));
// 断言:降级为逐条调用 insert // 断言:降级为逐条调用 insert
verify(groupMemberMapper, times(2)).insert(any(ImGroupMemberDO.class)); verify(groupMemberMapper, times(2)).insert(any(ImGroupMemberDO.class));
@ -244,7 +245,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
// 公开字段昵称变化 → 全员广播 GROUP_MEMBER_NICKNAME_UPDATE // 公开字段昵称变化 → 全员广播 GROUP_MEMBER_NICKNAME_UPDATE
verify(groupMessageService).sendGroupMessage(eq(1L), any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class)); verify(groupMessageService).sendGroupMessage(eq(1L), any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class));
// 个人字段 silent 变化 → 仅自己多端同步 GROUP_MEMBER_SETTING_UPDATE // 个人字段 silent 变化 → 仅自己多端同步 GROUP_MEMBER_SETTING_UPDATE
verify(groupMessageService).sendGroupMessage(eq(1L), eq(java.util.List.of(1L)), verify(groupMessageService).sendGroupMessage(eq(1L), eq(ListUtil.of(1L)),
any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class)); any(cn.iocoder.yudao.module.im.service.message.dto.ImGroupMessageSendDTO.class));
} }
@ -278,7 +279,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testRemoveGroupMembers_batch() { public void testRemoveGroupMembers_batch() {
groupMemberService.removeGroupMembers(10L, List.of(2L, 3L)); groupMemberService.removeGroupMembers(10L, ListUtil.of(2L, 3L));
ArgumentCaptor<ImGroupMemberDO> captor = ArgumentCaptor.forClass(ImGroupMemberDO.class); ArgumentCaptor<ImGroupMemberDO> captor = ArgumentCaptor.forClass(ImGroupMemberDO.class);
verify(groupMemberMapper).updateByGroupIdAndUserIdsAndStatus(eq(10L), anyCollection(), verify(groupMemberMapper).updateByGroupIdAndUserIdsAndStatus(eq(10L), anyCollection(),
@ -303,7 +304,7 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testGetActiveGroupMemberUserIdsByGroupId_extractsUserIds() { public void testGetActiveGroupMemberUserIdsByGroupId_extractsUserIds() {
// 准备3 个 ENABLE 成员 // 准备3 个 ENABLE 成员
List<ImGroupMemberDO> members = List.of( List<ImGroupMemberDO> members = ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImGroupMemberDO.builder().groupId(10L).userId(2L) ImGroupMemberDO.builder().groupId(10L).userId(2L)
@ -318,13 +319,13 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
List<Long> userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L); List<Long> userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L);
// 断言:只返回 userId、顺序保留 // 断言:只返回 userId、顺序保留
assertEquals(List.of(1L, 2L, 3L), userIds); assertEquals(ListUtil.of(1L, 2L, 3L), userIds);
} }
@Test @Test
public void testGetActiveGroupMemberUserIdsByGroupId_emptyList() { public void testGetActiveGroupMemberUserIdsByGroupId_emptyList() {
when(groupMemberMapper.selectListByGroupIdAndStatus( when(groupMemberMapper.selectListByGroupIdAndStatus(
10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(List.of()); 10L, CommonStatusEnum.ENABLE.getStatus())).thenReturn(ListUtil.of());
List<Long> userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L); List<Long> userIds = groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L);
@ -333,8 +334,8 @@ public class ImGroupMemberServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testGetGroupMemberListByOwnerAndAdmin_passesRoles() { public void testGetGroupMemberListByOwnerAndAdmin_passesRoles() {
List<Integer> roles = List.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole()); List<Integer> roles = ListUtil.of(ImGroupMemberRoleEnum.OWNER.getRole(), ImGroupMemberRoleEnum.ADMIN.getRole());
List<ImGroupMemberDO> members = List.of(ImGroupMemberDO.builder().groupId(10L).userId(1L).build()); List<ImGroupMemberDO> members = ListUtil.of(ImGroupMemberDO.builder().groupId(10L).userId(1L).build());
when(groupMemberMapper.selectListByGroupIdAndStatusAndRoles(10L, CommonStatusEnum.ENABLE.getStatus(), roles)) when(groupMemberMapper.selectListByGroupIdAndStatusAndRoles(10L, CommonStatusEnum.ENABLE.getStatus(), roles))
.thenReturn(members); .thenReturn(members);

View File

@ -1,5 +1,8 @@
package cn.iocoder.yudao.module.im.service.group; package cn.iocoder.yudao.module.im.service.group;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
@ -39,7 +42,6 @@ import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.*;
@ -108,13 +110,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
// 准备:创建者 + 2 个初始成员,都是好友 // 准备:创建者 + 2 个初始成员,都是好友
ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO(); ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO();
reqVO.setName("测试群"); reqVO.setName("测试群");
reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L)));
when(groupMapper.insert(any(ImGroupDO.class))).thenAnswer(invocation -> { when(groupMapper.insert(any(ImGroupDO.class))).thenAnswer(invocation -> {
ImGroupDO group = invocation.getArgument(0); ImGroupDO group = invocation.getArgument(0);
group.setId(100L); group.setId(100L);
return 1; return 1;
}); });
when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of(
ImFriendDO.builder().userId(1L).friendUserId(2L) ImFriendDO.builder().userId(1L).friendUserId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImFriendDO.builder().userId(1L).friendUserId(3L) ImFriendDO.builder().userId(1L).friendUserId(3L)
@ -140,15 +142,15 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
// 准备:初始成员里有非好友 // 准备:初始成员里有非好友
ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO(); ImGroupCreateReqVO reqVO = new ImGroupCreateReqVO();
reqVO.setName("测试群"); reqVO.setName("测试群");
reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L)));
// 只有 2 是好友3 不是 // 只有 2 是好友3 不是
when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of(
ImFriendDO.builder().userId(1L).friendUserId(2L) ImFriendDO.builder().userId(1L).friendUserId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build())); .status(CommonStatusEnum.ENABLE.getStatus()).build()));
AdminUserRespDTO u3 = new AdminUserRespDTO(); AdminUserRespDTO u3 = new AdminUserRespDTO();
u3.setId(3L); u3.setId(3L);
u3.setNickname("李四"); u3.setNickname("李四");
when(adminUserApi.getUserMap(anyCollection())).thenReturn(Map.of(3L, u3)); when(adminUserApi.getUserMap(anyCollection())).thenReturn(MapUtil.of(3L, u3));
// 调用并断言 // 调用并断言
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
@ -327,8 +329,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
// 被邀请人 2 和 3 都是好友 // 被邀请人 2 和 3 都是好友
ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L)));
List<ImFriendDO> friends = List.of( List<ImFriendDO> friends = ListUtil.of(
ImFriendDO.builder().userId(1L).friendUserId(2L) ImFriendDO.builder().userId(1L).friendUserId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImFriendDO.builder().userId(1L).friendUserId(3L) ImFriendDO.builder().userId(1L).friendUserId(3L)
@ -366,7 +368,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.role(ImGroupMemberRoleEnum.NORMAL.getRole()) .role(ImGroupMemberRoleEnum.NORMAL.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build()); .status(CommonStatusEnum.ENABLE.getStatus()).build());
when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of( when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(99L) ImGroupMemberDO.builder().groupId(10L).userId(99L)
.role(ImGroupMemberRoleEnum.OWNER.getRole()) .role(ImGroupMemberRoleEnum.OWNER.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
@ -376,8 +378,8 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L)));
when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of(
ImFriendDO.builder().userId(1L).friendUserId(2L) ImFriendDO.builder().userId(1L).friendUserId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImFriendDO.builder().userId(1L).friendUserId(3L) ImFriendDO.builder().userId(1L).friendUserId(3L)
@ -408,15 +410,15 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.role(ImGroupMemberRoleEnum.OWNER.getRole()) .role(ImGroupMemberRoleEnum.OWNER.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build()); .status(CommonStatusEnum.ENABLE.getStatus()).build());
when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of( when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.role(ImGroupMemberRoleEnum.OWNER.getRole()) .role(ImGroupMemberRoleEnum.OWNER.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build())); .status(CommonStatusEnum.ENABLE.getStatus()).build()));
ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L)));
when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of(
ImFriendDO.builder().userId(1L).friendUserId(2L) ImFriendDO.builder().userId(1L).friendUserId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImFriendDO.builder().userId(1L).friendUserId(3L) ImFriendDO.builder().userId(1L).friendUserId(3L)
@ -445,18 +447,18 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectById(10L)).thenReturn(group); when(groupMapper.selectById(10L)).thenReturn(group);
when(groupMemberService.getActiveGroupMemberListByGroupId(10L)) when(groupMemberService.getActiveGroupMemberListByGroupId(10L))
.thenReturn(List.of(ImGroupMemberDO.builder().groupId(10L).userId(1L) .thenReturn(ListUtil.of(ImGroupMemberDO.builder().groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build())); .status(CommonStatusEnum.ENABLE.getStatus()).build()));
ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(new ArrayList<>(List.of(2L, 3L))); reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L, 3L)));
// 只有 2 是好友3 不是 // 只有 2 是好友3 不是
when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of(
ImFriendDO.builder().userId(1L).friendUserId(2L) ImFriendDO.builder().userId(1L).friendUserId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()).build())); .status(CommonStatusEnum.ENABLE.getStatus()).build()));
AdminUserRespDTO u3 = new AdminUserRespDTO(); u3.setId(3L); u3.setNickname("李四"); AdminUserRespDTO u3 = new AdminUserRespDTO(); u3.setId(3L); u3.setNickname("李四");
when(adminUserApi.getUserMap(anyCollection())).thenReturn(Map.of(3L, u3)); when(adminUserApi.getUserMap(anyCollection())).thenReturn(MapUtil.of(3L, u3));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> groupService.inviteGroupMember(1L, reqVO)); () -> groupService.inviteGroupMember(1L, reqVO));
@ -484,9 +486,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(new ArrayList<>(List.of(600L, 601L))); reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(600L, 601L)));
// 被邀请人都是好友 // 被邀请人都是好友
when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(List.of( when(friendService.getActiveFriendList(eq(1L), anyCollection())).thenReturn(ListUtil.of(
ImFriendDO.builder().userId(1L).friendUserId(600L) ImFriendDO.builder().userId(1L).friendUserId(600L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImFriendDO.builder().userId(1L).friendUserId(601L) ImFriendDO.builder().userId(1L).friendUserId(601L)
@ -512,7 +514,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectById(10L)).thenReturn(group); when(groupMapper.selectById(10L)).thenReturn(group);
// 用户 2 已在群中 // 用户 2 已在群中
when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(List.of( when(groupMemberService.getActiveGroupMemberListByGroupId(10L)).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImGroupMemberDO.builder().groupId(10L).userId(2L) ImGroupMemberDO.builder().groupId(10L).userId(2L)
@ -521,7 +523,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO(); ImGroupMemberInviteReqVO reqVO = new ImGroupMemberInviteReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(new ArrayList<>(List.of(2L))); // 只邀请 2他已在群中 reqVO.setMemberUserIds(new ArrayList<>(ListUtil.of(2L))); // 只邀请 2他已在群中
// 调用 // 调用
groupService.inviteGroupMember(1L, reqVO); groupService.inviteGroupMember(1L, reqVO);
@ -606,7 +608,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(List.of(1L, 2L)); reqVO.setMemberUserIds(ListUtil.of(1L, 2L));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> groupService.removeGroupMember(1L, reqVO)); () -> groupService.removeGroupMember(1L, reqVO));
@ -628,7 +630,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.role(ImGroupMemberRoleEnum.OWNER.getRole()).build()); .role(ImGroupMemberRoleEnum.OWNER.getRole()).build());
// 目标:两个普通成员 // 目标:两个普通成员
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(2L) ImGroupMemberDO.builder().groupId(10L).userId(2L)
.role(ImGroupMemberRoleEnum.NORMAL.getRole()) .role(ImGroupMemberRoleEnum.NORMAL.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
@ -638,7 +640,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(List.of(2L, 3L)); reqVO.setMemberUserIds(ListUtil.of(2L, 3L));
groupService.removeGroupMember(1L, reqVO); groupService.removeGroupMember(1L, reqVO);
@ -665,14 +667,14 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.role(ImGroupMemberRoleEnum.ADMIN.getRole()).build()); .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build());
// 目标:另一个管理员 // 目标:另一个管理员
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(2L) ImGroupMemberDO.builder().groupId(10L).userId(2L)
.role(ImGroupMemberRoleEnum.ADMIN.getRole()) .role(ImGroupMemberRoleEnum.ADMIN.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build())); .status(CommonStatusEnum.ENABLE.getStatus()).build()));
ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(List.of(2L)); reqVO.setMemberUserIds(ListUtil.of(2L));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> groupService.removeGroupMember(1L, reqVO)); () -> groupService.removeGroupMember(1L, reqVO));
@ -694,14 +696,14 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn( when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.role(ImGroupMemberRoleEnum.OWNER.getRole()).build()); .role(ImGroupMemberRoleEnum.OWNER.getRole()).build());
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(99L) ImGroupMemberDO.builder().groupId(10L).userId(99L)
.role(ImGroupMemberRoleEnum.OWNER.getRole()) .role(ImGroupMemberRoleEnum.OWNER.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build())); .status(CommonStatusEnum.ENABLE.getStatus()).build()));
ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(List.of(99L)); reqVO.setMemberUserIds(ListUtil.of(99L));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> groupService.removeGroupMember(1L, reqVO)); () -> groupService.removeGroupMember(1L, reqVO));
@ -723,7 +725,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.role(ImGroupMemberRoleEnum.OWNER.getRole()).build()); .role(ImGroupMemberRoleEnum.OWNER.getRole()).build());
// 目标2L 有效普通成员3L 已退群DISABLE的历史管理员应被跳过而非拦截整批 // 目标2L 有效普通成员3L 已退群DISABLE的历史管理员应被跳过而非拦截整批
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(2L) ImGroupMemberDO.builder().groupId(10L).userId(2L)
.role(ImGroupMemberRoleEnum.NORMAL.getRole()) .role(ImGroupMemberRoleEnum.NORMAL.getRole())
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
@ -733,17 +735,17 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO(); ImGroupMemberRemoveReqVO reqVO = new ImGroupMemberRemoveReqVO();
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setMemberUserIds(List.of(2L, 3L)); reqVO.setMemberUserIds(ListUtil.of(2L, 3L));
groupService.removeGroupMember(1L, reqVO); groupService.removeGroupMember(1L, reqVO);
// 仅有效成员 2L 进入移除 / 已读清理,已退群的 3L 被跳过 // 仅有效成员 2L 进入移除 / 已读清理,已退群的 3L 被跳过
ArgumentCaptor<Collection> removeCaptor = ArgumentCaptor.forClass(Collection.class); ArgumentCaptor<Collection> removeCaptor = ArgumentCaptor.forClass(Collection.class);
verify(groupMemberService).removeGroupMembers(eq(10L), removeCaptor.capture()); verify(groupMemberService).removeGroupMembers(eq(10L), removeCaptor.capture());
assertEquals(Set.of(2L), Set.copyOf(removeCaptor.getValue())); assertEquals(CollUtil.newHashSet(2L), CollUtil.newHashSet(removeCaptor.getValue()));
ArgumentCaptor<Collection> readCaptor = ArgumentCaptor.forClass(Collection.class); ArgumentCaptor<Collection> readCaptor = ArgumentCaptor.forClass(Collection.class);
verify(groupMessageService).deleteReadMaxMessageIds(eq(10L), readCaptor.capture()); verify(groupMessageService).deleteReadMaxMessageIds(eq(10L), readCaptor.capture());
assertEquals(Set.of(2L), Set.copyOf(readCaptor.getValue())); assertEquals(CollUtil.newHashSet(2L), CollUtil.newHashSet(readCaptor.getValue()));
} }
} }
@ -759,7 +761,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
// 目标 3 是普通成员 // 目标 3 是普通成员
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().userId(3L).status(CommonStatusEnum.ENABLE.getStatus()) ImGroupMemberDO.builder().userId(3L).status(CommonStatusEnum.ENABLE.getStatus())
.role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()));
// 群里已有 1 个 ADMIN1 + 1 ≤ 3 不超上限 // 群里已有 1 个 ADMIN1 + 1 ≤ 3 不超上限
@ -770,7 +772,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
reqVO.setId(10L); reqVO.setId(10L);
reqVO.setUserIds(List.of(3L)); reqVO.setUserIds(ListUtil.of(3L));
groupService.addGroupAdmin(1L, reqVO); groupService.addGroupAdmin(1L, reqVO);
@ -789,7 +791,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L) ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().userId(5L).status(CommonStatusEnum.ENABLE.getStatus()) ImGroupMemberDO.builder().userId(5L).status(CommonStatusEnum.ENABLE.getStatus())
.role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()));
// 群里已有 3 个 ADMIN达到上限再加 1 会超 // 群里已有 3 个 ADMIN达到上限再加 1 会超
@ -798,7 +800,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
reqVO.setId(10L); reqVO.setId(10L);
reqVO.setUserIds(List.of(5L)); reqVO.setUserIds(ListUtil.of(5L));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> groupService.addGroupAdmin(1L, reqVO)); () -> groupService.addGroupAdmin(1L, reqVO));
@ -816,13 +818,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L) ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().userId(1L).status(CommonStatusEnum.ENABLE.getStatus()) ImGroupMemberDO.builder().userId(1L).status(CommonStatusEnum.ENABLE.getStatus())
.role(ImGroupMemberRoleEnum.OWNER.getRole()).build())); .role(ImGroupMemberRoleEnum.OWNER.getRole()).build()));
ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
reqVO.setId(10L); reqVO.setId(10L);
reqVO.setUserIds(List.of(1L)); reqVO.setUserIds(ListUtil.of(1L));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> groupService.addGroupAdmin(1L, reqVO)); () -> groupService.addGroupAdmin(1L, reqVO));
@ -840,13 +842,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
// 目标已是 ADMIN再加无需操作 // 目标已是 ADMIN再加无需操作
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus())
.role(ImGroupMemberRoleEnum.ADMIN.getRole()).build())); .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build()));
ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO(); ImGroupAdminAddReqVO reqVO = new ImGroupAdminAddReqVO();
reqVO.setId(10L); reqVO.setId(10L);
reqVO.setUserIds(List.of(2L)); reqVO.setUserIds(ListUtil.of(2L));
groupService.addGroupAdmin(1L, reqVO); groupService.addGroupAdmin(1L, reqVO);
@ -866,7 +868,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L) ImGroupDO group = ImGroupDO.builder().id(10L).ownerUserId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus())
.role(ImGroupMemberRoleEnum.ADMIN.getRole()).build())); .role(ImGroupMemberRoleEnum.ADMIN.getRole()).build()));
when(groupMemberService.updateGroupMemberRole(eq(10L), anyCollection(), when(groupMemberService.updateGroupMemberRole(eq(10L), anyCollection(),
@ -874,7 +876,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO(); ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO();
reqVO.setId(10L); reqVO.setId(10L);
reqVO.setUserIds(List.of(2L)); reqVO.setUserIds(ListUtil.of(2L));
groupService.removeGroupAdmin(1L, reqVO); groupService.removeGroupAdmin(1L, reqVO);
@ -894,13 +896,13 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
.status(CommonStatusEnum.ENABLE.getStatus()).build(); .status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group); when(groupMapper.selectByIdForUpdate(10L)).thenReturn(group);
// 目标已是 MEMBER撤销无需操作 // 目标已是 MEMBER撤销无需操作
when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(List.of( when(groupMemberService.getGroupMembers(eq(10L), anyCollection())).thenReturn(ListUtil.of(
ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus()) ImGroupMemberDO.builder().userId(2L).status(CommonStatusEnum.ENABLE.getStatus())
.role(ImGroupMemberRoleEnum.NORMAL.getRole()).build())); .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()));
ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO(); ImGroupAdminRemoveReqVO reqVO = new ImGroupAdminRemoveReqVO();
reqVO.setId(10L); reqVO.setId(10L);
reqVO.setUserIds(List.of(2L)); reqVO.setUserIds(ListUtil.of(2L));
groupService.removeGroupAdmin(1L, reqVO); groupService.removeGroupAdmin(1L, reqVO);
@ -922,9 +924,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
when(groupMemberService.validateMemberInGroup(10L, 2L)).thenReturn( when(groupMemberService.validateMemberInGroup(10L, 2L)).thenReturn(
ImGroupMemberDO.builder().groupId(10L).userId(2L) ImGroupMemberDO.builder().groupId(10L).userId(2L)
.role(ImGroupMemberRoleEnum.NORMAL.getRole()).build()); .role(ImGroupMemberRoleEnum.NORMAL.getRole()).build());
when(groupMemberService.updateGroupMemberRole(eq(10L), eq(Set.of(2L)), when(groupMemberService.updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(2L)),
eq(ImGroupMemberRoleEnum.OWNER.getRole()))).thenReturn(1); eq(ImGroupMemberRoleEnum.OWNER.getRole()))).thenReturn(1);
when(groupMemberService.updateGroupMemberRole(eq(10L), eq(Set.of(1L)), when(groupMemberService.updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(1L)),
eq(ImGroupMemberRoleEnum.NORMAL.getRole()))).thenReturn(1); eq(ImGroupMemberRoleEnum.NORMAL.getRole()))).thenReturn(1);
ImGroupTransferOwnerReqVO reqVO = new ImGroupTransferOwnerReqVO(); ImGroupTransferOwnerReqVO reqVO = new ImGroupTransferOwnerReqVO();
@ -938,9 +940,9 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
verify(groupMapper).updateById(groupCaptor.capture()); verify(groupMapper).updateById(groupCaptor.capture());
assertEquals(2L, groupCaptor.getValue().getOwnerUserId()); assertEquals(2L, groupCaptor.getValue().getOwnerUserId());
// 旧群主 → MEMBER新群主 → OWNER // 旧群主 → MEMBER新群主 → OWNER
verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(Set.of(1L)), verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(1L)),
eq(ImGroupMemberRoleEnum.NORMAL.getRole())); eq(ImGroupMemberRoleEnum.NORMAL.getRole()));
verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(Set.of(2L)), verify(groupMemberService).updateGroupMemberRole(eq(10L), eq(CollUtil.newHashSet(2L)),
eq(ImGroupMemberRoleEnum.OWNER.getRole())); eq(ImGroupMemberRoleEnum.OWNER.getRole()));
} }
} }
@ -1120,7 +1122,7 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testGetMyGroupList_success() { public void testGetMyGroupList_success() {
// 活跃群成员 // 活跃群成员
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(List.of( when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(new ArrayList<>(ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImGroupMemberDO.builder().groupId(20L).userId(1L) ImGroupMemberDO.builder().groupId(20L).userId(1L)
@ -1128,11 +1130,11 @@ public class ImGroupServiceImplTest extends BaseMockitoUnitTest {
))); )));
// 最近退群成员(最近 30 天内) // 最近退群成员(最近 30 天内)
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(new ArrayList<>(List.of( .thenReturn(new ArrayList<>(ListUtil.of(
ImGroupMemberDO.builder().groupId(30L).userId(1L) ImGroupMemberDO.builder().groupId(30L).userId(1L)
.status(CommonStatusEnum.DISABLE.getStatus()).build() .status(CommonStatusEnum.DISABLE.getStatus()).build()
))); )));
List<ImGroupDO> groups = List.of( List<ImGroupDO> groups = ListUtil.of(
ImGroupDO.builder().id(10L).status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupDO.builder().id(10L).status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImGroupDO.builder().id(20L).status(CommonStatusEnum.ENABLE.getStatus()).build(), ImGroupDO.builder().id(20L).status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImGroupDO.builder().id(30L).status(CommonStatusEnum.ENABLE.getStatus()).build() ImGroupDO.builder().id(30L).status(CommonStatusEnum.ENABLE.getStatus()).build()

View File

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.im.service.message; package cn.iocoder.yudao.module.im.service.message;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
@ -96,7 +98,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member); when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member);
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
.thenReturn(List.of(1L, 2L, 3L)); .thenReturn(ListUtil.of(1L, 2L, 3L));
when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenAnswer(invocation -> { when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenAnswer(invocation -> {
ImGroupMessageDO msg = invocation.getArgument(0); ImGroupMessageDO msg = invocation.getArgument(0);
msg.setId(99L); msg.setId(99L);
@ -168,7 +170,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(joinTime).build(); .joinTime(joinTime).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member));
// 入群前 1 条 + 入群后 1 条 // 入群前 1 条 + 入群后 1 条
ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder() ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder()
@ -177,11 +179,11 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMessageDO afterJoin = ImGroupMessageDO.builder() ImGroupMessageDO afterJoin = ImGroupMessageDO.builder()
.id(2L).groupId(10L).senderId(2L) .id(2L).groupId(10L).senderId(2L)
.sendTime(now.minusHours(1)).build(); .sendTime(now.minusHours(1)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(100))) any(LocalDateTime.class), eq(100)))
.thenReturn(List.of(beforeJoin, afterJoin)); .thenReturn(ListUtil.of(beforeJoin, afterJoin));
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
// 调用 // 调用
List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100); List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
@ -200,26 +202,26 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(joinTime).build(); .joinTime(joinTime).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member));
ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder() ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder()
.id(1L).groupId(10L).senderId(2L) .id(1L).groupId(10L).senderId(2L)
.sendTime(now.minusHours(3)).build(); .sendTime(now.minusHours(3)).build();
ImGroupMessageDO directedMsg = ImGroupMessageDO.builder() ImGroupMessageDO directedMsg = ImGroupMessageDO.builder()
.id(2L).groupId(10L).senderId(2L) .id(2L).groupId(10L).senderId(2L)
.receiverUserIds(List.of(2L, 3L)) .receiverUserIds(ListUtil.of(2L, 3L))
.sendTime(now.minusHours(2)).build(); .sendTime(now.minusHours(2)).build();
ImGroupMessageDO visibleMsg = ImGroupMessageDO.builder() ImGroupMessageDO visibleMsg = ImGroupMessageDO.builder()
.id(3L).groupId(10L).senderId(2L) .id(3L).groupId(10L).senderId(2L)
.sendTime(now.minusMinutes(30)).build(); .sendTime(now.minusMinutes(30)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(2))) any(LocalDateTime.class), eq(2)))
.thenReturn(List.of(beforeJoin, directedMsg)); .thenReturn(ListUtil.of(beforeJoin, directedMsg));
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(2L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(2L),
any(LocalDateTime.class), eq(2))) any(LocalDateTime.class), eq(2)))
.thenReturn(List.of(visibleMsg)); .thenReturn(ListUtil.of(visibleMsg));
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
// 调用 // 调用
List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 2); List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 2);
@ -227,9 +229,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
// 断言:仅返回第二批的可见消息;两批 selectListByMinId 各被调用一次 // 断言:仅返回第二批的可见消息;两批 selectListByMinId 各被调用一次
assertEquals(1, result.size()); assertEquals(1, result.size());
assertEquals(3L, result.get(0).getId()); assertEquals(3L, result.get(0).getId());
verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(0L), verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(2)); any(LocalDateTime.class), eq(2));
verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(2L), verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(2L),
any(LocalDateTime.class), eq(2)); any(LocalDateTime.class), eq(2));
} }
@ -241,14 +243,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(now.minusDays(10)).build(); .joinTime(now.minusDays(10)).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(activeMember));
ImGroupMessageDO activeMsg = ImGroupMessageDO.builder() ImGroupMessageDO activeMsg = ImGroupMessageDO.builder()
.id(5L).groupId(10L).senderId(2L) .id(5L).groupId(10L).senderId(2L)
.sendTime(now.minusHours(2)).build(); .sendTime(now.minusHours(2)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(100))) any(LocalDateTime.class), eq(100)))
.thenReturn(List.of(activeMsg)); .thenReturn(ListUtil.of(activeMsg));
// 已退群退群时间在窗口内minId=0minQuitTime 直接用 minSendTime // 已退群退群时间在窗口内minId=0minQuitTime 直接用 minSendTime
LocalDateTime quitTime = now.minusDays(3); LocalDateTime quitTime = now.minusDays(3);
@ -258,14 +260,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.joinTime(now.minusDays(20)) .joinTime(now.minusDays(20))
.quitTime(quitTime).build(); .quitTime(quitTime).build();
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of(quitMember)); .thenReturn(ListUtil.of(quitMember));
ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder() ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder()
.id(3L).groupId(20L).senderId(99L) .id(3L).groupId(20L).senderId(99L)
.sendTime(now.minusDays(5)).build(); .sendTime(now.minusDays(5)).build();
when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L), when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L),
any(LocalDateTime.class), eq(quitTime), eq(100))) any(LocalDateTime.class), eq(quitTime), eq(100)))
.thenReturn(List.of(quitGroupMsg)); .thenReturn(ListUtil.of(quitGroupMsg));
// 调用 // 调用
List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100); List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
@ -280,14 +282,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
public void testPullMessages_quitMemberFilteredByBoundarySendTime() { public void testPullMessages_quitMemberFilteredByBoundarySendTime() {
// 准备minId > 0边界消息 sendTime 晚于窗口起点,应当被用作 minQuitTime // 准备minId > 0边界消息 sendTime 晚于窗口起点,应当被用作 minQuitTime
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of()); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of());
LocalDateTime boundarySendTime = now.minusDays(2); LocalDateTime boundarySendTime = now.minusDays(2);
ImGroupMessageDO boundary = ImGroupMessageDO.builder() ImGroupMessageDO boundary = ImGroupMessageDO.builder()
.id(8L).groupId(10L).senderId(2L).sendTime(boundarySendTime).build(); .id(8L).groupId(10L).senderId(2L).sendTime(boundarySendTime).build();
when(groupMessageMapper.selectById(8L)).thenReturn(boundary); when(groupMessageMapper.selectById(8L)).thenReturn(boundary);
when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime)) when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
// 调用 // 调用
List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 8L, 100); List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 8L, 100);
@ -306,24 +308,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(joinTime).build(); .joinTime(joinTime).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(activeMember));
ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder() ImGroupMessageDO beforeJoin = ImGroupMessageDO.builder()
.id(100L).groupId(10L).senderId(2L) .id(100L).groupId(10L).senderId(2L)
.sendTime(now.minusHours(3)).build(); .sendTime(now.minusHours(3)).build();
ImGroupMessageDO directedMsg = ImGroupMessageDO.builder() ImGroupMessageDO directedMsg = ImGroupMessageDO.builder()
.id(101L).groupId(10L).senderId(2L) .id(101L).groupId(10L).senderId(2L)
.receiverUserIds(List.of(2L, 3L)) .receiverUserIds(ListUtil.of(2L, 3L))
.sendTime(now.minusMinutes(50)).build(); .sendTime(now.minusMinutes(50)).build();
ImGroupMessageDO visibleActiveMsg = ImGroupMessageDO.builder() ImGroupMessageDO visibleActiveMsg = ImGroupMessageDO.builder()
.id(102L).groupId(10L).senderId(2L) .id(102L).groupId(10L).senderId(2L)
.sendTime(now.minusMinutes(30)).build(); .sendTime(now.minusMinutes(30)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(8L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(8L),
any(LocalDateTime.class), eq(2))) any(LocalDateTime.class), eq(2)))
.thenReturn(List.of(beforeJoin, directedMsg)); .thenReturn(ListUtil.of(beforeJoin, directedMsg));
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(101L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(101L),
any(LocalDateTime.class), eq(2))) any(LocalDateTime.class), eq(2)))
.thenReturn(List.of(visibleActiveMsg)); .thenReturn(ListUtil.of(visibleActiveMsg));
LocalDateTime boundarySendTime = now.minusDays(2); LocalDateTime boundarySendTime = now.minusDays(2);
ImGroupMessageDO boundary = ImGroupMessageDO.builder() ImGroupMessageDO boundary = ImGroupMessageDO.builder()
@ -337,14 +339,14 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.joinTime(now.minusDays(10)) .joinTime(now.minusDays(10))
.quitTime(quitTime).build(); .quitTime(quitTime).build();
when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime)) when(groupMemberService.getQuitGroupMemberListByUserId(1L, boundarySendTime))
.thenReturn(List.of(quitMember)); .thenReturn(ListUtil.of(quitMember));
ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder() ImGroupMessageDO quitGroupMsg = ImGroupMessageDO.builder()
.id(50L).groupId(20L).senderId(99L) .id(50L).groupId(20L).senderId(99L)
.sendTime(now.minusDays(1)).build(); .sendTime(now.minusDays(1)).build();
when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L), when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L),
any(LocalDateTime.class), eq(quitTime), eq(2))) any(LocalDateTime.class), eq(quitTime), eq(2)))
.thenReturn(List.of(quitGroupMsg)); .thenReturn(ListUtil.of(quitGroupMsg));
// 调用 // 调用
List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 8L, 2); List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 8L, 2);
@ -353,9 +355,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
assertEquals(2, result.size()); assertEquals(2, result.size());
assertEquals(50L, result.get(0).getId()); assertEquals(50L, result.get(0).getId());
assertEquals(102L, result.get(1).getId()); assertEquals(102L, result.get(1).getId());
verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(8L), verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(8L),
any(LocalDateTime.class), eq(2)); any(LocalDateTime.class), eq(2));
verify(groupMessageMapper).selectListByMinId(eq(List.of(10L)), eq(101L), verify(groupMessageMapper).selectListByMinId(eq(ListUtil.of(10L)), eq(101L),
any(LocalDateTime.class), eq(2)); any(LocalDateTime.class), eq(2));
verify(groupMemberService).getQuitGroupMemberListByUserId(1L, boundarySendTime); verify(groupMemberService).getQuitGroupMemberListByUserId(1L, boundarySendTime);
verify(groupMessageMapper).selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L), verify(groupMessageMapper).selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(8L),
@ -372,22 +374,22 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(now.minusDays(10)).build(); .joinTime(now.minusDays(10)).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member));
// 定向接收消息:只给用户 2 和 3 // 定向接收消息:只给用户 2 和 3
ImGroupMessageDO directedMsg = ImGroupMessageDO.builder() ImGroupMessageDO directedMsg = ImGroupMessageDO.builder()
.id(1L).groupId(10L).senderId(5L) .id(1L).groupId(10L).senderId(5L)
.receiverUserIds(List.of(2L, 3L)) .receiverUserIds(ListUtil.of(2L, 3L))
.sendTime(now.minusHours(2)).build(); .sendTime(now.minusHours(2)).build();
// 全员消息 // 全员消息
ImGroupMessageDO allMsg = ImGroupMessageDO.builder() ImGroupMessageDO allMsg = ImGroupMessageDO.builder()
.id(2L).groupId(10L).senderId(5L) .id(2L).groupId(10L).senderId(5L)
.sendTime(now.minusHours(1)).build(); .sendTime(now.minusHours(1)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(100))) any(LocalDateTime.class), eq(100)))
.thenReturn(List.of(directedMsg, allMsg)); .thenReturn(ListUtil.of(directedMsg, allMsg));
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
// 调用 // 调用
List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100); List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
@ -405,24 +407,24 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(now.minusDays(10)).build(); .joinTime(now.minusDays(10)).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member));
ImGroupMessageDO atMsg = ImGroupMessageDO.builder() ImGroupMessageDO atMsg = ImGroupMessageDO.builder()
.id(1L).groupId(10L).senderId(2L) .id(1L).groupId(10L).senderId(2L)
.atUserIds(List.of(1L, 3L)) .atUserIds(ListUtil.of(1L, 3L))
.sendTime(now.minusHours(1)).build(); .sendTime(now.minusHours(1)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(100))) any(LocalDateTime.class), eq(100)))
.thenReturn(List.of(atMsg)); .thenReturn(ListUtil.of(atMsg));
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
// 调用 // 调用
List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100); List<ImGroupMessageDO> result = groupMessageService.pullGroupMessageList(1L, 0L, 100);
// 断言:@ 字段正确返回 // 断言:@ 字段正确返回
assertEquals(1, result.size()); assertEquals(1, result.size());
assertEquals(List.of(1L, 3L), result.get(0).getAtUserIds()); assertEquals(ListUtil.of(1L, 3L), result.get(0).getAtUserIds());
} }
@Test @Test
@ -432,15 +434,15 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(now.minusDays(10)).build(); .joinTime(now.minusDays(10)).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(activeMember)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(activeMember));
ImGroupMessageDO activeMsg1 = ImGroupMessageDO.builder() ImGroupMessageDO activeMsg1 = ImGroupMessageDO.builder()
.id(1000L).groupId(10L).senderId(2L).sendTime(now.minusHours(2)).build(); .id(1000L).groupId(10L).senderId(2L).sendTime(now.minusHours(2)).build();
ImGroupMessageDO activeMsg2 = ImGroupMessageDO.builder() ImGroupMessageDO activeMsg2 = ImGroupMessageDO.builder()
.id(2000L).groupId(10L).senderId(2L).sendTime(now.minusHours(1)).build(); .id(2000L).groupId(10L).senderId(2L).sendTime(now.minusHours(1)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(2))) any(LocalDateTime.class), eq(2)))
.thenReturn(List.of(activeMsg1, activeMsg2)); .thenReturn(ListUtil.of(activeMsg1, activeMsg2));
LocalDateTime quitTime = now.minusDays(1); LocalDateTime quitTime = now.minusDays(1);
ImGroupMemberDO quitMember = ImGroupMemberDO.builder() ImGroupMemberDO quitMember = ImGroupMemberDO.builder()
@ -449,7 +451,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.joinTime(now.minusDays(20)) .joinTime(now.minusDays(20))
.quitTime(quitTime).build(); .quitTime(quitTime).build();
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of(quitMember)); .thenReturn(ListUtil.of(quitMember));
ImGroupMessageDO quit1 = ImGroupMessageDO.builder() ImGroupMessageDO quit1 = ImGroupMessageDO.builder()
.id(150L).groupId(20L).senderId(99L).sendTime(now.minusDays(5)).build(); .id(150L).groupId(20L).senderId(99L).sendTime(now.minusDays(5)).build();
@ -457,7 +459,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.id(160L).groupId(20L).senderId(99L).sendTime(now.minusDays(4)).build(); .id(160L).groupId(20L).senderId(99L).sendTime(now.minusDays(4)).build();
when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L), when(groupMessageMapper.selectListByGroupIdAndMinIdAndQuitTimeBefore(eq(20L), eq(0L),
any(LocalDateTime.class), eq(quitTime), eq(2))) any(LocalDateTime.class), eq(quitTime), eq(2)))
.thenReturn(List.of(quit1, quit2)); .thenReturn(ListUtil.of(quit1, quit2));
when(groupMessageReadRedisDAO.getReadMaxMessageId(anyLong(), eq(1L))).thenReturn(null); when(groupMessageReadRedisDAO.getReadMaxMessageId(anyLong(), eq(1L))).thenReturn(null);
@ -475,7 +477,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(now.minusDays(10)).build(); .joinTime(now.minusDays(10)).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member));
ImGroupMessageDO low = ImGroupMessageDO.builder() ImGroupMessageDO low = ImGroupMessageDO.builder()
.id(5L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus()) .id(5L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus())
@ -483,11 +485,11 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMessageDO high = ImGroupMessageDO.builder() ImGroupMessageDO high = ImGroupMessageDO.builder()
.id(10L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus()) .id(10L).groupId(10L).senderId(2L).status(ImMessageStatusEnum.UNREAD.getStatus())
.sendTime(now.minusHours(1)).build(); .sendTime(now.minusHours(1)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(100))) any(LocalDateTime.class), eq(100)))
.thenReturn(List.of(low, high)); .thenReturn(ListUtil.of(low, high));
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(7L); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(7L);
@ -505,18 +507,18 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.groupId(10L).userId(1L) .groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(now.minusDays(10)).build(); .joinTime(now.minusDays(10)).build();
when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(List.of(member)); when(groupMemberService.getActiveGroupMemberListByUserId(1L)).thenReturn(ListUtil.of(member));
ImGroupMessageDO receiptMsg = ImGroupMessageDO.builder() ImGroupMessageDO receiptMsg = ImGroupMessageDO.builder()
.id(100L).groupId(10L).senderId(1L) .id(100L).groupId(10L).senderId(1L)
.status(ImMessageStatusEnum.UNREAD.getStatus()) .status(ImMessageStatusEnum.UNREAD.getStatus())
.receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus())
.sendTime(now.minusHours(1)).build(); .sendTime(now.minusHours(1)).build();
when(groupMessageMapper.selectListByMinId(eq(List.of(10L)), eq(0L), when(groupMessageMapper.selectListByMinId(eq(ListUtil.of(10L)), eq(0L),
any(LocalDateTime.class), eq(100))) any(LocalDateTime.class), eq(100)))
.thenReturn(List.of(receiptMsg)); .thenReturn(ListUtil.of(receiptMsg));
when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class))) when(groupMemberService.getQuitGroupMemberListByUserId(eq(1L), any(LocalDateTime.class)))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(100L); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(100L);
Map<Long, Long> positions = new HashMap<>(); Map<Long, Long> positions = new HashMap<>();
@ -525,7 +527,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
positions.put(3L, 50L); positions.put(3L, 50L);
when(groupMessageReadRedisDAO.getReadMaxMessageIdMap(10L)).thenReturn(positions); when(groupMessageReadRedisDAO.getReadMaxMessageIdMap(10L)).thenReturn(positions);
List<ImGroupMemberDO> allMembers = List.of( List<ImGroupMemberDO> allMembers = ListUtil.of(
member, member,
ImGroupMemberDO.builder().groupId(10L).userId(2L) ImGroupMemberDO.builder().groupId(10L).userId(2L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
@ -564,7 +566,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1); when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1);
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
.thenReturn(List.of(1L, 2L)); .thenReturn(ListUtil.of(1L, 2L));
// 调用 // 调用
ImGroupMessageDO result = groupMessageService.recallGroupMessage(1L, 50L); ImGroupMessageDO result = groupMessageService.recallGroupMessage(1L, 50L);
@ -669,7 +671,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
// 用户 2: 正常,入群在消息之前 // 用户 2: 正常,入群在消息之前
// 用户 3: 正常,但入群在消息之后 → 不可见 // 用户 3: 正常,但入群在消息之后 → 不可见
// 用户 5: 发送者,不计入回执 // 用户 5: 发送者,不计入回执
List<ImGroupMemberDO> allMembers = List.of( List<ImGroupMemberDO> allMembers = ListUtil.of(
currentMember, currentMember,
ImGroupMemberDO.builder().groupId(10L).userId(1L) ImGroupMemberDO.builder().groupId(10L).userId(1L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
@ -739,7 +741,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO member = ImGroupMemberDO.builder() ImGroupMemberDO member = ImGroupMemberDO.builder()
.groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build(); .groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member); when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member);
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L));
when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1); when(groupMessageMapper.insert(any(ImGroupMessageDO.class))).thenReturn(1);
// 调用 // 调用
@ -821,7 +823,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.id(100L).groupId(10L).senderId(2L).sendTime(LocalDateTime.now()).build()); .id(100L).groupId(10L).senderId(2L).sendTime(LocalDateTime.now()).build());
when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(5L); when(groupMessageReadRedisDAO.getReadMaxMessageId(10L, 1L)).thenReturn(5L);
// readGroupMessageEvent 内部会调 selectListByGroupIdAndPendingReceipt → 返回空简化流程 // readGroupMessageEvent 内部会调 selectListByGroupIdAndPendingReceipt → 返回空简化流程
when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 5L, 100L)).thenReturn(List.of()); when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 5L, 100L)).thenReturn(ListUtil.of());
// 调用 // 调用
groupMessageService.readGroupMessages(1L, 10L, 100L); groupMessageService.readGroupMessages(1L, 10L, 100L);
@ -875,7 +877,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMemberDO member = ImGroupMemberDO.builder() ImGroupMemberDO member = ImGroupMemberDO.builder()
.groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build(); .groupId(10L).userId(1L).status(CommonStatusEnum.ENABLE.getStatus()).build();
when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member); when(groupMemberService.validateMemberInGroup(10L, 1L)).thenReturn(member);
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L, 2L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L, 2L));
ImGroupMessageDO result = groupMessageService.sendGroupMessage(1L, reqVO); ImGroupMessageDO result = groupMessageService.sendGroupMessage(1L, reqVO);
@ -932,8 +934,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus())
.status(ImMessageStatusEnum.UNREAD.getStatus()).build(); .status(ImMessageStatusEnum.UNREAD.getStatus()).build();
when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L)) when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L))
.thenReturn(List.of(pending)); .thenReturn(ListUtil.of(pending));
List<ImGroupMemberDO> activeMembers = List.of( List<ImGroupMemberDO> activeMembers = ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(5L) ImGroupMemberDO.builder().groupId(10L).userId(5L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(LocalDateTime.now().minusDays(10)).build(), .joinTime(LocalDateTime.now().minusDays(10)).build(),
@ -971,8 +973,8 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus()) .receiptStatus(ImGroupMessageReceiptStatusEnum.PENDING.getStatus())
.status(ImMessageStatusEnum.UNREAD.getStatus()).build(); .status(ImMessageStatusEnum.UNREAD.getStatus()).build();
when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L)) when(groupMessageMapper.selectListByGroupIdAndPendingReceipt(10L, 0L, 100L))
.thenReturn(List.of(pending)); .thenReturn(ListUtil.of(pending));
List<ImGroupMemberDO> activeMembers = List.of( List<ImGroupMemberDO> activeMembers = ListUtil.of(
ImGroupMemberDO.builder().groupId(10L).userId(5L) ImGroupMemberDO.builder().groupId(10L).userId(5L)
.status(CommonStatusEnum.ENABLE.getStatus()) .status(CommonStatusEnum.ENABLE.getStatus())
.joinTime(LocalDateTime.now().minusDays(10)).build(), .joinTime(LocalDateTime.now().minusDays(10)).build(),
@ -1006,7 +1008,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
.setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
.setContent("{\"messageId\":1}"); .setContent("{\"messageId\":1}");
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
.thenReturn(List.of(1L, 2L, 3L, 4L)); .thenReturn(ListUtil.of(1L, 2L, 3L, 4L));
groupMessageService.sendGroupMessage(1L, dto); groupMessageService.sendGroupMessage(1L, dto);
@ -1023,9 +1025,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
.setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
.setContent("{\"messageId\":1}") .setContent("{\"messageId\":1}")
.setReceiverUserIds(List.of(2L, 3L)); .setReceiverUserIds(ListUtil.of(2L, 3L));
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
.thenReturn(List.of(1L, 2L, 3L, 4L)); .thenReturn(ListUtil.of(1L, 2L, 3L, 4L));
groupMessageService.sendGroupMessage(1L, dto); groupMessageService.sendGroupMessage(1L, dto);
@ -1042,9 +1044,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
.setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
.setContent("{\"messageId\":1}") .setContent("{\"messageId\":1}")
.setReceiverUserIds(List.of(2L, 3L)); .setReceiverUserIds(ListUtil.of(2L, 3L));
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)) when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L))
.thenReturn(List.of(1L, 2L, 3L, 4L)); .thenReturn(ListUtil.of(1L, 2L, 3L, 4L));
groupMessageService.sendGroupMessage(99L, dto); groupMessageService.sendGroupMessage(99L, dto);
@ -1061,7 +1063,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
.setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
.setContent(new RecallMessage().setMessageId(50L)); .setContent(new RecallMessage().setMessageId(50L));
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L));
groupMessageService.sendGroupMessage(1L, dto); groupMessageService.sendGroupMessage(1L, dto);
@ -1085,7 +1087,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
.setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType()) .setGroupId(10L).setType(ImMessageTypeEnum.RECALL.getType())
.setContent("{\"messageId\":50}").setReceipt(true); .setContent("{\"messageId\":50}").setReceipt(true);
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L));
groupMessageService.sendGroupMessage(1L, dto); groupMessageService.sendGroupMessage(1L, dto);
@ -1099,7 +1101,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
// 准备persistent=false 类型RECEIPT 回执)→ 不入库,仅推送 // 准备persistent=false 类型RECEIPT 回执)→ 不入库,仅推送
ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
.setGroupId(10L).setType(ImMessageTypeEnum.RECEIPT.getType()); .setGroupId(10L).setType(ImMessageTypeEnum.RECEIPT.getType());
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(List.of(1L, 2L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(10L)).thenReturn(ListUtil.of(1L, 2L));
groupMessageService.sendGroupMessage(1L, dto); groupMessageService.sendGroupMessage(1L, dto);
@ -1110,7 +1112,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testSendGroupMessage_threeArg_explicitTargetsBypassActiveMembers() { public void testSendGroupMessage_threeArg_explicitTargetsBypassActiveMembers() {
// 准备:调用方传入显式 targets解散场景成员已被批量 DISABLE必须按移除前快照推送 // 准备:调用方传入显式 targets解散场景成员已被批量 DISABLE必须按移除前快照推送
Set<Long> targets = Set.of(1L, 2L, 3L); Set<Long> targets = CollUtil.newHashSet(1L, 2L, 3L);
ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO() ImGroupMessageSendDTO dto = new ImGroupMessageSendDTO()
.setGroupId(10L).setType(ImMessageTypeEnum.GROUP_DISSOLVE.getType()).setContent("{}"); .setGroupId(10L).setType(ImMessageTypeEnum.GROUP_DISSOLVE.getType()).setContent("{}");
@ -1138,7 +1140,7 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
reqVO.setMaxId(100L); reqVO.setMaxId(100L);
reqVO.setLimit(20); reqVO.setLimit(20);
List<ImGroupMessageDO> mockList = List.of( List<ImGroupMessageDO> mockList = ListUtil.of(
ImGroupMessageDO.builder().id(99L).groupId(10L).senderId(2L) ImGroupMessageDO.builder().id(99L).groupId(10L).senderId(2L)
.sendTime(joinTime.plusMinutes(1)).build() .sendTime(joinTime.plusMinutes(1)).build()
); );
@ -1181,9 +1183,9 @@ public class ImGroupMessageServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testDeleteReadMaxMessageIds_delegatesToRedis() { public void testDeleteReadMaxMessageIds_delegatesToRedis() {
groupMessageService.deleteReadMaxMessageIds(10L, List.of(1L, 2L)); groupMessageService.deleteReadMaxMessageIds(10L, ListUtil.of(1L, 2L));
verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, List.of(1L, 2L)); verify(groupMessageReadRedisDAO).deleteReadMaxMessageIds(10L, ListUtil.of(1L, 2L));
} }
@Test @Test

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.im.service.message; package cn.iocoder.yudao.module.im.service.message;
import cn.hutool.core.collection.ListUtil;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageListReqVO; import cn.iocoder.yudao.module.im.controller.admin.message.vo.privates.ImPrivateMessageListReqVO;
@ -135,7 +136,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest {
@Test @Test
public void testPullMessages_success() { public void testPullMessages_success() {
// 准备 // 准备
List<ImPrivateMessageDO> mockMessages = List.of( List<ImPrivateMessageDO> mockMessages = ListUtil.of(
ImPrivateMessageDO.builder().id(1L).senderId(1L).receiverId(2L).build(), ImPrivateMessageDO.builder().id(1L).senderId(1L).receiverId(2L).build(),
ImPrivateMessageDO.builder().id(2L).senderId(2L).receiverId(1L).build() ImPrivateMessageDO.builder().id(2L).senderId(2L).receiverId(1L).build()
); );
@ -415,7 +416,7 @@ public class ImPrivateMessageServiceImplTest extends BaseMockitoUnitTest {
reqVO.setReceiverId(2L); reqVO.setReceiverId(2L);
reqVO.setMaxId(100L); reqVO.setMaxId(100L);
reqVO.setLimit(20); reqVO.setLimit(20);
List<ImPrivateMessageDO> mockList = List.of( List<ImPrivateMessageDO> mockList = ListUtil.of(
ImPrivateMessageDO.builder().id(99L).senderId(1L).receiverId(2L).build(), ImPrivateMessageDO.builder().id(99L).senderId(1L).receiverId(2L).build(),
ImPrivateMessageDO.builder().id(98L).senderId(2L).receiverId(1L).build() ImPrivateMessageDO.builder().id(98L).senderId(2L).receiverId(1L).build()
); );

View File

@ -1,5 +1,8 @@
package cn.iocoder.yudao.module.im.service.rtc; package cn.iocoder.yudao.module.im.service.rtc;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
import cn.iocoder.yudao.module.im.controller.admin.rtc.vo.ImRtcCallCreateReqVO; import cn.iocoder.yudao.module.im.controller.admin.rtc.vo.ImRtcCallCreateReqVO;
@ -30,8 +33,6 @@ import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_REQUIRED; import static cn.iocoder.yudao.module.im.enums.ErrorCodeConstants.RTC_GROUP_INVITEE_REQUIRED;
@ -103,8 +104,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
// 准备:候选非空但每个 CAS 都失败(并发已变状态) // 准备:候选非空但每个 CAS 都失败(并发已变状态)
ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING);
when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any()))
.thenReturn(List.of(p)); .thenReturn(ListUtil.of(p));
when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L))); when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(100L, buildUser(100L)));
when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
.thenReturn(0); .thenReturn(0);
@ -122,15 +123,15 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
// 准备:群通话单候选 CAS 成功shouldCloseGroupRoom 通过 selectListByRoom 多 JOINED 让其返 false跳过 endSession // 准备:群通话单候选 CAS 成功shouldCloseGroupRoom 通过 selectListByRoom 多 JOINED 让其返 false跳过 endSession
ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING);
when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any()))
.thenReturn(List.of(p)); .thenReturn(ListUtil.of(p));
when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L))); when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(100L, buildUser(100L)));
when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
.thenReturn(1); .thenReturn(1);
ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L); ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L);
when(rtcCallMapper.selectByRoom("r1")).thenReturn(call); when(rtcCallMapper.selectByRoom("r1")).thenReturn(call);
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(List.of(200L, 201L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(ListUtil.of(200L, 201L));
// 房内 2 个 JOINED + 1 个 INVITING → shouldCloseGroupRoom 返 false // 房内 2 个 JOINED + 1 个 INVITING → shouldCloseGroupRoom 返 false
when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of( when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(ListUtil.of(
buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED),
buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED),
buildParticipant(22L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING) buildParticipant(22L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING)
@ -150,8 +151,8 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
// 准备CAS 成功后通话主表缺失(异常兜底场景) // 准备CAS 成功后通话主表缺失(异常兜底场景)
ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING); ImRtcParticipantDO p = buildParticipant(10L, "r1", 100L, ImRtcParticipantStatusEnum.INVITING);
when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any())) when(rtcParticipantMapper.selectListByStatusAndInviteTimeBefore(any(), any()))
.thenReturn(List.of(p)); .thenReturn(ListUtil.of(p));
when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(100L, buildUser(100L))); when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(100L, buildUser(100L)));
when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) when(rtcParticipantMapper.updateByIdAndStatus(eq(10L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
.thenReturn(1); .thenReturn(1);
when(rtcCallMapper.selectByRoom("r1")).thenReturn(null); when(rtcCallMapper.selectByRoom("r1")).thenReturn(null);
@ -219,15 +220,15 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
ImRtcParticipantDO timeoutTarget = buildParticipant(11L, "r1", 101L, ImRtcParticipantStatusEnum.INVITING); ImRtcParticipantDO timeoutTarget = buildParticipant(11L, "r1", 101L, ImRtcParticipantStatusEnum.INVITING);
when(rtcParticipantMapper.selectListByRoomAndStatusAndInviteTimeBefore( when(rtcParticipantMapper.selectListByRoomAndStatusAndInviteTimeBefore(
eq("r1"), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) eq("r1"), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
.thenReturn(List.of(timeoutTarget)); .thenReturn(ListUtil.of(timeoutTarget));
when(adminUserApi.getUserMap(anySet())).thenReturn(Map.of(101L, buildUser(101L))); when(adminUserApi.getUserMap(anySet())).thenReturn(MapUtil.of(101L, buildUser(101L)));
when(rtcParticipantMapper.updateByIdAndStatus(eq(11L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any())) when(rtcParticipantMapper.updateByIdAndStatus(eq(11L), eq(ImRtcParticipantStatusEnum.INVITING.getStatus()), any()))
.thenReturn(1); .thenReturn(1);
ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L); ImRtcCallDO call = buildCall("r1", 200L, ImConversationTypeEnum.GROUP, 999L);
when(rtcCallMapper.selectByRoom("r1")).thenReturn(call); when(rtcCallMapper.selectByRoom("r1")).thenReturn(call);
when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(List.of(200L, 201L)); when(groupMemberService.getActiveGroupMemberUserIdsByGroupId(999L)).thenReturn(ListUtil.of(200L, 201L));
// 让 shouldCloseGroupRoom 返 false // 让 shouldCloseGroupRoom 返 false
when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of( when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(ListUtil.of(
buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(20L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED),
buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED) buildParticipant(21L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED)
)); ));
@ -253,7 +254,7 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
ImRtcCallCreateReqVO reqVO = new ImRtcCallCreateReqVO(); ImRtcCallCreateReqVO reqVO = new ImRtcCallCreateReqVO();
reqVO.setConversationType(ImConversationTypeEnum.GROUP.getType()); reqVO.setConversationType(ImConversationTypeEnum.GROUP.getType());
reqVO.setGroupId(10L); reqVO.setGroupId(10L);
reqVO.setInviteeIds(Set.of(100L)); reqVO.setInviteeIds(CollUtil.newHashSet(100L));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> rtcCallService.createCall(100L, reqVO)); () -> rtcCallService.createCall(100L, reqVO));
@ -335,14 +336,14 @@ public class ImRtcCallServiceImplTest extends BaseMockitoUnitTest {
Callable<Void> callable = invocation.getArgument(1); Callable<Void> callable = invocation.getArgument(1);
return callable.call(); return callable.call();
}); });
when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(List.of( when(rtcParticipantMapper.selectListByRoom("r1")).thenReturn(ListUtil.of(
buildParticipant(10L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(10L, "r1", 200L, ImRtcParticipantStatusEnum.JOINED),
buildParticipant(11L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED), buildParticipant(11L, "r1", 201L, ImRtcParticipantStatusEnum.JOINED),
buildParticipant(12L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING) buildParticipant(12L, "r1", 202L, ImRtcParticipantStatusEnum.INVITING)
)); ));
ImRtcCallInviteReqVO reqVO = new ImRtcCallInviteReqVO(); ImRtcCallInviteReqVO reqVO = new ImRtcCallInviteReqVO();
reqVO.setRoom("r1"); reqVO.setRoom("r1");
reqVO.setInviteeIds(Set.of(203L)); reqVO.setInviteeIds(CollUtil.newHashSet(203L));
ServiceException exception = assertThrows(ServiceException.class, ServiceException exception = assertThrows(ServiceException.class,
() -> rtcCallService.inviteCall(200L, reqVO)); () -> rtcCallService.inviteCall(200L, reqVO));

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.im.service.sensitiveword; package cn.iocoder.yudao.module.im.service.sensitiveword;
import cn.hutool.core.collection.ListUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.exception.ServiceException; import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
@ -44,7 +45,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
// mock 启用敏感词列表LoadingCache 在首次 validateText 时懒加载,无需主动 init // mock 启用敏感词列表LoadingCache 在首次 validateText 时懒加载,无需主动 init
// 用 lenient 避免 null / empty 等不触发 cache load 的用例报 UnnecessaryStubbing // 用 lenient 避免 null / empty 等不触发 cache load 的用例报 UnnecessaryStubbing
lenient().when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) lenient().when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
.thenReturn(List.of( .thenReturn(ListUtil.of(
ImSensitiveWordDO.builder().id(1L).word("badword") ImSensitiveWordDO.builder().id(1L).word("badword")
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImSensitiveWordDO.builder().id(2L).word("违禁词") ImSensitiveWordDO.builder().id(2L).word("违禁词")
@ -118,7 +119,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
// 准备mapper 返回新词库(额外多一个 newbad并让 createSensitiveWord 走通 // 准备mapper 返回新词库(额外多一个 newbad并让 createSensitiveWord 走通
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
.thenReturn(List.of( .thenReturn(ListUtil.of(
ImSensitiveWordDO.builder().id(1L).word("badword") ImSensitiveWordDO.builder().id(1L).word("badword")
.status(CommonStatusEnum.ENABLE.getStatus()).build(), .status(CommonStatusEnum.ENABLE.getStatus()).build(),
ImSensitiveWordDO.builder().id(2L).word("违禁词") ImSensitiveWordDO.builder().id(2L).word("违禁词")
@ -178,7 +179,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
when(imSensitiveWordMapper.selectByWord("updatedbad")).thenReturn(null); when(imSensitiveWordMapper.selectByWord("updatedbad")).thenReturn(null);
// 准备reload 时返回新词库 // 准备reload 时返回新词库
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
.thenReturn(List.of( .thenReturn(ListUtil.of(
ImSensitiveWordDO.builder().id(1L).word("updatedbad") ImSensitiveWordDO.builder().id(1L).word("updatedbad")
.status(CommonStatusEnum.ENABLE.getStatus()).build() .status(CommonStatusEnum.ENABLE.getStatus()).build()
)); ));
@ -211,7 +212,7 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
.status(CommonStatusEnum.ENABLE.getStatus()).build()); .status(CommonStatusEnum.ENABLE.getStatus()).build());
// 准备reload 时返回剩余词库(只剩中文那条) // 准备reload 时返回剩余词库(只剩中文那条)
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
.thenReturn(List.of( .thenReturn(ListUtil.of(
ImSensitiveWordDO.builder().id(2L).word("违禁词") ImSensitiveWordDO.builder().id(2L).word("违禁词")
.status(CommonStatusEnum.ENABLE.getStatus()).build() .status(CommonStatusEnum.ENABLE.getStatus()).build()
)); ));
@ -251,24 +252,24 @@ public class ImSensitiveWordServiceImplTest extends BaseMockitoUnitTest {
// 准备reload 时返回空词库 // 准备reload 时返回空词库
when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus())) when(imSensitiveWordMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()))
.thenReturn(List.of()); .thenReturn(ListUtil.of());
// 调用:批量删除,触发 invalidate // 调用:批量删除,触发 invalidate
sensitiveWordService.deleteSensitiveWordList(List.of(1L, 2L)); sensitiveWordService.deleteSensitiveWordList(ListUtil.of(1L, 2L));
// 调用 + 断言:所有词都不再命中 // 调用 + 断言:所有词都不再命中
assertDoesNotThrow(() -> sensitiveWordService.validateText("contains badword here")); assertDoesNotThrow(() -> sensitiveWordService.validateText("contains badword here"));
assertDoesNotThrow(() -> sensitiveWordService.validateText("这条消息里有违禁词哦")); assertDoesNotThrow(() -> sensitiveWordService.validateText("这条消息里有违禁词哦"));
// 断言deleteByIds 被调用 1 次selectListByStatus 共 2 次 // 断言deleteByIds 被调用 1 次selectListByStatus 共 2 次
verify(imSensitiveWordMapper, times(1)).deleteByIds(List.of(1L, 2L)); verify(imSensitiveWordMapper, times(1)).deleteByIds(ListUtil.of(1L, 2L));
verify(imSensitiveWordMapper, times(2)).selectListByStatus(CommonStatusEnum.ENABLE.getStatus()); verify(imSensitiveWordMapper, times(2)).selectListByStatus(CommonStatusEnum.ENABLE.getStatus());
} }
@Test @Test
public void testDeleteSensitiveWordList_emptyIds_skip() { public void testDeleteSensitiveWordList_emptyIds_skip() {
// 调用:空列表直接返回 // 调用:空列表直接返回
sensitiveWordService.deleteSensitiveWordList(List.of()); sensitiveWordService.deleteSensitiveWordList(ListUtil.of());
// 断言mapper 不被调用 // 断言mapper 不被调用
verify(imSensitiveWordMapper, never()).deleteByIds(anyList()); verify(imSensitiveWordMapper, never()).deleteByIds(anyList());

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.api.config;
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO; import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
import cn.iocoder.yudao.module.infra.service.config.ConfigService; import cn.iocoder.yudao.module.infra.service.config.ConfigService;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;

View File

@ -5,7 +5,7 @@ import cn.hutool.core.util.IdUtil;
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClient; import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClient;
import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig; import cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig;
import jakarta.validation.Validation; import javax.validation.Validation;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -2,16 +2,16 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
@Schema(description = "管理后台 - 分类新增/修改 Request VO") @Schema(description = "管理后台 - 分类新增/修改 Request VO")
@Data @Data

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -2,16 +2,16 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
@Schema(description = "管理后台 - 分类新增/修改 Request VO") @Schema(description = "管理后台 - 分类新增/修改 Request VO")
@Data @Data

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraCategoryDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraCategoryMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentContactDO;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,16 +1,16 @@
package cn.iocoder.yudao.module.infra.controller.admin.demo; package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

View File

@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.service.demo;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper; import cn.iocoder.yudao.module.infra.dal.mysql.demo.InfraStudentMapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import java.util.*; import java.util.*;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -2,16 +2,16 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import jakarta.validation.*; import javax.validation.*;
import jakarta.servlet.http.*; import javax.servlet.http.*;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.infra.controller.admin.demo.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import jakarta.validation.constraints.*; import javax.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.infra.service.demo; package cn.iocoder.yudao.module.infra.service.demo;
import java.util.*; import java.util.*;
import jakarta.validation.*; import javax.validation.*;
import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*; import cn.iocoder.yudao.module.infra.controller.admin.demo.vo.*;
import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO; import cn.iocoder.yudao.module.infra.dal.dataobject.demo.InfraStudentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;

Some files were not shown because too many files have changed in this diff Show More