Browse Source

6.23 客户金币明细页面查询与合计

huangqizheng/feature-20250626103451-权限页面
huangqizhen 1 week ago
parent
commit
e885ab526a
  1. 5
      pom.xml
  2. 31
      src/main/java/com/example/demo/Util/BusinessException.java
  3. 45
      src/main/java/com/example/demo/controller/GoldDetailController.java
  4. 44
      src/main/java/com/example/demo/domain/vo/GoldDetail.java
  5. 23
      src/main/java/com/example/demo/domain/vo/Page.java
  6. 64
      src/main/java/com/example/demo/domain/vo/Result.java
  7. 25
      src/main/java/com/example/demo/domain/vo/Total.java
  8. 21
      src/main/java/com/example/demo/mapper/GoldDetailMapper.java
  9. 6
      src/main/java/com/example/demo/security/TokenFilter.java
  10. 18
      src/main/java/com/example/demo/service/GoldDetailService.java
  11. 39
      src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java
  12. 8
      src/main/resources/application.yml
  13. 58
      src/main/resources/mapper/GoldDetailMapper.xml

5
pom.xml

@ -84,6 +84,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
</dependencies>
<build>

31
src/main/java/com/example/demo/Util/BusinessException.java

@ -0,0 +1,31 @@
package com.example.demo.Util;
/**
* @program: GOLD
* @ClassName BusinessException
* @description:
* @author: huangqizhen
* @create: 202506-23 14:58
* @Version 1.0
**/
import lombok.Getter;
/**
* 业务异常可抛出到前端
*/
@Getter
public class BusinessException extends RuntimeException {
private int code; // 业务状态码
// 使用默认状态码0的构造方法
public BusinessException(String message) {
this(400, message); // 默认状态码400
}
// 指定状态码的构造方法
public BusinessException(int code, String message) {
super(message);
this.code = code;
}
}

45
src/main/java/com/example/demo/controller/GoldDetailController.java

@ -0,0 +1,45 @@
package com.example.demo.controller;
import com.example.demo.domain.vo.GoldDetail;
import com.example.demo.domain.vo.Page;
import com.example.demo.domain.vo.Result;
import com.example.demo.service.GoldDetailService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
/**
* @program: GOLD
* @ClassName GoldDetailController
* @description:
* @author: huangqizhen
* @create: 202506-23 14:41
* @Version 1.0
**/
@RestController
@RequestMapping("/goldDetail")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class GoldDetailController {
private final GoldDetailService goldDetailService;
@PostMapping("/getGoldDetail")
public Result getGoldDetail(@RequestBody Page page){
if(ObjectUtils.isEmpty(page.getPageNum())){
return Result.error("页码数为空!");
}
if(ObjectUtils.isEmpty(page.getPageSize())){
return Result.error("页大小为空!");
}
else{
return Result.success(goldDetailService.getGoldDetail(page.getPageNum(), page.getPageSize(), page.getGoldDetail()));
}
}
@PostMapping("/getTotal")
public Result getTotal(@RequestBody GoldDetail goldDetail) {
return Result.success(goldDetailService.getTotal(goldDetail));
}
}

44
src/main/java/com/example/demo/domain/vo/GoldDetail.java

@ -0,0 +1,44 @@
package com.example.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @program: GOLD
* @ClassName GoldDetail
* @description:
* @author: huangqizhen
* @create: 202506-23 13:03
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class GoldDetail {
private static final long serialVersionUID = 1L;
private String token;
private String name; // 名称
private Integer jwcode; // 精网号
private String market; // 所属地区
private String payPlatform; // 支付平台
private Integer type; // 类型
private Integer sumGold; // 总金币
private Integer permentGold; //永久金币
private Integer freeJune; // 免费金币六月到期
private Integer freeDecember; // 免费金币七月到期
private Integer taskGold; // 任务金币
private String adminName; //提交人
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date startTime; // 开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date endTime; // 结束时间
private String sortField; //排序字段
private String sortOrder; //排序顺序
}

23
src/main/java/com/example/demo/domain/vo/Page.java

@ -0,0 +1,23 @@
package com.example.demo.domain.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName Page
* @description:
* @author: huangqizhen
* @create: 202506-23 16:23
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class Page {
private static final long serialVersionUID = 1L;
private Integer pageNum;
private Integer pageSize;
private GoldDetail goldDetail;
}

64
src/main/java/com/example/demo/domain/vo/Result.java

