Browse Source

7-1审核统计数,工作台优化

lijianlin/feature-20250623120104-工作台与审核
jianlin 13 hours ago
parent
commit
05cf4c5983
  1. 21
      src/main/java/com/example/demo/controller/AuditController.java
  2. 1
      src/main/java/com/example/demo/domain/vo/Gold.java
  3. 5
      src/main/java/com/example/demo/domain/vo/RefundAudit.java
  4. 2
      src/main/java/com/example/demo/mapper/AuditMapper.java
  5. 6
      src/main/java/com/example/demo/service/AuditService.java
  6. 2
      src/main/java/com/example/demo/service/StatisticsService.java
  7. 3
      src/main/java/com/example/demo/service/WorkbenchService.java
  8. 103
      src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java
  9. 2
      src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java
  10. 75
      src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java
  11. 6
      src/main/resources/mapper/AuditMapper.xml
  12. 5
      src/main/resources/mapper/StatisticsMapper.xml

21
src/main/java/com/example/demo/controller/AuditController.java

@ -1,9 +1,6 @@
package com.example.demo.controller;
import com.example.demo.domain.vo.AuditRequest;
import com.example.demo.domain.vo.Page;
import com.example.demo.domain.vo.RechargeAudit;
import com.example.demo.domain.vo.RefundAudit;
import com.example.demo.domain.vo.*;
import com.example.demo.service.AuditService;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
@ -59,4 +56,20 @@ public class AuditController {
return auditService.selectRefundBy(pageNum, pageSize, refundAudit);
}
//充值审核合计数
@PostMapping("sumRechargeGold")
public Gold sumRechargeGold(@RequestBody Page page) {
Integer pageNum = page.getPageNum();
Integer pageSize = page.getPageSize();
RechargeAudit rechargeAudit = page.getRechargeAudit();
return auditService.sumRechargeGold(pageNum, pageSize, rechargeAudit);
}
//退款审核合计数
@PostMapping("sumRefundGold")
public Gold sumRefundGold(@RequestBody Page page) {
Integer pageNum = page.getPageNum();
Integer pageSize = page.getPageSize();
RefundAudit refundAudit = page.getRefundAudit();
return auditService.sumRefundGold(pageNum, pageSize, refundAudit);
}
}

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

