feat: 重构营销模块积分日志页面
- 优化搜索区域:支持用户昵称、用户ID、时间范围筛选 - 新增表格字段:ID、用户ID、昵称、来源/用途、积分变化、变化后积分、关联类型、状态、备注、日期 - 积分变化带颜色标识:增加(绿色+)、扣减(红色-) - 状态标签彩色区分:订单创建/冻结期/完成/失效 - 关联类型中文映射:订单/签到/系统 - 使用已有的 integralListApi 接口 - 参考用户详情页积分明细样式
This commit is contained in:
@@ -73,22 +73,18 @@ public class UserIntegralRecordServiceImpl extends ServiceImpl<UserIntegralRecor
|
||||
LambdaQueryWrapper<UserIntegralRecord> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(UserIntegralRecord::getUid, uid);
|
||||
lqw.eq(UserIntegralRecord::getLinkId, orderNo);
|
||||
lqw.in(UserIntegralRecord::getStatus, IntegralRecordConstants.INTEGRAL_RECORD_STATUS_CREATE, IntegralRecordConstants.INTEGRAL_RECORD_STATUS_FROZEN, IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE);
|
||||
lqw.in(UserIntegralRecord::getStatus, IntegralRecordConstants.INTEGRAL_RECORD_STATUS_CREATE,
|
||||
IntegralRecordConstants.INTEGRAL_RECORD_STATUS_FROZEN,
|
||||
IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE);
|
||||
List<UserIntegralRecord> recordList = dao.selectList(lqw);
|
||||
if (CollUtil.isEmpty(recordList)) {
|
||||
return recordList;
|
||||
}
|
||||
for (int i = 0; i < recordList.size();) {
|
||||
UserIntegralRecord record = recordList.get(i);
|
||||
if (record.getType().equals(IntegralRecordConstants.INTEGRAL_RECORD_TYPE_ADD)) {
|
||||
if (record.getStatus().equals(IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE)) {
|
||||
recordList.remove(i);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return recordList;
|
||||
// 过滤掉已完成的增加类型记录
|
||||
return recordList.stream()
|
||||
.filter(record -> !(record.getType().equals(IntegralRecordConstants.INTEGRAL_RECORD_TYPE_ADD)
|
||||
&& record.getStatus().equals(IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE)))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -101,26 +97,45 @@ public class UserIntegralRecordServiceImpl extends ServiceImpl<UserIntegralRecor
|
||||
if (CollUtil.isEmpty(thawList)) {
|
||||
return;
|
||||
}
|
||||
for (UserIntegralRecord record : thawList) {
|
||||
// 查询对应的用户
|
||||
User user = userService.getById(record.getUid());
|
||||
|
||||
// 按用户分组,批量处理
|
||||
Map<Integer, List<UserIntegralRecord>> userRecordMap = thawList.stream()
|
||||
.collect(Collectors.groupingBy(UserIntegralRecord::getUid));
|
||||
|
||||
for (Map.Entry<Integer, List<UserIntegralRecord>> entry : userRecordMap.entrySet()) {
|
||||
Integer uid = entry.getKey();
|
||||
List<UserIntegralRecord> userRecords = entry.getValue();
|
||||
|
||||
User user = userService.getById(uid);
|
||||
if (ObjectUtil.isNull(user)) {
|
||||
continue ;
|
||||
logger.warn("积分解冻—用户不存在,uid = {}", uid);
|
||||
continue;
|
||||
}
|
||||
record.setStatus(IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE);
|
||||
// 计算积分余额
|
||||
Integer balance = (user.getIntegral() != null ? user.getIntegral() : BigDecimal.ZERO).add(record.getIntegral()).intValue();
|
||||
record.setBalance(balance);
|
||||
record.setUpdateTime(cn.hutool.core.date.DateUtil.date());
|
||||
|
||||
// 解冻
|
||||
|
||||
// 批量事务处理同一用户的积分解冻
|
||||
Boolean execute = transactionTemplate.execute(e -> {
|
||||
updateById(record);
|
||||
userService.operationIntegral(record.getUid(), record.getIntegral(), user.getIntegral(), "add");
|
||||
Integer currentIntegral = user.getIntegral();
|
||||
for (UserIntegralRecord record : userRecords) {
|
||||
record.setStatus(IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE);
|
||||
// 计算积分余额
|
||||
Integer balance = (currentIntegral != null ? currentIntegral : BigDecimal.ZERO)
|
||||
.add(record.getIntegral()).intValue();
|
||||
record.setBalance(balance);
|
||||
record.setUpdateTime(cn.hutool.core.date.DateUtil.date());
|
||||
updateById(record);
|
||||
|
||||
// 更新用户积分
|
||||
userService.operationIntegral(uid, record.getIntegral(), currentIntegral, "add");
|
||||
currentIntegral = balance; // 更新当前积分供下一条记录计算
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
});
|
||||
|
||||
if (!execute) {
|
||||
logger.error(StrUtil.format("积分解冻处理—解冻出错,记录id = {}", record.getId()));
|
||||
logger.error(StrUtil.format("积分解冻处理—批量解冻出错,用户uid = {},记录数 = {}",
|
||||
uid, userRecords.size()));
|
||||
} else {
|
||||
logger.info("积分解冻成功—用户uid = {},解冻记录数 = {}", uid, userRecords.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user