10 changed files with 467 additions and 4 deletions
-
93src/main/java/com/example/demo/controller/RechargeController.java
-
1src/main/java/com/example/demo/domain/vo/Page.java
-
50src/main/java/com/example/demo/domain/vo/RechargeUser.java
-
27src/main/java/com/example/demo/mapper/RechargeMapper.java
-
26src/main/java/com/example/demo/service/RechargeService.java
-
1src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java
-
84src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java
-
6src/main/resources/mapper/ConsumeMapper.xml
-
179src/main/resources/mapper/RechargeMapper.xml
-
4src/main/resources/mapper/RefundMapper.xml
@ -0,0 +1,93 @@ |
|||
package com.example.demo.controller; |
|||
|
|||
import com.example.demo.domain.vo.*; |
|||
import com.example.demo.service.ConsumeService; |
|||
import com.example.demo.service.RechargeService; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.util.ObjectUtils; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeController |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:01 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@RestController |
|||
@RequestMapping("/recharge") |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
@CrossOrigin |
|||
public class RechargeController { |
|||
|
|||
|
|||
@Autowired |
|||
private RechargeService rechargeService; |
|||
|
|||
//消耗明细 |
|||
@PostMapping("/selectAll") |
|||
public Result selcetAll(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(rechargeService.selectAll(page.getPageNum(), page.getPageSize(),page.getRechargeUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
//消耗明细筛选 |
|||
@PostMapping("/selectBy") |
|||
public Result selcetBy(@RequestBody Page page) { |
|||
try { |
|||
if (ObjectUtils.isEmpty(page.getPageNum())) { |
|||
return Result.error("页码数为空!"); |
|||
} |
|||
if (ObjectUtils.isEmpty(page.getPageSize())) { |
|||
return Result.error("页大小为空!"); |
|||
} else { |
|||
return Result.success(rechargeService.selectBy(page.getPageNum(), page.getPageSize(), page.getRechargeUser())); |
|||
} |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
|
|||
} |
|||
|
|||
//消耗金币统计 |
|||
@PostMapping("/statsGold") |
|||
public Result statsGold(@RequestBody RechargeUser rechargeUser) { |
|||
try { |
|||
Gold gold = rechargeService.statsGold(rechargeUser); |
|||
return Result.success(gold); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
|
|||
//消耗金币增加 |
|||
@PostMapping("/add") |
|||
public Result add(@RequestBody RechargeUser rechargeUser) { |
|||
try { |
|||
return rechargeService.add(rechargeUser); |
|||
} catch (Exception e) { |
|||
return Result.error("接口调用失败"); |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
} |
@ -0,0 +1,50 @@ |
|||
package com.example.demo.domain.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.util.Date; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName Recharge |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:18 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Data |
|||
@NoArgsConstructor |
|||
@AllArgsConstructor |
|||
public class RechargeUser { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
private String name; // 客户姓名 |
|||
private Integer jwcode; // 精网号 |
|||
private String market; // 所属地区 |
|||
private String activity; // 活动名称 |
|||
private Integer rateId; // 汇率ID |
|||
private String rateName; // 汇率名称 |
|||
private Integer money; // 金额[分] |
|||
private Integer permanentGold; // 永久金币 |
|||
private Integer freeGold; // 免费金币 |
|||
private String payModel; // 支付方式 |
|||
private String payPlatform; // 支付平台 |
|||
private String remark; // 备注 |
|||
private Integer adminId; //提交人Id |
|||
private String adminName; //提交人姓名 |
|||
|
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date createTime; // 创建时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date startTime; // 开始时间 |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") |
|||
private Date endTime; // 结束时间 |
|||
|
|||
private String sortField; //排序字段 |
|||
private String sortOrder; //排序顺序 |
|||
} |
@ -0,0 +1,27 @@ |
|||
package com.example.demo.mapper; |
|||
|
|||
|
|||
import com.example.demo.domain.entity.UserGoldRecord; |
|||
import com.example.demo.domain.vo.RechargeUser; |
|||
import com.example.demo.domain.vo.RefundUser; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeMapper |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:41 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Mapper |
|||
public interface RechargeMapper { |
|||
List<RechargeUser> selectAll(RechargeUser rechargeUser); |
|||
|
|||
List<RechargeUser> selectBy(RechargeUser rechargeUser); |
|||
|
|||
void add(UserGoldRecord userGoldRecord); |
|||
} |
@ -0,0 +1,26 @@ |
|||
package com.example.demo.service; |
|||
|
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.RechargeUser; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.github.pagehelper.PageInfo; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechargeService |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:39 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
public interface RechargeService { |
|||
PageInfo<RechargeUser> selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser); |
|||
|
|||
Gold statsGold(RechargeUser rechargeUser); |
|||
|
|||
PageInfo<RechargeUser> selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser); |
|||
|
|||
Result add(RechargeUser rechargeUser); |
|||
} |
@ -0,0 +1,84 @@ |
|||
package com.example.demo.serviceImpl; |
|||
|
|||
import com.example.demo.domain.vo.ConsumeUser; |
|||
import com.example.demo.domain.vo.Gold; |
|||
import com.example.demo.domain.vo.RechargeUser; |
|||
import com.example.demo.domain.vo.Result; |
|||
import com.example.demo.mapper.ConsumeMapper; |
|||
import com.example.demo.mapper.RechargeMapper; |
|||
import com.example.demo.mapper.UserMapper; |
|||
import com.example.demo.service.RechargeService; |
|||
import com.github.pagehelper.PageHelper; |
|||
import com.github.pagehelper.PageInfo; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @program: gold-java |
|||
* @ClassName RechrageServceImpl |
|||
* @description: |
|||
* @author: Double |
|||
* @create: 2025−06-29 13:40 |
|||
* @Version 1.0 |
|||
**/ |
|||
|
|||
@Service |
|||
public class RechargeServiceImpl implements RechargeService { |
|||
|
|||
@Autowired |
|||
private RechargeMapper rechargeMapper; |
|||
|
|||
@Autowired |
|||
private UserMapper userMapper; |
|||
|
|||
|
|||
@Override |
|||
public PageInfo<RechargeUser> selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<RechargeUser> rechargeUsers = rechargeMapper.selectAll(rechargeUser); |
|||
return new PageInfo<>(rechargeUsers); |
|||
} |
|||
|
|||
@Override |
|||
public PageInfo<RechargeUser> selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) { |
|||
PageHelper.startPage(pageNum, pageSize); |
|||
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser); |
|||
return new PageInfo<>(rechargeUsers); |
|||
} |
|||
|
|||
@Override |
|||
public Gold statsGold(RechargeUser rechargeUser) { |
|||
Gold gold = new Gold(); |
|||
List<RechargeUser> rechargeUsers = rechargeMapper.selectBy(rechargeUser); |
|||
|
|||
// 初始化累加器 |
|||
int permanentGoldSum = 0; |
|||
int freeGoldSum = 0; |
|||
|
|||
// 遍历充值记录并累加金币 |
|||
for (RechargeUser user : rechargeUsers) { |
|||
// 累加永久金币 |
|||
if (user.getPermanentGold() != null) { |
|||
permanentGoldSum += user.getPermanentGold(); |
|||
} |
|||
// 累加免费金币 |
|||
if (user.getFreeGold() != null) { |
|||
freeGoldSum += user.getFreeGold(); |
|||
} |
|||
} |
|||
|
|||
// 将累加结果设置到Gold对象 |
|||
gold.setPermanentGolds(permanentGoldSum); |
|||
gold.setFreeGolds(freeGoldSum); |
|||
|
|||
return gold; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public Result add(RechargeUser rechargeUser) { |
|||
return null; |
|||
} |
|||
} |
@ -0,0 +1,179 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
|||
<mapper namespace="com.example.demo.mapper.RechargeMapper"> |
|||
|
|||
<!-- 查询所有充值记录 --> |
|||
<select id="selectAll" resultType="com.example.demo.domain.vo.RechargeUser"> |
|||
SELECT |
|||
u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.activity AS activity, |
|||
ugr.rate_id AS rateId, |
|||
r.rate_name AS rateName, |
|||
ugr.money AS money, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.pay_model AS payModel, |
|||
ugr.pay_platform AS payPlatform, |
|||
ugr.remark AS remark, |
|||
ugr.admin_id AS adminId, |
|||
a.admin_name AS adminName, |
|||
ugr.create_time AS createTime |
|||
FROM user u |
|||
JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN admin a ON ugr.admin_id = a.id |
|||
JOIN rate r ON ugr.rate_id = r.id |
|||
WHERE ugr.type = 0 |
|||
|
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对金币数量的排序处理 --> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'createTime'">ugr.create_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.create_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.create_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<!-- 查询筛选后充值记录 --> |
|||
<select id="selectBy" resultType="com.example.demo.domain.vo.RechargeUser"> |
|||
SELECT |
|||
u.name AS name, |
|||
u.jwcode AS jwcode, |
|||
u.market AS market, |
|||
ugr.activity AS activity, |
|||
ugr.rate_id AS rateId, |
|||
r.rate_name AS rateName, |
|||
ugr.money AS money, |
|||
ugr.permanent_gold AS permanentGold, |
|||
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, |
|||
ugr.pay_model AS payModel, |
|||
ugr.pay_platform AS payPlatform, |
|||
ugr.remark AS remark, |
|||
ugr.admin_id AS adminId, |
|||
a.admin_name AS adminName, |
|||
ugr.create_time AS createTime |
|||
FROM user u |
|||
JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode |
|||
JOIN admin a ON ugr.admin_id = a.id |
|||
JOIN rate r ON ugr.rate_id = r.id |
|||
<where> |
|||
ugr.type = 0 |
|||
<if test="jwcode != null and jwcode != ''"> |
|||
AND ugr.jwcode = #{jwcode} |
|||
</if> |
|||
<if test="activity != null and activity != ''"> |
|||
AND ugr.activity = #{activity} |
|||
</if> |
|||
<if test="market != null and market != ''"> |
|||
AND u.market = #{market} |
|||
</if> |
|||
<if test="payPlatform != null and payPlatform != ''"> |
|||
AND ugr.pay_platform = #{payPlatform} |
|||
</if> |
|||
<if test="startTime != null and endTime != null"> |
|||
AND ugr.create_time BETWEEN #{startTime} AND #{endTime} |
|||
</if> |
|||
</where> |
|||
<trim prefix="ORDER BY" suffixOverrides=","> |
|||
<choose> |
|||
<!-- 当指定排序字段时使用指定字段排序 --> |
|||
<when test="sortField != null and sortField != ''"> |
|||
<choose> |
|||
<!-- 对金币数量的排序处理 --> |
|||
<when test="sortField == 'permanentGold'">ugr.permanent_gold</when> |
|||
<when test="sortField == 'freeGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0))</when> |
|||
<!-- 对时间字段的排序处理 --> |
|||
<when test="sortField == 'createTime'">ugr.create_time</when> |
|||
<!-- 其他字段不支持排序,使用默认排序 --> |
|||
<otherwise>ugr.create_time</otherwise> |
|||
</choose> |
|||
|
|||
<!-- 排序方向处理 --> |
|||
<if test="sortOrder != null and sortOrder != ''"> |
|||
<choose> |
|||
<when test="sortOrder == 'ASC'">ASC</when> |
|||
<when test="sortOrder == 'DESC'">DESC</when> |
|||
<otherwise>DESC</otherwise> |
|||
</choose> |
|||
</if> |
|||
<if test="sortOrder == null or sortOrder == ''"> |
|||
DESC |
|||
</if> |
|||
</when> |
|||
|
|||
<!-- 未指定排序字段时,使用默认的时间降序排序 --> |
|||
<otherwise> |
|||
ugr.create_time DESC |
|||
</otherwise> |
|||
</choose> |
|||
</trim> |
|||
</select> |
|||
|
|||
<insert id="add" parameterType="com.example.demo.domain.entity.UserGoldRecord" useGeneratedKeys="true" keyProperty="id"> |
|||
INSERT INTO user_gold_record |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
order_code, |
|||
jwcode, |
|||
sum_gold, |
|||
permanent_gold, |
|||
free_june, |
|||
free_december, |
|||
task_gold, |
|||
goods_name, |
|||
remark, |
|||
type, |
|||
pay_platform, |
|||
is_refund, |
|||
admin_id, |
|||
audit_status, |
|||
create_time, |
|||
pay_time |
|||
</trim> |
|||
VALUES |
|||
<trim prefix="(" suffix=")" suffixOverrides=","> |
|||
#{orderCode}, |
|||
#{jwcode}, |
|||
#{sumGold}, |
|||
#{permanentGold}, |
|||
#{freeJune}, |
|||
#{freeDecember}, |
|||
#{taskGold}, |
|||
#{goodsName}, |
|||
#{remark}, |
|||
#{type}, |
|||
#{payPlatform}, |
|||
#{isRefund}, |
|||
#{adminId}, |
|||
#{auditStatus}, |
|||
#{createTime}, |
|||
#{payTime} |
|||
</trim> |
|||
</insert> |
|||
</mapper> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue