Commit 800c44a46eede8d592a547d0ff82b99890cc7fc0

Authored by YunaiV
1 parent 4cd5b571

code review:会员等级

Showing 25 changed files with 59 additions and 48 deletions
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberExperienceLogController.java
@@ -28,9 +28,7 @@ import java.util.List; @@ -28,9 +28,7 @@ import java.util.List;
28 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 28 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
29 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; 29 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
30 30
31 -/**  
32 - * @author owen  
33 - */ 31 +// TODO @疯狂:要不 Log 改成 Record,和 PointRecord 保持一致
34 @Tag(name = "管理后台 - 会员经验记录") 32 @Tag(name = "管理后台 - 会员经验记录")
35 @RestController 33 @RestController
36 @RequestMapping("/member/experience-log") 34 @RequestMapping("/member/experience-log")
@@ -40,6 +38,7 @@ public class MemberExperienceLogController { @@ -40,6 +38,7 @@ public class MemberExperienceLogController {
40 @Resource 38 @Resource
41 private MemberExperienceLogService experienceLogService; 39 private MemberExperienceLogService experienceLogService;
42 40
  41 + // TODO @疯狂:不允许删除经验哈
43 @DeleteMapping("/delete") 42 @DeleteMapping("/delete")
44 @Operation(summary = "删除会员经验记录") 43 @Operation(summary = "删除会员经验记录")
45 @Parameter(name = "id", description = "编号", required = true) 44 @Parameter(name = "id", description = "编号", required = true)
@@ -58,6 +57,7 @@ public class MemberExperienceLogController { @@ -58,6 +57,7 @@ public class MemberExperienceLogController {
58 return success(MemberExperienceLogConvert.INSTANCE.convert(experienceLog)); 57 return success(MemberExperienceLogConvert.INSTANCE.convert(experienceLog));
59 } 58 }
60 59
  60 + // TODO @疯狂:这个接口可以删除哈,应该用不到
61 @GetMapping("/list") 61 @GetMapping("/list")
62 @Operation(summary = "获得会员经验记录列表") 62 @Operation(summary = "获得会员经验记录列表")
63 @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") 63 @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@@ -75,6 +75,7 @@ public class MemberExperienceLogController { @@ -75,6 +75,7 @@ public class MemberExperienceLogController {
75 return success(MemberExperienceLogConvert.INSTANCE.convertPage(pageResult)); 75 return success(MemberExperienceLogConvert.INSTANCE.convertPage(pageResult));
76 } 76 }
77 77
  78 + // TODO @疯狂:导出可以先不支持,场景不多
78 @GetMapping("/export-excel") 79 @GetMapping("/export-excel")
79 @Operation(summary = "导出会员经验记录 Excel") 80 @Operation(summary = "导出会员经验记录 Excel")
80 @PreAuthorize("@ss.hasPermission('member:experience-log:export')") 81 @PreAuthorize("@ss.hasPermission('member:experience-log:export')")
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelController.java
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.admin.level; @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.member.controller.admin.level;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.CommonResult; 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.*; 5 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.*;
6 import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert; 6 import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert;
7 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; 7 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
8 import cn.iocoder.yudao.module.member.service.level.MemberLevelService; 8 import cn.iocoder.yudao.module.member.service.level.MemberLevelService;
@@ -20,9 +20,6 @@ import java.util.List; @@ -20,9 +20,6 @@ import java.util.List;
20 20
21 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 21 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
22 22
23 -/**  
24 - * @author owen  
25 - */  
26 @Tag(name = "管理后台 - 会员等级") 23 @Tag(name = "管理后台 - 会员等级")
27 @RestController 24 @RestController
28 @RequestMapping("/member/level") 25 @RequestMapping("/member/level")
@@ -65,6 +62,7 @@ public class MemberLevelController { @@ -65,6 +62,7 @@ public class MemberLevelController {
65 return success(MemberLevelConvert.INSTANCE.convert(level)); 62 return success(MemberLevelConvert.INSTANCE.convert(level));
66 } 63 }
67 64
  65 + // TODO @疯狂:这个应该用不到哈
