mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 12:18:42 +08:00 
			
		
		
		
	会员: 增加会员分组功能
This commit is contained in:
		@@ -0,0 +1,160 @@
 | 
			
		||||
package cn.iocoder.yudao.module.member.service.group;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.util.RandomUtil;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 | 
			
		||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
 | 
			
		||||
import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 | 
			
		||||
import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupCreateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupPageReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.member.controller.admin.group.vo.MemberGroupUpdateReqVO;
 | 
			
		||||
import cn.iocoder.yudao.module.member.dal.dataobject.group.MemberGroupDO;
 | 
			
		||||
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
 | 
			
		||||
import cn.iocoder.yudao.module.member.dal.mysql.group.MemberGroupMapper;
 | 
			
		||||
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
 | 
			
		||||
import cn.iocoder.yudao.module.system.enums.common.SexEnum;
 | 
			
		||||
import org.junit.jupiter.api.Test;
 | 
			
		||||
import org.springframework.context.annotation.Import;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime;
 | 
			
		||||
import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId;
 | 
			
		||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals;
 | 
			
		||||
import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
 | 
			
		||||
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
 | 
			
		||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_HAS_USER;
 | 
			
		||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.GROUP_NOT_EXISTS;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * {@link MemberGroupServiceImpl} 的单元测试类
 | 
			
		||||
 *
 | 
			
		||||
 * @author owen
 | 
			
		||||
 */
 | 
			
		||||
@Import(MemberGroupServiceImpl.class)
 | 
			
		||||
public class MemberGroupServiceImplTest extends BaseDbUnitTest {
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private MemberGroupServiceImpl groupService;
 | 
			
		||||
 | 
			
		||||
    @Resource
 | 
			
		||||
    private MemberGroupMapper groupMapper;
 | 
			
		||||
    @Resource
 | 
			
		||||
    private MemberUserMapper memberUserMapper;
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testCreateGroup_success() {
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        MemberGroupCreateReqVO reqVO = randomPojo(MemberGroupCreateReqVO.class);
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        Long groupId = groupService.createGroup(reqVO);
 | 
			
		||||
        // 断言
 | 
			
		||||
        assertNotNull(groupId);
 | 
			
		||||
        // 校验记录的属性是否正确
 | 
			
		||||
        MemberGroupDO group = groupMapper.selectById(groupId);
 | 
			
		||||
        assertPojoEquals(reqVO, group);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateGroup_success() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class);
 | 
			
		||||
        groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class, o -> {
 | 
			
		||||
            o.setId(dbGroup.getId()); // 设置更新的 ID
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        groupService.updateGroup(reqVO);
 | 
			
		||||
        // 校验是否更新正确
 | 
			
		||||
        MemberGroupDO group = groupMapper.selectById(reqVO.getId()); // 获取最新的
 | 
			
		||||
        assertPojoEquals(reqVO, group);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateGroup_notExists() {
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        MemberGroupUpdateReqVO reqVO = randomPojo(MemberGroupUpdateReqVO.class);
 | 
			
		||||
 | 
			
		||||
        // 调用, 并断言异常
 | 
			
		||||
        assertServiceException(() -> groupService.updateGroup(reqVO), GROUP_NOT_EXISTS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteGroup_success() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class);
 | 
			
		||||
        groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long id = dbGroup.getId();
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        groupService.deleteGroup(id);
 | 
			
		||||
        // 校验数据不存在了
 | 
			
		||||
        assertNull(groupMapper.selectById(id));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteGroup_notExists() {
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long id = randomLongId();
 | 
			
		||||
 | 
			
		||||
        // 调用, 并断言异常
 | 
			
		||||
        assertServiceException(() -> groupService.deleteGroup(id), GROUP_NOT_EXISTS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteGroup_hasUser() {
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class);
 | 
			
		||||
        groupMapper.insert(dbGroup);// @Sql: 先插入出一条存在的数据
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        Long id = dbGroup.getId();
 | 
			
		||||
 | 
			
		||||
        // mock 会员数据
 | 
			
		||||
        MemberUserDO dbUser = randomPojo(MemberUserDO.class, o -> {
 | 
			
		||||
            o.setGroupId(id);
 | 
			
		||||
            o.setSex(RandomUtil.randomEle(SexEnum.values()).getSex());
 | 
			
		||||
        });
 | 
			
		||||
        memberUserMapper.insert(dbUser);
 | 
			
		||||
 | 
			
		||||
        // 调用, 并断言异常
 | 
			
		||||
        assertServiceException(() -> groupService.deleteGroup(id), GROUP_HAS_USER);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetGroupPage() {
 | 
			
		||||
        String name = randomString();
 | 
			
		||||
        int status = CommonStatusEnum.ENABLE.getStatus();
 | 
			
		||||
 | 
			
		||||
        // mock 数据
 | 
			
		||||
        MemberGroupDO dbGroup = randomPojo(MemberGroupDO.class, o -> { // 等会查询到
 | 
			
		||||
            o.setName(name);
 | 
			
		||||
            o.setStatus(status);
 | 
			
		||||
            o.setCreateTime(buildTime(2023, 2, 18));
 | 
			
		||||
        });
 | 
			
		||||
        groupMapper.insert(dbGroup);
 | 
			
		||||
        // 测试 name 不匹配
 | 
			
		||||
        groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setName("")));
 | 
			
		||||
        // 测试 status 不匹配
 | 
			
		||||
        groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus())));
 | 
			
