Browse Source

Merge branch 'milestone-20250702-金币重构一期' of http://39.101.133.168:8807/huangqizhen/gold-java into milestone-20250702-金币重构一期

lihuilin/hotfix-20250810160509-余额地区传参
lihuilin 1 month ago
parent
commit
25fac7bc4f
  1. 12
      src/main/java/com/example/demo/controller/AdminController.java
  2. 8
      src/main/java/com/example/demo/controller/ConsumeController.java
  3. 7
      src/main/java/com/example/demo/controller/ExportController.java
  4. 7
      src/main/java/com/example/demo/controller/GoldDetailController.java
  5. 8
      src/main/java/com/example/demo/controller/RechargeController.java
  6. 9
      src/main/java/com/example/demo/controller/RefundController.java
  7. 2
      src/main/java/com/example/demo/controller/UserController.java
  8. 4
      src/main/java/com/example/demo/domain/entity/Rate.java
  9. 2
      src/main/java/com/example/demo/domain/export/Goldmingxi.java
  10. 3
      src/main/java/com/example/demo/domain/vo/AuditRequest.java
  11. 1
      src/main/java/com/example/demo/domain/vo/Gold.java
  12. 4
      src/main/java/com/example/demo/domain/vo/GoldDetail.java
  13. 4
      src/main/java/com/example/demo/domain/vo/RechargeAudit.java
  14. 4
      src/main/java/com/example/demo/domain/vo/RefundAudit.java
  15. 1
      src/main/java/com/example/demo/domain/vo/WorkbenchFullStatistics.java
  16. 3
      src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java
  17. 1
      src/main/java/com/example/demo/domain/vo/WorkbenchMarketGraph.java
  18. 3
      src/main/java/com/example/demo/mapper/GoldDetailMapper.java
  19. 2
      src/main/java/com/example/demo/security/SecurityConfig.java
  20. 6
      src/main/java/com/example/demo/service/GoldDetailService.java
  21. 8
      src/main/java/com/example/demo/service/WorkbenchService.java
  22. 15
      src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java
  23. 19
      src/main/java/com/example/demo/serviceImpl/GeneralServiceImpl.java
  24. 48
      src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java
  25. 6
      src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java
  26. 15
      src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java
  27. 63
      src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java
  28. 19
      src/main/resources/mapper/AuditMapper.xml
  29. 3
      src/main/resources/mapper/ExportMapper.xml
  30. 39
      src/main/resources/mapper/GoldDetailMapper.xml
  31. 12
      src/main/resources/mapper/RateMapper.xml
  32. 1
      src/main/resources/mapper/RefundMapper.xml
  33. 4
      src/main/resources/mapper/StatisticsMapper.xml

12
src/main/java/com/example/demo/controller/AdminController.java

@ -45,16 +45,10 @@ public class AdminController {
}
}
@PostMapping("/userinfo")
public UserDetails getUserInfo(@RequestBody String requestBody) {
ObjectMapper objectMapper = new ObjectMapper();
TokenPayload token1;
try {
token1 = objectMapper.readValue(requestBody, TokenPayload.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
String token = token1.getToken();
public UserDetails getUserInfo(@RequestHeader("token") String token1) {
//String token = token1.getToken();
String token = token1;
System.out.println("1/*/*/*/*//*-*-*-*-*-*-1" +token);
try {
System.out.println("/+/+/+/+/+/+/+//" + JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class));

8
src/main/java/com/example/demo/controller/ConsumeController.java

@ -45,7 +45,7 @@ public class ConsumeController {
return Result.success(consumeService.selectAll(page.getPageNum(), page.getPageSize(),page.getConsumeUser()));
}
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查筛选数据的格式");
}
@ -65,7 +65,7 @@ public class ConsumeController {
return Result.success(consumeService.selectBy(page.getPageNum(), page.getPageSize(), page.getConsumeUser()));
}
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查筛选数据的格式");
}
}
@ -77,7 +77,7 @@ public class ConsumeController {
Gold gold = consumeService.statsGold(consumeUser);
return Result.success(gold);
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查数据的格式");
}
}
@ -94,7 +94,7 @@ public class ConsumeController {
// }
//
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查数据的格式");
}
}

7
src/main/java/com/example/demo/controller/ExportController.java

