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>