“mitao”
2025-12-23 ae7063f5e4a49e2ed55f240440246bdbae3fcc13
feat:管理后台财务管理积分结算
2个文件已添加
8个文件已修改
182 ■■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TIntegralSettlementController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/export/IntegralSettlementImport.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/TIntegralSettlementMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/model/TIntegralSettlement.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/query/TIntegralSettlementDetailQuery.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/TIntegralSettlementService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TIntegralSettlementServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementDetailVO.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementVO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/TIntegralSettlementMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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));
    }
}
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;
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);
}
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 @@
}
ruoyi-system/src/main/java/com/ruoyi/system/query/TIntegralSettlementDetailQuery.java
New file
@@ -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;
}
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);
}
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;
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/vo/TIntegralSettlementDetailVO.java
New file
@@ -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;
}
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 = "操作人")
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>