Commit 54bf24b96676c5eda988f3d5311470f6c844dde4

Authored by YunaiV
1 parent 551a9684

code review:会员等级

sql/mysql/member_group.sql deleted
1   -create table member_group
2   -(
3   - id bigint auto_increment comment '编号' primary key,
4   - name varchar(30) default '' not null comment '名称',
5   - remark varchar(255) default '' not null comment '备注',
6   - status tinyint default 0 not null comment '状态',
7   - creator varchar(64) default '' null comment '创建者',
8   - create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
9   - updater varchar(64) default '' null comment '更新者',
10   - update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
11   - deleted bit default b'0' not null comment '是否删除',
12   - tenant_id bigint default 0 not null comment '租户编号'
13   -)
14   - comment '用户分组';
15   -
16   -alter table member_user add column group_id bigint null comment '用户分组编号';
17   -
18   --- 菜单 SQL
19   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status, component_name)
20   -VALUES ('用户分组', '', 2, 5, 2262, 'group', '', 'member/group/index', 0, 'MemberGroup');
21   -
22   --- 按钮父菜单ID
23   --- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码
24   -SELECT @parentId := LAST_INSERT_ID();
25   -
26   --- 按钮 SQL
27   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
28   -VALUES ('用户分组查询', 'member:group:query', 3, 1, @parentId, '', '', '', 0);
29   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
30   -VALUES ('用户分组创建', 'member:group:create', 3, 2, @parentId, '', '', '', 0);
31   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
32   -VALUES ('用户分组更新', 'member:group:update', 3, 3, @parentId, '', '', '', 0);
33   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
34   -VALUES ('用户分组删除', 'member:group:delete', 3, 4, @parentId, '', '', '', 0);
35   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
36   -VALUES ('用户分组导出', 'member:group:export', 3, 5, @parentId, '', '', '', 0);
sql/mysql/member_level.sql
1   --- 会员表增加字段
2   -alter table member_user add column experience int not null default 0 comment '经验';
3   -alter table member_user add column level_id bigint comment '等级编号';
4   -
5   --- 增加3张表
6   -create table member_level
7   -(
8   - id bigint auto_increment comment '编号' primary key,
9   - name varchar(30) default '' not null comment '等级名称',
10   - experience int default 0 not null comment '升级经验',
11   - level int default 0 not null comment '等级',
12   - discount tinyint default 100 not null comment '享受折扣',
13   - icon varchar(255) default '' not null comment '等级图标',
14   - background_url varchar(255) default '' not null comment '等级背景图',
15   - status tinyint default 0 not null comment '状态',
16   - creator varchar(64) default '' null comment '创建者',
17   - create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
18   - updater varchar(64) default '' null comment '更新者',
19   - update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
20   - deleted bit default b'0' not null comment '是否删除',
21   - tenant_id bigint default 0 not null comment '租户编号'
22   -)
23   - comment '会员等级';
24   -
25   -create table member_level_log
26   -(
27   - id bigint auto_increment comment '编号' primary key,
28   - user_id bigint default 0 not null comment '用户编号',
29   - level_id bigint default 0 not null comment '等级编号',
30   - level int default 0 not null comment '会员等级',
31   - discount tinyint default 100 not null comment '享受折扣',
32   - experience int default 0 not null comment '升级经验',
33   - user_experience int default 0 not null comment '会员此时的经验',
34   - remark varchar(255) default '' not null comment '备注',
35   - description varchar(255) default '' not null comment '描述',
36   - creator varchar(64) default '' null comment '创建者',
37   - create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
38   - updater varchar(64) default '' null comment '更新者',
39   - update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
40   - deleted bit default b'0' not null comment '是否删除',
41   - tenant_id bigint default 0 not null comment '租户编号'
42   -)
43   - comment '会员等级记录';
44   -
45   -create index idx_user_id on member_level_log (user_id) comment '会员等级记录-用户编号';
46   -
47   -create table member_experience_log
48   -(
49   - id bigint auto_increment comment '编号' primary key,
50   - user_id bigint default 0 not null comment '用户编号',
51   - biz_id varchar(64) default '' not null comment '业务编号',
52   - biz_type tinyint default 0 not null comment '业务类型',
53   - title varchar(30) default '' not null comment '标题',
54   - experience int default 0 not null comment '经验',
55   - total_experience int default 0 not null comment '变更后的经验',
56   - description varchar(512) default '' not null comment '描述',
57   - creator varchar(64) default '' null comment '创建者',
58   - create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
59   - updater varchar(64) default '' null comment '更新者',
60   - update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
61   - deleted bit default b'0' not null comment '是否删除',
62   - tenant_id bigint default 0 not null comment '租户编号'
63   -)
64   - comment '会员经验记录';
65   -
66   -create index idx_user_id on member_experience_log (user_id) comment '会员经验记录-用户编号';
67   -create index idx_user_biz_type on member_experience_log (user_id, biz_type) comment '会员经验记录-用户业务类型';
68   -
69 1 -- 增加字典
70 2 insert system_dict_type(name, type) values ('会员经验业务类型', 'member_experience_biz_type');
71 3 insert system_dict_data(dict_type, label, value, sort) values ('member_experience_biz_type', '管理员调整', '0', 0);
... ... @@ -74,21 +6,3 @@ insert system_dict_data(dict_type, label, value, sort) values ('member_experienc
74 6 insert system_dict_data(dict_type, label, value, sort) values ('member_experience_biz_type', '退单扣除', '3', 3);
75 7 insert system_dict_data(dict_type, label, value, sort) values ('member_experience_biz_type', '签到奖励', '4', 4);
76 8 insert system_dict_data(dict_type, label, value, sort) values ('member_experience_biz_type', '抽奖奖励', '5', 5);
77   -
78   --- 菜单 SQL
79   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status, component_name)
80   -VALUES ('会员等级', '', 2, 3, 2262, 'level', '', 'member/level/index', 0, 'MemberLevel');
81   -
82   --- 按钮父菜单ID
83   --- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码
84   -SELECT @parentId := LAST_INSERT_ID();
85   -
86   --- 按钮 SQL
87   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
88   -VALUES ('会员等级查询', 'member:level:query', 3, 1, @parentId, '', '', '', 0);
89   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
90   -VALUES ('会员等级创建', 'member:level:create', 3, 2, @parentId, '', '', '', 0);
91   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
92   -VALUES ('会员等级更新', 'member:level:update', 3, 3, @parentId, '', '', '', 0);
93   -INSERT INTO system_menu(name, permission, type, sort, parent_id, path, icon, component, status)
94   -VALUES ('会员等级删除', 'member:level:delete', 3, 4, @parentId, '', '', '', 0);
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelBaseVO.java
... ... @@ -35,7 +35,7 @@ public class MemberLevelBaseVO {
35 35 @Schema(description = "享受折扣", requiredMode = Schema.RequiredMode.REQUIRED, example = "98")
36 36 @NotNull(message = "享受折扣不能为空")
37 37 @Range(min = 0, max = 100, message = "享受折扣的范围为 0-100")
38   - private Integer discount;
  38 + private Integer discountPercent;
39 39  
40 40 @Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg")
41 41 @URL(message = "等级图标必须是 URL 格式")
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/log/MemberLevelLogBaseVO.java
... ... @@ -26,7 +26,7 @@ public class MemberLevelLogBaseVO {
26 26  
27 27 @Schema(description = "享受折扣", requiredMode = Schema.RequiredMode.REQUIRED, example = "13319")
28 28 @NotNull(message = "享受折扣不能为空")
29   - private Integer discount;
  29 + private Integer discountPercent;
30 30  
31 31 @Schema(description = "升级经验", requiredMode = Schema.RequiredMode.REQUIRED, example = "13319")
32 32 @NotNull(message = "升级经验不能为空")
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/vo/MemberUserRespVO.java
... ... @@ -29,9 +29,11 @@ public class MemberUserRespVO extends MemberUserBaseVO {
29 29 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
30 30 private LocalDateTime createTime;
31 31  
32   -
33 32 // ========== 其它信息 ==========
34 33  
  34 + @Schema(description = "积分", example = "100")
  35 + private Integer point;
  36 +
35 37 @Schema(description = "会员标签", example = "[红色, 快乐]")
36 38 private List<String> tagNames;
37 39  
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberExperienceLogDO.java
1 1 package cn.iocoder.yudao.module.member.dal.dataobject.level;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
4 5 import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
5 6 import com.baomidou.mybatisplus.annotation.KeySequence;
6 7 import com.baomidou.mybatisplus.annotation.TableId;
... ... @@ -29,6 +30,8 @@ public class MemberExperienceLogDO extends BaseDO {
29 30 private Long id;
30 31 /**
31 32 * 用户编号
  33 + *
  34 + * 关联 {@link MemberUserDO#getId()} 字段
32 35 */
33 36 private Long userId;
34 37 /**
... ... @@ -46,6 +49,10 @@ public class MemberExperienceLogDO extends BaseDO {
46 49 */
47 50 private String title;
48 51 /**
  52 + * 描述
  53 + */
  54 + private String description;
  55 + /**
49 56 * 经验
50 57 */
51 58 private Integer experience;
... ... @@ -53,9 +60,5 @@ public class MemberExperienceLogDO extends BaseDO {
53 60 * 变更后的经验
54 61 */
55 62 private Integer totalExperience;
56   - /**
57   - * 描述
58   - */
59   - private String description;
60 63  
61 64 }
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelDO.java
... ... @@ -34,17 +34,18 @@ public class MemberLevelDO extends BaseDO {
34 34 */
35 35 private String name;
36 36 /**
37   - * 升级经验
38   - */
39   - private Integer experience;
40   - /**
41 37 * 等级
42 38 */
43 39 private Integer level;
44 40 /**
  41 + * 升级经验
  42 + */
  43 + private Integer experience;
  44 + /**
45 45 * 享受折扣
46 46 */
47   - private Integer discount;
  47 + private Integer discountPercent;
  48 +
48 49 /**
49 50 * 等级图标
50 51 */
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelLogDO.java
1 1 package cn.iocoder.yudao.module.member.dal.dataobject.level;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
4 5 import com.baomidou.mybatisplus.annotation.KeySequence;
5 6 import com.baomidou.mybatisplus.annotation.TableId;
6 7 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -30,20 +31,26 @@ public class MemberLevelLogDO extends BaseDO {
30 31 private Long id;
31 32 /**
32 33 * 用户编号
  34 + *
  35 + * 关联 {@link MemberUserDO#getId()} 字段
33 36 */
34 37 private Long userId;
35 38 /**
36 39 * 等级编号
  40 + *
  41 + * 关联 {@link MemberLevelDO#getId()} 字段
37 42 */
38 43 private Long levelId;
39 44 /**
40 45 * 会员等级
  46 + *
  47 + * 冗余 {@link MemberLevelDO#getLevel()} 字段
41 48 */
42 49 private Integer level;
43 50 /**
44 51 * 享受折扣
45 52 */
46   - private Integer discount;
  53 + private Integer discountPercent;
47 54 /**
48 55 * 升级经验
49 56 */
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceLogService.java
... ... @@ -39,14 +39,6 @@ public interface MemberExperienceLogService {
39 39 */
40 40 PageResult<MemberExperienceLogDO> getExperienceLogPage(MemberExperienceLogPageReqVO pageReqVO);
41 41  
42   - /**
43   - * 获得会员经验记录列表, 用于 Excel 导出
44   - *
45   - * @param exportReqVO 查询条件
46   - * @return 会员经验记录列表
47   - */
48   - List<MemberExperienceLogDO> getExperienceLogList(MemberExperienceLogExportReqVO exportReqVO);
49   -
50 42 // TODO @疯狂:类似 MemberLevelLogService 的方法,这里也需要提供一个通用的方法,用于创建经验变动记录
51 43  
52 44 /**
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogService.java
... ... @@ -47,14 +47,6 @@ public interface MemberLevelLogService {
47 47 */
48 48 PageResult<MemberLevelLogDO> getLevelLogPage(MemberLevelLogPageReqVO pageReqVO);
49 49  
50   - /**
51   - * 获得会员等级记录列表, 用于 Excel 导出
52   - *
53   - * @param exportReqVO 查询条件
54   - * @return 会员等级记录列表
55   - */
56   - List<MemberLevelLogDO> getLevelLogList(MemberLevelLogExportReqVO exportReqVO);
57   -
58 50 // TODO @疯狂:把 createCancelLog、createAdjustLog、createAutoUpgradeLog 几个日志合并成一个通用的日志方法;整体的内容,交给 MemberLevelService 去做;以及对应的 level 变化的通知;
59 51  
60 52 /**
... ...
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogServiceImpl.java
... ... @@ -75,7 +75,7 @@ public class MemberLevelLogServiceImpl implements MemberLevelLogService {
75 75 levelLogDO.setUserId(user.getId());
76 76 levelLogDO.setLevelId(level.getId());
77 77 levelLogDO.setLevel(level.getLevel());
78   - levelLogDO.setDiscount(level.getDiscount());
  78 + levelLogDO.setDiscountPercent(level.getDiscountPercent());
79 79 levelLogDO.setUserExperience(level.getExperience());
80 80 levelLogDO.setExperience(experience);
81 81 levelLogDO.setRemark(reason);
... ... @@ -92,7 +92,7 @@ public class MemberLevelLogServiceImpl implements MemberLevelLogService {
92 92 levelLogDO.setUserId(user.getId());
93 93 levelLogDO.setLevelId(level.getId());
94 94 levelLogDO.setLevel(level.getLevel());
95   - levelLogDO.setDiscount(level.getDiscount());
  95 + levelLogDO.setDiscountPercent(level.getDiscountPercent());
96 96 levelLogDO.setExperience(level.getExperience());
97 97 levelLogDO.setUserExperience(user.getExperience());
98 98 levelLogDO.setDescription("成为:" + level.getName());
... ...
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java
... ... @@ -49,7 +49,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
49 49 public void testCreateLevel_success() {
50 50 // 准备参数
51 51 MemberLevelCreateReqVO reqVO = randomPojo(MemberLevelCreateReqVO.class, o -> {
52   - o.setDiscount(randomInt());
  52 + o.setDiscountPercent(randomInt());
53 53 o.setIcon(randomURL());
54 54 o.setBackgroundUrl(randomURL());
55 55 });
... ... @@ -76,7 +76,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
76 76 o.setLevel(dbLevel.getLevel());
77 77 o.setExperience(dbLevel.getExperience());
78 78 //以下是要修改的字段
79   - o.setDiscount(randomInt());
  79 + o.setDiscountPercent(randomInt());
80 80 o.setIcon(randomURL());
81 81 o.setBackgroundUrl(randomURL());
82 82 });
... ... @@ -256,7 +256,7 @@ public class MemberLevelServiceImplTest extends BaseDbUnitTest {
256 256 private static MemberLevelDO randomLevelDO(Consumer<MemberLevelDO>... consumers) {
257 257 Consumer<MemberLevelDO> consumer = (o) -> {
258 258 o.setStatus(CommonStatusEnum.ENABLE.getStatus());
259   - o.setDiscount(randomInt(0, 100));
  259 + o.setDiscountPercent(randomInt(0, 100));
260 260 o.setIcon(randomURL());
261 261 o.setBackgroundUrl(randomURL());
262 262 };
... ...