@ -20,6 +20,7 @@ import java.io.Serializable;
@AllArgsConstructor
public class Gold implements Serializable {
private static final long serialVersionUID = 1L;
private Integer totalNum; //总条数
private Integer permanentGolds; // 永久金币总数
private Integer freeGolds; // 免费金币总数
private Integer taskGolds; // 任务金币总数

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

@ -25,16 +25,15 @@ public class RefundAudit {
private Integer jwcode; // 精网号
private String orderCode; // 订单号
private String market; // 所属地区
private Byte refundModel; // 退款方式-全额 部分
private Integer refundModel; // 退款方式-全额 部分
private String goodsName; // 商品名称
private Integer sumGold; // 退款金额
private Integer permanentGold; // 永久金币
private Integer freeGold; // 免费金币
private Integer freeJune; // 6月免费金币
private Integer freeDecember; // 12月免费金币
private Integer taskGold; // 任务金币
private String remark; // 备注
private String payModel; //支付方式
private String voucher; //支付凭证
private Integer adminId; //提交人Id
private String adminName; //提交人姓名
private String auditStatus; //审核状态

2
src/main/java/com/example/demo/mapper/AuditMapper.java

@ -28,7 +28,7 @@ public interface AuditMapper {
//修改用户余额
int updateUserGold(User user);
//修改消费订单为以退款
int updateOrderRefund(String orderCode);
int updateOrderRefund(String orderCode ,Byte isRefund);
//多条件查询充值审核订单
List<RechargeAudit> selectRechargeBy(@Param("pageNum") Integer pageNum,
@Param("pageSize") Integer pageSize,

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

@ -22,6 +22,8 @@ public interface AuditService {
PageInfo<RechargeAudit> selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit);
//多条件查询退款审核订单
PageInfo<RefundAudit> selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit);
//金币合计数
Gold sumRechargeGold();
//充值审核金币合计数
Gold sumRechargeGold(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit);
//退款审核金币合计数
Gold sumRefundGold(Integer pageNum, Integer pageSize,RefundAudit refundAudit);
}

2
src/main/java/com/example/demo/service/StatisticsService.java

@ -15,7 +15,7 @@ import java.util.Date;
public interface StatisticsService {
//12点18点,23点30分执行定时任务更新当天part2数据
//112点18点,23点30分执行定时任务更新当天part1数据
public void runHourlyTaskPart1();
//12点18点执行定时任务更新当天part2数据
public void runHourlyTaskPart2();

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

@ -1,5 +1,6 @@
package com.example.demo.service;
import com.example.demo.domain.entity.Statistics;
import com.example.demo.domain.vo.WorkbenchCard;
import com.example.demo.domain.vo.WorkbenchMarketCard;
@ -19,6 +20,8 @@ import java.util.List;
public interface WorkbenchService {
//获取不同地区的工作台统计卡片
WorkbenchCard getCard(String token);
//获取卡片数据
WorkbenchMarketCard createWorkbenchMarketCard(String market, Statistics statistics, Date yearlyStartDate, Date currentDate);
//获取不同地区的工作台柱状图数据根据类型起止时间地区查询
WorkbenchCard getGraph(String token, Date startDate, Date endDate, List<String> markets);
//根据类型获取年初至今的统计数据

103
src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java

@ -12,6 +12,7 @@ import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
@ -44,10 +45,22 @@ public class AuditServiceImpl implements AuditService {
if (action==2){ //驳回
updateOrder.setAuditStatus(2);
updateOrder.setRejectReason(rejectReason);
updateOrder.setAuditTime(new Date());
auditMapper.updateOrder(updateOrder);
return true;
if (order.getType()==2) { //退款
//2.获取对应的消费订单退款订单号去掉开头"TK"即为对应消费订单
String consumeOrderCode = order.getOrderCode().replaceFirst("TK", "");
//3.更新消费订单是否已退款状态为0
UserGoldRecord consumeOrder = auditMapper.selectOrderByOrderCode(consumeOrderCode);
if (consumeOrderCode != null&&consumeOrder.getType()==1){ //确保是消费订单
auditMapper.updateOrderRefund(consumeOrderCode,(byte)0);
}else {
throw new IllegalArgumentException("找不到对应的订单或不是有效订单");
}
}
}else if (action==1) { //通过
updateOrder.setAuditStatus(1);
updateOrder.setAuditTime(new Date());
}
// 执行审核更新
auditMapper.updateOrder(updateOrder);
@ -66,23 +79,16 @@ public class AuditServiceImpl implements AuditService {
update.setCurrentTaskGold(order.getTaskGold()); //当前任务金币
auditMapper.updateUserGold(update);
}else if (order.getType()==2) { //退款
//1.更新用户余额,并标记对应的消费订单为已退款
//更新用户余额
User update = new User();
update.setJwcode(order.getJwcode());
update.setCurrentPermanentGold(order.getPermanentGold()); //当前永久金币
update.setCurrentFreeJune(order.getFreeJune()); //当前六月免费金币
update.setCurrentFreeDecember(order.getFreeDecember()); //当前十二月免费金币
update.setCurrentTaskGold(order.getTaskGold()); //当前任务金币
auditMapper.updateUserGold(update);
//2.获取对应的消费订单退款订单号去掉开头"TK"即为对应消费订单
String consumeOrderCode = order.getOrderCode().replaceFirst("TK", "");
//3.更新消费订单是否已退款状态为1
UserGoldRecord consumeOrder = auditMapper.selectOrderByOrderCode(consumeOrderCode);
if (consumeOrderCode != null&&consumeOrder.getType()==1){ //确保是消费订单
auditMapper.updateOrderRefund(consumeOrderCode);
}else {
throw new IllegalArgumentException("找不到对应的订单或不是有效订单");
}
}
return true;
}
@ -94,25 +100,88 @@ public class AuditServiceImpl implements AuditService {
PageHelper.startPage(pageNum, pageSize);
List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(pageNum, pageSize, rechargeAudit);
// rechargeAudit.setFreeGold(rechargeAudit.getFreeJune()+rechargeAudit.getFreeDecember());
return new PageInfo<>(rechargeAudits);
}
/*
多条件查询退款订单
*/
@Override
public PageInfo<RefundAudit> selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
PageHelper.startPage(pageNum, pageSize);
List<RefundAudit> refundAudits = auditMapper.selectRefundBy(pageNum, pageSize, refundAudit);
//refundAudit.setFreeGold(refundAudit.getFreeJune()+refundAudit.getFreeDecember());
return new PageInfo<>(refundAudits);
}
/*
金币合计数
充值审核金币合计数
*/
@Override
public Gold sumRechargeGold() {
public Gold sumRechargeGold(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) {
Gold gold = new Gold();
//获取充值审核订单列表
List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(1, 1000, null);
return null;
List<RechargeAudit> rechargeAudits = auditMapper.selectRechargeBy(1, 500000, rechargeAudit);
// 初始化累加器
int totalNum=0;
int permanentGoldSum = 0;
int freeGoldSum = 0;
// 遍历消费记录并累加金币
for (RechargeAudit recharge : rechargeAudits) {
// 累加永久金币
if (recharge.getPermanentGold() != null) {
permanentGoldSum += recharge.getPermanentGold();
}
// 累加免费金币
if (recharge.getFreeJune() != null||recharge.getFreeDecember() != null) {
freeGoldSum = freeGoldSum+recharge.getFreeJune()+recharge.getFreeDecember();
}
// 每遍历一条记录总条数加1
totalNum++;
}
// 将累加结果设置到Gold对象
gold.setPermanentGolds(permanentGoldSum);
gold.setFreeGolds(freeGoldSum);
gold.setTotalNum(totalNum);
return gold;
}
/*
退款审核合计数
*/
@Override
public Gold sumRefundGold(Integer pageNum, Integer pageSize, RefundAudit refundAudit) {
Gold gold = new Gold();
//获取充值审核订单列表
List<RefundAudit> refundAudits = auditMapper.selectRefundBy(1, 500000, refundAudit);
// 初始化累加器
int totalNum=0;
int permanentGoldSum = 0;
int freeGoldSum = 0;
int taskGoldSum = 0;
// 遍历消费记录并累加金币
for (RefundAudit refund : refundAudits) {
// 累加永久金币
if (refund.getPermanentGold() != null) {
permanentGoldSum += refund.getPermanentGold();
}
// 累加免费金币
if (refund.getFreeJune() != null||refund.getFreeDecember()!=null) {
freeGoldSum += refund.getFreeJune()+refund.getFreeDecember();
}
//累加任务金币
if(refund.getTaskGold()!=null)
taskGoldSum+=refund.getTaskGold();
// 每遍历一条记录总条数加1
totalNum++;
}
// 将累加结果设置到Gold对象
gold.setPermanentGolds(permanentGoldSum);
gold.setFreeGolds(freeGoldSum);
gold.setTotalNum(totalNum);
gold.setTaskGolds(taskGoldSum);
return gold;
}
}

2
src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java

@ -39,7 +39,7 @@ public class StatisticsServiceImpl implements StatisticsService {
12点18点23点30分执行定时任务更新当天part1数据
*/
@Override
@Scheduled(cron = "0 0 12,18 * * ?") // 分别在 12:00 18:00 执行
@Scheduled(cron = "0 0 1,12,18 * * ?") // 分别在 1:00 12:00 18:00 执行
@Scheduled(cron = "0 30 23 * * ?") // 23:30 执行
public void runHourlyTaskPart1() {
Date today = new Date(); //取当天日期

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

@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @program: gold-java
@ -52,9 +53,28 @@ public class WorkbenchServiceImpl implements WorkbenchService {
LocalDate today = LocalDate.now();
// 获取当前年份的第一天
LocalDate firstDayOfYear = today.withDayOfYear(1);
// 将年份的第一天日期转换为Date类型
Date yearlyStartDate=Date.from(firstDayOfYear.atStartOfDay(ZoneId.systemDefault()).toInstant());
List<String> markets = generalService.getMarket();
List<WorkbenchMarketCard> marketCards = new ArrayList<>();
// 并行处理市场列表创建市场卡片列表
List<WorkbenchMarketCard> marketCards = markets.parallelStream()
// 过滤掉空或全空格的市场名称
.filter(market -> market != null && !market.trim().isEmpty())
.map(market -> {
// 根据市场名称和日期范围查询统计信息
Statistics statistics = statisticsMapper.selectByMarketAndDate(
market,
Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()),
Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant())
);
// 创建并返回市场卡片对象
return createWorkbenchMarketCard(market, statistics, yearlyStartDate, date);
})
// 收集并行流结果为列表
.collect(Collectors.toList());
return new WorkbenchCard(token, marketCards, markets, date, date);
/* List<WorkbenchMarketCard> marketCards = new ArrayList<>();
// 遍历每个 marketCard 并填充数据
for (String market : markets) {
if (market == null || market.trim().isEmpty()) continue;
@ -112,7 +132,58 @@ public class WorkbenchServiceImpl implements WorkbenchService {
}
}
return new WorkbenchCard(token, marketCards,markets,date,date);
return new WorkbenchCard(token, marketCards,markets,date,date);*/
}
/*
获取卡片数据
*/
@Override
public WorkbenchMarketCard createWorkbenchMarketCard(String market, Statistics statistics, Date yearlyStartDate, Date currentDate) {
Date date=new Date();
WorkbenchMarketCard card = new WorkbenchMarketCard();
card.setMarket(market);
if (statistics != null) {
// 卡片一当前金币相关
card.setCurrentPermanent(statistics.getCurrentPermanent());//余量-永久金币
card.setCurrentFreeJune(statistics.getCurrentFreeJune()); //余量-免费六月金币
card.setCurrentFreeDecember(statistics.getCurrentFreeDecember()); //余量-免费十二月金币
card.setCurrentTask(statistics.getCurrentTask()); //余量-任务金币
card.setCurrentFree(card.getCurrentFreeJune() + card.getCurrentFreeDecember()); //余量-免费金币
card.setCurrentGold(card.getCurrentPermanent() + card.getCurrentFree() + card.getCurrentTask()); //余量-总金币
card.setDailyChange(statistics.getDailyChange()); //较前一日变化
// 卡片二充值相关
card.setRecharge(statistics.getRecharge()); //充值-当日充值
card.setMoney(statistics.getMoney()); //充值-当日金额永久
card.setYearlyRecharge(calculateSum(market, "recharge",yearlyStartDate ,date));//充值-全年累计充值
card.setYearlyMoney(calculateSum(market, "money",yearlyStartDate ,date)); //充值-全年累计金额永久
// 卡片三消费与退款
card.setConsumePermanent(statistics.getConsumePermanent());//消费-永久金币
card.setConsumeFreeJune(statistics.getConsumeFreeJune());//消费-免费六月金币
card.setConsumeFreeDecember(statistics.getConsumeFreeDecember());//消费-免费十二月金币
card.setConsumeTask(statistics.getConsumeTask());//消费-任务金币
card.setRefundPermanent(statistics.getRefundPermanent());//退款-永久金币
card.setRefundFreeJune(statistics.getRefundFreeJune());//退款-免费六月金币
card.setRefundFreeDecember(statistics.getRefundFreeDecember());//退款-免费十二月金币
card.setRefundTask(statistics.getRefundTask());//退款-任务金币
//当日总消费
int totalConsume = card.getConsumePermanent() + card.getConsumeFreeJune() + card.getConsumeFreeDecember() + card.getConsumeTask();
//当日总退款
int totalRefund = card.getRefundPermanent() + card.getRefundFreeJune() + card.getRefundFreeDecember() + card.getRefundTask();
card.setDailyReduce(totalConsume - totalRefund);//当日总消耗
card.setYearlyConsume(calculateSum(market, "consume", yearlyStartDate,date));//年累计消费
card.setYearlyRefund(calculateSum(market, "refund",yearlyStartDate ,date));//年累计退款
card.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗
// 卡片四人头数相关
card.setRechargeNum(statistics.getRechargeNum());
card.setFirstRecharge(statistics.getFirstRecharge());
card.setYearlyRechargeNum(calculateSum(market,"rechargeNum",yearlyStartDate,date));
// 周环比日同比
card.setWow(calculateWeekOverWeek(market, currentDate));
card.setDaily(calculateDayOverDay(market, currentDate));
}
return card;
}
@Override

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

@ -25,7 +25,7 @@
<!--修改消费订单为已退款-->
<update id="updateOrderRefund">
update user_gold_record
set is_refund = 1
set is_refund = #{isRefund}
where order_code = #{orderCode}
</update>
<!--根据订单号查订单-->
@ -82,10 +82,10 @@
LEFT JOIN admin a2 ON ugr.audit_id = a2.id
<where>
<if test="refundAudit.jwcode != null and refundAudit.jwcode != ''">
<if test="refundAudit.jwcode != null">
AND ugr.jwcode = #{refundAudit.jwcode}
</if>
<if test="refundAudit.refundModel != null and refundAudit.refundModel != ''">
<if test="refundAudit.refundModel != null ">
AND ugr.refund_model = #{refundAudit.refundModel}
</if>
<if test="refundAudit.goodsName != null and refundAudit.goodsName != ''">

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

@ -103,9 +103,8 @@
SELECT *
FROM statistics
WHERE market = #{market}
AND current_datetime >= #{startDate}
AND current_datetime &lt;= #{endDate}
LIMIT 1
AND current_datetime BETWEEN #{startDate} AND #{endDate}
</select>
<select id="sumCurrentPermanentGold" resultType="java.lang.Integer">
SELECT SUM(user.current_permanent_gold)

Loading…
Cancel
Save