@ -1,5 +1,6 @@
package com.example.demo.domain.vo;
import com.example.demo.Util.BusinessException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
@ -8,40 +9,67 @@ import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.HashMap;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result implements Serializable {
private static final long serialVersionUID = 1L;
private Integer code;
private String msg;
private Object data;
private Integer code; // 响应码200 代表成功401 代表未授权
private String msg; // 响应消息
private Object data; // 返回的数据
public static Result success(Integer code, String msg, Object data) {
return new Result(code, msg, data);
// 成功响应不需要给前端返回数据
public static Result success() {
return new Result(200, "success", new HashMap<>());
}
public static Result success(Integer code, Object data) {
return success(code, "操作成功", data);
// 查询成功响应把查询结果作为返回数据响应给前端
public static Result success(Object data) {
return new Result(200, "success", data);
}
public static Result success(String msg, Object data) {return success(200, msg, data);}
public static Result success(Object data){
return success(200, data);
// 失败响应
public static Result error(String msg) {
return new Result(0, msg, new HashMap<>());
}
public static Result success(){
return success(null);
// 失败响应可以自定义错误码
public static Result error(int code, String msg) {
return new Result(code, msg, new HashMap<>());
}
public static Result error(Integer code, String msg, Object data){
return new Result(code, msg, data);
// 成功响应可以自定义消息和数据
public static Result success(String msg, HashMap<String, Object> resultData) {
return new Result(200, msg, resultData); // 返回成功响应状态码为 200
}
public static Result error(Integer code, String msg){
return error(code, msg, null);
// 未授权响应可以自定义错误码
public static Result unauthorized(int code, String msg) {
return new Result(code, msg, new HashMap<>());
}
public static Result error(String msg){
return error(0, msg);
// 错误响应状态码为200code为401
public static Result unauthorized(String msg) {
return new Result(401, msg, new HashMap<>());
}
//失败响应 自定义状态码 默认为500
public static Result error(BusinessException e) {
Result response = new Result();
// 定义默认错误码映射
final int defaultErrorCode = 400;
// 检查 getCode() 是否为 null如果是 Integer
Integer code = e.getCode();
if (code == null || code == 0) {
response.setCode(defaultErrorCode); // 默认错误码
} else {
response.setCode(code);
}
response.setMsg(e.getMessage());
return response;
}
public String toJson() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(this);

25
src/main/java/com/example/demo/domain/vo/Total.java

@ -0,0 +1,25 @@
package com.example.demo.domain.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: GOLD
* @ClassName Total
* @description:
* @author: huangqizhen
* @create: 202506-23 16:53
* @Version 1.0
**/
@Data
@NoArgsConstructor
public class Total {
private static final long serialVersionUID = 1L;
private String token;
private Integer Goldtotal;
private Integer permanentGold;
private Integer freeGold;
private Integer taskGold;
}

21
src/main/java/com/example/demo/mapper/GoldDetailMapper.java

@ -0,0 +1,21 @@
package com.example.demo.mapper;
import com.example.demo.domain.vo.GoldDetail;
import com.example.demo.domain.vo.Total;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @program: GOLD
* @ClassName GoldDetailMapper
* @description:
* @author: huangqizhen
* @create: 202506-23 13:47
* @Version 1.0
**/
@Mapper
public interface GoldDetailMapper {
List<GoldDetail> getGoldDetail(GoldDetail goldDetail);
Total getTotal(GoldDetail goldDetail);
}

6
src/main/java/com/example/demo/security/TokenFilter.java

@ -228,8 +228,8 @@ public class TokenFilter extends OncePerRequestFilter {
// 检查是否是上传请求
boolean isErpRequest = request.getRequestURI().startsWith("/ERP") || request.getRequestURI().contains("ERP");
boolean isUploadRequest = request.getRequestURI().startsWith("/upload");
System.out.println(request.getRequestURI());
System.out.println(isUploadRequest);
// System.out.println(request.getRequestURI());
// System.out.println(isUploadRequest);
if (isUploadRequest ) {
// 如果是上传请求直接将请求传递给下一个过滤器或目标资源
filterChain.doFilter(request, response);
@ -237,7 +237,7 @@ public class TokenFilter extends OncePerRequestFilter {
} else {
// 使用RequestWrapper包装原始的HttpServletRequest使其输入流可以被重复读取
RequestWrapper requestWrapper = new RequestWrapper(request);
System.out.println(request);
// System.out.println(request);
// 确保请求体只被读取一次
boolean hasRequestBody = "POST".equals(requestWrapper.getMethod());

18
src/main/java/com/example/demo/service/GoldDetailService.java

@ -0,0 +1,18 @@
package com.example.demo.service;
import com.example.demo.domain.vo.GoldDetail;
import com.example.demo.domain.vo.Total;
import com.github.pagehelper.PageInfo;
/**
* @program: GOLD
* @ClassName GoldDetailService
* @description:
* @author: huangqizhen
* @create: 202506-23 11:59
* @Version 1.0
**/
public interface GoldDetailService {
PageInfo<GoldDetail> getGoldDetail(Integer pageNum, Integer pageSize, GoldDetail goldDetail);
Total getTotal(GoldDetail goldDetail);
}

39
src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java

@ -0,0 +1,39 @@
package com.example.demo.serviceImpl;
import com.example.demo.domain.vo.GoldDetail;
import com.example.demo.domain.vo.Total;
import com.example.demo.mapper.GoldDetailMapper;
import com.example.demo.service.GoldDetailService;
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
* @ClassName GoldDetailServiceImpl
* @description:
* @author: huangqizhen
* @create: 202506-23 13:44
* @Version 1.0
**/
@Service
public class GoldDetailServiceImpl implements GoldDetailService {
@Autowired
private GoldDetailMapper goldDetailMapper;
@Override
public PageInfo<GoldDetail> getGoldDetail(Integer pageNum, Integer pageSize, GoldDetail goldDetail) {
PageHelper.startPage(pageNum, pageSize);
List<GoldDetail> list= goldDetailMapper.getGoldDetail(goldDetail);
return new PageInfo<>(list);
}
@Override
public Total getTotal(GoldDetail goldDetail) {
return goldDetailMapper.getTotal(goldDetail);
}
}

8
src/main/resources/application.yml

@ -4,7 +4,7 @@ spring:
fail-on-unknown-properties: false
datasource:
mysql1:
jdbc-url: jdbc:mysql://localhost:3306/hwgold?serverTimezone=Asia/Shanghai
jdbc-url: jdbc:mysql://192.168.8.220:3306/hwgold?serverTimezone=Asia/Shanghai
username: hwgold
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
@ -62,9 +62,9 @@ spring:
data:
redis:
database: 0
host: 54.251.137.151
port: 10703
password: 8912h12jhhajsd
host: 192.168.8.220
port: 6379
password:
timeout: 1000
lettuce:
pool:

58
src/main/resources/mapper/GoldDetailMapper.xml

@ -0,0 +1,58 @@
<?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.GoldDetailMapper">
<select id="getGoldDetail" resultType="com.example.demo.domain.vo.GoldDetail">
select `user`.name, `user`.jwcode, `user`.market, `ugr`.pay_platform, `ugr`.type, `ugr`.sum_gold, `ugr`.permanent_gold, `ugr`.free_june, `ugr`.free_december, `ugr`.task_gold, `admin`.admin_name, `ugr`.audit_time
from user_gold_record ugr
left join `user` on `user`.jwcode = `ugr`.jwcode
left join `admin` on `admin`.id = `ugr`.admin_id
<where>
<if test="jwcode != null and jwcode.length > 0">
and `ugr`.jwcode = #{jwcode}
</if>
<if test="payPlatform != null and payPlatform.length > 0">
and `ugr`.pay_platform = #{payPlatform}
</if>
<if test="type != null and type.length > 0">
and `ugr`.type = #{type}
</if>
<if test="market != null and market.length > 0">
and `user`.market = #{market}
</if>
<if test="startTime != null and endTime != null">
and ugr.`audit_time` BETWEEN #{startTime} AND #{endTime}
</if>
</where>
<choose>
<when test="sortField != null and sortField.length > 0 or sortOrder != null and sortOrder.length > 0">
ORDER BY ${sortField} ${sortOrder}
</when>
<otherwise>
ORDER BY audit_time DESC
</otherwise>
</choose>
</select>
<select id="getTotal" resultType="com.example.demo.domain.vo.Total">
select sum(sum_gold) as Goldtotal, sum(permanent_gold) as permanentGold, sum(free_june+free_december) as freeGold, sum(task_gold) as taskGold
from user_gold_record
<where>
<if test="jwcode != null and jwcode.length > 0">
and `ugr`.jwcode = #{jwcode}
</if>
<if test="payPlatform != null and payPlatform.length > 0">
and `ugr`.pay_platform = #{payPlatform}
</if>
<if test="type != null and type.length > 0">
and `ugr`.type = #{type}
</if>
<if test="market != null and market.length > 0">
and `user`.market = #{market}
</if>
<if test="startTime != null and endTime != null">
and ugr.`audit_time` BETWEEN #{startTime} AND #{endTime}
</if>
</where>
</select>
</mapper>
Loading…
Cancel
Save