From ae7063f5e4a49e2ed55f240440246bdbae3fcc13 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期二, 23 十二月 2025 11:59:00 +0800
Subject: [PATCH] feat:管理后台财务管理积分结算

---
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TIntegralSettlementMapper.java            |    7 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TIntegralSettlementController.java    |   19 +++-
 ruoyi-system/src/main/java/com/ruoyi/system/export/IntegralSettlementImport.java             |    4 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TIntegralSettlementServiceImpl.java |   38 ++++++++-
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementVO.java                    |    7 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/TIntegralSettlementService.java          |   15 +++
 ruoyi-system/src/main/java/com/ruoyi/system/model/TIntegralSettlement.java                   |    6 +
 ruoyi-system/src/main/resources/mapper/system/TIntegralSettlementMapper.xml                  |   25 ++++++
 ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementDetailVO.java              |   38 +++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/query/TIntegralSettlementDetailQuery.java        |   23 +++++
 10 files changed, 166 insertions(+), 16 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TIntegralSettlementController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TIntegralSettlementController.java
index db6e022..e4fd392 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TIntegralSettlementController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TIntegralSettlementController.java
@@ -8,9 +8,10 @@
 import com.ruoyi.common.utils.WebUtils;
 import com.ruoyi.system.dto.TIntegralSettlementDTO;
 import com.ruoyi.system.export.IntegralSettlementImport;
-import com.ruoyi.system.model.TIntegralSettlement;
+import com.ruoyi.system.query.TIntegralSettlementDetailQuery;
 import com.ruoyi.system.query.TIntegralSettlementQuery;
 import com.ruoyi.system.service.TIntegralSettlementService;
+import com.ruoyi.system.vo.TIntegralSettlementDetailVO;
 import com.ruoyi.system.vo.TIntegralSettlementVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,14 +22,11 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * 积分结算 前端控制器
@@ -46,7 +44,7 @@
     private final TIntegralSettlementService integralSettlementService;
 
     @ApiOperation(value = "积分结算列表(分页)")
-    @PostMapping("/pageList")
+    @PostMapping("/page-list")
     public R<Page<TIntegralSettlementVO>> pageList(@RequestBody TIntegralSettlementQuery query) {
         return R.ok(integralSettlementService.getSettlementPageList(query));
     }
@@ -81,4 +79,15 @@
         integralSettlementService.importData(file, dto);
         return R.ok();
     }
