diff --git a/src/main/java/com/example/demo/controller/AuditController.java b/src/main/java/com/example/demo/controller/AuditController.java index 4506952..1a0df66 100644 --- a/src/main/java/com/example/demo/controller/AuditController.java +++ b/src/main/java/com/example/demo/controller/AuditController.java @@ -1,14 +1,22 @@ package com.example.demo.controller; +import com.example.demo.Util.JWTUtil; +import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.*; import com.example.demo.service.AuditService; import com.github.pagehelper.PageInfo; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.Arrays; +import java.util.List; /** * @program: gold-java @@ -39,37 +47,68 @@ public class AuditController { } //多条件查询充值审核订单列表 @PostMapping("selectRecharge") - public PageInfo searchRechargeAudit( - @RequestBody Page page) { + public PageInfo searchRechargeAudit ( + @RequestBody Page page) throws Exception { Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RechargeAudit rechargeAudit = page.getRechargeAudit(); + //解token权限 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + if (admin != null) { + List list = Arrays.asList(admin.getMarkets().split(",")); + rechargeAudit.setMarkets(list); + } return auditService.selectRechargeBy(pageNum, pageSize, rechargeAudit); } //多条件查询退款审核订单列表 @PostMapping("selectRefund") - public PageInfo searchRefundAudit( - @RequestBody Page page) { + public PageInfo searchRefundAudit(@RequestBody Page page) throws Exception { Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RefundAudit refundAudit = page.getRefundAudit(); + //解token权限 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + if (admin != null) { + List list = Arrays.asList(admin.getMarkets().split(",")); + refundAudit.setMarkets(list); + } return auditService.selectRefundBy(pageNum, pageSize, refundAudit); } //充值审核合计数 @PostMapping("sumRechargeGold") - public Gold sumRechargeGold(@RequestBody Page page) { + public Gold sumRechargeGold(@RequestBody Page page)throws Exception { Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RechargeAudit rechargeAudit = page.getRechargeAudit(); + //解token权限 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + if (admin != null) { + List list = Arrays.asList(admin.getMarkets().split(",")); + rechargeAudit.setMarkets(list); + } return auditService.sumRechargeGold(pageNum, pageSize, rechargeAudit); } //退款审核合计数 @PostMapping("sumRefundGold") - public Gold sumRefundGold(@RequestBody Page page) { + public Gold sumRefundGold(@RequestBody Page page) throws Exception{ Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RefundAudit refundAudit = page.getRefundAudit(); + //解token权限 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + if (admin != null) { + List list = Arrays.asList(admin.getMarkets().split(",")); + refundAudit.setMarkets(list); + } return auditService.sumRefundGold(pageNum, pageSize, refundAudit); } } diff --git a/src/main/java/com/example/demo/controller/WorkbenchController.java b/src/main/java/com/example/demo/controller/WorkbenchController.java index ad9dab3..8f64591 100644 --- a/src/main/java/com/example/demo/controller/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/WorkbenchController.java @@ -1,11 +1,13 @@ package com.example.demo.controller; +import com.example.demo.Util.JWTUtil; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.WorkbenchCard; import com.example.demo.mapper.StatisticsMapper; import com.example.demo.service.GeneralService; import com.example.demo.service.StatisticsService; import com.example.demo.service.WorkbenchService; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -13,6 +15,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Date; import java.util.List; @@ -47,15 +51,13 @@ public class WorkbenchController { 获取各地区工作台卡片的数据 */ @PostMapping("getCard") - public ResponseEntity card1(@RequestBody WorkbenchCard workbench, - @AuthenticationPrincipal Admin admin) { - if (admin == null) { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null); - } - - String account = admin.getAccount(); + public ResponseEntity card1(@RequestBody WorkbenchCard workbench) throws Exception{ + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + String account = admin.getAccount(); //获取当前用户的市场列表 - List markets = generalService.getAdminMarket(account); + List markets = workbenchService.getAdminMarket(account); WorkbenchCard result; //判断是否是总部 if (markets != null && markets.contains("总部")) { @@ -79,15 +81,5 @@ public class WorkbenchController { WorkbenchCard result =workbenchService.getGraph(workbench.getStartDate(),workbench.getEndDate(),workbench.getMarkets()); return ResponseEntity.ok(result); } - /* - 更新统计表并获取卡片数据 - */ - /*@PostMapping("updateCard") - public ResponseEntity updateCard(@RequestBody WorkbenchCard workbench){ - statisticsService.runHourlyTaskPart1(); //更新余量数据 - statisticsService.runHourlyTaskPart2(); //更新余量外数据 - WorkbenchCard result =workbenchService.getCard(workbench.getMarkets()); //获取卡片数据 - return ResponseEntity.ok(result); - }*/ } diff --git a/src/main/java/com/example/demo/mapper/AuditMapper.java b/src/main/java/com/example/demo/mapper/AuditMapper.java index 9df520f..410d095 100644 --- a/src/main/java/com/example/demo/mapper/AuditMapper.java +++ b/src/main/java/com/example/demo/mapper/AuditMapper.java @@ -21,6 +21,8 @@ import java.util.List; @Mapper public interface AuditMapper { + //获取用户的地区权限列表 + List getAdminMarket(String account) ; //根据订单号查未审核订单 UserGoldRecord selectOrderByOrderCode(String orderCode); //根据订单号查订单 diff --git a/src/main/java/com/example/demo/mapper/GeneralMapper.java b/src/main/java/com/example/demo/mapper/GeneralMapper.java index 02f53d0..dff92af 100644 --- a/src/main/java/com/example/demo/mapper/GeneralMapper.java +++ b/src/main/java/com/example/demo/mapper/GeneralMapper.java @@ -22,7 +22,7 @@ public interface GeneralMapper { //获取活动 List getActivity(); - //获取用户的地区权限列表 + //获取管理员的地区权限列表 String getAdminMarket(String account); //获取角色地区列表 String getRoleMarket(Integer roleId); diff --git a/src/main/java/com/example/demo/mapper/WorkBenchMapper.java b/src/main/java/com/example/demo/mapper/WorkBenchMapper.java index f822a92..e4e5f9f 100644 --- a/src/main/java/com/example/demo/mapper/WorkBenchMapper.java +++ b/src/main/java/com/example/demo/mapper/WorkBenchMapper.java @@ -19,6 +19,10 @@ import java.util.List; @Mapper public interface WorkBenchMapper { + //获取所有用户地区 + List getMarket(); + //获取用户的地区权限列表 + String getAdminMarket(String account); //给定时间范围内的该地区充值金币数(永久+免费) Integer sumRecharge(String market, Date startDate, Date endDate); //给定时间范围内的该地区充值金额(永久金币数) diff --git a/src/main/java/com/example/demo/service/StatisticsService.java b/src/main/java/com/example/demo/service/StatisticsService.java index dcd591f..52f5a69 100644 --- a/src/main/java/com/example/demo/service/StatisticsService.java +++ b/src/main/java/com/example/demo/service/StatisticsService.java @@ -23,20 +23,5 @@ public interface StatisticsService { public void runHourlyTaskYear(); //0点执行定时任务更新近一周part2数据 public void runDailyTaskPart2(); - //查询某地区某天是否已存在统计数据 - public Statistics getExistStatistics(String market,Date date); - - //新增或更新或不修改某地区某天part1统计数据 - public void saveStatisticsPart1(String market, Date date); - //新增或更新或不修改某地区某天年度统计数据 - public void saveStatisticsYear(String market,Date yearlyStartDate, Date date); - //新增或更新或不修改某地区某天part2统计数据 - public void saveStatisticsPart2(String market, Date date); - //根据地区与日期获取part1(余量属性)统计数据 - public Statistics getStatisticsPart1(String market, Date date); - //根据地区与日期获取part2(余量外属性)统计数据 - public Statistics getStatisticsPart2(String market, Date date); - //根据地区与日期获取全年累计统计数据 - public Statistics getYearlyStatistics(String market,Date yearlyStartDate, Date date); } diff --git a/src/main/java/com/example/demo/service/WorkbenchService.java b/src/main/java/com/example/demo/service/WorkbenchService.java index 658ce21..abdb02f 100644 --- a/src/main/java/com/example/demo/service/WorkbenchService.java +++ b/src/main/java/com/example/demo/service/WorkbenchService.java @@ -19,6 +19,8 @@ import java.util.Map; public interface WorkbenchService { + //获取用户的地区权限列表 + List getAdminMarket(String account) ; //获取不同地区的工作台统计卡片 WorkbenchCard getCard(List markets ); //缓存卡片数据 @@ -27,8 +29,7 @@ public interface WorkbenchService { WorkbenchMarketCard createWorkbenchMarketCard(String market, Statistics currentStatistics,Statistics ydayStatistics, Date currentDate); //获取不同地区的工作台柱状图数据(根据类型,起止时间,地区查询) WorkbenchCard getGraph(Date startDate, Date endDate, List markets); - //根据类型获取年初至今的统计数据 - Map calculateAllSum(String market, Date startDate, Date endDate); + //获取该日期该市场的日环比 Integer calculateDayOverDay(String market,Date date); //获取总体日环比 diff --git a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java index 9d8630a..03108ea 100644 --- a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java @@ -139,9 +139,7 @@ public class AuditServiceImpl implements AuditService { */ @Override public PageInfo selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) { - String account = adminService.getCurrentAdminAccount(); - List markets = generalService.getAdminMarket(account); - rechargeAudit.setMarkets(markets); + PageHelper.startPage(pageNum, pageSize); List rechargeAudits = auditMapper.selectRechargeBy(pageNum, pageSize, rechargeAudit); // rechargeAudit.setFreeGold(rechargeAudit.getFreeJune()+rechargeAudit.getFreeDecember()); @@ -152,9 +150,9 @@ public class AuditServiceImpl implements AuditService { */ @Override public PageInfo selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit) { - String account = adminService.getCurrentAdminAccount(); - List markets = generalService.getAdminMarket(account); - refundAudit.setMarkets(markets); + + + PageHelper.startPage(pageNum, pageSize); List refundAudits = auditMapper.selectRefundBy(pageNum, pageSize, refundAudit); @@ -166,9 +164,7 @@ public class AuditServiceImpl implements AuditService { */ @Override public Gold sumRechargeGold(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) { - String account = adminService.getCurrentAdminAccount(); - List markets = generalService.getAdminMarket(account); - rechargeAudit.setMarkets(markets); + Gold gold = new Gold(); //获取充值审核订单列表 List rechargeAudits = auditMapper.selectRechargeBy(1, 500000, rechargeAudit); @@ -202,9 +198,6 @@ public class AuditServiceImpl implements AuditService { */ @Override public Gold sumRefundGold(Integer pageNum, Integer pageSize, RefundAudit refundAudit) { - String account = adminService.getCurrentAdminAccount(); - List markets = generalService.getAdminMarket(account); - refundAudit.setMarkets(markets); Gold gold = new Gold(); //获取充值审核订单列表 List refundAudits = auditMapper.selectRefundBy(1, 500000, refundAudit); diff --git a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java index 1085fd5..5f5a1cc 100644 --- a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java @@ -33,10 +33,7 @@ public class StatisticsServiceImpl implements StatisticsService { private static final Logger log = LoggerFactory.getLogger(StatisticsServiceImpl.class); @Autowired private StatisticsMapper statisticsMapper; - @Autowired - private GeneralService generalService; - @Autowired - private WorkbenchService workbenchService; + /* 每小时第十分执行定时任务更新当天part1数据 @@ -58,6 +55,7 @@ public class StatisticsServiceImpl implements StatisticsService { @Override @Scheduled(cron = "0 10 * * * ?") // 每小时执行一次 public void runHourlyTaskPart2() { + //设定起止时间 当天00:00:00至23:59:59 LocalDate today = LocalDate.now(); Date start = Date.from(today.atStartOfDay(ZoneId.systemDefault()).toInstant()); Date end = Date.from( @@ -103,299 +101,4 @@ public class StatisticsServiceImpl implements StatisticsService { } } - /* - 查询某地区某天已存在的统计数据 - */ - @Override - public Statistics getExistStatistics(String market, Date date) { - LocalDateTime startTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().with(LocalTime.MIN); - LocalDateTime endTime= startTime.plusDays(1).minusSeconds(1); - return statisticsMapper.selectByMarketAndDate(market, - Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()), - Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant())); - } - - /* - 新增或更新或不修改某地区某天part1统计数据 - */ - @Override - public void saveStatisticsPart1(String market, Date date) { - //获取该地区该日期part1(余量属性)统计数据 - Statistics newStats=getStatisticsPart1(market,date); - //获取该地区该日期已存在的数据 - Statistics existStats = getExistStatistics(market, date); - //判断是否存在已存在的数据 - if(existStats==null){ - //没有记录,新增 - statisticsMapper.insertPart1(newStats ); - }else { - //判断新旧数据part1部分(余量属性)是否一致 - if (!isSameStatisticsPart1(existStats,newStats)){ - statisticsMapper.updatePart1(newStats); - }else{ - System.out.println("数据未发生改变"); - } - } - } - /* - 新增或更新或不修改某地区某天年度统计数据 - */ - @Override - public void saveStatisticsYear(String market,Date yearlyStartDate, Date date) { - - //获取该地区该日期年度统计数据 - Statistics newStats=getYearlyStatistics(market,yearlyStartDate,date); - //获取该地区该日期已存在的数据 - Statistics existStats = getExistStatistics(market, date); - //判断是否存在已存在的数据 - if(existStats==null){ - //没有记录,新增 - statisticsMapper.insertYear(newStats ); - }else { - //判断新旧数据年度部分是否一致 - if (!isSameStatisticsYear(existStats,newStats)){ - statisticsMapper.updateYear(newStats); - }else{ - System.out.println("数据未发生改变"); - } - } - } - - /* - 新增或更新或不修改某地区某天part2统计数据 - */ - @Override - public void saveStatisticsPart2(String market, Date date){ - //获取该地区该日期part2(余量外属性)统计数据 - Statistics newStats=getStatisticsPart2(market,date); - //获取该地区该日期已存在的数据 - Statistics existStats = getExistStatistics(market, date); - //判断是否存在已存在的数据 - if(existStats==null){ - //没有记录,新增 - statisticsMapper.insertPart2(newStats ); - }else { - //判断新旧数据part2部分(余量外属性)是否一致 - if (!isSameStatisticsPart2(existStats,newStats)){ - statisticsMapper.updatePart2(newStats); - }else{ - // existStats.setUpdateTime(date); - // statisticsMapper.updatePart2(existStats); - System.out.println("数据未发生改变"); - } - } - } - - - @Override - public Statistics getStatisticsPart1(String market, Date date) { - //获取日期 - LocalDate localDate=date.toInstant() - .atZone(ZoneId.of("Asia/Shanghai")) // 使用系统默认时区 - .toLocalDate(); - //初始化Statistics对象 - Statistics statistics = new Statistics(); - statistics.setMarket(market); - statistics.setCurrentDatetime(localDate); - //计算属性 - //当前金币余量 - Integer currentGold = statisticsMapper.sumCurrentPermanentGold(market)+ - statisticsMapper.sumCurrentFreeJune( market)+ - statisticsMapper.sumCurrentFreeDecember(market)+ - statisticsMapper.sumCurrentTaskGold( market); - statistics.setCurrentGold(currentGold); - //较前一日变化 - Date yesterday =generalService.getYesterday(); - //把yesterday改为昨天的开始时间和结束时间 - LocalDateTime startTime = yesterday.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().with(LocalTime.MIN); - LocalDateTime endTime= startTime.plusDays(1).minusSeconds(1); - - //昨天金币余量 - Statistics ydayStats = statisticsMapper.selectByMarketAndDate(market, Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()), - Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant())); - Integer yesterdayGold=0; - if (ydayStats != null) { - yesterdayGold = ydayStats.getCurrentGold(); - - } - Integer dailyChange = currentGold - yesterdayGold; - statistics.setDailyChange(dailyChange); - - - - //当前永久金币 - Integer currentPermanent = statisticsMapper.sumCurrentPermanentGold(market); - statistics.setCurrentPermanent(currentPermanent); - //当前免费六月金币 - Integer currentFreeJune = statisticsMapper.sumCurrentFreeJune(market); - statistics.setCurrentFreeJune(currentFreeJune); - //当前免费十二月金币 - Integer currentFreeDecember = statisticsMapper.sumCurrentFreeDecember(market); - statistics.setCurrentFreeDecember(currentFreeDecember); - //当前任务金币 - Integer currentTask = statisticsMapper.sumCurrentTaskGold(market); - statistics.setCurrentTask(currentTask); - return statistics; - } - - /* - 根据地区与日期获取part2(余量外属性)统计数据 - */ - @Override - public Statistics getStatisticsPart2(String market, Date date) { - //获取日期 - LocalDate localDate=date.toInstant() - .atZone(ZoneId.of("Asia/Shanghai")) // 使用系统默认时区 - .toLocalDate(); - //把date改为当天的开始时间和结束时间 - LocalDateTime startTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime().with(LocalTime.MIN); - LocalDateTime endTime= startTime.plusDays(1).minusSeconds(1); - //定义审核状态列表 - List auditStatusList = new ArrayList<>(); - auditStatusList.add(1); // 审核通过 - auditStatusList.add(3); // 外部传入默认通过 - //查询当天该地区审核通过的所有数据 - List records = statisticsMapper.findByMarketAndAuditStatus(market, auditStatusList, - Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant())); - //初始化Statistics对象 - Statistics statistics = new Statistics(); - statistics.setMarket(market); - statistics.setCurrentDatetime(localDate); - - //计算属性 - //充值相关-当日充值(永久+免费) - Integer recharge = records.stream() - .filter(record -> record.getType() == 0) // 类型为充值 - .mapToInt(record -> record.getPermanentGold() + record.getFreeJune() + record.getFreeDecember() + record.getTaskGold()) - .sum(); - statistics.setRecharge(recharge); - //充值相关-当日金额(永久) - Integer money = records.stream() - .filter(record -> record.getType() == 0) // 类型为充值 - .mapToInt(UserGoldRecord::getPermanentGold) - .sum(); - statistics.setMoney(money); - //消费相关-当日新增消费(永久) - Integer consumePermanent = records.stream() - .filter(record -> record.getType() == 1) // 类型为消费 - .mapToInt(UserGoldRecord::getPermanentGold) - .sum(); - statistics.setConsumePermanent(Math.abs(consumePermanent)); - //消费相关-当日新增消费(六月免费) - Integer consumeFreeJune = records.stream() - .filter(record -> record.getType() == 1) // 类型为消费 - .mapToInt(UserGoldRecord::getFreeJune) - .sum(); - statistics.setConsumeFreeJune(Math.abs(consumeFreeJune)); - //消费相关-当日新增消费(十二月免费) - Integer consumeFreeDecember = records.stream() - .filter(record -> record.getType() == 1) // 类型为消费 - .mapToInt(UserGoldRecord::getFreeDecember) - .sum(); - statistics.setConsumeFreeDecember(Math.abs(consumeFreeDecember)); - //消费相关-当日新增消费(任务) - Integer consumeTask = records.stream() - .filter(record -> record.getType() == 1) // 类型为消费 - .mapToInt(UserGoldRecord::getTaskGold) - .sum(); - statistics.setConsumeTask(Math.abs(consumeTask)); // 使用 Math.abs 确保为正数 - //退款相关-当日退款(永久) - Integer refundPermanent = records.stream() - .filter(record -> record.getType() == 2) // 类型为退款 - .mapToInt(UserGoldRecord::getPermanentGold) - .sum(); - statistics.setRefundPermanent(refundPermanent); - //退款相关-当日退款(六月免费) - Integer refundFreeJune = records.stream() - .filter(record -> record.getType() == 2) // 类型为退款 - .mapToInt(UserGoldRecord::getFreeJune) - .sum(); - statistics.setRefundFreeJune(refundFreeJune); - //退款相关-当日退款(十二月免费) - Integer refundFreeDecember = records.stream() - .filter(record -> record.getType() == 2) // 类型为退款 - .mapToInt(UserGoldRecord::getFreeDecember) - .sum(); - statistics.setRefundFreeDecember(refundFreeDecember); - //退款相关-当日退款(任务) - Integer refundTask = records.stream() - .filter(record -> record.getType() == 2) // 类型为退款 - .mapToInt(UserGoldRecord::getTaskGold) - .sum(); - statistics.setRefundTask(refundTask); - //充值人数 - int rechargeNum= statisticsMapper.countRechargeNum(market,Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant())); - statistics.setRechargeNum(rechargeNum); - //首充人数 - int firstRecharge= statisticsMapper.countFirstRecharge(market,Date.from(startTime.atZone(ZoneId.systemDefault()).toInstant()),Date.from(endTime.atZone(ZoneId.systemDefault()).toInstant())); - statistics.setFirstRecharge(firstRecharge); - return statistics; - } - - @Override - public Statistics getYearlyStatistics(String market,Date yearlyStartDate, Date date) { - //获取日期 - LocalDate localDate=date.toInstant() - .atZone(ZoneId.of("Asia/Shanghai")) // 使用系统默认时区 - .toLocalDate(); - - // 一次性获取全年统计数据(从年初到今天) - Map yearlyStats = workbenchService.calculateAllSum(market, yearlyStartDate, date); - //初始化Statistics对象 - Statistics statistics = new Statistics(); - statistics.setMarket(market); - statistics.setCurrentDatetime(localDate); - statistics.setYearlyRecharge(yearlyStats.getOrDefault("recharge", 0)); // 充值-全年累计充值 - statistics.setYearlyMoney(yearlyStats.getOrDefault("money", 0)); // 充值-全年累计金额(永久)//充值-全年累计金额(永久) - statistics.setYearlyConsume(yearlyStats.getOrDefault("consume", 0)); // 年累计消费 - statistics.setYearlyRefund(yearlyStats.getOrDefault("refund", 0)); // 年累计退款 - statistics.setYearlyRechargeNum(yearlyStats.getOrDefault("rechargeNum", 0));//年累计充值人数 - - return statistics; - } - - /* - * 判断两个统计对象part1(余量属性)是否相同 - */ -private boolean isSameStatisticsPart1(Statistics oldStats, Statistics newStats) { - return Objects.equals(oldStats.getCurrentGold(), newStats.getCurrentGold()) && - Objects.equals(oldStats.getCurrentPermanent(), newStats.getCurrentPermanent()) && - Objects.equals(oldStats.getCurrentFreeJune(), newStats.getCurrentFreeJune()) && - Objects.equals(oldStats.getCurrentFreeDecember(), newStats.getCurrentFreeDecember()) && - Objects.equals(oldStats.getCurrentTask(), newStats.getCurrentTask()) && - Objects.equals(oldStats.getDailyChange(), newStats.getDailyChange()) ; -} - /* - * 判断两个统计对象part2(余量外属性)是否相同 - */ - private boolean isSameStatisticsPart2(Statistics oldStats, Statistics newStats) { - return Objects.equals(oldStats.getRecharge(), newStats.getRecharge()) && - Objects.equals(oldStats.getMoney(), newStats.getMoney()) && - Objects.equals(oldStats.getConsumePermanent(), newStats.getConsumePermanent()) && - Objects.equals(oldStats.getConsumeFreeJune(), newStats.getConsumeFreeJune()) && - Objects.equals(oldStats.getConsumeFreeDecember(), newStats.getConsumeFreeDecember()) && - Objects.equals(oldStats.getConsumeTask(), newStats.getConsumeTask()) && - Objects.equals(oldStats.getRefundPermanent(), newStats.getRefundPermanent()) && - Objects.equals(oldStats.getRefundFreeJune(), newStats.getRefundFreeJune()) && - Objects.equals(oldStats.getRefundFreeDecember(), newStats.getRefundFreeDecember()) && - Objects.equals(oldStats.getRefundTask(), newStats.getRefundTask()) && - Objects.equals(oldStats.getRechargeNum(), newStats.getRechargeNum()) && - Objects.equals(oldStats.getFirstRecharge(), newStats.getFirstRecharge()) && - Objects.equals(oldStats.getCurrentGold(), newStats.getCurrentGold()) && - Objects.equals(oldStats.getDailyChange(), newStats.getDailyChange()) && - Objects.equals(oldStats.getCurrentPermanent(), newStats.getCurrentPermanent()) && - Objects.equals(oldStats.getCurrentFreeJune(), newStats.getCurrentFreeJune()) && - Objects.equals(oldStats.getCurrentFreeDecember(), newStats.getCurrentFreeDecember()) && - Objects.equals(oldStats.getCurrentTask(), newStats.getCurrentTask()); - } - /* - * 判断两个统计对象年度统计是否相同 - */ - private boolean isSameStatisticsYear(Statistics oldStats, Statistics newStats) { - return Objects.equals(oldStats.getYearlyRecharge(), newStats.getYearlyRecharge()) && - Objects.equals(oldStats.getYearlyMoney(), newStats.getYearlyMoney()) && - Objects.equals(oldStats.getYearlyConsume(), newStats.getYearlyConsume()) && - Objects.equals(oldStats.getYearlyRefund(), newStats.getYearlyRefund()) && - - Objects.equals(oldStats.getYearlyRechargeNum(), newStats.getYearlyRechargeNum()) ;} } diff --git a/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java index 99eea74..ee20c63 100644 --- a/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java @@ -10,6 +10,8 @@ import com.example.demo.mapper.WorkBenchMapper; import com.example.demo.service.GeneralService; import com.example.demo.service.StatisticsService; import com.example.demo.service.WorkbenchService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.redis.core.RedisTemplate; @@ -24,6 +26,9 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; + + + /** * @program: gold-java * @ClassName WorkbenchServiceImpl @@ -35,14 +40,12 @@ import java.util.stream.Collectors; @Service public class WorkbenchServiceImpl implements WorkbenchService { - + private static final Logger log = LoggerFactory.getLogger(GeneralServiceImpl.class); private final RedisTemplate redisTemplate; - // private final StatisticsMapper statisticsMapper; + @Autowired private WorkBenchMapper workBenchMapper; @Autowired - private GeneralService generalService; - @Autowired private StatisticsMapper statisticsMapper; @Autowired public WorkbenchServiceImpl(RedisTemplate redisTemplate, StatisticsMapper statisticsMapper) { @@ -50,6 +53,32 @@ public class WorkbenchServiceImpl implements WorkbenchService { this.statisticsMapper = statisticsMapper; } private static final String CACHE_KEY = "workbench_card_cache"; + + @Override + public List getAdminMarket(String account) { + try { + String market = workBenchMapper.getAdminMarket(account); + if (market == null) { + throw new Exception("没有地区权限"); + } + List list = Arrays.asList(market.split(",")); + //判断是否是总部 + if (list != null && list.contains("总部")) { + List allMarkets = workBenchMapper.getMarket(); // 获取所有地区 + allMarkets.remove("总部"); // 先移除可能存在的总部 + allMarkets.add(0, "总部"); // 将总部添加到列表第一位 + list = allMarkets; // 更新list + } + return list; + } catch (Exception e) { + // 记录日志 + log.error("获取地区权限失败", e); + // 重新抛出异常,或者根据需要返回一个默认值或空列表 + throw new RuntimeException("获取地区权限失败", e); + } + + } + @Override public WorkbenchCard getCard( List markets) { Date date=new Date(); @@ -59,24 +88,19 @@ public class WorkbenchServiceImpl implements WorkbenchService { // 获取开始时间和结束时间(昨天) LocalDateTime startOfYday = startOfDay.minusDays(1); LocalDateTime endOfYday = endOfDay.minusDays(1); - - // 获取当前年份的第一天 - LocalDate firstDayOfYear = LocalDate.now().withDayOfYear(1); - Date yearlyStartDate = Date.from(firstDayOfYear.atStartOfDay(ZoneId.systemDefault()).toInstant()); - // markets = generalService.getAdminMarket(); - // 批量获取统计数据 + //当天的统计数据 List currentStatsList = statisticsMapper.selectByMarketsAndDate(markets, Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()), Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant())); - + //昨天的统计数据 List ydayStatsList = statisticsMapper.selectByMarketsAndDate(markets, Date.from(startOfYday.atZone(ZoneId.systemDefault()).toInstant()), Date.from(endOfYday.atZone(ZoneId.systemDefault()).toInstant())); - // 将 List 转换为 Map + // 将 List 转换为 Map,以market为键,保留第一个出现的数据 Map currentStatsMap = currentStatsList.stream() .collect(Collectors.toMap(Statistics::getMarket, Function.identity(), (existing, replacement) -> existing)); - + //转换昨日统计数据为Map<> Map ydayStatsMap = ydayStatsList.stream() .collect(Collectors.toMap(Statistics::getMarket, Function.identity(), (existing, replacement) -> existing)); @@ -99,15 +123,14 @@ public class WorkbenchServiceImpl implements WorkbenchService { @Override public WorkbenchCard getCardCache(List markets) { - markets = generalService.getMarket(); //从缓存中获取工作台数据 WorkbenchCard cached = redisTemplate.opsForValue().get(CACHE_KEY); + //有缓存直接返回缓存数据 if (cached != null) { - //直接返回缓存数据 System.out.println("读取缓存数据: " + new Date()); return cached; } - + //没缓存获取新数据并存入缓存 try { //获取新的工作台数据 WorkbenchCard freshData = getCard(markets); @@ -126,12 +149,10 @@ public class WorkbenchServiceImpl implements WorkbenchService { */ @Override public WorkbenchMarketCard createWorkbenchMarketCard(String market,Statistics currentStatistics, Statistics ydayStatistics, Date currentDate) { - Date date=new Date(); + WorkbenchMarketCard card = new WorkbenchMarketCard(); card.setMarket(market); if (currentStatistics != null&& ydayStatistics != null) { - // 一次性获取全年统计数据(从年初到今天) - // Map yearlyStats = calculateAllSum(market, yearlyStartDate, date); // 卡片一:当前金币相关 card.setCurrentPermanent(currentStatistics.getCurrentPermanent());//余量-永久金币 card.setCurrentFreeJune(currentStatistics.getCurrentFreeJune()); //余量-免费六月金币 @@ -163,10 +184,10 @@ public class WorkbenchServiceImpl implements WorkbenchService { card.setYearlyRefund(currentStatistics.getYearlyRefund()); // 年累计退款 card.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗 // 卡片四:人头数相关 - card.setRechargeNum(currentStatistics.getRechargeNum()); - card.setYdayRechargeNum(ydayStatistics.getRechargeNum()); - card.setFirstRecharge(currentStatistics.getFirstRecharge()); - card.setYearlyRechargeNum(currentStatistics.getYearlyRechargeNum()); + card.setRechargeNum(currentStatistics.getRechargeNum());//当天充值人数 + card.setYdayRechargeNum(ydayStatistics.getRechargeNum()); //昨日充值人数 + card.setFirstRecharge(ydayStatistics.getFirstRecharge()); //昨日充值人数中首充的数量 + card.setYearlyRechargeNum(ydayStatistics.getYearlyRechargeNum()); //年累计充值人数-至昨天 // 周环比、日同比 card.setWow(calculateWeekOverWeek(market, currentDate)); card.setDaily(calculateDayOverDay(market, currentDate)); @@ -219,30 +240,7 @@ public class WorkbenchServiceImpl implements WorkbenchService { return new WorkbenchCard(new ArrayList<>(), marketGraphs, markets, startDate, endDate,0,0,new Date()); } - /* - 根据类型获取统计数据 - */ - @Override - - public Map calculateAllSum(String market, Date startDate, Date endDate) { - WorkbenchFullStatistics stats = workBenchMapper.getFullStatisticsByMarketAndDate(market, startDate, endDate); - Map result = new HashMap<>(); - result.put("recharge", stats.getTotalRecharge() != null ? stats.getTotalRecharge() : 0);//获取充值统计数据 - result.put("money", stats.getTotalMoney() != null ? stats.getTotalMoney() : 0); //充值金额统计数据 - result.put("rFree", (stats.getTotalRecharge() != null ? stats.getTotalRecharge() : 0) //获取充值的免费金币统计数据 - - (stats.getTotalMoney() != null ? stats.getTotalMoney() : 0)); - 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; - - } /* 获取该日期该市场的日环比 */ @@ -319,12 +317,12 @@ public class WorkbenchServiceImpl implements WorkbenchService { return (int) Math.round(rate); } /* - 获取改天总体的的周环比 + 获取该天总体的的周环比 */ @Override public Integer calculateAllWeekOverWeek( Date date,List markets) { - // List markets = generalService.getMarket(); + int thisWeekTotal = 0; //本周至当天充值人数 int lastWeekTotal = 0; //上周至当天充值人数 //获取本周周一 diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index 23778db..e82557f 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -156,4 +156,7 @@ ORDER BY create_time DESC limit 1 + diff --git a/src/main/resources/mapper/WorkBenchMapper.xml b/src/main/resources/mapper/WorkBenchMapper.xml index fb5c796..d6b30b7 100644 --- a/src/main/resources/mapper/WorkBenchMapper.xml +++ b/src/main/resources/mapper/WorkBenchMapper.xml @@ -125,4 +125,13 @@ AND s.current_datetime BETWEEN #{startDate} AND #{endDate} GROUP BY s.market; + + + +