		||||
        // 测试 createTime 不匹配
 | 
			
		||||
        groupMapper.insert(cloneIgnoreId(dbGroup, o -> o.setCreateTime(null)));
 | 
			
		||||
        // 准备参数
 | 
			
		||||
        MemberGroupPageReqVO reqVO = new MemberGroupPageReqVO();
 | 
			
		||||
        reqVO.setName(name);
 | 
			
		||||
        reqVO.setStatus(status);
 | 
			
		||||
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
 | 
			
		||||
 | 
			
		||||
        // 调用
 | 
			
		||||
        PageResult<MemberGroupDO> pageResult = groupService.getGroupPage(reqVO);
 | 
			
		||||
        // 断言
 | 
			
		||||
        assertEquals(1, pageResult.getTotal());
 | 
			
		||||
        assertEquals(1, pageResult.getList().size());
 | 
			
		||||
        assertPojoEquals(dbGroup, pageResult.getList().get(0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
DELETE FROM "member_user";
 | 
			
		||||
DELETE FROM "member_address";
 | 
			
		||||
DELETE FROM "member_tag";
 | 
			
		||||
DELETE FROM "member_level";
 | 
			
		||||
DELETE FROM "member_level";
 | 
			
		||||
DELETE FROM "member_group";
 | 
			
		||||
@@ -1,19 +1,30 @@
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "member_user"  (
 | 
			
		||||
    "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '编号',
 | 
			
		||||
    "nickname" varchar(30)  NOT NULL DEFAULT '' COMMENT '用户昵称',
 | 
			
		||||
    "avatar" varchar(255)  NOT NULL DEFAULT '' COMMENT '头像',
 | 
			
		||||
    "status" tinyint NOT NULL COMMENT '状态',
 | 
			
		||||
    "mobile" varchar(11)  NOT NULL COMMENT '手机号',
 | 
			
		||||
    "password" varchar(100)  NOT NULL DEFAULT '' COMMENT '密码',
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "member_user"
 | 
			
		||||
(
 | 
			
		||||
    "id"          bigint       NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '编号',
 | 
			
		||||
    "nickname"    varchar(30)  NOT NULL DEFAULT '' COMMENT '用户昵称',
 | 
			
		||||
    "name"        varchar(30)  NULL COMMENT '真实名字',
 | 
			
		||||
    sex           tinyint      null comment '性别',
 | 
			
		||||
    birthday      datetime     null comment '出生日期',
 | 
			
		||||
    area_id       int          null comment '所在地',
 | 
			
		||||
    mark          varchar(255) null comment '用户备注',
 | 
			
		||||
    point         int                   default 0 null comment '积分',
 | 
			
		||||
    "avatar"      varchar(255) NOT NULL DEFAULT '' COMMENT '头像',
 | 
			
		||||
    "status"      tinyint      NOT NULL COMMENT '状态',
 | 
			
		||||
    "mobile"      varchar(11)  NOT NULL COMMENT '手机号',
 | 
			
		||||
    "password"    varchar(100) NOT NULL DEFAULT '' COMMENT '密码',
 | 
			
		||||
    "register_ip" varchar(32)  NOT NULL COMMENT '注册 IP',
 | 
			
		||||
    "login_ip" varchar(50) NULL DEFAULT '' COMMENT '最后登录IP',
 | 
			
		||||
    "login_date" datetime NULL DEFAULT NULL COMMENT '最后登录时间',
 | 
			
		||||
    "creator" varchar(64)  NULL DEFAULT '' COMMENT '创建者',
 | 
			
		||||
    "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 | 
			
		||||
    "updater" varchar(64)  NULL DEFAULT '' COMMENT '更新者',
 | 
			
		||||
    "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 | 
			
		||||
    "deleted" bit(1) NOT NULL DEFAULT '0' COMMENT '是否删除',
 | 
			
		||||
    "tenant_id" bigint not null default  '0',
 | 
			
		||||
    "login_ip"    varchar(50)  NULL     DEFAULT '' COMMENT '最后登录IP',
 | 
			
		||||
    "login_date"  datetime     NULL     DEFAULT NULL COMMENT '最后登录时间',
 | 
			
		||||
    "tag_ids"     varchar(255) NULL     DEFAULT NULL COMMENT '用户标签编号列表,以逗号分隔',
 | 
			
		||||
    "level_id"    bigint       NULL     DEFAULT NULL COMMENT '等级编号',
 | 
			
		||||
    "experience"  bigint       NULL     DEFAULT NULL COMMENT '经验',
 | 
			
		||||
    "group_id"    bigint       NULL     DEFAULT NULL COMMENT '用户分组编号',
 | 
			
		||||
    "creator"     varchar(64)  NULL     DEFAULT '' COMMENT '创建者',
 | 
			
		||||
    "create_time" datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 | 
			
		||||
    "updater"     varchar(64)  NULL     DEFAULT '' COMMENT '更新者',
 | 
			
		||||
    "update_time" datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 | 
			
		||||
    "deleted"     bit(1)       NOT NULL DEFAULT '0' COMMENT '是否删除',
 | 
			
		||||
    "tenant_id"   bigint       not null default '0',
 | 
			
		||||
    PRIMARY KEY ("id")
 | 
			
		||||
) COMMENT '会员表';
 | 
			
		||||
 | 
			
		||||
@@ -63,4 +74,19 @@ CREATE TABLE IF NOT EXISTS "member_level"
 | 
			
		||||
    "tenant_id"      bigint   not null default '0',
 | 
			
		||||
    "status"         int      NOT NULL,
 | 
			
		||||
    PRIMARY KEY ("id")
 | 
			
		||||
) COMMENT '会员等级';
 | 
			
		||||
) COMMENT '会员等级';
 | 
			
		||||
 | 
			
		||||
CREATE TABLE IF NOT EXISTS "member_group"
 | 
			
		||||
(
 | 
			
		||||
    "id"          bigint   NOT NULL GENERATED BY DEFAULT AS IDENTITY,
 | 
			
		||||
    "name"        varchar  NOT NULL,
 | 
			
		||||
    "remark"      varchar  NOT NULL,
 | 
			
		||||
    "status"      varchar  NOT NULL,
 | 
			
		||||
    "creator"     varchar           DEFAULT '',
 | 
			
		||||
    "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 | 
			
		||||
    "updater"     varchar           DEFAULT '',
 | 
			
		||||
    "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 | 
			
		||||
    "deleted"     bit      NOT NULL DEFAULT FALSE,
 | 
			
		||||
    "tenant_id"      bigint   not null default '0',
 | 
			
		||||
    PRIMARY KEY ("id")
 | 
			
		||||
) COMMENT '用户分组';
 | 
			
		||||
		Reference in New Issue
	
	Block a user