diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/ab98/UserBalanceLogController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/ab98/UserBalanceLogController.java
new file mode 100644
index 0000000..85ecb79
--- /dev/null
+++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/ab98/UserBalanceLogController.java
@@ -0,0 +1,125 @@
+package com.agileboot.admin.controller.ab98;
+
+import com.agileboot.admin.customize.aop.accessLog.AccessLog;
+import com.agileboot.common.core.base.BaseController;
+import com.agileboot.common.core.dto.ResponseDTO;
+import com.agileboot.common.core.page.PageDTO;
+import com.agileboot.common.enums.common.BusinessTypeEnum;
+import com.agileboot.domain.ab98.user_balance_log.UserBalanceLogApplicationService;
+import com.agileboot.domain.ab98.user_balance_log.command.AddUserBalanceLogCommand;
+import com.agileboot.domain.ab98.user_balance_log.command.UpdateUserBalanceLogCommand;
+import com.agileboot.domain.ab98.user_balance_log.dto.UserBalanceLogDTO;
+import com.agileboot.domain.ab98.user_balance_log.query.SearchUserBalanceLogQuery;
+import io.swagger.v3.oas.annotations.Operation;
+import java.util.List;
+import javax.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+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.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 用户余额变更日志控制器
+ *
+ *
+ * @author valarchie
+ * @since 2025-12-06
+ */
+@RestController
+@RequestMapping("/ab98/balance-log")
+@RequiredArgsConstructor
+@Validated
+public class UserBalanceLogController extends BaseController {
+
+ private final UserBalanceLogApplicationService userBalanceLogApplicationService;
+
+ @Operation(summary = "用户余额变更日志列表")
+ @GetMapping
+ public ResponseDTO> list(SearchUserBalanceLogQuery query) {
+ PageDTO page = userBalanceLogApplicationService.getList(query);
+ return ResponseDTO.ok(page);
+ }
+
+ @Operation(summary = "用户余额变更日志详情")
+ @GetMapping("/{id}")
+ public ResponseDTO detail(@PathVariable Long id) {
+ UserBalanceLogDTO userBalanceLogDTO = userBalanceLogApplicationService.getById(id);
+ return ResponseDTO.ok(userBalanceLogDTO);
+ }
+
+ @Operation(summary = "根据用户余额ID查询变更日志")
+ @GetMapping("/byUserBalanceId/{userBalanceId}")
+ public ResponseDTO> getByUserBalanceId(@PathVariable Long userBalanceId) {
+ List userBalanceLogDTOList = userBalanceLogApplicationService.getByUserBalanceId(userBalanceId);
+ return ResponseDTO.ok(userBalanceLogDTOList);
+ }
+
+ @Operation(summary = "根据订单ID查询变更日志")
+ @GetMapping("/byOrderId/{orderId}")
+ public ResponseDTO> getByOrderId(@PathVariable Long orderId) {
+ List userBalanceLogDTOList = userBalanceLogApplicationService.getByOrderId(orderId);
+ return ResponseDTO.ok(userBalanceLogDTOList);
+ }
+
+ @Operation(summary = "根据审批ID查询变更日志")
+ @GetMapping("/byApprovalId/{approvalId}")
+ public ResponseDTO> getByApprovalId(@PathVariable Long approvalId) {
+ List userBalanceLogDTOList = userBalanceLogApplicationService.getByApprovalId(approvalId);
+ return ResponseDTO.ok(userBalanceLogDTOList);
+ }
+
+ @Operation(summary = "根据订单商品ID查询变更日志")
+ @GetMapping("/byOrderGoodsId/{orderGoodsId}")
+ public ResponseDTO> getByOrderGoodsId(@PathVariable Long orderGoodsId) {
+ List userBalanceLogDTOList = userBalanceLogApplicationService.getByOrderGoodsId(orderGoodsId);
+ return ResponseDTO.ok(userBalanceLogDTOList);
+ }
+
+ @Operation(summary = "根据变更类型查询变更日志")
+ @GetMapping("/byChangeType/{changeType}")
+ public ResponseDTO> getByChangeType(@PathVariable Integer changeType) {
+ List userBalanceLogDTOList = userBalanceLogApplicationService.getByChangeType(changeType);
+ return ResponseDTO.ok(userBalanceLogDTOList);
+ }
+
+ @Operation(summary = "新增用户余额变更日志")
+ @AccessLog(title = "用户余额变更日志管理", businessType = BusinessTypeEnum.ADD)
+ @PostMapping
+ public ResponseDTO add(@Validated @RequestBody AddUserBalanceLogCommand command) {
+ UserBalanceLogDTO userBalanceLogDTO = userBalanceLogApplicationService.add(command);
+ return ResponseDTO.ok(userBalanceLogDTO);
+ }
+
+ @Operation(summary = "修改用户余额变更日志")
+ @AccessLog(title = "用户余额变更日志管理", businessType = BusinessTypeEnum.MODIFY)
+ @PutMapping("/{id}")
+ public ResponseDTO edit(@PathVariable Long id, @Validated @RequestBody UpdateUserBalanceLogCommand command) {
+ command.setLogId(id);
+ UserBalanceLogDTO userBalanceLogDTO = userBalanceLogApplicationService.update(command);
+ return ResponseDTO.ok(userBalanceLogDTO);
+ }
+
+ @Operation(summary = "删除用户余额变更日志")
+ @AccessLog(title = "用户余额变更日志管理", businessType = BusinessTypeEnum.DELETE)
+ @DeleteMapping("/{id}")
+ public ResponseDTO remove(@PathVariable Long id) {
+ userBalanceLogApplicationService.delete(id);
+ return ResponseDTO.ok();
+ }
+
+ @Operation(summary = "批量删除用户余额变更日志")
+ @AccessLog(title = "用户余额变更日志管理", businessType = BusinessTypeEnum.DELETE)
+ @DeleteMapping("/batch/{ids}")
+ public ResponseDTO batchRemove(@PathVariable @NotNull List ids) {
+ userBalanceLogApplicationService.batchDelete(ids);
+ return ResponseDTO.ok();
+ }
+
+}