68 @GetMapping("/list") 66 @GetMapping("/list")
69 @Operation(summary = "获得会员等级列表") 67 @Operation(summary = "获得会员等级列表")
70 @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") 68 @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@@ -83,6 +81,7 @@ public class MemberLevelController { @@ -83,6 +81,7 @@ public class MemberLevelController {
83 return success(MemberLevelConvert.INSTANCE.convertSimpleList(list)); 81 return success(MemberLevelConvert.INSTANCE.convertSimpleList(list));
84 } 82 }
85 83
  84 + // TODO @疯狂:是不是不做分页,直接 list 就好啦;返回的时候,按照经验排序下哈;
86 @GetMapping("/page") 85 @GetMapping("/page")
87 @Operation(summary = "获得会员等级分页") 86 @Operation(summary = "获得会员等级分页")
88 @PreAuthorize("@ss.hasPermission('member:level:query')") 87 @PreAuthorize("@ss.hasPermission('member:level:query')")
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/MemberLevelLogController.java
@@ -28,9 +28,7 @@ import java.util.List; @@ -28,9 +28,7 @@ import java.util.List;
28 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; 28 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
29 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; 29 import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
30 30
31 -/**  
32 - * @author owen  
33 - */ 31 +// TODO @疯狂:是不是不用这个 controller;因为日志只是为了记录,db 可以查询、和审计即可,目前暂时不需要开放出来;
34 @Tag(name = "管理后台 - 会员等级记录") 32 @Tag(name = "管理后台 - 会员等级记录")
35 @RestController 33 @RestController
36 @RequestMapping("/member/level-log") 34 @RequestMapping("/member/level-log")
@@ -40,6 +38,7 @@ public class MemberLevelLogController { @@ -40,6 +38,7 @@ public class MemberLevelLogController {
40 @Resource 38 @Resource
41 private MemberLevelLogService levelLogService; 39 private MemberLevelLogService levelLogService;
42 40
  41 + // TODO @疯狂:这个不允许删除哈
43 @DeleteMapping("/delete") 42 @DeleteMapping("/delete")
44 @Operation(summary = "删除会员等级记录") 43 @Operation(summary = "删除会员等级记录")
45 @Parameter(name = "id", description = "编号", required = true) 44 @Parameter(name = "id", description = "编号", required = true)
@@ -58,6 +57,7 @@ public class MemberLevelLogController { @@ -58,6 +57,7 @@ public class MemberLevelLogController {
58 return success(MemberLevelLogConvert.INSTANCE.convert(levelLog)); 57 return success(MemberLevelLogConvert.INSTANCE.convert(levelLog));
59 } 58 }
60 59
  60 + // TODO @疯狂:这个接口,应该没用
61 @GetMapping("/list") 61 @GetMapping("/list")
62 @Operation(summary = "获得会员等级记录列表") 62 @Operation(summary = "获得会员等级记录列表")
63 @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") 63 @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@@ -75,6 +75,7 @@ public class MemberLevelLogController { @@ -75,6 +75,7 @@ public class MemberLevelLogController {
75 return success(MemberLevelLogConvert.INSTANCE.convertPage(pageResult)); 75 return success(MemberLevelLogConvert.INSTANCE.convertPage(pageResult));
76 } 76 }
77 77
  78 + // TODO @疯狂:导出可以去掉先
78 @GetMapping("/export-excel") 79 @GetMapping("/export-excel")
79 @Operation(summary = "导出会员等级记录 Excel") 80 @Operation(summary = "导出会员等级记录 Excel")
80 @PreAuthorize("@ss.hasPermission('member:level-log:export')") 81 @PreAuthorize("@ss.hasPermission('member:level-log:export')")
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/experience/MemberExperienceLogBaseVO.java
@@ -38,7 +38,7 @@ public class MemberExperienceLogBaseVO { @@ -38,7 +38,7 @@ public class MemberExperienceLogBaseVO {
38 @NotNull(message = "变更后的经验不能为空") 38 @NotNull(message = "变更后的经验不能为空")
39 private Integer totalExperience; 39 private Integer totalExperience;
40 40
41 - @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "下单增加100经验") 41 + @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "下单增加 100 经验")
42 @NotNull(message = "描述不能为空") 42 @NotNull(message = "描述不能为空")
43 private String description; 43 private String description;
44 44
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/MemberLevelBaseVO.java renamed to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelBaseVO.java
1 -package cn.iocoder.yudao.module.member.controller.admin.level.vo; 1 +package cn.iocoder.yudao.module.member.controller.admin.level.vo.level;
2 2
  3 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  4 +import cn.iocoder.yudao.framework.common.validation.InEnum;