+    @ApiOperation("详情")
+    @GetMapping("/detail/{id}")
+    public R<TIntegralSettlementVO> detail(@PathVariable Integer id) {
+        return R.ok(integralSettlementService.getDetail(id));
+    }
+
+    @ApiOperation(value = "积分结算详情列表(分页)")
+    @PostMapping("/detail/page-list")
+    public R<Page<TIntegralSettlementDetailVO>> pageDetailList(@RequestBody TIntegralSettlementDetailQuery query) {
+        return R.ok(integralSettlementService.getSettlementDetailPageList(query));
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/export/IntegralSettlementImport.java b/ruoyi-system/src/main/java/com/ruoyi/system/export/IntegralSettlementImport.java
index b33df16..110d61d 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/export/IntegralSettlementImport.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/export/IntegralSettlementImport.java
@@ -3,6 +3,8 @@
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * 积分结算导入Excel
  */
@@ -12,7 +14,7 @@
     private String code;
 
     @Excel(name = "结算积分", width = 20)
-    private Integer totalSettlementIntegral;
+    private BigDecimal totalSettlementIntegral;
 
     @Excel(name = "备注", width = 20)
     private String remark;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TIntegralSettlementMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TIntegralSettlementMapper.java
index faf00ac..9f427a6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TIntegralSettlementMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TIntegralSettlementMapper.java
@@ -3,7 +3,9 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.system.model.TIntegralSettlement;
+import com.ruoyi.system.query.TIntegralSettlementDetailQuery;
 import com.ruoyi.system.query.TIntegralSettlementQuery;
+import com.ruoyi.system.vo.TIntegralSettlementDetailVO;
 import com.ruoyi.system.vo.TIntegralSettlementVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -23,5 +25,8 @@
      * 分页查询积分结算列表(按结算周期分组汇总)
      */
     List<TIntegralSettlementVO> selectSettlementPageList(Page<TIntegralSettlementVO> page, @Param("query") TIntegralSettlementQuery query);
-
+    /**
+     * 分页查询积分结算详情列表
+     */
+    List<TIntegralSettlementDetailVO> getSettlementDetailPageList(Page<TIntegralSettlementDetailVO> page, @Param("query") TIntegralSettlementDetailQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TIntegralSettlement.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TIntegralSettlement.java
index dd0a1a1..0f9a650 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TIntegralSettlement.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TIntegralSettlement.java
@@ -39,7 +39,7 @@
 
     @ApiModelProperty(value = "结算周期")
     @TableField("settlement_interval")
-    private LocalDate settlementInterval;
+    private String settlementInterval;
 
     @ApiModelProperty(value = "结算开始时间")
     @TableField("settlement_start_time")
@@ -51,7 +51,7 @@
 
     @ApiModelProperty(value = "合计结算积分")
     @TableField("total_settlement_integral")
-    private Integer totalSettlementIntegral;
+    private BigDecimal totalSettlementIntegral;
 
     @ApiModelProperty(value = "添加时间")
     @TableField("create_time")
@@ -75,4 +75,6 @@
 
 
 
+
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TIntegralSettlementDetailQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TIntegralSettlementDetailQuery.java
new file mode 100644
index 0000000..78cae03
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TIntegralSettlementDetailQuery.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.query;
+
+import com.ruoyi.common.core.domain.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 积分结算列表查询条件
+ */
+@Data
+@ApiModel(value = "积分结算列表查询条件")
+public class TIntegralSettlementDetailQuery extends BasePage {
+
+    @ApiModelProperty(value = "用户名")
+    private String name;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "推广号")
+    private String code;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TIntegralSettlementService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TIntegralSettlementService.java
index c2c7dfc..9d6bfee 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TIntegralSettlementService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TIntegralSettlementService.java
@@ -4,7 +4,9 @@
 import com.ruoyi.system.model.TIntegralSettlement;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.query.TIntegralSettlementDetailQuery;
 import com.ruoyi.system.query.TIntegralSettlementQuery;
+import com.ruoyi.system.vo.TIntegralSettlementDetailVO;
 import com.ruoyi.system.vo.TIntegralSettlementVO;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -31,4 +33,17 @@
      * @param dto
      */
     void importData(MultipartFile file, @Valid TIntegralSettlementDTO dto);
+
+    /**
+     * 详情
+     * @param id
+     * @return
+     */
+    TIntegralSettlementVO getDetail(Integer id);
+    /**
+     * 详情分页列表
+     * @param query
+     * @return
+     */
+    Page<TIntegralSettlementDetailVO> getSettlementDetailPageList(TIntegralSettlementDetailQuery query);
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TIntegralSettlementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TIntegralSettlementServiceImpl.java
index 5929deb..b12a474 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TIntegralSettlementServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TIntegralSettlementServiceImpl.java
@@ -6,28 +6,31 @@
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Sets;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.system.dto.TIntegralSettlementDTO;
 import com.ruoyi.system.export.IntegralSettlementImport;
 import com.ruoyi.system.model.TAppUser;
 import com.ruoyi.system.model.TIntegralSettlement;
 import com.ruoyi.system.mapper.TIntegralSettlementMapper;
+import com.ruoyi.system.query.TIntegralSettlementDetailQuery;
 import com.ruoyi.system.query.TIntegralSettlementQuery;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.system.service.TAppUserService;
 import com.ruoyi.system.service.TIntegralSettlementService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.vo.TIntegralSettlementDetailVO;
 import com.ruoyi.system.vo.TIntegralSettlementVO;
 import lombok.Cleanup;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.InputStream;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -38,10 +41,13 @@
  * @author xiaochen
  * @since 2025-12-08
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor(onConstructor_ = @Lazy)
 public class TIntegralSettlementServiceImpl extends ServiceImpl<TIntegralSettlementMapper, TIntegralSettlement> implements TIntegralSettlementService {
     private final TAppUserService appUserService;
+    private final ISysUserService sysUserService;
+
     @Override
     public Page<TIntegralSettlementVO> getSettlementPageList(TIntegralSettlementQuery query) {
         Page<TIntegralSettlementVO> page = new Page<>(query.getPageNum(), query.getPageSize());
@@ -69,7 +75,8 @@
             }).collect(Collectors.toList());
             saveBatch(saveList);
         } catch (Exception e) {
-            throw new RuntimeException(e);
+            log.error("导入积分结算异常", e);
+            throw new ServiceException("导入积分结算异常");
         }
     }
 
