code review:订单评论、订单积分的变更

This commit is contained in:
YunaiV
2023-08-26 10:54:45 +08:00
parent f8952f8e34
commit b75d777670
11 changed files with 114 additions and 122 deletions

View File

@ -58,6 +58,7 @@ public interface MemberUserApi {
*/
MemberUserRespDTO getUserByMobile(String mobile);
// TODO @疯狂是不是新的类MemberPointApi
/**
* 增加用户积分
*
@ -67,4 +68,5 @@ public interface MemberUserApi {
* @param bizId 业务编号
*/
void addPoint(Long userId, Integer point, Integer bizType, String bizId);
}

View File

@ -32,6 +32,7 @@ public enum MemberPointBizTypeEnum implements IntArrayValuable {
* 描述
*/
private final String description;
// TODO @疯狂:改成 add 会好点。一个是属性我们尽量不要 isXXX另外尽量正向思维不取反
/**
* 是否为扣减积分
*/
@ -42,7 +43,6 @@ public enum MemberPointBizTypeEnum implements IntArrayValuable {
return new int[0];
}
public static MemberPointBizTypeEnum getByType(Integer type) {
return EnumUtil.getBy(MemberPointBizTypeEnum.class,
e -> Objects.equals(type, e.getType()));

View File

@ -99,7 +99,6 @@ public class MemberLevelServiceImpl implements MemberLevelService {
if (ObjUtil.notEqual(levelDO.getName(), name)) {
continue;
}
if (id == null || !id.equals(levelDO.getId())) {
throw exception(LEVEL_NAME_EXISTS, levelDO.getName());
}
@ -151,7 +150,6 @@ public class MemberLevelServiceImpl implements MemberLevelService {
validateExperienceOutRange(list, id, level, experience);
}
// TODO 有 Service 提供接口哈,不直接调用对方的 memberUserMapper
@VisibleForTesting
void validateLevelHasUser(Long id) {
Long count = memberUserService.getUserCountByLevelId(id);
@ -195,37 +193,36 @@ public class MemberLevelServiceImpl implements MemberLevelService {
return;
}
// 记录等级变动
// 1. 记录等级变动
MemberLevelRecordDO levelRecord = new MemberLevelRecordDO()
.setUserId(user.getId())
.setRemark(updateReqVO.getReason());
.setUserId(user.getId()).setRemark(updateReqVO.getReason());
MemberLevelDO memberLevel = null;
if (updateReqVO.getLevelId() == null) {
// 取消用户等级时,扣减经验
// 取消用户等级时,需要扣减经验
levelRecord.setExperience(-user.getExperience());
// TODO @疯狂:这里是不是也要设置下 setUserExperience 属性;
levelRecord.setDescription("管理员取消了等级");
} else {
memberLevel = validateLevelExists(updateReqVO.getLevelId());
// 复制等级配置
memberLevel = validateLevelExists(updateReqVO.getLevelId());
MemberLevelRecordConvert.INSTANCE.copyTo(memberLevel, levelRecord);
// 变动经验值 = 等级的升级经验 - 会员当前的经验;正数为增加经验,负数为扣减经验
levelRecord.setExperience(memberLevel.getExperience() - user.getExperience());
// 会员当前的经验 = 等级的升级经验
levelRecord.setUserExperience(memberLevel.getExperience());
levelRecord.setUserExperience(memberLevel.getExperience()); // 会员当前的经验 = 等级的升级经验
levelRecord.setDescription("管理员调整为:" + memberLevel.getName());
}
memberLevelRecordService.createLevelRecord(levelRecord);
// 记录会员经验变动
// 2. 记录会员经验变动
memberExperienceRecordService.createExperienceRecord(user.getId(),
levelRecord.getExperience(), levelRecord.getUserExperience(),
MemberExperienceBizTypeEnum.ADMIN, String.valueOf(MemberExperienceBizTypeEnum.ADMIN.getType()));
// 更新会员表上的等级编号、经验值
// 3. 更新会员表上的等级编号、经验值
memberUserService.updateUserLevel(user.getId(), updateReqVO.getLevelId(),
levelRecord.getUserExperience());
// 给会员发送等级变动消息
// 4. 给会员发送等级变动消息
notifyMemberLevelChange(user.getId(), memberLevel);
}
@ -239,31 +236,27 @@ public class MemberLevelServiceImpl implements MemberLevelService {
experience = -experience;
}
// 1. 创建经验记录
MemberUserDO user = memberUserService.getUser(userId);
int userExperience = NumberUtil.max(user.getExperience() + experience, 0);
int userExperience = NumberUtil.max(user.getExperience() + experience, 0); // 防止扣出负数
MemberLevelRecordDO levelRecord = new MemberLevelRecordDO()
.setUserId(user.getId())
.setExperience(experience)
// 防止扣出负数
.setUserExperience(userExperience);
// 创建经验记录
memberExperienceRecordService.createExperienceRecord(userId, experience, userExperience,
bizType, bizId);
// 计算会员等级
// 2.1 保存等级变更记录
MemberLevelDO newLevel = calculateNewLevel(user, userExperience);
if (newLevel != null) {
// 复制等级配置
MemberLevelRecordConvert.INSTANCE.copyTo(newLevel, levelRecord);
// 保存等级变更记录
memberLevelRecordService.createLevelRecord(levelRecord);
// 给会员发送等级变动消息
// 2.2 给会员发送等级变动消息
notifyMemberLevelChange(userId, newLevel);
}
// 更新会员表上的等级编号、经验值
// 3. 更新会员表上的等级编号、经验值
memberUserService.updateUserLevel(user.getId(), levelRecord.getLevelId(), userExperience);
}
@ -301,4 +294,5 @@ public class MemberLevelServiceImpl implements MemberLevelService {
private void notifyMemberLevelChange(Long userId, MemberLevelDO level) {
//todo: 给会员发消息
}
}

View File

@ -72,22 +72,22 @@ public class MemberPointRecordServiceImpl implements MemberPointRecordService {
public void createPointRecord(Long userId, Integer point, MemberPointBizTypeEnum bizType, String bizId) {
MemberPointConfigDO pointConfig = memberPointConfigService.getPointConfig();
if (pointConfig == null || pointConfig.getTradeGivePoint() == null) {
log.warn("增加积分失败积分配置”1 元赠送多少分“未设置, userId={}, point={}, bizType={}, bizId={}",
log.error("[createPointRecord][增加积分失败tradeGivePoint 未配置,userId({}) point({}) bizType({}) bizId({})]",
userId, point, bizType.getType(), bizId);
return;
}
// 根据配置的比例,换算实际的积分
// 1. 根据配置的比例,换算实际的积分
point = point * pointConfig.getTradeGivePoint();
if (bizType.isReduce() && point > 0) {
point = -point;
}
// 2. 增加积分记录
MemberUserDO user = memberUserService.getUser(userId);
Integer userPoint = ObjectUtil.defaultIfNull(user.getPoint(), 0);
// 用户变动后的积分,防止扣出负数
// 用户变动后的积分,防止扣出负数 TODO 疯狂:积分是不是允许扣到负数。因为它是跟有钱有关的东西,不能让商家出现资金损失
Integer totalPoint = NumberUtil.max(userPoint + point, 0);
// 增加积分记录
MemberPointRecordDO recordDO = new MemberPointRecordDO()
.setUserId(userId)
.setBizId(bizId)
@ -98,7 +98,7 @@ public class MemberPointRecordServiceImpl implements MemberPointRecordService {
.setTotalPoint(totalPoint);
recordMapper.insert(recordDO);
// 更新用户积分
// 3. 更新用户积分
memberUserService.updateUserPoint(userId, totalPoint);
}

View File

@ -162,7 +162,7 @@ public interface MemberUserService {
/**
* 更新用户的积分
*
* @param userId 用户ID
* @param userId 用户编号
* @param point 积分数量
*/
void updateUserPoint(Long userId, Integer point);