@ -42,8 +42,13 @@ public class ExportController {
@Autowired
private ExportService exportService;
@PostMapping("/export")
public Result export(@RequestBody Export Export){
public Result export(@RequestBody Export Export)throws Exception{
try {
return Result.success(exportExcelService.getExcel(Export));
} catch (Exception e) {
log.error("导出失败", e.getMessage());
return Result.error("导出失败"+e.getMessage());
}
}
@PostMapping("/exportRecharge")
public Result export(@Valid @RequestBody RechargeDTO dto) {

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

@ -55,8 +55,11 @@ public class GoldDetailController {
}
}
@PostMapping("/getTotal")
public Result getTotal(@RequestBody GoldDetail goldDetail) {
return Result.success(goldDetailService.getTotal(goldDetail));
public Result getTotal(@RequestBody Page page) {
Integer pageNum = page.getPageNum();
Integer pageSize = page.getPageSize();
GoldDetail goldDetail = page.getGoldDetail();
return Result.success(goldDetailService.sumGold(pageNum,pageSize,goldDetail));
}
@PostMapping("/goldTotal")
public Result GoldTotal(@RequestBody User user) {

8
src/main/java/com/example/demo/controller/RechargeController.java

@ -42,7 +42,7 @@ public class RechargeController {
return Result.success(rechargeService.selectAll(page.getPageNum(), page.getPageSize(),page.getRechargeUser()));
}
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查筛选数据的格式");
}
@ -62,7 +62,7 @@ public class RechargeController {
return Result.success(rechargeService.selectBy(page.getPageNum(), page.getPageSize(), page.getRechargeUser()));
}
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查筛选数据的格式");
}
}
@ -74,7 +74,7 @@ public class RechargeController {
Gold gold = rechargeService.statsGold(rechargeUser);
return Result.success(gold);
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查数据的格式");
}
}
@ -84,7 +84,7 @@ public class RechargeController {
try {
return rechargeService.add(rechargeUser);
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查数据的格式");
}
}

9
src/main/java/com/example/demo/controller/RefundController.java

@ -43,7 +43,7 @@ public class RefundController {
return Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
}
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查筛选数据的格式");
}
}
@ -57,10 +57,11 @@ public class RefundController {
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser()));
}
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查筛选数据的格式");
}
}
@ -71,7 +72,7 @@ public class RefundController {
Gold gold = refundService.statsGold(refundUser);
return Result.success(gold);
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查数据的格式");
}
}
@ -95,7 +96,7 @@ public class RefundController {
try {
return refundService.add(refundUser);
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查数据的格式");
}
}
}

2
src/main/java/com/example/demo/controller/UserController.java

@ -35,7 +35,7 @@ public class UserController {
user = userService.selectUser(user.getJwcode().toString());
return Result.success(user);
} catch (Exception e) {
return Result.error("接口调用失败");
return Result.error("请检查输入精网号");
}
}
}

4
src/main/java/com/example/demo/domain/entity/Rate.java