@@ -88,4 +95,25 @@
         }
         return Collections.emptyMap();
     }
+
+    @Override
+    public TIntegralSettlementVO getDetail(Integer id) {
+        TIntegralSettlement integralSettlement = this.getById(id);
+        TIntegralSettlementVO tIntegralSettlementVO = BeanUtil.copyProperties(integralSettlement, TIntegralSettlementVO.class);
+        if (Objects.nonNull(integralSettlement)) {
+            List<TIntegralSettlement> list = this.lambdaQuery().eq(TIntegralSettlement::getSettlementInterval, integralSettlement.getSettlementInterval()).list();
+            BigDecimal total = list.stream().map(TIntegralSettlement::getTotalSettlementIntegral).reduce(BigDecimal.ZERO, BigDecimal::add);
+            tIntegralSettlementVO.setTotalSettlementIntegral(total);
+            SysUser sysUser = sysUserService.selectUserById(Long.valueOf(integralSettlement.getCreateUserId()));
+            tIntegralSettlementVO.setCreateUserName(Objects.nonNull(sysUser) ? sysUser.getNickName() : "");
+        }
+        return tIntegralSettlementVO;
+    }
+
+    @Override
+    public Page<TIntegralSettlementDetailVO> getSettlementDetailPageList(TIntegralSettlementDetailQuery query) {
+        Page<TIntegralSettlementDetailVO> page = new Page<>(query.getPageNum(), query.getPageSize());
+        page.setRecords(baseMapper.getSettlementDetailPageList(page, query));
+        return page;
+    }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementDetailVO.java
new file mode 100644
index 0000000..6f6752f
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementDetailVO.java
@@ -0,0 +1,38 @@
+package com.ruoyi.system.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 积分结算详情列表VO
+ */
+@Data
+@ApiModel(value = "积分结算详情列表VO")
+public class TIntegralSettlementDetailVO {
+
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户名")
+    private String name;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "推广号")
+    private String code;
+
+    @ApiModelProperty(value = "结算积分")
+    private BigDecimal totalSettlementIntegral;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementVO.java
index 7c8eb6e..f2772a9 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementVO.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementVO.java
@@ -16,15 +16,18 @@
 @ApiModel(value = "积分结算列表VO")
 public class TIntegralSettlementVO {
 
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
     @ApiModelProperty(value = "结算周期")
     private String settlementInterval;
 
     @ApiModelProperty(value = "结算开始日期")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy年MM月dd日")
     private LocalDate settlementStartTime;
 
     @ApiModelProperty(value = "结算结束日期")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy年MM月dd日")
     private LocalDate settlementEndTime;
 
     @ApiModelProperty(value = "操作人")
diff --git a/ruoyi-system/src/main/resources/mapper/system/TIntegralSettlementMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TIntegralSettlementMapper.xml
index 50331a4..35ed211 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TIntegralSettlementMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TIntegralSettlementMapper.xml
@@ -24,6 +24,7 @@
     <!-- 分页查询积分结算列表(按结算周期分组汇总) -->
     <select id="selectSettlementPageList" resultType="com.ruoyi.system.vo.TIntegralSettlementVO">
         SELECT
+            t.id,
             t.settlement_interval,
             MIN(t.settlement_start_time) AS settlementStartTime,
             MAX(t.settlement_end_time) AS settlementEndTime,
@@ -41,4 +42,28 @@
         ORDER BY t.settlement_interval DESC, MAX(t.create_time) DESC
     </select>
 
+    <select id="getSettlementDetailPageList" resultType="com.ruoyi.system.vo.TIntegralSettlementDetailVO">
+        SELECT
+            t.id,
+            t.total_settlement_integral,
+            t.create_time,
+            tau.name,
+            tau.phone,
+            tau.code
+        FROM t_integral_settlement t
+        LEFT JOIN t_app_user tau ON tau.id = t.app_user_id
+        <where>
+            <if test="query.name != null and query.name != ''">
+                AND tau.name LIKE CONCAT('%', #{query.name}, '%')
+            </if>
+            <if test="query.phone != null and query.phone != ''">
+                AND tau.phone LIKE CONCAT('%', #{query.phone}, '%')
+            </if>
+            <if test="query.code != null and query.code != ''">
+                AND tau.code LIKE CONCAT('%', #{query.code}, '%')
+            </if>
+        </where>
+        ORDER BY t.create_time DESC
+    </select>
+
 </mapper>

--
Gitblit v1.7.1