From 292f23c4b2dca2563268644ea38f7fa15339cc46 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 22 Aug 2023 12:53:29 +0800 Subject: [PATCH] =?UTF-8?q?code=20review=EF=BC=9A=E4=BC=9A=E5=91=98?= =?UTF-8?q?=E7=AD=89=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataobject/level/MemberLevelLogDO.java | 1 + .../level/MemberExperienceLogService.java | 2 ++ .../service/level/MemberLevelLogService.java | 2 ++ .../service/level/MemberLevelServiceImpl.java | 19 +++++++++++++------ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelLogDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelLogDO.java index 8ab63b18f..80f7ee679 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelLogDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/level/MemberLevelLogDO.java @@ -52,6 +52,7 @@ public class MemberLevelLogDO extends BaseDO { * 会员此时的经验 */ private Integer userExperience; + // TODO @疯狂:是不是 remark 和 description 可以合并成 description 就够了 /** * 备注 */ diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceLogService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceLogService.java index 30d922c46..f1bd6f9ba 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceLogService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberExperienceLogService.java @@ -55,6 +55,8 @@ public interface MemberExperienceLogService { */ List getExperienceLogList(MemberExperienceLogExportReqVO exportReqVO); + // TODO @疯狂:类似 MemberLevelLogService 的方法,这里也需要提供一个通用的方法,用于创建经验变动记录 + /** * 创建 手动调整 经验变动记录 * diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogService.java index 6d2429233..d84504a7f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelLogService.java @@ -56,6 +56,8 @@ public interface MemberLevelLogService { */ List getLevelLogList(MemberLevelLogExportReqVO exportReqVO); + // TODO @疯狂:把 createCancelLog、createAdjustLog、createAutoUpgradeLog 几个日志合并成一个通用的日志方法;整体的内容,交给 MemberLevelService 去做;以及对应的 level 变化的通知; + /** * 创建记录: 取消等级 * diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java index 9ff169a23..0bddd3e27 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/level/MemberLevelServiceImpl.java @@ -140,7 +140,6 @@ public class MemberLevelServiceImpl implements MemberLevelService { @VisibleForTesting void validateConfigValid(Long id, String name, Integer level, Integer experience) { List list = levelMapper.selectList(); - // 校验名称唯一 validateNameUnique(list, id, name); // 校验等级唯一 @@ -169,9 +168,10 @@ public class MemberLevelServiceImpl implements MemberLevelService { return levelMapper.selectListByStatus(status); } - @Transactional(rollbackFor = Exception.class) @Override + @Transactional(rollbackFor = Exception.class) public void updateUserLevel(MemberUserDO user, Long levelId, String reason) { + // TODO @疯狂:可以直接 ObjUtil.equal(user.getLevelId(), levelId),解决这 2 个场景 // 未调整的情况1 if (user.getLevelId() == null && levelId == null) { return; @@ -182,6 +182,7 @@ public class MemberLevelServiceImpl implements MemberLevelService { } // 需要后台用户填写为什么调整会员的等级 + // TODO @疯狂:这个 reason 是不是可以放到 validator 里做哈; if (StrUtil.isBlank(reason)) { throw exception(LEVEL_REASON_NOT_EXISTS); } @@ -192,6 +193,7 @@ public class MemberLevelServiceImpl implements MemberLevelService { if (levelId == null) { experience = -user.getExperience(); + // TODO @疯狂:这里的逻辑,应该和下面的 207 到 210 行的逻辑一致,都是先记录日志,再更新会员表;所以,是不是都可以类似 214 的写法哈。 // 取消了会员的等级 memberLevelLogService.createCancelLog(user.getId(), reason); memberUserMapper.cancelUserLevel(user.getId()); @@ -208,36 +210,38 @@ public class MemberLevelServiceImpl implements MemberLevelService { updateUserLevelIdAndExperience(user.getId(), levelId, totalExperience); } - // 记录会员经验变动 memberExperienceLogService.createAdjustLog(user.getId(), experience, totalExperience); } - @Transactional(rollbackFor = Exception.class) + // TODO @疯狂:方法名,建议改成 increase 或者 add 经验,和项目更统一一些 + // TODO @疯狂:bizType 改成具体数值,主要是枚举在 api 不好传递,rpc 情况下 @Override + @Transactional(rollbackFor = Exception.class) public void plusExperience(Long userId, Integer experience, MemberExperienceBizTypeEnum bizType, String bizId) { if (experience == 0) { return; } MemberUserDO user = memberUserMapper.selectById(userId); + // TODO @疯狂:默认给 Experience 搞个 0 哈。这里就不做兜底逻辑啦 if (user.getExperience() == null) { user.setExperience(0); } // 防止扣出负数 + // TODO @疯狂:如果经验出现负数,是不是抛出异常会更合理;按道理不应该出现的; int userExperience = NumberUtil.max(user.getExperience() + experience, 0); - // 创建经验记录 memberExperienceLogService.createBizLog(userId, experience, userExperience, bizType, bizId); // 计算会员等级 Long levelId = calcLevel(user, userExperience); - // 更新会员表上的等级编号、经验值 updateUserLevelIdAndExperience(user.getId(), levelId, userExperience); } + // TODO @疯狂:让 memberUserService 那开个方法;每个模块,不直接操作对方的 mapper; private void updateUserLevelIdAndExperience(Long userId, Long levelId, Integer experience) { memberUserMapper.updateById(new MemberUserDO() .setId(userId) @@ -252,6 +256,8 @@ public class MemberLevelServiceImpl implements MemberLevelService { * @param userExperience 会员当前的经验值 * @return 会员等级编号,null表示无变化 */ + // calc + // TODO @疯狂:calc 改成完整的拼写哈。是不是改成 calculateNewLevel private Long calcLevel(MemberUserDO user, int userExperience) { List list = getEnableLevelList(); if (CollUtil.isEmpty(list)) { @@ -273,6 +279,7 @@ public class MemberLevelServiceImpl implements MemberLevelService { return null; } + // TODO @疯狂:这个方法,应该只做 level 的计算,不做登记的变更。 // 保存等级变更记录 memberLevelLogService.createAutoUpgradeLog(user, matchLevel); return matchLevel.getId();