@ -4,8 +4,10 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.hpsf.Decimal;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ -16,7 +18,7 @@ public class Rate implements Serializable {
private Integer id; // 汇率id
private String rateName; // 汇率名称
private Integer num; // 汇率比例
private BigDecimal num; // 汇率比例
private Integer adminId; // 用户修改人id
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")

2
src/main/java/com/example/demo/domain/export/Goldmingxi.java

@ -20,7 +20,7 @@ public class Goldmingxi {
private String payPlatform; // 支付平台
private Integer type; // 类型
private Integer sumGold; // 总金币
private Integer permentGold; //永久金币
private Integer permanentGold; //永久金币
private Integer freeJune; // 免费金币六月到期
private Integer freeDecember; // 免费金币七月到期
private Integer taskGold; // 任务金币

3
src/main/java/com/example/demo/domain/vo/AuditRequest.java

@ -13,6 +13,7 @@ public class AuditRequest {
private Integer auditId; //审核人id
private Integer action; //操作
private String rejectReason; //驳回理由
private String sortField; //排序字段
private String sortOrder; //排序顺序
}

1
src/main/java/com/example/demo/domain/vo/Gold.java

@ -24,4 +24,5 @@ public class Gold implements Serializable {
private Integer permanentGolds; // 永久金币总数
private Integer freeGolds; // 免费金币总数
private Integer taskGolds; // 任务金币总数
private Integer sumGolds;
}

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

@ -27,7 +27,7 @@ public class GoldDetail {
private String payPlatform; // 支付平台
private Integer type; // 类型
private Integer sumGold; // 总金币
private Integer permentGold; //永久金币
private Integer permanentGold; //永久金币
private Integer freeJune; // 免费金币六月到期
private Integer freeDecember; // 免费金币七月到期
private Integer taskGold; // 任务金币
@ -38,5 +38,7 @@ public class GoldDetail {
private Date endTime; // 结束时间
private String sortField; //排序字段
private String sortOrder; //排序顺序
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime;
}

4
src/main/java/com/example/demo/domain/vo/RechargeAudit.java

@ -1,6 +1,7 @@
package com.example.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -19,6 +20,7 @@ import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class RechargeAudit {
private static final long serialVersionUID = 1L;
@ -54,4 +56,6 @@ public class RechargeAudit {
private Date endTime; // 结束时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime; // 审核时间
private String sortField; //排序字段
private String sortOrder; //排序顺序
}

4
src/main/java/com/example/demo/domain/vo/RefundAudit.java

@ -1,6 +1,7 @@
package com.example.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -19,6 +20,7 @@ import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class RefundAudit {
private static final long serialVersionUID = 1L;
private String name; // 客户姓名
@ -51,4 +53,6 @@ public class RefundAudit {
private Date endTime; // 结束时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime; // 审核时间
private String sortField; //排序字段
private String sortOrder; //排序顺序
}

1
src/main/java/com/example/demo/domain/vo/WorkbenchFullStatistics.java

@ -24,6 +24,7 @@ public class WorkbenchFullStatistics implements Serializable {
private Integer totalConsumePermanent; //总消费-永久金币
private Integer totalConsumeFree; //总消费-免费金币
private Integer totalConsumeTask; //总消费-任务金币
private Integer totalConsume; //总消费
private Integer totalRefund; //总退款
private Integer totalRechargeNum; //总充值人数
}

3
src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java

@ -55,6 +55,9 @@ public class WorkbenchMarketCard implements Serializable {
private Integer firstRecharge; // 当日首充人数
private Integer wow; // 周同比%
private Integer daily; // 日环比%
private Integer sumWow; // 总周同比%
private Integer sumDaily; // 总日环比%
private Integer yearlyRechargeNum; // 全年累计充值人头数
//图表
private Integer SumRechargePermanent; //合计充值永久金币

1
src/main/java/com/example/demo/domain/vo/WorkbenchMarketGraph.java

@ -26,4 +26,5 @@ public class WorkbenchMarketGraph implements Serializable {
private Integer SumConsumePermanent; //合计消费永久金币
private Integer SumConsumeFree; //合计消费免费金币
private Integer SumConsumeTask; //合计消费任务金币
private Integer SumConsume; //合计消费金币
}

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

@ -20,6 +20,9 @@ import java.util.List;
@Mapper
public interface GoldDetailMapper {
List<GoldDetail> getGoldDetail(GoldDetail goldDetail);
List<GoldDetail> getGoldDetail1(@Param("pageNum") Integer pageNum,
@Param("pageSize") Integer pageSize,
@Param("goldDetail") GoldDetail goldDetail);
Total getTotal(GoldDetail goldDetail);
List<User> getGold(User user);
Total GoldTotal(User user);

2
src/main/java/com/example/demo/security/SecurityConfig.java

@ -60,7 +60,7 @@ public class SecurityConfig {
request
.requestMatchers( HttpMethod.POST,
// 用户不登录就可以访问的路径
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/**").permitAll()
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**").permitAll()
.requestMatchers(
"/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**"
).permitAll()

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

@ -3,10 +3,8 @@ package com.example.demo.service;
import com.example.demo.domain.DTO.GoldDetailDTO;
import com.example.demo.domain.DTO.GoldUserDTO;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.GoldDetail;
import com.example.demo.domain.vo.*;
import com.example.demo.domain.vo.Result;
import com.example.demo.domain.vo.Total;
import com.github.pagehelper.PageInfo;
@ -24,6 +22,8 @@ public interface GoldDetailService {
PageInfo<User> getGold(Integer pageNum, Integer pageSize, User user);
Total GoldTotal(User user);
//金币统计
Gold sumGold(Integer pageNum, Integer pageSize, GoldDetail goldDetail);
//异步导出客户明细
Result addExportRecord(GoldDetailDTO dto);
//异步导出金币余额

8
src/main/java/com/example/demo/service/WorkbenchService.java

@ -27,10 +27,14 @@ public interface WorkbenchService {
WorkbenchCard getGraph(String token, Date startDate, Date endDate, List<String> markets);
//根据类型获取年初至今的统计数据
Map<String, Integer> calculateAllSum(String market, Date startDate, Date endDate);
//获取该日期该市场的日
//获取该日期该市场的日
Integer calculateDayOverDay(String market,Date date);
//获取该日期该市场的周环比
//获取总体日环比
Integer calculateAllDayOverDay(Date date);
//获取该日期该市场的周同比
Integer calculateWeekOverWeek(String market, Date date);
//获取该日期总体的周同比
Integer calculateAllWeekOverWeek( Date date);
//获取与传入的日期相差XX天的日期
Date addDays(Date date, int days);
//获取传入时间所在周的第一天周一

15
src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java

@ -96,6 +96,12 @@ public class ConsumeServiceImpl implements ConsumeService {
//新增消耗
@Override
public Result add(ConsumeUser consumeUser) {
if(consumeUser.getTaskGold()==null||consumeUser.getFreeGold()==null||consumeUser.getPermanentGold()==null){
return Result.error("金币数量不能为空");
}
if(consumeUser.getTaskGold()<0||consumeUser.getFreeGold()<0||consumeUser.getPermanentGold()<0){
return Result.error("金币不能为负数");
}
UserGoldRecord userGoldRecord = new UserGoldRecord();
// 获取当前时间戳部分
@ -160,10 +166,11 @@ public class ConsumeServiceImpl implements ConsumeService {
user.setConsumeNum(gold.getConsumeNum() + 1);
user.setSumConsume(consumeUser.getPermanentGold() + consumeUser.getFreeGold() + consumeUser.getTaskGold());
userMapper.updateGold(user);
//对接接口
// GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
// (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) /100,
// userGoldRecord.getRemark(),((double) userGoldRecord.getPermanentGold() /100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName());
if(consumeUser.getJwcode().equals(94226013)){
GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65,
(double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) /100,
userGoldRecord.getRemark(),((double) userGoldRecord.getPermanentGold() /100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName());
}
return Result.success();
}
}

19
src/main/java/com/example/demo/serviceImpl/GeneralServiceImpl.java

@ -8,10 +8,8 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* @program: GOLD
@ -42,13 +40,22 @@ public class GeneralServiceImpl implements GeneralService {
@Override
public List<String> getGoods() {
List<String> list = generalMapper.getGoods();
return list;
// 使用 Java 8 Stream API 过滤 null 和空字符串
List<String> filteredList = list.stream()
.filter(Objects::nonNull) // 过滤掉 null
.filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
.collect(Collectors.toList());
return filteredList;
}
@Override
public List<String> getActivity() {
List<String> list = generalMapper.getActivity();
return list;
List<String> filteredList = list.stream()
.filter(Objects::nonNull) // 过滤掉 null
.filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
.collect(Collectors.toList());
return filteredList;
}

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

@ -4,9 +4,7 @@ import com.example.demo.Util.RedisUtil;
import com.example.demo.domain.DTO.GoldDetailDTO;
import com.example.demo.domain.DTO.GoldUserDTO;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.GoldDetail;
import com.example.demo.domain.vo.Result;
import com.example.demo.domain.vo.Total;
import com.example.demo.domain.vo.*;
import com.example.demo.exception.SystemException;
import com.example.demo.mapper.GoldDetailMapper;
import com.example.demo.service.GoldDetailService;
@ -65,6 +63,50 @@ public class GoldDetailServiceImpl implements GoldDetailService {
return goldDetailMapper.GoldTotal(user);
}
/*
用户金币合计数
*/
@Override
public Gold sumGold(Integer pageNum, Integer pageSize, GoldDetail goldDetail) {
Gold gold = new Gold();
//获取订单列表
PageHelper.startPage(1, 500000);
List<GoldDetail> goldDetails = goldDetailMapper.getGoldDetail(goldDetail);
// List<GoldDetail> goldDetails=goldDetailMapper.getGoldDetail1(1,500000,goldDetail);
// 初始化累加器
int totalNum=0;
int permanentGoldSum = 0;
int freeGoldSum = 0;
int taskGoldSum = 0;
// 遍历消费记录并累加金币
for (GoldDetail detail : goldDetails) {
// 累加永久金币
if (detail.getPermanentGold() != null) {
permanentGoldSum += detail.getPermanentGold();
}
// 累加免费金币
if (detail.getFreeJune() != null||detail.getFreeDecember() != null) {
freeGoldSum = freeGoldSum+detail.getFreeJune()+detail.getFreeDecember();
}
// 累加任务金币
if (detail.getTaskGold() != null) {
taskGoldSum += detail.getTaskGold();
}
// 每遍历一条记录总条数加1
totalNum++;
}
// 将累加结果设置到Gold对象
gold.setPermanentGolds(permanentGoldSum);
gold.setFreeGolds(freeGoldSum);
gold.setTotalNum(totalNum);
gold.setTaskGolds(taskGoldSum);
gold.setSumGolds(permanentGoldSum+freeGoldSum+taskGoldSum);
return gold;
}
@Override
public Result addExportRecord(GoldDetailDTO dto) {
// 获取操作者 jwcode

6
src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java

@ -83,6 +83,12 @@ public class RechargeServiceImpl implements RechargeService {
@Override
public Result add(RechargeUser rechargeUser) {
if(rechargeUser.getFreeGold()==null||rechargeUser.getPermanentGold()==null||rechargeUser.getMoney()==null){
return Result.error("金币和金额不能为空");
}
if(rechargeUser.getFreeGold()<0||rechargeUser.getPermanentGold()<=0||rechargeUser.getMoney()<=0){
return Result.error("充值不能为负数或0");
}
UserGoldRecord userGoldRecord = new UserGoldRecord();
// 获取当前时间戳部分

15
src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java

@ -21,7 +21,9 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* @program: gold-java
@ -91,6 +93,12 @@ public class RefundServiceImpl implements RefundService {
@Transactional
@Override
public Result add(RefundUser refundUser) {
if(refundUser.getTaskGold()==null||refundUser.getFreeGold()==null||refundUser.getPermanentGold()==null){
return Result.error("金币不能为空");
}
if(refundUser.getTaskGold()<0||refundUser.getFreeGold()<0||refundUser.getPermanentGold()<0){
return Result.error("金币不能为负数");
}
UserGoldRecord userGoldRecord = new UserGoldRecord();
String goodsNameWithOrder = refundUser.getGoodsName();
String orderCode = "";
@ -141,7 +149,11 @@ public class RefundServiceImpl implements RefundService {
@Override
public List<String> getRefundType() {
List<String> list = refundMapper.getRefundType();
return list;
List<String> filteredList = list.stream()
.filter(Objects::nonNull) // 过滤掉 null
.filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
.collect(Collectors.toList());
return filteredList;
}
@Override
@ -160,6 +172,7 @@ public class RefundServiceImpl implements RefundService {
String combined = orderCode + "_" + goodsName;
RefundUser refundUser = new RefundUser();
refundUser.setGoodsName(combined);
refundUser.setSumGold(record.getPermanentGold()+record.getFreeGold()+record.getTaskGold());
refundUser.setPermanentGold(record.getPermanentGold());
refundUser.setFreeGold(record.getFreeGold());
refundUser.setTaskGold(record.getTaskGold());

63
src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java

@ -184,7 +184,9 @@ public class WorkbenchServiceImpl implements WorkbenchService {
// 周环比日同比
card.setWow(calculateWeekOverWeek(market, currentDate));
card.setSumWow(calculateAllWeekOverWeek(date));
card.setDaily(calculateDayOverDay(market, currentDate));
card.setSumDaily(calculateAllDayOverDay(date));
}
return card;
}
@ -203,6 +205,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
graphs.setSumConsumePermanent(sums.get("cPermanent"));
graphs.setSumConsumeFree(sums.get("cFree"));
graphs.setSumConsumeTask(sums.get("cTask"));
graphs.setSumConsume(sums.get("consume"));
marketGraphs.add(graphs);
}
return new WorkbenchCard(token, new ArrayList<>(),marketGraphs,markets,startDate,endDate);
@ -222,6 +225,9 @@ public class WorkbenchServiceImpl implements WorkbenchService {
result.put("cPermanent", stats.getTotalConsumePermanent() != null ? stats.getTotalConsumePermanent() : 0);
result.put("cFree", stats.getTotalConsumeFree() != null ? stats.getTotalConsumeFree() : 0);
result.put("cTask", stats.getTotalConsumeTask() != null ? stats.getTotalConsumeTask() : 0);
result.put("consume",(stats.getTotalConsumePermanent() != null ? stats.getTotalConsumePermanent() : 0)
+(stats.getTotalConsumeFree() != null ? stats.getTotalConsumeFree() : 0)
+(stats.getTotalConsumeTask() != null ? stats.getTotalConsumeTask() : 0));
result.put("refund", stats.getTotalRefund() != null ? stats.getTotalRefund() : 0);
result.put("rechargeNum", stats.getTotalRechargeNum() != null ? stats.getTotalRechargeNum() : 0);
return result;
@ -229,7 +235,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
}
/*
获取该日期该市场的日
获取该日期该市场的日
*/
@Override
public Integer calculateDayOverDay(String market, Date date) {
@ -255,6 +261,34 @@ public class WorkbenchServiceImpl implements WorkbenchService {
double rate = ((double) (currentStatistics.getRechargeNum() - yesterdayStatistics.getRechargeNum()) / yesterdayStatistics.getRechargeNum()) * 100;
return (int) Math.round(rate);
}
// 计算所有市场总体日环比
@Override
public Integer calculateAllDayOverDay(Date date) {
//获取今天的开始时间和结束时间
LocalDateTime startTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().with(LocalTime.MIN);
LocalDateTime endTime= startTime.plusDays(1).minusSeconds(1);
//获取地区列表
List<String> markets = generalService.getMarket();
int currentTotal = 0; //今日所有地区总的充值人数
int yesterdayTotal = 0; //昨日所有地区总的充值人数
Date yesterday = addDays(date, -1);
//过去昨天的开始时间和结束时间
LocalDateTime ydayStartTime = yesterday.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().with(LocalTime.MIN);
LocalDateTime ydayEndTime= ydayStartTime.plusDays(1).minusSeconds(1);
for (String market : markets) {
currentTotal += statisticsMapper.countRechargeNum(market,
Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),
Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant()));
yesterdayTotal += statisticsMapper.countRechargeNum(market,
Date.from(ydayStartTime.atZone(ZoneId.systemDefault()).toInstant()),
Date.from(ydayEndTime.atZone(ZoneId.systemDefault()).toInstant()));
}
if (yesterdayTotal == 0) return 0; // 避免除以零的情况
double rate = ((double)(currentTotal - yesterdayTotal) / yesterdayTotal) * 100;
return (int)Math.round(rate);
}
/*
获取该日期该市场的周环比
*/
@ -264,6 +298,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
Date thisWeekStart = getStartOfWeek(date);
//获取传入日期上一周的周一
Date lastWeekStart = addDays(thisWeekStart, -7);
// 获取本周周一至今天的充值人数总和
int thisWeekTotal = statisticsMapper.countRechargeNum(market, thisWeekStart, date);
// 获取上周同一时间段的充值人数总和
@ -274,6 +309,32 @@ public class WorkbenchServiceImpl implements WorkbenchService {
double rate = ((double) (thisWeekTotal - lastWeekTotal) / lastWeekTotal) * 100;
return (int) Math.round(rate);
}
/*
获取改天总体的的周环比
*/
@Override
public Integer calculateAllWeekOverWeek( Date date) {
List<String> markets = generalService.getMarket();
int thisWeekTotal = 0; //本周至当天充值人数
int lastWeekTotal = 0; //上周至当天充值人数
//获取本周周一
Date thisWeekStart = getStartOfWeek(date);
//获取传入日期上一周的周一
Date lastWeekStart = addDays(thisWeekStart, -7);
for (String market : markets) {
// 获取本周周一至今天的充值人数总和
thisWeekTotal += statisticsMapper.countRechargeNum(market, thisWeekStart, date);
// 获取上周同一时间段的充值人数总和
lastWeekTotal += statisticsMapper.countRechargeNum(market, lastWeekStart, addDays(date, -7));
}
if (lastWeekTotal == 0) {
return 0; // 避免除以零的情况
}
double rate = ((double) (thisWeekTotal - lastWeekTotal) / lastWeekTotal) * 100;
return (int) Math.round(rate);
}
@Override
public Date addDays(Date date, int days) {

19
src/main/resources/mapper/AuditMapper.xml

@ -38,6 +38,7 @@
<!--多条件查询充值审核订单-->
<select id="selectRechargeBy" resultType="com.example.demo.domain.vo.RechargeAudit">
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
u.name as name,
u.market as market,
a1.admin_name as adminName,
@ -68,12 +69,20 @@
AND ugr.audit_status = #{rechargeAudit.auditStatus}
</if>
AND ugr.type = 0
</where>
<choose>
<when test="rechargeAudit.sortField != null and rechargeAudit.sortField.length > 0 or rechargeAudit.sortOrder != null and rechargeAudit.sortOrder.length > 0">
ORDER BY ${rechargeAudit.sortField} ${rechargeAudit.sortOrder}
</when>
<otherwise>
ORDER BY create_time DESC
</otherwise>
</choose>
</select>
<!--多条件查询退款审核订单-->
<select id="selectRefundBy" resultType="com.example.demo.domain.vo.RefundAudit">
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
u.name as name,
u.market as market,
a1.admin_name as adminName,
@ -106,5 +115,13 @@
AND ugr.type = 2
</where>
<choose>
<when test="refundAudit.sortField != null and refundAudit.sortField.length > 0 or refundAudit.sortOrder != null and refundAudit.sortOrder.length > 0">
ORDER BY ${refundAudit.sortField} ${refundAudit.sortOrder}
</when>
<otherwise>
ORDER BY create_time DESC
</otherwise>
</choose>
</select>
</mapper>

3
src/main/resources/mapper/ExportMapper.xml

@ -22,7 +22,6 @@
and account = #{account}
</if>
</where>
order by create_time desc
</select>
</mapper>

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

@ -7,16 +7,17 @@
</insert>
<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
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,
`ugr`.free_june+`ugr`.free_december as free_gold
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 `ugr`.jwcode = #{jwcode}
and ugr.jwcode = #{jwcode}
</if>
<if test="payPlatform != null and payPlatform.length > 0">
and `ugr`.pay_platform = #{payPlatform}
and ugr.pay_platform = #{payPlatform}
</if>
<if test="type != null">
and `ugr`.type = #{type}
@ -95,4 +96,36 @@
</if>
</where>
</select>
<select id="getGoldDetail1" 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 `ugr`.jwcode = #{jwcode}
</if>
<if test="payPlatform != null and payPlatform.length > 0">
and `ugr`.pay_platform = #{payPlatform}
</if>
<if test="type != null">
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>
</mapper>

12
src/main/resources/mapper/RateMapper.xml

@ -15,11 +15,17 @@
<update id="update">
UPDATE
rate
SET
rate_name=#{rateName},
<set>
<if test="num!=null">
num= #{num},
</if>
<if test="rateName!=null and rateName.length>0">
rate_name= #{rateName},
</if>
<if test="adminId!=null">
admin_id= #{adminId},
update_time=#{updateTime}
</if>
</set>
WHERE
id=#{id}
</update>

1
src/main/resources/mapper/RefundMapper.xml

@ -108,6 +108,7 @@
<when test="sortField == 'taskGold'">ugr.task_gold</when>
<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 == 'sumGold'">(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)+ COALESCE(ugr.permanent_gold, 0)+ COALESCE(ugr.task_gold, 0))</when>
<!-- 对时间字段的排序处理 -->
<when test="sortField == 'createTime'">ugr.create_time</when>
<!-- 其他字段不支持排序,使用默认排序 -->

4
src/main/resources/mapper/StatisticsMapper.xml

@ -86,6 +86,7 @@
FROM user_gold_record ugr
INNER JOIN user u ON ugr.jwcode = u.jwcode
WHERE u.market = #{market}
AND ugr.type=0
AND ugr.audit_status IN (1,3)
AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
</select>
@ -95,7 +96,8 @@
FROM user_gold_record ugr
INNER JOIN user u ON ugr.jwcode = u.jwcode
WHERE u.market = #{market}
AND ugr.audit_status = 1
AND ugr.type=0
AND ugr.audit_status IN (1,3)
AND ugr.audit_time BETWEEN #{startTime} AND #{endTime}
AND u.first_recharge = #{startTime}
</select>

Loading…
Cancel
Save