From fe9e1916fadd596da695fb3052ee8a249368f416 Mon Sep 17 00:00:00 2001 From: scott Date: Fri, 20 Mar 2026 15:53:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E8=90=A5=E9=94=80?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=A7=AF=E5=88=86=E6=97=A5=E5=BF=97=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化搜索区域:支持用户昵称、用户ID、时间范围筛选 - 新增表格字段:ID、用户ID、昵称、来源/用途、积分变化、变化后积分、关联类型、状态、备注、日期 - 积分变化带颜色标识:增加(绿色+)、扣减(红色-) - 状态标签彩色区分:订单创建/冻结期/完成/失效 - 关联类型中文映射:订单/签到/系统 - 使用已有的 integralListApi 接口 - 参考用户详情页积分明细样式 --- .../marketing/integral/integralLog/index.vue | 284 +++++++++++------- .../constants/IntegralRecordConstants.java | 26 +- .../impl/UserIntegralRecordServiceImpl.java | 67 +++-- 3 files changed, 230 insertions(+), 147 deletions(-) diff --git a/backend-adminend/src/views/marketing/integral/integralLog/index.vue b/backend-adminend/src/views/marketing/integral/integralLog/index.vue index db8417a..44980b1 100644 --- a/backend-adminend/src/views/marketing/integral/integralLog/index.vue +++ b/backend-adminend/src/views/marketing/integral/integralLog/index.vue @@ -3,85 +3,102 @@
- - - - {{ item.text }} - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + 搜索 + 重置 + + +
-
+ - - - - - - - + + + + + + + + + + + + + + + + + + + + +
@@ -89,78 +106,129 @@ - + diff --git a/backend/crmeb-common/src/main/java/com/zbkj/common/constants/IntegralRecordConstants.java b/backend/crmeb-common/src/main/java/com/zbkj/common/constants/IntegralRecordConstants.java index 32b811e..d393354 100644 --- a/backend/crmeb-common/src/main/java/com/zbkj/common/constants/IntegralRecordConstants.java +++ b/backend/crmeb-common/src/main/java/com/zbkj/common/constants/IntegralRecordConstants.java @@ -14,42 +14,42 @@ package com.zbkj.common.constants; */ public class IntegralRecordConstants { - /** 佣金记录类型—增加 */ + /** 积分记录类型—增加 */ public static final Integer INTEGRAL_RECORD_TYPE_ADD = 1; - /** 佣金记录类型—扣减 */ + /** 积分记录类型—扣减 */ public static final Integer INTEGRAL_RECORD_TYPE_SUB = 2; - /** 佣金记录状态—创建 */ + /** 积分记录状态—创建 */ public static final Integer INTEGRAL_RECORD_STATUS_CREATE = 1; - /** 佣金记录状态—冻结期 */ + /** 积分记录状态—冻结期 */ public static final Integer INTEGRAL_RECORD_STATUS_FROZEN = 2; - /** 佣金记录状态—完成 */ + /** 积分记录状态—完成 */ public static final Integer INTEGRAL_RECORD_STATUS_COMPLETE = 3; - /** 佣金记录状态—失效(订单退款) */ + /** 积分记录状态—失效(订单退款) */ public static final Integer INTEGRAL_RECORD_STATUS_INVALIDATION = 4; - /** 佣金记录关联类型—订单 */ + /** 积分记录关联类型—订单 */ public static final String INTEGRAL_RECORD_LINK_TYPE_ORDER = "order"; - /** 佣金记录关联类型—签到 */ + /** 积分记录关联类型—签到 */ public static final String INTEGRAL_RECORD_LINK_TYPE_SIGN = "sign"; - /** 佣金记录关联类型—系统后台 */ + /** 积分记录关联类型—系统后台 */ public static final String INTEGRAL_RECORD_LINK_TYPE_SYSTEM = "system"; - /** 佣金记录标题—用户订单付款成功 */ + /** 积分记录标题—用户订单付款成功 */ public static final String BROKERAGE_RECORD_TITLE_ORDER = "用户订单付款成功"; - /** 佣金记录标题—签到经验奖励 */ + /** 积分记录标题—签到积分奖励 */ public static final String BROKERAGE_RECORD_TITLE_SIGN = "签到积分奖励"; - /** 佣金记录标题—后台积分操作 */ + /** 积分记录标题—后台积分操作 */ public static final String BROKERAGE_RECORD_TITLE_SYSTEM = "后台积分操作"; - /** 佣金记录标题—订单退款 */ + /** 积分记录标题—订单退款 */ public static final String BROKERAGE_RECORD_TITLE_REFUND = "订单退款"; } diff --git a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java index 0ccc593..e6fdc73 100644 --- a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java +++ b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java @@ -73,22 +73,18 @@ public class UserIntegralRecordServiceImpl extends ServiceImpl 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 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> userRecordMap = thawList.stream() + .collect(Collectors.groupingBy(UserIntegralRecord::getUid)); + + for (Map.Entry> entry : userRecordMap.entrySet()) { + Integer uid = entry.getKey(); + List 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()); } } }