3 import io.swagger.v3.oas.annotations.media.Schema; 5 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 6 import lombok.Data;
5 import org.hibernate.validator.constraints.Range; 7 import org.hibernate.validator.constraints.Range;
@@ -24,29 +26,30 @@ public class MemberLevelBaseVO { @@ -24,29 +26,30 @@ public class MemberLevelBaseVO {
24 26
25 @Schema(description = "升级经验", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") 27 @Schema(description = "升级经验", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
26 @NotNull(message = "升级经验不能为空") 28 @NotNull(message = "升级经验不能为空")
27 - @Positive(message = "升级经验必须大于0") 29 + @Positive(message = "升级经验必须大于 0")
28 private Integer experience; 30 private Integer experience;
29 31
30 @Schema(description = "等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 32 @Schema(description = "等级", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
31 @NotNull(message = "等级不能为空") 33 @NotNull(message = "等级不能为空")
32 - @Positive(message = "等级必须大于0") 34 + @Positive(message = "等级必须大于 0")
33 private Integer level; 35 private Integer level;
34 36
35 @Schema(description = "享受折扣", requiredMode = Schema.RequiredMode.REQUIRED, example = "98") 37 @Schema(description = "享受折扣", requiredMode = Schema.RequiredMode.REQUIRED, example = "98")
36 @NotNull(message = "享受折扣不能为空") 38 @NotNull(message = "享受折扣不能为空")
37 - @Range(min = 0, max = 100, message = "享受折扣的范围为0-100") 39 + @Range(min = 0, max = 100, message = "享受折扣的范围为 0-100")
38 private Integer discount; 40 private Integer discount;
39 41
40 @Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg") 42 @Schema(description = "等级图标", example = "https://www.iocoder.cn/yudao.jpg")
41 - @URL(message = "等级图标 必须是 URL 格式") 43 + @URL(message = "等级图标必须是 URL 格式")
42 private String icon; 44 private String icon;
43 45
44 @Schema(description = "等级背景图", example = "https://www.iocoder.cn/yudao.jpg") 46 @Schema(description = "等级背景图", example = "https://www.iocoder.cn/yudao.jpg")
45 - @URL(message = "等级背景图 必须是 URL 格式") 47 + @URL(message = "等级背景图必须是 URL 格式")
46 private String backgroundUrl; 48 private String backgroundUrl;
47 49
48 @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 50 @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
49 @NotNull(message = "状态不能为空") 51 @NotNull(message = "状态不能为空")
  52 + @InEnum(CommonStatusEnum.class)
50 private Integer status; 53 private Integer status;
51 54
52 } 55 }
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/MemberLevelCreateReqVO.java renamed to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelCreateReqVO.java
1 -package cn.iocoder.yudao.module.member.controller.admin.level.vo; 1 +package cn.iocoder.yudao.module.member.controller.admin.level.vo.level;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
5 import lombok.EqualsAndHashCode; 5 import lombok.EqualsAndHashCode;
6 import lombok.ToString; 6 import lombok.ToString;
7 7
  8 +// TODO @疯狂:项目的 vo 和 controller 不写 author 信息哈,只写 swagger 注解
8 /** 9 /**
9 * @author owen 10 * @author owen
10 */ 11 */
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/MemberLevelPageReqVO.java renamed to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelPageReqVO.java
1 -package cn.iocoder.yudao.module.member.controller.admin.level.vo; 1 +package cn.iocoder.yudao.module.member.controller.admin.level.vo.level;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageParam; 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/MemberLevelRespVO.java renamed to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelRespVO.java
1 -package cn.iocoder.yudao.module.member.controller.admin.level.vo; 1 +package cn.iocoder.yudao.module.member.controller.admin.level.vo.level;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/MemberLevelSimpleRespVO.java renamed to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelSimpleRespVO.java
1 -package cn.iocoder.yudao.module.member.controller.admin.level.vo; 1 +package cn.iocoder.yudao.module.member.controller.admin.level.vo.level;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
5 import lombok.EqualsAndHashCode; 5 import lombok.EqualsAndHashCode;
6 import lombok.ToString; 6 import lombok.ToString;
7 7
8 -/**  
9 - * @author owen  
10 - */ 8 +// TODO @疯狂:不需要继承 MemberLevelBaseVO
11 @Schema(description = "管理后台 - 会员等级 Response VO") 9 @Schema(description = "管理后台 - 会员等级 Response VO")
12 @Data 10 @Data
13 @EqualsAndHashCode(callSuper = true) 11 @EqualsAndHashCode(callSuper = true)
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/MemberLevelUpdateReqVO.java renamed to yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelUpdateReqVO.java
1 -package cn.iocoder.yudao.module.member.controller.admin.level.vo; 1 +package cn.iocoder.yudao.module.member.controller.admin.level.vo.level;
2 2
3 import io.swagger.v3.oas.annotations.media.Schema; 3 import io.swagger.v3.oas.annotations.media.Schema;
4 import lombok.Data; 4 import lombok.Data;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/MemberTagController.java
@@ -69,7 +69,7 @@ public class MemberTagController { @@ -69,7 +69,7 @@ public class MemberTagController {
69 @Operation(summary = "获取会员标签精简信息列表", description = "只包含被开启的会员标签,主要用于前端的下拉选项") 69 @Operation(summary = "获取会员标签精简信息列表", description = "只包含被开启的会员标签,主要用于前端的下拉选项")
70 public CommonResult<List<MemberTagRespVO>> getSimpleTagList() { 70 public CommonResult<List<MemberTagRespVO>> getSimpleTagList() {
71 // 获用户列表,只要开启状态的 71 // 获用户列表,只要开启状态的
72 - List<MemberTagDO> list = tagService.getList(); 72 + List<MemberTagDO> list = tagService.getTagList();
73 // 排序后,返回给前端 73 // 排序后,返回给前端
74 return success(MemberTagConvert.INSTANCE.convertList(list)); 74 return success(MemberTagConvert.INSTANCE.convertList(list));
75 } 75 }
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/user/MemberUserController.java
@@ -76,10 +76,9 @@ public class MemberUserController { @@ -76,10 +76,9 @@ public class MemberUserController {
76 .flatMap(Collection::stream) 76 .flatMap(Collection::stream)
77 .collect(Collectors.toSet()); 77 .collect(Collectors.toSet());
78 List<MemberTagDO> tags = memberTagService.getTagList(tagIds); 78 List<MemberTagDO> tags = memberTagService.getTagList(tagIds);
79 -  
80 // 处理会员级别返显 79 // 处理会员级别返显
81 List<MemberLevelDO> levels = memberLevelService.getEnableLevelList(); 80 List<MemberLevelDO> levels = memberLevelService.getEnableLevelList();
82 - 81 + // 拼接
83 return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels)); 82 return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels));
84 } 83 }
85 84
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelConvert.java
1 package cn.iocoder.yudao.module.member.convert.level; 1 package cn.iocoder.yudao.module.member.convert.level;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelCreateReqVO;  
5 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelRespVO;  
6 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelSimpleRespVO;  
7 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelUpdateReqVO; 4 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO;
  5 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelRespVO;
  6 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelSimpleRespVO;
  7 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO;
