diff --git a/admin-ui/src/views/ai/balanceChangeRecord/index.vue b/admin-ui/src/views/ai/balanceChangeRecord/index.vue
index d2aba14..cf7d247 100644
--- a/admin-ui/src/views/ai/balanceChangeRecord/index.vue
+++ b/admin-ui/src/views/ai/balanceChangeRecord/index.vue
@@ -16,6 +16,16 @@
@keyup.enter.native="handleQuery"
/>
+
+
+
+
{
+ this.deptOptions = this.handleTree(res.data, "deptId");
+ });
+ },
+ deptNormalizer(node) {
+ if (node.children && !node.children.length) {
+ delete node.children;
+ }
+ return {
+ id: node.deptId,
+ label: node.deptName,
+ children: node.children
+ };
+ },
/** 西式千分位(en-US),积分为整数 */
formatPointsWestern(value) {
if (value === null || value === undefined || value === "") {
diff --git a/admin-ui/src/views/subteam/userBalance/index.vue b/admin-ui/src/views/subteam/userBalance/index.vue
index 88bc5b4..cedc6b2 100644
--- a/admin-ui/src/views/subteam/userBalance/index.vue
+++ b/admin-ui/src/views/subteam/userBalance/index.vue
@@ -1,11 +1,36 @@
-
-
-
+
+
+
-
-
+
+
+
+
搜索
重置
+ 导出
+
-
-
-
-
-
-
-
-
- {{ parseTime(s.row.createTime) }}
+
+
+
+
+
+
+
+
+
+
+
-
+
+
diff --git a/web-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/subteam/SubteamUserBalanceController.java b/web-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/subteam/SubteamUserBalanceController.java
index c9d9ea8..1d69759 100644
--- a/web-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/subteam/SubteamUserBalanceController.java
+++ b/web-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/subteam/SubteamUserBalanceController.java
@@ -1,17 +1,24 @@
package com.ruoyi.web.controller.subteam;
import java.util.List;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.ai.domain.AiBalanceChangeRecord;
+import com.ruoyi.ai.domain.vo.AiBalanceChangeRecordListVo;
import com.ruoyi.ai.service.IAiBalanceChangeRecordService;
+import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.subteam.ISubteamDataQueryService;
import com.ruoyi.system.service.subteam.ISubteamScopeService;
@@ -31,15 +38,54 @@ public class SubteamUserBalanceController extends BaseController {
@PreAuthorize("@ss.hasPermi('subteam:userBalance:list')")
@GetMapping("/list")
public TableDataInfo list(AiBalanceChangeRecord query) {
+ clearCrossTeamQueryFields(query);
startPage();
List list = subteamDataQueryService.selectUserBalanceRecords(query);
- return getDataTable(list);
+ List rows = list.stream()
+ .map(AiBalanceChangeRecordListVo::from)
+ .peek(v -> v.setDeptName(null))
+ .collect(Collectors.toList());
+ TableDataInfo rsp = getDataTable(list);
+ rsp.setRows(rows);
+ return rsp;
+ }
+
+ /**
+ * 与本团队 /ai/balance-change-record 导出同结构,不导出「团队名称」列(本端仅看本团队)。
+ * 复用 {@link ISubteamDataQueryService#selectUserBalanceRecords} 与 {@link com.ruoyi.ai.mapper.AiBalanceChangeRecordMapper}。
+ */
+ @PreAuthorize("@ss.hasPermi('subteam:userBalance:export')")
+ @Log(title = "用户积分变动", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, AiBalanceChangeRecord query) {
+ clearCrossTeamQueryFields(query);
+ List list = subteamDataQueryService.selectUserBalanceRecords(query);
+ List rows = list.stream()
+ .map(AiBalanceChangeRecordListVo::from)
+ .collect(Collectors.toList());
+ ExcelUtil util = new ExcelUtil<>(AiBalanceChangeRecordListVo.class);
+ util.hideColumn("deptName");
+ util.exportExcel(response, rows, "用户积分变动");
}
@PreAuthorize("@ss.hasPermi('subteam:userBalance:query')")
@GetMapping("/{id}")
public AjaxResult getInfo(@PathVariable Long id) {
subteamScopeService.assertAiBalanceRecordVisible(id, subteamScopeService.currentTeamDeptId());
- return success(aiBalanceChangeRecordService.selectAiBalanceChangeRecordById(id));
+ AiBalanceChangeRecord record = aiBalanceChangeRecordService.selectAiBalanceChangeRecordById(id);
+ AiBalanceChangeRecordListVo vo = AiBalanceChangeRecordListVo.from(record);
+ if (vo != null) {
+ vo.setDeptName(null);
+ }
+ return success(vo);
+ }
+
+ /** 忽略入参中的团队条件,仅数据范围以当前团队为准 */
+ private void clearCrossTeamQueryFields(AiBalanceChangeRecord query) {
+ if (query == null) {
+ return;
+ }
+ query.setDeptId(null);
+ query.setDeptName(null);
}
}
diff --git a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/AiBalanceChangeRecord.java b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/AiBalanceChangeRecord.java
index a6ee865..f156177 100644
--- a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/AiBalanceChangeRecord.java
+++ b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/AiBalanceChangeRecord.java
@@ -69,4 +69,16 @@ public class AiBalanceChangeRecord extends BaseEntity {
@TableField(exist = false)
private String nickname;
+ /**
+ * 用户归属团队(ai_user.dept_id,用于筛选)
+ */
+ @TableField(exist = false)
+ private Long deptId;
+
+ /**
+ * 团队名称(关联 sys_dept.dept_name)
+ */
+ @TableField(exist = false)
+ private String deptName;
+
}
diff --git a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/vo/AiBalanceChangeRecordListVo.java b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/vo/AiBalanceChangeRecordListVo.java
index 3faed9e..220b336 100644
--- a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/vo/AiBalanceChangeRecordListVo.java
+++ b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/domain/vo/AiBalanceChangeRecordListVo.java
@@ -27,23 +27,26 @@ public class AiBalanceChangeRecordListVo implements Serializable {
@Excel(name = "用户昵称", sort = 3)
private String nickname;
- @Excel(name = "关联订单号", sort = 4)
+ @Excel(name = "团队名称", sort = 4)
+ private String deptName;
+
+ @Excel(name = "关联订单号", sort = 5)
private String orderNo;
- @Excel(name = "操作类型", sort = 5, readConverterExp = "0=充值,1=返佣,2=充值赠送,3=体验金赠送,4=体验金回收,5=一键换衣,6=图生图2,7=一键换脸,8=快捷生图,9=快捷生视频,10=退款,11=系统操作,12=团队下发,13=团队收回")
+ @Excel(name = "操作类型", sort = 6, readConverterExp = "0=充值,1=返佣,2=充值赠送,3=体验金赠送,4=体验金回收,5=一键换衣,6=图生图2,7=一键换脸,8=快捷生图,9=快捷生视频,10=退款,11=系统操作,12=团队下发,13=团队收回")
private Integer type;
- @Excel(name = "变更积分", sort = 6, handler = BalanceChangeAmountExcelHandler.class)
+ @Excel(name = "变更积分", sort = 7, handler = BalanceChangeAmountExcelHandler.class)
private BigDecimal changeAmount;
- @Excel(name = "变更后积分", sort = 7)
+ @Excel(name = "变更后积分", sort = 8)
private BigDecimal resultAmount;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "操作时间", sort = 8, width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "操作时间", sort = 9, width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
- @Excel(name = "备注", sort = 9)
+ @Excel(name = "备注", sort = 10)
private String remark;
public static AiBalanceChangeRecordListVo from(AiBalanceChangeRecord e) {
@@ -54,6 +57,7 @@ public class AiBalanceChangeRecordListVo implements Serializable {
v.setId(e.getId());
v.setUuid(e.getUuid());
v.setNickname(e.getNickname());
+ v.setDeptName(e.getDeptName());
v.setOrderNo(e.getOrderNo());
v.setType(e.getType());
v.setChangeAmount(e.getChangeAmount());
diff --git a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/DeptUserScoreTransferTxService.java b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/DeptUserScoreTransferTxService.java
index a770db4..920741e 100644
--- a/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/DeptUserScoreTransferTxService.java
+++ b/web-api/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/DeptUserScoreTransferTxService.java
@@ -73,9 +73,8 @@ public class DeptUserScoreTransferTxService {
}
String orderNum = buildOrderNum();
- String remark = buildRemark(request.getRemark(), "用户积分回收至团队");
- aiUserService.addUserBalance(orderNum, user.getId(), amount.negate(), BalanceChangerConstants.DEPT_SCORE_RECLAIM, remark);
+ aiUserService.addUserBalance(orderNum, user.getId(), amount.negate(), BalanceChangerConstants.DEPT_SCORE_RECLAIM, request.getRemark());
int rows = deptService.addDeptBalance(deptId, amount);
if (rows == 0) {
@@ -83,7 +82,7 @@ public class DeptUserScoreTransferTxService {
}
BigDecimal deptBalAfter = getDeptBalance(deptId);
- insertGroupRecord(orderNum, deptId, GroupBalanceChangeType.RECLAIM.getCode(), amount, deptBalAfter, remark);
+ insertGroupRecord(orderNum, deptId, GroupBalanceChangeType.RECLAIM.getCode(), amount, deptBalAfter, request.getRemark());
}
private AiUser requireUserWithDept(Long id) {
@@ -108,13 +107,6 @@ public class DeptUserScoreTransferTxService {
return BigDecimal.valueOf(amount);
}
- private String buildRemark(String input, String defaultPrefix) {
- if (StringUtils.isNotEmpty(input)) {
- return input;
- }
- return defaultPrefix;
- }
-
private BigDecimal getDeptBalance(Long deptId) {
SysDept dept = deptService.selectDeptById(deptId);
if (dept == null) {
diff --git a/web-api/ruoyi-system/src/main/resources/mapper/system/AiBalanceChangeRecordMapper.xml b/web-api/ruoyi-system/src/main/resources/mapper/system/AiBalanceChangeRecordMapper.xml
index 0107d6c..99f9b5b 100644
--- a/web-api/ruoyi-system/src/main/resources/mapper/system/AiBalanceChangeRecordMapper.xml
+++ b/web-api/ruoyi-system/src/main/resources/mapper/system/AiBalanceChangeRecordMapper.xml
@@ -19,20 +19,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
- select r.id, r.del_flag, r.create_by, r.create_time, r.update_by, r.update_time, r.remark, r.order_no, r.user_id, r.type, r.change_amount, r.result_amount, u.nickname, u.user_id uuid from ai_balance_change_record r
+ select r.id, r.del_flag, r.create_by, r.create_time, r.update_by, r.update_time, r.remark, r.order_no, r.user_id, r.type, r.change_amount, r.result_amount, u.nickname, u.user_id uuid, d.dept_name from ai_balance_change_record r
left join ai_user u on u.id = r.user_id
+ left join sys_dept d on d.dept_id = u.dept_id and d.del_flag = '0'