mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-07-24 16:05:08 +08:00
code review:订单评论、订单积分的变更
This commit is contained in:
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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()));
|
||||
|
@ -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: 给会员发消息
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ public interface MemberUserService {
|
||||
/**
|
||||
* 更新用户的积分
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @param userId 用户编号
|
||||
* @param point 积分数量
|
||||
*/
|
||||
void updateUserPoint(Long userId, Integer point);
|
||||
|
Reference in New Issue
Block a user