8 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; 8 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
9 import org.mapstruct.Mapper; 9 import org.mapstruct.Mapper;
10 import org.mapstruct.factory.Mappers; 10 import org.mapstruct.factory.Mappers;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/user/MemberUserConvert.java
@@ -44,8 +44,6 @@ public interface MemberUserConvert { @@ -44,8 +44,6 @@ public interface MemberUserConvert {
44 // 处理关联数据 44 // 处理关联数据
45 Map<Long, String> tagMap = convertMap(tags, MemberTagDO::getId, MemberTagDO::getName); 45 Map<Long, String> tagMap = convertMap(tags, MemberTagDO::getId, MemberTagDO::getName);
46 Map<Long, String> levelMap = convertMap(levels, MemberLevelDO::getId, MemberLevelDO::getName); 46 Map<Long, String> levelMap = convertMap(levels, MemberLevelDO::getId, MemberLevelDO::getName);
47 -  
48 - // 填充关联数据  
49 for (MemberUserRespVO vo : result.getList()) { 47 for (MemberUserRespVO vo : result.getList()) {
50 vo.setTagNames(convertList(vo.getTagIds(), tagMap::get)); 48 vo.setTagNames(convertList(vo.getTagIds(), tagMap::get));
51 vo.setLevelName(MapUtil.getStr(levelMap, vo.getLevelId(), StrUtil.EMPTY)); 49 vo.setLevelName(MapUtil.getStr(levelMap, vo.getLevelId(), StrUtil.EMPTY));
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelDO.java
@@ -10,6 +10,8 @@ import lombok.*; @@ -10,6 +10,8 @@ import lombok.*;
10 /** 10 /**
11 * 会员等级 DO 11 * 会员等级 DO
12 * 12 *
  13 + * 配置每个等级需要的积分
  14 + *
13 * @author owen 15 * @author owen
14 */ 16 */
15 @TableName("member_level") 17 @TableName("member_level")
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelLogDO.java
@@ -9,6 +9,8 @@ import lombok.*; @@ -9,6 +9,8 @@ import lombok.*;
9 /** 9 /**
10 * 会员等级记录 DO 10 * 会员等级记录 DO
11 * 11 *
  12 + * 用户每次等级发生变更时,记录一条日志
  13 + *
12 * @author owen 14 * @author owen
13 */ 15 */
14 @TableName("member_level_log") 16 @TableName("member_level_log")
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/MemberUserDO.java
@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.ip.core.Area; 4 import cn.iocoder.yudao.framework.ip.core.Area;
5 import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; 5 import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
6 import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO; 6 import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
  7 +import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
7 import cn.iocoder.yudao.module.system.enums.common.SexEnum; 8 import cn.iocoder.yudao.module.system.enums.common.SexEnum;
8 import com.baomidou.mybatisplus.annotation.KeySequence; 9 import com.baomidou.mybatisplus.annotation.KeySequence;
9 import com.baomidou.mybatisplus.annotation.TableField; 10 import com.baomidou.mybatisplus.annotation.TableField;
@@ -119,6 +120,8 @@ public class MemberUserDO extends TenantBaseDO { @@ -119,6 +120,8 @@ public class MemberUserDO extends TenantBaseDO {
119 120
120 /** 121 /**
121 * 会员级别编号 122 * 会员级别编号
  123 + *
  124 + * 关联 {@link MemberLevelDO#getLevel()} 字段
122 */ 125 */
123 private Long levelId; 126 private Long levelId;
124 /** 127 /**
@@ -126,5 +129,4 @@ public class MemberUserDO extends TenantBaseDO { @@ -126,5 +129,4 @@ public class MemberUserDO extends TenantBaseDO {
126 */ 129 */
127 private Integer experience; 130 private Integer experience;
128 131
129 - // TODO 积分等等  
130 } 132 }
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/level/MemberLevelMapper.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.dal.mysql.level; @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.member.dal.mysql.level;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelPageReqVO; 6 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelPageReqVO;
7 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; 7 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
8 import org.apache.ibatis.annotations.Mapper; 8 import org.apache.ibatis.annotations.Mapper;
9 9
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/user/MemberUserMapper.java
@@ -49,6 +49,7 @@ public interface MemberUserMapper extends BaseMapperX&lt;MemberUserDO&gt; { @@ -49,6 +49,7 @@ public interface MemberUserMapper extends BaseMapperX&lt;MemberUserDO&gt; {
49 .orderByDesc(MemberUserDO::getId)); 49 .orderByDesc(MemberUserDO::getId));
50 } 50 }
51 51
  52 + // TODO @疯狂:命名可以改成 updateUserLevelToNull;db 侧的操作,尽量无业务含义,更多是 select、update、insert 操作
52 /** 53 /**
53 * 取消会员的等级 54 * 取消会员的等级
54 * 55 *
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelService.java
@@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.member.service.level; @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.member.service.level;
2 2
3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; 3 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelCreateReqVO;  
6 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelPageReqVO;  
7 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelUpdateReqVO; 5 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO;
  6 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelPageReqVO;
  7 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO;
8 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; 8 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
9 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; 9 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
10 import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; 10 import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java
@@ -6,9 +6,9 @@ import cn.hutool.core.util.ObjUtil; @@ -6,9 +6,9 @@ import cn.hutool.core.util.ObjUtil;
6 import cn.hutool.core.util.ObjectUtil; 6 import cn.hutool.core.util.ObjectUtil;
7 import cn.hutool.core.util.StrUtil; 7 import cn.hutool.core.util.StrUtil;
8 import cn.iocoder.yudao.framework.common.pojo.PageResult; 8 import cn.iocoder.yudao.framework.common.pojo.PageResult;
9 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelCreateReqVO;  
10 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelPageReqVO;  
11 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelUpdateReqVO; 9 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO;
  10 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelPageReqVO;
  11 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO;
12 import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert; 12 import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert;
13 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; 13 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
14 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; 14 import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
@@ -74,6 +74,7 @@ public class MemberLevelServiceImpl implements MemberLevelService { @@ -74,6 +74,7 @@ public class MemberLevelServiceImpl implements MemberLevelService {
74 74
75 @Override 75 @Override
76 public void deleteLevel(Long id) { 76 public void deleteLevel(Long id) {
  77 + // TODO @疯狂:校验是否有用户使用该等级
77 // 校验存在 78 // 校验存在
78 validateLevelExists(id); 79 validateLevelExists(id);
79 // 删除 80 // 删除
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagService.java
@@ -68,5 +68,6 @@ public interface MemberTagService { @@ -68,5 +68,6 @@ public interface MemberTagService {
68 * 68 *
69 * @return 标签列表 69 * @return 标签列表
70 */ 70 */
71 - List<MemberTagDO> getList(); 71 + List<MemberTagDO> getTagList();
  72 +
72 } 73 }
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/tag/MemberTagServiceImpl.java
@@ -106,7 +106,7 @@ public class MemberTagServiceImpl implements MemberTagService { @@ -106,7 +106,7 @@ public class MemberTagServiceImpl implements MemberTagService {
106 } 106 }
107 107
108 @Override 108 @Override
109 - public List<MemberTagDO> getList() { 109 + public List<MemberTagDO> getTagList() {
110 return tagMapper.selectList(); 110 return tagMapper.selectList();
111 } 111 }
112 112
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java
@@ -184,8 +184,8 @@ public class MemberUserServiceImpl implements MemberUserService { @@ -184,8 +184,8 @@ public class MemberUserServiceImpl implements MemberUserService {
184 return passwordEncoder.encode(password); 184 return passwordEncoder.encode(password);
185 } 185 }
186 186
187 - @Transactional(rollbackFor = Exception.class)  
188 @Override 187 @Override
  188 + @Transactional(rollbackFor = Exception.class)
189 public void updateUser(MemberUserUpdateReqVO updateReqVO) { 189 public void updateUser(MemberUserUpdateReqVO updateReqVO) {
190 // 校验存在 190 // 校验存在
191 MemberUserDO user = validateUserExists(updateReqVO.getId()); 191 MemberUserDO user = validateUserExists(updateReqVO.getId());
@@ -197,6 +197,7 @@ public class MemberUserServiceImpl implements MemberUserService { @@ -197,6 +197,7 @@ public class MemberUserServiceImpl implements MemberUserService {
197 memberUserMapper.updateById(updateObj); 197 memberUserMapper.updateById(updateObj);
198 198
199 // 会员级别修改 199 // 会员级别修改
  200 + // TODO @疯狂:修改用户等级,要不要单独一个前端操作 + 接口;因为它是个相对严肃独立的动作
200 memberLevelService.updateUserLevel(user, updateReqVO.getLevelId(), updateReqVO.getLevelReason()); 201 memberLevelService.updateUserLevel(user, updateReqVO.getLevelId(), updateReqVO.getLevelReason());
201 } 202 }
202 203
yudao-module-member/yudao-module-member-biz/src/test/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImplTest.java
@@ -4,9 +4,9 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -4,9 +4,9 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
4 import cn.iocoder.yudao.framework.common.pojo.PageResult; 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils; 5 import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
6 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 6 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
7 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelCreateReqVO;  
8 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelPageReqVO;  
9 -import cn.iocoder.yudao.module.member.controller.admin.level.vo.MemberLevelUpdateReqVO; 7 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO;
  8 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelPageReqVO;
  9 +import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelUpdateReqVO;
10 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO; 10 import cn.iocoder.yudao.module.member.dal.dataobject.level.MemberLevelDO;
11 import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper; 11 import cn.iocoder.yudao.module.member.dal.mysql.level.MemberLevelMapper;
12 import org.junit.jupiter.api.Test; 12 import org.junit.jupiter.api.Test;
@@ -25,6 +25,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; @@ -25,6 +25,7 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
25 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; 25 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
26 import static org.junit.jupiter.api.Assertions.*; 26 import static org.junit.jupiter.api.Assertions.*;
27 27
  28 +// TODO 芋艿:完全 review 完,在去 review 单测
28 /** 29 /**
29 * {@link MemberLevelServiceImpl} 的单元测试类 30 * {@link MemberLevelServiceImpl} 的单元测试类
30 * 31 *