From 3153e8f795f92e491dd78683bfba34fb9663af00 Mon Sep 17 00:00:00 2001 From: lijianlin Date: Fri, 11 Jul 2025 15:07:46 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/demo/controller/AuditController.java | 2 +- .../com/example/demo/controller/WorkbenchController.java | 1 + src/main/java/com/example/demo/mapper/StatisticsMapper.java | 1 + .../com/example/demo/serviceImpl/StatisticsServiceImpl.java | 2 ++ src/main/resources/mapper/StatisticsMapper.xml | 12 ++++++++---- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/example/demo/controller/AuditController.java b/src/main/java/com/example/demo/controller/AuditController.java index 349df97..4506952 100644 --- a/src/main/java/com/example/demo/controller/AuditController.java +++ b/src/main/java/com/example/demo/controller/AuditController.java @@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.*; @RequestMapping("/audit") @RequiredArgsConstructor @Slf4j -@Transactional + @CrossOrigin public class AuditController { diff --git a/src/main/java/com/example/demo/controller/WorkbenchController.java b/src/main/java/com/example/demo/controller/WorkbenchController.java index 5d02ba9..93778f9 100644 --- a/src/main/java/com/example/demo/controller/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/WorkbenchController.java @@ -61,6 +61,7 @@ public class WorkbenchController { public ResponseEntity updateCard(@RequestBody WorkbenchCard workbench){ statisticsService.runHourlyTaskPart1(); //更新余量数据 statisticsService.runHourlyTaskPart2(); //更新余量外数据 + WorkbenchCard result =workbenchService.getCard(); //获取卡片数据 return ResponseEntity.ok(result); } diff --git a/src/main/java/com/example/demo/mapper/StatisticsMapper.java b/src/main/java/com/example/demo/mapper/StatisticsMapper.java index d54f350..c684fc1 100644 --- a/src/main/java/com/example/demo/mapper/StatisticsMapper.java +++ b/src/main/java/com/example/demo/mapper/StatisticsMapper.java @@ -59,4 +59,5 @@ public interface StatisticsMapper { Statistics selectSumByMarketAndDate(@Param("market") String market, @Param("startDate") Date startDate, @Param("endDate") Date endDate); + } diff --git a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java index 0cc29bd..47222e8 100644 --- a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java @@ -141,6 +141,8 @@ public class StatisticsServiceImpl implements StatisticsService { if (!isSameStatisticsPart2(existStats,newStats)){ statisticsMapper.updatePart2(newStats); }else{ + // existStats.setUpdateTime(date); + // statisticsMapper.updatePart2(existStats); System.out.println("数据未发生改变"); } } diff --git a/src/main/resources/mapper/StatisticsMapper.xml b/src/main/resources/mapper/StatisticsMapper.xml index 99398d7..5b2cee6 100644 --- a/src/main/resources/mapper/StatisticsMapper.xml +++ b/src/main/resources/mapper/StatisticsMapper.xml @@ -53,6 +53,9 @@ refund_task = #{refundTask}, recharge_num = #{rechargeNum}, first_recharge = #{firstRecharge} + + ,update_time = #{updateTime} + WHERE market = #{market} and current_datetime = #{currentDatetime} @@ -67,6 +70,7 @@ current_task = #{currentTask} WHERE market = #{market} and current_datetime = #{currentDatetime} + From a80e3c61e95728b16ae7c02092c66ef0a86da334 Mon Sep 17 00:00:00 2001 From: lijianlin Date: Mon, 14 Jul 2025 16:14:21 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E6=80=A7?= =?UTF-8?q?=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/Util/CacheRefreshTask.java | 32 ++++++ .../java/com/example/demo/config/RedisConfig.java | 33 ++++++ .../demo/controller/StatisticsController.java | 5 + .../demo/controller/WorkbenchController.java | 2 +- .../com/example/demo/domain/entity/Statistics.java | 8 ++ .../example/demo/domain/vo/MarketRechargeStat.java | 18 ++++ .../demo/domain/vo/WorkbenchMarketCard.java | 11 +- .../com/example/demo/mapper/StatisticsMapper.java | 8 ++ .../example/demo/service/StatisticsService.java | 6 ++ .../com/example/demo/service/WorkbenchService.java | 4 +- .../demo/serviceImpl/StatisticsServiceImpl.java | 87 +++++++++++++++- .../demo/serviceImpl/WorkbenchServiceImpl.java | 115 +++++++++++++-------- src/main/resources/mapper/StatisticsMapper.xml | 39 +++++++ 13 files changed, 310 insertions(+), 58 deletions(-) create mode 100644 src/main/java/com/example/demo/Util/CacheRefreshTask.java create mode 100644 src/main/java/com/example/demo/domain/vo/MarketRechargeStat.java diff --git a/src/main/java/com/example/demo/Util/CacheRefreshTask.java b/src/main/java/com/example/demo/Util/CacheRefreshTask.java new file mode 100644 index 0000000..e2f2f0d --- /dev/null +++ b/src/main/java/com/example/demo/Util/CacheRefreshTask.java @@ -0,0 +1,32 @@ +package com.example.demo.Util; + +import com.example.demo.service.WorkbenchService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +public class CacheRefreshTask { + + private static final Logger logger = LoggerFactory.getLogger(CacheRefreshTask.class); + + private final WorkbenchService workbenchService; + + @Autowired + public CacheRefreshTask(WorkbenchService workbenchService) { + this.workbenchService = workbenchService; + } + + // 每小时执行一次(1分0秒) + @Scheduled(cron = "0 1 * * * ?") + public void refreshCache() { + try { + workbenchService.getCardCache(); // 内部会重新查询并写入缓存 + logger.info("缓存刷新成功:" + new java.util.Date()); + } catch (Exception e) { + logger.error("缓存刷新失败:" + e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/config/RedisConfig.java b/src/main/java/com/example/demo/config/RedisConfig.java index 3cae685..a019ee2 100644 --- a/src/main/java/com/example/demo/config/RedisConfig.java +++ b/src/main/java/com/example/demo/config/RedisConfig.java @@ -1,6 +1,7 @@ package com.example.demo.config; +import com.example.demo.domain.vo.WorkbenchCard; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -8,6 +9,8 @@ import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; @@ -42,6 +45,36 @@ public class RedisConfig { } + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + + // 设置键的序列化方式为 String + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + + // 设置 Hash 的 Key 和 Value 的序列化方式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); + + return template; + } + @Bean + public RedisTemplate workbenchCardRedisTemplate(RedisConnectionFactory factory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(factory); + + // 设置键的序列化方式为 String + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); + + // 设置 Hash 的 Key 和 Value 的序列化方式 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); + + return template; + } } diff --git a/src/main/java/com/example/demo/controller/StatisticsController.java b/src/main/java/com/example/demo/controller/StatisticsController.java index c1a9726..0b9e37f 100644 --- a/src/main/java/com/example/demo/controller/StatisticsController.java +++ b/src/main/java/com/example/demo/controller/StatisticsController.java @@ -44,6 +44,11 @@ public class StatisticsController { public void HourlyTask2() { statisticsService.runHourlyTaskPart2(); } + //测试定时任务年度 + @PostMapping("/HourlyYear") + public void HourlyYear() { + statisticsService.runHourlyTaskYear(); + } //测试一周内定时任务part2 @PostMapping("/Daily2") public void DailyTask2() { diff --git a/src/main/java/com/example/demo/controller/WorkbenchController.java b/src/main/java/com/example/demo/controller/WorkbenchController.java index 93778f9..dd21035 100644 --- a/src/main/java/com/example/demo/controller/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/WorkbenchController.java @@ -43,7 +43,7 @@ public class WorkbenchController { */ @PostMapping("getCard") public ResponseEntity card1(@RequestBody WorkbenchCard workbench){ - WorkbenchCard result =workbenchService.getCard(); + WorkbenchCard result =workbenchService.getCardCache(); return ResponseEntity.ok(result); } /* diff --git a/src/main/java/com/example/demo/domain/entity/Statistics.java b/src/main/java/com/example/demo/domain/entity/Statistics.java index 5bb64e3..3e3ce93 100644 --- a/src/main/java/com/example/demo/domain/entity/Statistics.java +++ b/src/main/java/com/example/demo/domain/entity/Statistics.java @@ -47,6 +47,14 @@ public class Statistics implements Serializable { private Integer refundTask; // 当日新增退款(任务) private Integer rechargeNum; // 当日充值人数 private Integer firstRecharge; // 当日首充人数 + private Integer yearlyRecharge; // 全年累计充值 + private Integer yearlyMoney; // 全年累计金额 + private Integer yearlyConsume; // 全年累计消费 + private Integer yearlyRefund; // 全年累计退款 + + private Integer yearlyRechargeNum; // 全年累计充值人数 + + // 数据日期 @JsonFormat(pattern = "yyyy-MM-dd") @JsonDeserialize(using = LocalDateDeserializer.class) diff --git a/src/main/java/com/example/demo/domain/vo/MarketRechargeStat.java b/src/main/java/com/example/demo/domain/vo/MarketRechargeStat.java new file mode 100644 index 0000000..ac6e1ca --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/MarketRechargeStat.java @@ -0,0 +1,18 @@ +package com.example.demo.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MarketRechargeStat { + private String market; + + private Integer todayRechargeUsers; // 今日充值人数 + private Integer yesterdayRechargeUsers; // 昨日充值人数 + private Integer yearlyRechargeUsers; // 年累计充值人数 + + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java b/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java index 48b2ef0..fb1ea4b 100644 --- a/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java +++ b/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java @@ -61,13 +61,8 @@ public class WorkbenchMarketCard implements Serializable { private Integer sumDaily; // 总日环比(%) private Integer yearlyRechargeNum; // 全年累计充值人头数 - //更新时间 +/* //更新时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") - private Date updateTime; - //图表 - private Integer SumRechargePermanent; //合计充值永久金币 - private Integer SumRechargeFree; //合计充值免费金币 - private Integer SumConsumePermanent; //合计消费永久金币 - private Integer SumConsumeFree; //合计消费免费金币 - private Integer SumConsumeTask; //合计消费任务金币 + private Date updateTime;*/ + } diff --git a/src/main/java/com/example/demo/mapper/StatisticsMapper.java b/src/main/java/com/example/demo/mapper/StatisticsMapper.java index c684fc1..9cb41bf 100644 --- a/src/main/java/com/example/demo/mapper/StatisticsMapper.java +++ b/src/main/java/com/example/demo/mapper/StatisticsMapper.java @@ -2,6 +2,7 @@ package com.example.demo.mapper; import com.example.demo.domain.entity.Statistics; import com.example.demo.domain.entity.UserGoldRecord; +import com.example.demo.domain.vo.MarketRechargeStat; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -20,6 +21,9 @@ import java.util.List; @Mapper public interface StatisticsMapper { + //批量查询 + List selectByMarketsAndDate(@Param("markets") List markets, @Param("startDate") Date startDate, @Param("endDate") Date endDate); + //根据地区、审核状态、起止时间查询订单表数据 List findByMarketAndAuditStatus(@Param("market") String market, @Param("auditStatusList") List auditStatusList, @@ -51,6 +55,10 @@ public interface StatisticsMapper { void insertPart2(Statistics statistics); //更新part2统计数据 void updatePart2(Statistics statistics); + //新增年度统计数据 + void insertYear(Statistics statistics); + //更新年度统计数据 + void updateYear(Statistics statistics); //获取某地区某时间所在日期的数据(仅一条) Statistics selectByMarketAndDate(@Param("market") String market, @Param("startDate") Date startDate, diff --git a/src/main/java/com/example/demo/service/StatisticsService.java b/src/main/java/com/example/demo/service/StatisticsService.java index dc86550..dcd591f 100644 --- a/src/main/java/com/example/demo/service/StatisticsService.java +++ b/src/main/java/com/example/demo/service/StatisticsService.java @@ -19,6 +19,8 @@ public interface StatisticsService { public void runHourlyTaskPart1(); //每小时执行定时任务更新当天part2数据 public void runHourlyTaskPart2(); + //每小时执行定身任务更新当天全年累计数据 + public void runHourlyTaskYear(); //0点执行定时任务更新近一周part2数据 public void runDailyTaskPart2(); //查询某地区某天是否已存在统计数据 @@ -26,11 +28,15 @@ public interface StatisticsService { //新增或更新或不修改某地区某天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 8efa2fe..c41e316 100644 --- a/src/main/java/com/example/demo/service/WorkbenchService.java +++ b/src/main/java/com/example/demo/service/WorkbenchService.java @@ -21,8 +21,10 @@ import java.util.Map; public interface WorkbenchService { //获取不同地区的工作台统计卡片 WorkbenchCard getCard( ); + //缓存卡片数据 + WorkbenchCard getCardCache(); //获取卡片数据 - WorkbenchMarketCard createWorkbenchMarketCard(String market, Statistics currentStatistics,Statistics ydayStatistics, Date yearlyStartDate, Date currentDate); + WorkbenchMarketCard createWorkbenchMarketCard(String market, Statistics currentStatistics,Statistics ydayStatistics, Date currentDate); //获取不同地区的工作台柱状图数据(根据类型,起止时间,地区查询) WorkbenchCard getGraph(Date startDate, Date endDate, List markets); //根据类型获取年初至今的统计数据 diff --git a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java index 47222e8..cf9cff8 100644 --- a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java @@ -5,6 +5,7 @@ import com.example.demo.domain.entity.UserGoldRecord; 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 org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -34,12 +35,14 @@ public class StatisticsServiceImpl implements StatisticsService { private StatisticsMapper statisticsMapper; @Autowired private GeneralService generalService; + @Autowired + private WorkbenchService workbenchService; /* 每小时执行定时任务更新当天part1数据 */ @Override - @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 +// @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 public void runHourlyTaskPart1() { Date today = new Date(); //取当天日期 for(String market : generalService.getMarket()){ @@ -51,7 +54,7 @@ public class StatisticsServiceImpl implements StatisticsService { 每小时执行定时任务更新当天part2数据 */ @Override - @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 + // @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 public void runHourlyTaskPart2() { Date today = new Date(); //取当天日期 for(String market : generalService.getMarket()){ @@ -59,10 +62,31 @@ public class StatisticsServiceImpl implements StatisticsService { } } /* + 每小时执行定时任务更新年度数据 + */ + @Override + // @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 + public void runHourlyTaskYear() { + Date today = new Date(); + // 获取当前日期 + LocalDate today1 = LocalDate.now(); + // 获取当前年份的第一天 + LocalDate firstDayOfYear = today1.withDayOfYear(1); + // 将年份的第一天日期转换为Date类型 + Date yearlyStartDate=Date.from(firstDayOfYear.atStartOfDay(ZoneId.systemDefault()).toInstant()); + + + for(String market : generalService.getMarket()){ + saveStatisticsYear(market,yearlyStartDate,today); + } + + } + + /* 0点执行定时任务更新近一周part2数据 */ @Override - @Scheduled(cron = "0 0 0 * * ?") + // @Scheduled(cron = "0 0 0 * * ?") public void runDailyTaskPart2() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, -7); // 一周前 @@ -122,6 +146,29 @@ public class StatisticsServiceImpl implements StatisticsService { } } } + /* + 新增或更新或不修改某地区某天年度统计数据 + */ + @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统计数据 @@ -294,7 +341,29 @@ public class StatisticsServiceImpl implements StatisticsService { 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) { @@ -328,4 +397,14 @@ private boolean isSameStatisticsPart1(Statistics oldStats, Statistics newStats) 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 2ea536a..3ad82e7 100644 --- a/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java @@ -11,6 +11,8 @@ import com.example.demo.service.GeneralService; import com.example.demo.service.StatisticsService; import com.example.demo.service.WorkbenchService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.time.LocalDate; @@ -19,6 +21,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -32,71 +35,94 @@ import java.util.stream.Collectors; @Service public class WorkbenchServiceImpl implements WorkbenchService { + + 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) { + this.redisTemplate = redisTemplate; + this.statisticsMapper = statisticsMapper; + } + private static final String CACHE_KEY = "workbench_card_cache"; @Override public WorkbenchCard getCard( ) { - Date date=new Date();//当天 - Date yday=generalService.getYesterday(); // 获取开始时间和结束时间(当天) - LocalDateTime startOfDay = date.toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDateTime() - .with(LocalTime.MIN); + LocalDateTime startOfDay = LocalDateTime.now().with(LocalTime.MIN); LocalDateTime endOfDay = startOfDay.plusDays(1).minusSeconds(1); - // 获取开始时间和结束时间(当天) - LocalDateTime startOfYday = yday.toInstant() - .atZone(ZoneId.systemDefault()) - .toLocalDateTime() - .with(LocalTime.MIN); - LocalDateTime endOfYday = startOfYday.plusDays(1).minusSeconds(1); - // 获取当前日期 - LocalDate today = LocalDate.now(); + // 获取开始时间和结束时间(昨天) + LocalDateTime startOfYday = startOfDay.minusDays(1); + LocalDateTime endOfYday = endOfDay.minusDays(1); + // 获取当前年份的第一天 - LocalDate firstDayOfYear = today.withDayOfYear(1); - // 将年份的第一天日期转换为Date类型 - Date yearlyStartDate=Date.from(firstDayOfYear.atStartOfDay(ZoneId.systemDefault()).toInstant()); + LocalDate firstDayOfYear = LocalDate.now().withDayOfYear(1); + Date yearlyStartDate = Date.from(firstDayOfYear.atStartOfDay(ZoneId.systemDefault()).toInstant()); List markets = generalService.getMarket(); + + // 批量获取统计数据 + 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 + Map currentStatsMap = currentStatsList.stream() + .collect(Collectors.toMap(Statistics::getMarket, Function.identity(), (existing, replacement) -> existing)); + + Map ydayStatsMap = ydayStatsList.stream() + .collect(Collectors.toMap(Statistics::getMarket, Function.identity(), (existing, replacement) -> existing)); + // 并行处理市场列表,创建市场卡片列表 List marketCards = markets.parallelStream() - // 过滤掉空或全空格的市场名称 .filter(market -> market != null && !market.trim().isEmpty()) - .map(market -> { - // 根据市场名称和日期范围查询统计信息 - Statistics currentStatistics = statisticsMapper.selectByMarketAndDate( - market, - Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()), - Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()) - ); - Statistics ydayStatistics = statisticsMapper.selectByMarketAndDate( - market, - Date.from(startOfYday.atZone(ZoneId.systemDefault()).toInstant()), - Date.from(endOfYday.atZone(ZoneId.systemDefault()).toInstant()) - ); - // 创建并返回市场卡片对象 - return createWorkbenchMarketCard(market, currentStatistics,ydayStatistics, yearlyStartDate, date); - }) - // 收集并行流结果为列表 + .map(market -> createWorkbenchMarketCard( + market, + currentStatsMap.getOrDefault(market, null), + ydayStatsMap.getOrDefault(market, null), + + new Date())) .collect(Collectors.toList()); - return new WorkbenchCard( marketCards,new ArrayList<>(), markets, date, date); + return new WorkbenchCard(marketCards, new ArrayList<>(), markets, new Date(), new Date()); + } + + @Override + public WorkbenchCard getCardCache() { + WorkbenchCard cached = redisTemplate.opsForValue().get(CACHE_KEY); + if (cached != null) { + System.out.println("读取缓存数据: " + new Date()); + return cached; + } + try { + WorkbenchCard freshData = getCard(); + redisTemplate.opsForValue().set(CACHE_KEY, freshData, 1, java.util.concurrent.TimeUnit.HOURS); + System.out.println("刷新缓存并存储新数据: " + new Date()); + return freshData; + } catch (Exception e) { + System.err.println("查询数据库失败,尝试使用旧缓存数据或抛出异常:" + e.getMessage()); + throw e; // 或者你可以选择返回上次的缓存数据(如果有) + } } + /* 获取卡片数据 */ @Override - public WorkbenchMarketCard createWorkbenchMarketCard(String market,Statistics currentStatistics, Statistics ydayStatistics, Date yearlyStartDate, Date currentDate) { + 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); + // Map yearlyStats = calculateAllSum(market, yearlyStartDate, date); // 卡片一:当前金币相关 card.setCurrentPermanent(currentStatistics.getCurrentPermanent());//余量-永久金币 card.setCurrentFreeJune(currentStatistics.getCurrentFreeJune()); //余量-免费六月金币 @@ -108,8 +134,8 @@ public class WorkbenchServiceImpl implements WorkbenchService { // 卡片二:充值相关 card.setRecharge(ydayStatistics.getRecharge()); //充值-昨日充值 card.setMoney(ydayStatistics.getMoney()); //充值-昨日金额(永久) - card.setYearlyRecharge(yearlyStats.getOrDefault("recharge", 0)); // 充值-全年累计充值 - card.setYearlyMoney(yearlyStats.getOrDefault("money", 0)); // 充值-全年累计金额(永久)//充值-全年累计金额(永久) + card.setYearlyRecharge(currentStatistics.getYearlyRecharge()); // 充值-全年累计充值 + card.setYearlyMoney(currentStatistics.getYearlyMoney()); // 充值-全年累计金额(永久)//充值-全年累计金额(永久) // 卡片三:消费与退款 card.setConsumePermanent(ydayStatistics.getConsumePermanent());//昨日消费-永久金币 card.setConsumeFreeJune(ydayStatistics.getConsumeFreeJune());//昨日消费-免费六月金币 @@ -124,20 +150,20 @@ public class WorkbenchServiceImpl implements WorkbenchService { //昨日总退款 int totalRefund = card.getRefundPermanent() + card.getRefundFreeJune() + card.getRefundFreeDecember() + card.getRefundTask(); card.setDailyReduce(totalConsume - totalRefund);//昨日总消耗 - card.setYearlyConsume(yearlyStats.getOrDefault("consume", 0)); // 年累计消费 - card.setYearlyRefund(yearlyStats.getOrDefault("refund", 0)); // 年累计退款 + card.setYearlyConsume(currentStatistics.getYearlyConsume()); // 年累计消费 + card.setYearlyRefund(currentStatistics.getYearlyRefund()); // 年累计退款 card.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗 // 卡片四:人头数相关 card.setRechargeNum(currentStatistics.getRechargeNum()); card.setFirstRecharge(currentStatistics.getFirstRecharge()); - card.setYearlyRechargeNum(yearlyStats.getOrDefault("rechargeNum", 0)); + card.setYearlyRechargeNum(currentStatistics.getYearlyRechargeNum()); // 周环比、日同比 card.setWow(calculateWeekOverWeek(market, currentDate)); card.setSumWow(calculateAllWeekOverWeek(date)); card.setDaily(calculateDayOverDay(market, currentDate)); card.setSumDaily(calculateAllDayOverDay(date)); - //更新时间 - card.setUpdateTime(currentStatistics.getUpdateTime()); + /* //更新时间 + card.setUpdateTime(currentStatistics.getUpdateTime());*/ } return card; } @@ -166,6 +192,7 @@ public class WorkbenchServiceImpl implements WorkbenchService { 根据类型获取统计数据 */ @Override + public Map calculateAllSum(String market, Date startDate, Date endDate) { WorkbenchFullStatistics stats = workBenchMapper.getFullStatisticsByMarketAndDate(market, startDate, endDate); Map result = new HashMap<>(); diff --git a/src/main/resources/mapper/StatisticsMapper.xml b/src/main/resources/mapper/StatisticsMapper.xml index 5b2cee6..9192a94 100644 --- a/src/main/resources/mapper/StatisticsMapper.xml +++ b/src/main/resources/mapper/StatisticsMapper.xml @@ -37,10 +37,29 @@ ) + + + INSERT INTO statistics ( + market, current_datetime, + yearly_recharge, + yearly_money, + yearly_consume, + yearly_refund, + yearly_recharge_num + + ) VALUES ( + #{market}, #{currentDatetime}, + #{yearlyRecharge},#{yearlyMoney}, + #{yearlyConsume},#{yearlyRefund}, + #{yearlyRechargeNum} + + ) + UPDATE statistics SET + recharge = #{recharge}, money = #{money}, consume_permanent = #{consumePermanent}, @@ -70,6 +89,17 @@ current_task = #{currentTask} WHERE market = #{market} and current_datetime = #{currentDatetime} + + + update statistics + SET + yearly_recharge=#{yearlyRecharge}, + yearly_money=#{yearlyMoney}, + yearly_consume=#{yearlyConsume}, + yearly_refund=#{yearlyRefund}, + yearly_recharge_num=#{yearlyRechargeNum} + WHERE market = #{market} and current_datetime = #{currentDatetime} + + + From 736ffc473323076b86fe4374ef9a200cd7003506 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Mon, 14 Jul 2025 18:08:01 +0800 Subject: [PATCH 3/7] =?UTF-8?q?7.14=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/Export/ExportServiceImpl.java | 28 ++++++++++------------ .../example/demo/controller/AdminController.java | 1 + .../java/com/example/demo/mapper/AdminMapper.java | 1 + .../com/example/demo/service/AdminService.java | 1 + .../example/demo/serviceImpl/AdminServiceImpl.java | 5 ++++ .../demo/serviceImpl/GoldDetailServiceImpl.java | 9 +++++-- src/main/resources/application.yml | 6 ++--- src/main/resources/mapper/AdminMapper.xml | 4 ++++ src/main/resources/mapper/ConsumeMapper.xml | 8 +++---- src/main/resources/mapper/RechargeMapper.xml | 8 +++---- src/main/resources/mapper/RefundMapper.xml | 12 +++++----- 11 files changed, 49 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index 78cc419..1e177eb 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -5,10 +5,13 @@ import com.example.demo.domain.DTO.ConsumeDTO; import com.example.demo.domain.DTO.RechargeDTO; import com.example.demo.domain.DTO.RefundDTO; import com.example.demo.domain.entity.Admin; +import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.Result; import com.example.demo.exception.SystemException; import com.example.demo.mapper.GoldDetailMapper; import com.example.demo.Util.RedisUtil; +import com.example.demo.service.AdminService; +import com.example.demo.service.UserService; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; @@ -22,6 +25,8 @@ import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; +import static net.sf.jsqlparser.util.validation.metadata.NamedObject.user; + /** * @program: GOLD * @ClassName ExportServiceImpl @@ -36,6 +41,8 @@ public class ExportServiceImpl implements ExportService{ private GoldDetailMapper goldDetailMapper; @Autowired private RedisUtil redisUtil; + @Autowired + private AdminService adminService; @Override public Result addExportRecharge(RechargeDTO dto) { @@ -48,10 +55,11 @@ public class ExportServiceImpl implements ExportService{ } catch (Exception e) { throw new RuntimeException(e.getMessage()); } + String admin = adminService.getName(String.valueOf(dto.getAccount())); // 生成文件名 String fileName = String.format("%s_%s_%s.xlsx", "充值明细", - "操作人", + admin, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); System.out.println(fileName); dto.setUrl(""); @@ -78,10 +86,6 @@ public class ExportServiceImpl implements ExportService{ // 手动构造请求数据(避免 toString() 只返回部分字段) Map requestData = new HashMap<>(); - requestData.put("text", dto.getText()); - requestData.put("sort", dto.getSort()); - requestData.put("field", dto.getField()); - requestData.put("deptId", dto.getDeptid()); requestData.put("rechargeUser", dto.getRechargeUser()); exportData.put("requestData", requestData); @@ -106,10 +110,11 @@ public class ExportServiceImpl implements ExportService{ } catch (Exception e) { throw new RuntimeException(e.getMessage()); } + String admin = adminService.getName(String.valueOf(dto.getAccount())); // 生成文件名 String fileName = String.format("%s_%s_%s.xlsx", "退款明细", - "操作人", + admin, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); System.out.println(fileName); dto.setUrl(""); @@ -135,10 +140,6 @@ public class ExportServiceImpl implements ExportService{ // 手动构造请求数据(避免 toString() 只返回部分字段) Map requestData = new HashMap<>(); - requestData.put("text", dto.getText()); - requestData.put("sort", dto.getSort()); - requestData.put("field", dto.getField()); - requestData.put("deptId", dto.getDeptid()); requestData.put("refundUser", dto.getRefundUser()); exportData.put("requestData", requestData); @@ -163,10 +164,11 @@ public class ExportServiceImpl implements ExportService{ } catch (Exception e) { throw new RuntimeException(e.getMessage()); } + String admin = adminService.getName(String.valueOf(dto.getAccount())); // 生成文件名 String fileName = String.format("%s_%s_%s.xlsx", "消耗明细", - "操作人", + admin, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); System.out.println(fileName); dto.setUrl(""); @@ -192,10 +194,6 @@ public class ExportServiceImpl implements ExportService{ // 手动构造请求数据(避免 toString() 只返回部分字段) Map requestData = new HashMap<>(); - requestData.put("text", dto.getText()); - requestData.put("sort", dto.getSort()); - requestData.put("field", dto.getField()); - requestData.put("deptId", dto.getDeptid()); requestData.put("consumeUser", dto.getConsumeUser()); exportData.put("requestData", requestData); diff --git a/src/main/java/com/example/demo/controller/AdminController.java b/src/main/java/com/example/demo/controller/AdminController.java index 10269c3..e43a951 100644 --- a/src/main/java/com/example/demo/controller/AdminController.java +++ b/src/main/java/com/example/demo/controller/AdminController.java @@ -55,6 +55,7 @@ public class AdminController { System.out.println("1/*/*/*/*//*-*-*-*-*-*-1" + token); try { System.out.println("/+/+/+/+/+/+/+//" + JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class)); + return JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); } catch (Exception e) { throw new RuntimeException(e); diff --git a/src/main/java/com/example/demo/mapper/AdminMapper.java b/src/main/java/com/example/demo/mapper/AdminMapper.java index c1b34f5..91996df 100644 --- a/src/main/java/com/example/demo/mapper/AdminMapper.java +++ b/src/main/java/com/example/demo/mapper/AdminMapper.java @@ -19,4 +19,5 @@ public interface AdminMapper { void updatePassword(Admin admin); + String getName(String account); } diff --git a/src/main/java/com/example/demo/service/AdminService.java b/src/main/java/com/example/demo/service/AdminService.java index 106b9a3..220d97b 100644 --- a/src/main/java/com/example/demo/service/AdminService.java +++ b/src/main/java/com/example/demo/service/AdminService.java @@ -16,6 +16,7 @@ public interface AdminService { Admin login(Admin admin)throws Exception; String getId(String account); + String getName(String account); Result updatePassword(Password password); diff --git a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java index a880423..4bdf81b 100644 --- a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java @@ -69,6 +69,11 @@ public class AdminServiceImpl implements AdminService { return adminMapper.getAdmin(account).getId().toString(); } + @Override + public String getName(String account) { + return adminMapper.getName(account); + } + private boolean hasPermissionToMachine(Admin admin, String targetMachineId) { if (targetMachineId == null || admin.getMachineId() == null) { return false; diff --git a/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java index 98fa424..1b08c1d 100644 --- a/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/GoldDetailServiceImpl.java @@ -9,6 +9,7 @@ import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.*; import com.example.demo.exception.SystemException; import com.example.demo.mapper.GoldDetailMapper; +import com.example.demo.service.AdminService; import com.example.demo.service.GoldDetailService; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.pagehelper.PageHelper; @@ -42,6 +43,8 @@ public class GoldDetailServiceImpl implements GoldDetailService { private GoldDetailMapper goldDetailMapper; @Autowired private RedisUtil redisUtil; + @Autowired + private AdminService adminService; @Override public PageInfo getGoldDetail(Integer pageNum, Integer pageSize, GoldDetail goldDetail) { @@ -124,10 +127,11 @@ public class GoldDetailServiceImpl implements GoldDetailService { } catch (Exception e) { throw new RuntimeException(e.getMessage()); } + String admin = adminService.getName(String.valueOf(dto.getAccount())); // 生成文件名 String fileName = String.format("%s_%s_%s.xlsx", "客户金币明细", - "操作人", + admin, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); System.out.println(fileName); dto.setUrl(""); @@ -182,10 +186,11 @@ public class GoldDetailServiceImpl implements GoldDetailService { } catch (Exception e) { throw new RuntimeException(e.getMessage()); } + String admin = adminService.getName(String.valueOf(dto.getAccount())); // 生成文件名 String fileName = String.format("%s_%s_%s.xlsx", "金币余额明细", - "操作人", + admin, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); System.out.println(fileName); dto.setUrl(""); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ef7a018..8e726da 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,9 +4,9 @@ spring: fail-on-unknown-properties: false datasource: mysql1: - jdbc-url: jdbc:mysql://18.143.76.3:3306/hwgoldc?serverTimezone=Asia/Shanghai - username: hwgoldc - password: zB48T55wCsHC8KPz + jdbc-url: jdbc:mysql://18.143.76.3:3306/hwgold?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true + username: hwgold + password: aDiw7MERSATdfGta driver-class-name: com.mysql.cj.jdbc.Driver hikari: pool-name: mysql1HikariCP diff --git a/src/main/resources/mapper/AdminMapper.xml b/src/main/resources/mapper/AdminMapper.xml index 15f0e8b..83a9c7f 100644 --- a/src/main/resources/mapper/AdminMapper.xml +++ b/src/main/resources/mapper/AdminMapper.xml @@ -22,4 +22,8 @@ update_time = #{updateTime} where account = #{account} + diff --git a/src/main/resources/mapper/ConsumeMapper.xml b/src/main/resources/mapper/ConsumeMapper.xml index 8263303..aa46c39 100644 --- a/src/main/resources/mapper/ConsumeMapper.xml +++ b/src/main/resources/mapper/ConsumeMapper.xml @@ -72,10 +72,10 @@ ugr.remark AS remark, a.admin_name AS adminName, ugr.create_time AS createTime - FROM user u - JOIN - user_gold_record ugr ON u.jwcode = ugr.jwcode - JOIN + FROM user_gold_record ugr + left JOIN + user u ON u.jwcode = ugr.jwcode + left JOIN admin a ON ugr.admin_id = a.id ugr.type = 1 diff --git a/src/main/resources/mapper/RechargeMapper.xml b/src/main/resources/mapper/RechargeMapper.xml index 3358e7a..84bd95d 100644 --- a/src/main/resources/mapper/RechargeMapper.xml +++ b/src/main/resources/mapper/RechargeMapper.xml @@ -79,10 +79,10 @@ ugr.admin_id AS adminId, a.admin_name AS adminName, ugr.pay_time AS payTime - FROM user u - JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode - JOIN admin a ON ugr.admin_id = a.id - JOIN rate r ON ugr.rate_id = r.id + FROM user_gold_record ugr + left JOIN user u ON u.jwcode = ugr.jwcode + left JOIN admin a ON ugr.admin_id = a.id + left JOIN rate r ON ugr.rate_id = r.id ugr.type = 0 AND ugr.audit_status IN (1,3) diff --git a/src/main/resources/mapper/RefundMapper.xml b/src/main/resources/mapper/RefundMapper.xml index df4aaea..c04a435 100644 --- a/src/main/resources/mapper/RefundMapper.xml +++ b/src/main/resources/mapper/RefundMapper.xml @@ -19,9 +19,9 @@ a.admin_name AS adminName, ugr.create_time AS createTime FROM user u - JOIN + left JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode - JOIN + left JOIN admin a ON ugr.admin_id = a.id WHERE ugr.type = 2 AND ugr.audit_status IN (1,3) @@ -76,10 +76,10 @@ ugr.remark AS remark, a.admin_name AS adminName, ugr.create_time AS createTime - FROM user u - JOIN - user_gold_record ugr ON u.jwcode = ugr.jwcode - JOIN + FROM user_gold_record ugr + left JOIN + user u ON u.jwcode = ugr.jwcode + left JOIN admin a ON ugr.admin_id = a.id ugr.type = 2 AND ugr.audit_status IN (1,3) From 9dbb61ad6a7f997da5231e6c705617f574820ec4 Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Mon, 14 Jul 2025 18:08:34 +0800 Subject: [PATCH 4/7] =?UTF-8?q?7.14=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java b/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java index 0036465..b455b49 100644 --- a/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java +++ b/src/main/java/com/example/demo/Mysql/MysqlServiceImpl.java @@ -34,8 +34,9 @@ public class MysqlServiceImpl implements MysqlService { Set validZeroTypes = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29, 35, 36, 40, 45, 46, 47, 48, 49, 53, 54, 60)); Set validOneTypes = new HashSet<>(Arrays.asList(9, 15, 17, 25, 27, 37, 41, 42, 43, 50, 51, 62)); - Set validTwoTypes = new HashSet<>(Arrays.asList(52, 55, 56, 57, 58, 59, 61)); + Set validTwoTypes = new HashSet<>(Arrays.asList(52,61)); Set validThreeTypes = new HashSet<>(Arrays.asList(10, 16, 30, 31, 32, 33, 34, 39, 44)); + Set validFourTypes = new HashSet<>(Arrays.asList(55, 56, 57, 58, 59, 63, 64, 65)); LocalDateTime now = LocalDateTime.now(); Month currentMonth = now.getMonth(); @Autowired @@ -102,6 +103,9 @@ public class MysqlServiceImpl implements MysqlService { Random random = new Random(); int randomNumber = random.nextInt(900) + 100; // 判断gtype + if(validFourTypes.contains(gtype)){ + continue; + } if(validZeroTypes.contains(gtype)){ mysqlStmt.setInt(13, 0); mysqlStmt.setString(1, "ERPCZ"+timestampPart+randomNumber); From cbf7711f53824adb9bf95d21025d130591513caa Mon Sep 17 00:00:00 2001 From: lijianlin Date: Mon, 14 Jul 2025 18:10:49 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E8=AE=A1=E7=AE=97bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/WorkBenchMapper.xml | 31 +++++++++++++-------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/main/resources/mapper/WorkBenchMapper.xml b/src/main/resources/mapper/WorkBenchMapper.xml index b40242f..3230f2a 100644 --- a/src/main/resources/mapper/WorkBenchMapper.xml +++ b/src/main/resources/mapper/WorkBenchMapper.xml @@ -90,23 +90,22 @@ From c0ec4a480f49d9b18a52fb4ef2aa1d73882fb881 Mon Sep 17 00:00:00 2001 From: lijianlin Date: Tue, 15 Jul 2025 08:55:56 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=BC=80=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/demo/serviceImpl/StatisticsServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java index cf9cff8..8794abe 100644 --- a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java @@ -42,7 +42,7 @@ public class StatisticsServiceImpl implements StatisticsService { 每小时执行定时任务更新当天part1数据 */ @Override -// @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 + @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 public void runHourlyTaskPart1() { Date today = new Date(); //取当天日期 for(String market : generalService.getMarket()){ @@ -54,7 +54,7 @@ public class StatisticsServiceImpl implements StatisticsService { 每小时执行定时任务更新当天part2数据 */ @Override - // @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 + @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 public void runHourlyTaskPart2() { Date today = new Date(); //取当天日期 for(String market : generalService.getMarket()){ @@ -65,7 +65,7 @@ public class StatisticsServiceImpl implements StatisticsService { 每小时执行定时任务更新年度数据 */ @Override - // @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 + @Scheduled(cron = "0 0 * * * ?") // 每小时执行一次 public void runHourlyTaskYear() { Date today = new Date(); // 获取当前日期 @@ -86,7 +86,7 @@ public class StatisticsServiceImpl implements StatisticsService { 0点执行定时任务更新近一周part2数据 */ @Override - // @Scheduled(cron = "0 0 0 * * ?") + @Scheduled(cron = "0 0 0 * * ?") public void runDailyTaskPart2() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, -7); // 一周前 From 0f15490913d4d8a73206cdcf0e3250107151b42e Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Tue, 15 Jul 2025 09:59:53 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BA=8C=E6=9C=9F=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../example/demo/controller/AdminController.java | 15 ++- .../example/demo/controller/ConsumeController.java | 4 + .../example/demo/controller/GeneralController.java | 2 + .../demo/controller/PermissionController.java | 5 +- .../demo/controller/RechargeController.java | 6 +- .../example/demo/controller/RefundController.java | 4 + .../example/demo/controller/UserController.java | 2 + .../java/com/example/demo/mapper/AdminMapper.java | 4 + .../com/example/demo/mapper/ConsumeMapper.java | 6 ++ .../com/example/demo/mapper/GeneralMapper.java | 3 + .../java/com/example/demo/mapper/RateMapper.java | 2 +- .../com/example/demo/mapper/RechargeMapper.java | 5 +- .../java/com/example/demo/mapper/RefundMapper.java | 5 + .../java/com/example/demo/mapper/UserMapper.java | 14 ++- .../com/example/demo/service/AdminService.java | 4 + .../com/example/demo/service/ConsumeService.java | 4 + .../example/demo/service/PermissionService.java | 6 +- .../java/com/example/demo/service/RateService.java | 2 +- .../com/example/demo/service/RechargeService.java | 4 + .../com/example/demo/service/RefundService.java | 5 + .../java/com/example/demo/service/UserService.java | 7 ++ .../example/demo/serviceImpl/AdminServiceImpl.java | 26 ++--- .../demo/serviceImpl/ConsumeServiceImpl.java | 11 +- .../demo/serviceImpl/PermissionServiceImpl.java | 115 ++++++++++++--------- .../example/demo/serviceImpl/RateServiceImpl.java | 8 +- .../demo/serviceImpl/RechargeServiceImpl.java | 10 +- .../demo/serviceImpl/RefundServiceImpl.java | 9 +- .../example/demo/serviceImpl/UserServiceImpl.java | 3 + 28 files changed, 203 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/example/demo/controller/AdminController.java b/src/main/java/com/example/demo/controller/AdminController.java index e43a951..ab56559 100644 --- a/src/main/java/com/example/demo/controller/AdminController.java +++ b/src/main/java/com/example/demo/controller/AdminController.java @@ -62,6 +62,7 @@ public class AdminController { } } + //获取管理员ID @PostMapping("/adminId") public Result selectId(@RequestBody Admin admin) { @@ -74,7 +75,7 @@ public class AdminController { } } - + //更新用户密码 @PostMapping("/password") public Result updatePassword(@RequestBody Password password){ @@ -86,4 +87,16 @@ public class AdminController { } + //更新用户密码 + @PostMapping("/reset") + public Result resetPassword(@RequestBody Password password){ + + try { + return adminService.resetPassword(password); + } catch (Exception e) { + return Result.error("重置失败"); + } + + } + } diff --git a/src/main/java/com/example/demo/controller/ConsumeController.java b/src/main/java/com/example/demo/controller/ConsumeController.java index 0914acb..d02758a 100644 --- a/src/main/java/com/example/demo/controller/ConsumeController.java +++ b/src/main/java/com/example/demo/controller/ConsumeController.java @@ -36,9 +36,11 @@ public class ConsumeController { @PostMapping("/selectAll") public Result selcetAll(@RequestBody Page page) { try { + //页码校验 if (ObjectUtils.isEmpty(page.getPageNum())) { return Result.error("页码数为空!"); } + //页面大小校验 if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { @@ -56,9 +58,11 @@ public class ConsumeController { @PostMapping("/selectBy") public Result selcetBy(@RequestBody Page page) { try { + //页码校验 if (ObjectUtils.isEmpty(page.getPageNum())) { return Result.error("页码数为空!"); } + //页面大小校验 if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { diff --git a/src/main/java/com/example/demo/controller/GeneralController.java b/src/main/java/com/example/demo/controller/GeneralController.java index be01a78..7472975 100644 --- a/src/main/java/com/example/demo/controller/GeneralController.java +++ b/src/main/java/com/example/demo/controller/GeneralController.java @@ -41,12 +41,14 @@ public class GeneralController { List list = generalService.getPlatform(); return Result.success(list); } + //获取商品名称 @PostMapping("/goods") public Result getGoods() { List list = generalService.getGoods(); return Result.success(list); } + //获取活动名称 @PostMapping("/activity") public Result getActivity() { diff --git a/src/main/java/com/example/demo/controller/PermissionController.java b/src/main/java/com/example/demo/controller/PermissionController.java index 0c3d3c3..94f1d9a 100644 --- a/src/main/java/com/example/demo/controller/PermissionController.java +++ b/src/main/java/com/example/demo/controller/PermissionController.java @@ -2,6 +2,7 @@ package com.example.demo.controller; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.AdminRole; +import com.example.demo.domain.vo.AdminVo; import com.example.demo.domain.vo.Page; import com.example.demo.domain.vo.Permission; import com.example.demo.domain.vo.Result; @@ -53,9 +54,9 @@ public class PermissionController { } //编辑用户 @PostMapping("/updateAdmin") - public Result updateAdmin(@RequestBody Admin admin) throws Exception { + public Result updateAdmin(@RequestBody AdminVo adminVo) throws Exception { try { - return Result.success(permissionService.updateAdmin(admin)); + return Result.success(permissionService.updateAdmin(adminVo)); } catch (Exception e) { log.error(Arrays.toString(e.getStackTrace())); diff --git a/src/main/java/com/example/demo/controller/RechargeController.java b/src/main/java/com/example/demo/controller/RechargeController.java index ecd0880..1615080 100644 --- a/src/main/java/com/example/demo/controller/RechargeController.java +++ b/src/main/java/com/example/demo/controller/RechargeController.java @@ -29,7 +29,7 @@ public class RechargeController { @Autowired private RechargeService rechargeService; - //消耗明细 + //充值明细 @PostMapping("/selectAll") public Result selcetAll(@RequestBody Page page) { try { @@ -49,7 +49,7 @@ public class RechargeController { } - //消耗明细筛选 + //充值明细筛选 @PostMapping("/selectBy") public Result selcetBy(@RequestBody Page page) { try { @@ -67,7 +67,7 @@ public class RechargeController { } - //消耗金币统计 + //充值金币统计 @PostMapping("/statsGold") public Result statsGold(@RequestBody RechargeUser rechargeUser) { try { diff --git a/src/main/java/com/example/demo/controller/RefundController.java b/src/main/java/com/example/demo/controller/RefundController.java index 78b3446..ec46014 100644 --- a/src/main/java/com/example/demo/controller/RefundController.java +++ b/src/main/java/com/example/demo/controller/RefundController.java @@ -48,6 +48,7 @@ public class RefundController { } + //退款筛选 @PostMapping("/selectBy") public Result selcetBy(@RequestBody Page page) { try { @@ -66,6 +67,7 @@ public class RefundController { } + //退款金币统计 @PostMapping("/statsGold") public Result statsGold(@RequestBody RefundUser refundUser) { try { @@ -76,6 +78,7 @@ public class RefundController { } } + //获取退款类型 @PostMapping("/refundType") public Result getRefundType() { @@ -83,6 +86,7 @@ public class RefundController { return Result.success(list); } + //筛选产品 @PostMapping("/selectGoods") public Result getSelectGoods(@RequestBody RefundUser refundUser) { diff --git a/src/main/java/com/example/demo/controller/UserController.java b/src/main/java/com/example/demo/controller/UserController.java index a31818a..1033fce 100644 --- a/src/main/java/com/example/demo/controller/UserController.java +++ b/src/main/java/com/example/demo/controller/UserController.java @@ -30,6 +30,7 @@ public class UserController { @Autowired private UserService userService; + //查找用户 @PostMapping("/selectUser") public Result selectUser(@RequestBody GoldUser user) { try { @@ -39,6 +40,7 @@ public class UserController { return Result.error("请检查输入精网号"); } } + //查找用户全部信息 @PostMapping("/selectAllUser") public Result selectUser(@RequestBody User user) { try { diff --git a/src/main/java/com/example/demo/mapper/AdminMapper.java b/src/main/java/com/example/demo/mapper/AdminMapper.java index 91996df..b5ffe32 100644 --- a/src/main/java/com/example/demo/mapper/AdminMapper.java +++ b/src/main/java/com/example/demo/mapper/AdminMapper.java @@ -15,7 +15,11 @@ import org.apache.ibatis.annotations.Mapper; public interface AdminMapper { Admin getAdmin(String account); Admin selectByName(String account); + + //获取管理员ID Integer getId(String account); + + //更新密码 void updatePassword(Admin admin); diff --git a/src/main/java/com/example/demo/mapper/ConsumeMapper.java b/src/main/java/com/example/demo/mapper/ConsumeMapper.java index 60ca6a7..48bf80e 100644 --- a/src/main/java/com/example/demo/mapper/ConsumeMapper.java +++ b/src/main/java/com/example/demo/mapper/ConsumeMapper.java @@ -18,13 +18,19 @@ import java.util.List; @Mapper public interface ConsumeMapper { + //查找全部订单 List selectAll(ConsumeUser consumeUser); + //查找经过筛选后的订单 List selectBy(ConsumeUser consumeUser); + + //添加消费订单 void add(UserGoldRecord userGoldRecord); + //更新退款状态 void updateIsRefund(String orderCode); + //获得订单号 List selectOrderCodeByJwcode(String jwcode,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 de73b8a..3880ea1 100644 --- a/src/main/java/com/example/demo/mapper/GeneralMapper.java +++ b/src/main/java/com/example/demo/mapper/GeneralMapper.java @@ -16,6 +16,9 @@ import java.util.List; public interface GeneralMapper { List getMarket(); List getPlatform(); + //获取商品 List getGoods(); + + //获取活动 List getActivity(); } diff --git a/src/main/java/com/example/demo/mapper/RateMapper.java b/src/main/java/com/example/demo/mapper/RateMapper.java index 05602f3..0f50eca 100644 --- a/src/main/java/com/example/demo/mapper/RateMapper.java +++ b/src/main/java/com/example/demo/mapper/RateMapper.java @@ -8,7 +8,7 @@ import java.util.List; @Mapper public interface RateMapper { - List selectAll(); + List selectAll(); Rate selectById(Integer id); diff --git a/src/main/java/com/example/demo/mapper/RechargeMapper.java b/src/main/java/com/example/demo/mapper/RechargeMapper.java index e600ced..4a5170a 100644 --- a/src/main/java/com/example/demo/mapper/RechargeMapper.java +++ b/src/main/java/com/example/demo/mapper/RechargeMapper.java @@ -19,9 +19,10 @@ import java.util.List; @Mapper public interface RechargeMapper { + //获取全部充值 List selectAll(RechargeUser rechargeUser); - + //获取筛选后的充值 List selectBy(RechargeUser rechargeUser); - + //添加充值订单 void add(UserGoldRecord userGoldRecord); } diff --git a/src/main/java/com/example/demo/mapper/RefundMapper.java b/src/main/java/com/example/demo/mapper/RefundMapper.java index 3f8f14c..2c9c54d 100644 --- a/src/main/java/com/example/demo/mapper/RefundMapper.java +++ b/src/main/java/com/example/demo/mapper/RefundMapper.java @@ -19,14 +19,19 @@ import java.util.List; @Mapper public interface RefundMapper { + //获取全部退款订单 List selectAll(RefundUser refundUser); + //获取筛选后的订单 List selectBy(RefundUser refundUser); + //添加退款订单 void add(UserGoldRecord userGoldRecord); + //获取退款类型 List getRefundType(); + //获取商品 List selectGoods(Integer jwcode); } diff --git a/src/main/java/com/example/demo/mapper/UserMapper.java b/src/main/java/com/example/demo/mapper/UserMapper.java index 47e2946..f137af5 100644 --- a/src/main/java/com/example/demo/mapper/UserMapper.java +++ b/src/main/java/com/example/demo/mapper/UserMapper.java @@ -22,24 +22,32 @@ import java.util.List; @Mapper public interface UserMapper { + //获取用户金币信息 GoldUser selectUser(String jwcode); + //获取金币数 GoldUser selectGold(String jwcode); + //更新金币数 void updateGold(User user); - User selectAllUser(String jwcode); + //查找用户全部信息 + User selectAllUser(String jwcode); - //获取用户表全部jwcode + //获取用户表全部jwcode List getAllJwcode(); + //获取某用户最早的充值订单 Date getEarliestRecharge(Integer jwcode); + //更新用户首充日期 void updateFirstRecharge(@Param("jwcode") Integer jwcode, @Param("firstRecharge") Date firstRecharge); - void updateAllGold(User user); + + void updateAllGold(User user); void addUser(User user); + //根据精网号查询用户 User selectUserByJwcode(Integer jwcode); diff --git a/src/main/java/com/example/demo/service/AdminService.java b/src/main/java/com/example/demo/service/AdminService.java index 220d97b..7b90e1d 100644 --- a/src/main/java/com/example/demo/service/AdminService.java +++ b/src/main/java/com/example/demo/service/AdminService.java @@ -15,10 +15,14 @@ import com.example.demo.domain.vo.Result; public interface AdminService { Admin login(Admin admin)throws Exception; + //获取用户ID String getId(String account); String getName(String account); + //更新密码 Result updatePassword(Password password); + //重置密码 Result resetPassword(Password password); } + diff --git a/src/main/java/com/example/demo/service/ConsumeService.java b/src/main/java/com/example/demo/service/ConsumeService.java index 9ab9a3d..802564e 100644 --- a/src/main/java/com/example/demo/service/ConsumeService.java +++ b/src/main/java/com/example/demo/service/ConsumeService.java @@ -18,11 +18,15 @@ import com.github.pagehelper.PageInfo; public interface ConsumeService { + //查询全部消费 PageInfo selectAll(Integer pageNum, Integer pageSize, ConsumeUser consumeUser); + //统计消费金币 Gold statsGold(ConsumeUser consumeUser); + //查询筛选消费 PageInfo selectBy(Integer pageNum, Integer pageSize, ConsumeUser consumeUser); + //增加消费订单 Result add(ConsumeUser consumeUser); } diff --git a/src/main/java/com/example/demo/service/PermissionService.java b/src/main/java/com/example/demo/service/PermissionService.java index e306b28..646b6e2 100644 --- a/src/main/java/com/example/demo/service/PermissionService.java +++ b/src/main/java/com/example/demo/service/PermissionService.java @@ -3,7 +3,9 @@ package com.example.demo.service; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.AdminRole; import com.example.demo.domain.entity.Role; +import com.example.demo.domain.vo.AdminVo; import com.example.demo.domain.vo.Permission; +import com.example.demo.domain.vo.Result; import com.github.pagehelper.PageInfo; import java.util.List; @@ -25,6 +27,6 @@ public interface PermissionService { Integer deleteAdmin(Integer id); Integer updateAdminRole(AdminRole adminRole); Integer upadatePermission(Admin admin) throws Exception; - - Object updateAdmin(Admin admin)throws Exception; + //更新管理员信息 + Result updateAdmin(AdminVo adminVo)throws Exception; } diff --git a/src/main/java/com/example/demo/service/RateService.java b/src/main/java/com/example/demo/service/RateService.java index 0a14b2f..e0b2b1f 100644 --- a/src/main/java/com/example/demo/service/RateService.java +++ b/src/main/java/com/example/demo/service/RateService.java @@ -7,7 +7,7 @@ import com.github.pagehelper.PageInfo; public interface RateService { - PageInfo selectAll(Integer pageNum, Integer pageSize); + PageInfo selectAll(Integer pageNum, Integer pageSize); Rate selectById(Integer id); diff --git a/src/main/java/com/example/demo/service/RechargeService.java b/src/main/java/com/example/demo/service/RechargeService.java index 409fa16..7c5959b 100644 --- a/src/main/java/com/example/demo/service/RechargeService.java +++ b/src/main/java/com/example/demo/service/RechargeService.java @@ -16,11 +16,15 @@ import com.github.pagehelper.PageInfo; **/ public interface RechargeService { + //查询所有充值 PageInfo selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser); + //统计金币记录 Gold statsGold(RechargeUser rechargeUser); + //查询筛选充值 PageInfo selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser); + //添加充值记录 Result add(RechargeUser rechargeUser); } diff --git a/src/main/java/com/example/demo/service/RefundService.java b/src/main/java/com/example/demo/service/RefundService.java index f8cbb41..7821f2e 100644 --- a/src/main/java/com/example/demo/service/RefundService.java +++ b/src/main/java/com/example/demo/service/RefundService.java @@ -20,16 +20,21 @@ import java.util.List; public interface RefundService { + //查找全部退款 PageInfo selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser); + //统计退款金额 Gold statsGold(RefundUser refundUser); + //查找筛选退款 PageInfo selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser); + //添加退款记录 Result add(RefundUser refundUser); //获取退款类型 List getRefundType(); + //查找退款商品 List selectGoods(Integer jwcode); } diff --git a/src/main/java/com/example/demo/service/UserService.java b/src/main/java/com/example/demo/service/UserService.java index 83fac3a..b945d93 100644 --- a/src/main/java/com/example/demo/service/UserService.java +++ b/src/main/java/com/example/demo/service/UserService.java @@ -17,14 +17,21 @@ import java.util.List; public interface UserService { + //查找用户部分信息 GoldUser selectUser(String jwcode); + + //查找用户金币 GoldUser selectgold(String jwcode); + //查找用户全部信息 User selectAllUser(String jwcode); + //更新用户的全部金币 void updateAllGold(User user); + //新增用户 void addUser(User user); + //更新用户的首充时间 void updateFirstRecharge(); } diff --git a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java index 4bdf81b..f044210 100644 --- a/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java @@ -64,6 +64,7 @@ public class AdminServiceImpl implements AdminService { } } + //获取用户ID @Override public String getId(String account) { return adminMapper.getAdmin(account).getId().toString(); @@ -90,18 +91,17 @@ public class AdminServiceImpl implements AdminService { private static final String PASSWORD_REGEX = "^(?![0-9]+$)(?![a-zA-Z]+$)(?!\\W+$).{8,16}$"; private static final Pattern PASSWORD_PATTERN = Pattern.compile(PASSWORD_REGEX); + //更新密码 @Override public Result updatePassword(Password password) { String oldPassword = password.getOldPassword(); String newPassword = password.getNewPassword(); String againPassword = password.getAgainPassword(); + // 校验输入参数是否为空(账号、旧密码、新密码、确认密码均不可为空) if(oldPassword == null || newPassword == null || againPassword == null ||password.getAccount() == null) { return Result.error("输入不能为空"); } - if (oldPassword.equals(newPassword)) { - return Result.error("新密码不能与旧密码相同"); - } // 检查两次输入的新密码是否一致 if (!newPassword.equals(againPassword)) { return Result.error("两次输入的新密码不一致"); @@ -114,6 +114,10 @@ public class AdminServiceImpl implements AdminService { { return Result.error("用户不存在"); } + // 校验新密码是否与旧密码相同(不允许相同) + if (oldPassword.equals(newPassword)) { + return Result.error("新密码与历史密码重复"); + } try { // 创建认证令牌并验证旧密码 UsernamePasswordAuthenticationToken token = @@ -144,22 +148,18 @@ public class AdminServiceImpl implements AdminService { } - + //重置密码 @Override public Result resetPassword(Password password) { - String newPassword = password.getNewPassword(); - if(newPassword == null ||password.getAccount() == null) { - return Result.error("输入不能为空"); + String newPassword = "123456"; + if(password.getAccount() == null) { + return Result.error("账户未输入"); } - // 检查新密码是否符合复杂度要求 - if (!PASSWORD_PATTERN.matcher(newPassword).matches()) { - return Result.error("新密码必须为8-16位数字、字母或符号组成,且至少包含其中两种"); - } if(adminMapper.getAdmin(password.getAccount())==null) { - return Result.error("用户不存在"); + return Result.error("账户查找不到"); } try { // 获取认证后的用户信息 @@ -177,7 +177,7 @@ public class AdminServiceImpl implements AdminService { return Result.success("密码重置成功"); } catch (Exception e) { - return Result.error("密码重置失败"); + return Result.error("其他错误"); } } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java index d4fe28d..1a7ef1a 100644 --- a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java @@ -146,6 +146,7 @@ public class ConsumeServiceImpl implements ConsumeService { userGoldRecord.setFreeJune(0); } } + //信息输入 userGoldRecord.setTaskGold(-consumeUser.getTaskGold()); userGoldRecord.setRemark(consumeUser.getRemark()); userGoldRecord.setType((byte) 1); @@ -165,11 +166,11 @@ public class ConsumeServiceImpl implements ConsumeService { user.setConsumeNum(gold.getConsumeNum() + 1); user.setSumConsume(-(consumeUser.getPermanentGold() + consumeUser.getFreeGold() + consumeUser.getTaskGold())); userMapper.updateGold(user); - // 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()); - // } + // 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(); } } diff --git a/src/main/java/com/example/demo/serviceImpl/PermissionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/PermissionServiceImpl.java index f026057..a031640 100644 --- a/src/main/java/com/example/demo/serviceImpl/PermissionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/PermissionServiceImpl.java @@ -3,9 +3,13 @@ package com.example.demo.serviceImpl; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.AdminRole; import com.example.demo.domain.entity.Role; +import com.example.demo.domain.vo.AdminVo; +import com.example.demo.domain.vo.Password; import com.example.demo.domain.vo.Permission; +import com.example.demo.domain.vo.Result; import com.example.demo.mapper.AdminMapper; import com.example.demo.mapper.PermissionMapper; +import com.example.demo.service.AdminService; import com.example.demo.service.PermissionService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -32,6 +36,9 @@ public class PermissionServiceImpl implements PermissionService { private PermissionMapper permissionMapper; @Autowired private AdminMapper adminMapper; + @Autowired + private AdminService adminService; + @Override public List getposition(String token) { return permissionMapper.getposition(token); @@ -45,47 +52,46 @@ public class PermissionServiceImpl implements PermissionService { @Override public PageInfo getpermission(Integer pageNum, Integer pageSize, Permission permission) { PageHelper.startPage(pageNum, pageSize); - List list= permissionMapper.getPermission(permission); + List list = permissionMapper.getPermission(permission); return new PageInfo<>(list); } @Override @Transactional - public Integer addpermission(Admin admin) throws Exception { + public Integer addpermission(Admin admin) throws Exception { - if(!ObjectUtils.isEmpty(adminMapper.getAdmin(admin.getAccount()))){ + if (!ObjectUtils.isEmpty(adminMapper.getAdmin(admin.getAccount()))) { throw new Exception("账号已存在"); } - if(ObjectUtils.isEmpty(admin.getAccount())){ - throw new Exception("账号为空!"); - } - if(ObjectUtils.isEmpty( admin.getMarket())){ - throw new Exception("地区为空!"); - } - if(ObjectUtils.isEmpty( admin.getPostiton())){ - throw new Exception("职位为空!"); - } - if (ObjectUtils.isEmpty( admin.getRoleId())){ - throw new Exception("权限类别为空!"); - } - if(ObjectUtils.isEmpty( admin.getAdminName())){ - throw new Exception("用户名为空!"); - } - if(ObjectUtils.isEmpty( admin.getMachineId())){ - throw new Exception("机器编号为空!"); - } + if (ObjectUtils.isEmpty(admin.getAccount())) { + throw new Exception("账号为空!"); + } + if (ObjectUtils.isEmpty(admin.getMarket())) { + throw new Exception("地区为空!"); + } + if (ObjectUtils.isEmpty(admin.getPostiton())) { + throw new Exception("职位为空!"); + } + if (ObjectUtils.isEmpty(admin.getRoleId())) { + throw new Exception("权限类别为空!"); + } + if (ObjectUtils.isEmpty(admin.getAdminName())) { + throw new Exception("用户名为空!"); + } + if (ObjectUtils.isEmpty(admin.getMachineId())) { + throw new Exception("机器编号为空!"); + } if (admin.getMachineId().contains(",")) { throw new Exception("机器编号格式错误"); + } else { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + admin.setPassword(passwordEncoder.encode(("123456"))); + permissionMapper.addPermission(admin); + AdminRole adminRole = new AdminRole(); + adminRole.setAdminId(admin.getId()); + adminRole.setRoleId(admin.getRoleId()); + return permissionMapper.addadminRole(adminRole); } - else { - BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - admin.setPassword(passwordEncoder.encode(("123456"))); - permissionMapper.addPermission(admin); - AdminRole adminRole = new AdminRole(); - adminRole.setAdminId(admin.getId()); - adminRole.setRoleId(admin.getRoleId()); - return permissionMapper.addadminRole(adminRole); - } } @Override @@ -96,7 +102,7 @@ public class PermissionServiceImpl implements PermissionService { @Override @Transactional public Integer deleteAdmin(Integer id) { - if (id == null){ + if (id == null) { return -1; } @@ -115,32 +121,47 @@ public class PermissionServiceImpl implements PermissionService { return permissionMapper.updatePermission(admin); } + //更新管理员信息 @Override - public Object updateAdmin(Admin admin)throws Exception { - - if(ObjectUtils.isEmpty(admin.getAccount())){ + public Result updateAdmin(AdminVo adminVo) throws Exception { + // 校验账号是否为空(账号是唯一标识,必须存在) + if (ObjectUtils.isEmpty(adminVo.getAccount())) { throw new Exception("账号为空!"); } - if(ObjectUtils.isEmpty( admin.getMarket())){ + // 校验用户名是否为空(管理员姓名为必填项) + if (ObjectUtils.isEmpty(adminVo.getAdminName())) { + throw new Exception("用户名为空!"); + } + // 校验地区是否为空(管理员所属地区为必填项) + if (ObjectUtils.isEmpty(adminVo.getMarket())) { throw new Exception("地区为空!"); } - if(ObjectUtils.isEmpty( admin.getPostiton())){ + // 校验职位是否为空(管理员职位为必填项) + if (ObjectUtils.isEmpty(adminVo.getPostiton())) { throw new Exception("职位为空!"); } - - if(ObjectUtils.isEmpty( admin.getAdminName())){ - throw new Exception("用户名为空!"); - } - if(ObjectUtils.isEmpty( admin.getMachineId())){ + // 校验机器编号是否为空(机器编号为必填项) + if (ObjectUtils.isEmpty(adminVo.getMachineId())) { throw new Exception("机器编号为空!"); } - if (admin.getMachineId().contains(",")) { + // 校验机器编号格式(不允许包含逗号,避免与后续拼接逻辑冲突 + if (adminVo.getMachineId().contains(",")) { throw new Exception("机器编号格式错误"); - } - else { - - - return permissionMapper.updateAdmin(admin); + } else { + Admin admin = new Admin(); + admin.setAccount(adminVo.getAccount()); + admin.setAdminName(adminVo.getAdminName()); + admin.setMarket(adminVo.getMarket()); + admin.setPostiton(adminVo.getPostiton()); + // 处理机器编号:若存在额外机器编号(machineIds),则与原编号拼接(用逗号分隔) + if (adminVo.getMachineIds() == null) { + admin.setMachineId(adminVo.getMachineId()); + } else { + admin.setMachineId(adminVo.getMachineId() + "," + adminVo.getMachineIds()); + } + admin.setRemark(adminVo.getRemark()); + permissionMapper.updateAdmin(admin); + return Result.success("成功"); } } diff --git a/src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java index e2b55aa..e60f2aa 100644 --- a/src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java @@ -22,9 +22,9 @@ public class RateServiceImpl implements RateService { @Override - public PageInfo selectAll(Integer pageNum, Integer pageSize) { + public PageInfo selectAll(Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); - List rates = rateMapper.selectAll(); + List rates = rateMapper.selectAll(); return new PageInfo<>(rates); } @@ -45,6 +45,6 @@ public class RateServiceImpl implements RateService { if (rate.getNum() == null || rate.getNum().equals(BigDecimal.ZERO)) { return Result.error("汇率数值存在异常"); }else { - return Result.success("编辑成功"); - }} + return Result.success("编辑成功"); + }} } diff --git a/src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java index 832db37..48a4fe6 100644 --- a/src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java @@ -38,7 +38,7 @@ public class RechargeServiceImpl implements RechargeService { @Autowired private UserMapper userMapper; - + //查询所有充值 @Override public PageInfo selectAll(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) { PageHelper.startPage(pageNum, pageSize); @@ -46,6 +46,7 @@ public class RechargeServiceImpl implements RechargeService { return new PageInfo<>(rechargeUsers); } + //查询筛选充值 @Override public PageInfo selectBy(Integer pageNum, Integer pageSize, RechargeUser rechargeUser) { PageHelper.startPage(pageNum, pageSize); @@ -53,6 +54,7 @@ public class RechargeServiceImpl implements RechargeService { return new PageInfo<>(rechargeUsers); } + //统计金币记录 @Override public Gold statsGold(RechargeUser rechargeUser) { Gold gold = new Gold(); @@ -82,13 +84,14 @@ 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"); + if(rechargeUser.getFreeGold()<0||rechargeUser.getPermanentGold()<0||rechargeUser.getMoney()<0){ + return Result.error("充值不能为0"); } GoldUser goldUser = userMapper.selectUser(rechargeUser.getJwcode().toString()); if(goldUser==null){ @@ -120,6 +123,7 @@ public class RechargeServiceImpl implements RechargeService { userGoldRecord.setFreeJune(rechargeUser.getFreeGold()); userGoldRecord.setFreeDecember(0); } + //数据输入 userGoldRecord.setSumGold(rechargeUser.getFreeGold()+rechargeUser.getPermanentGold()); userGoldRecord.setRateId(rechargeUser.getRateId()); userGoldRecord.setMoney(rechargeUser.getMoney()); diff --git a/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java index 3c5b9e9..4e47d8f 100644 --- a/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java @@ -44,7 +44,7 @@ public class RefundServiceImpl implements RefundService { @Autowired private UserMapper userMapper; - + //查找全部退款 @Override public PageInfo selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) { PageHelper.startPage(pageNum, pageSize); @@ -52,6 +52,7 @@ public class RefundServiceImpl implements RefundService { return new PageInfo<>(refundUsers); } + //统计退款金额 @Override public Gold statsGold(RefundUser refundUser) { Gold gold = new Gold(); @@ -86,6 +87,7 @@ public class RefundServiceImpl implements RefundService { return gold; } + //查找筛选退款 @Override public PageInfo selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser) { PageHelper.startPage(pageNum, pageSize); @@ -93,6 +95,7 @@ public class RefundServiceImpl implements RefundService { return new PageInfo<>(refundUsers); } + //添加退款记录 @Transactional @Override public Result add(RefundUser refundUser) { @@ -140,6 +143,7 @@ public class RefundServiceImpl implements RefundService { userGoldRecord.setFreeJune(refundUser.getFreeGold()); userGoldRecord.setFreeDecember(0); } + //信息输入 userGoldRecord.setTaskGold(refundUser.getTaskGold()); userGoldRecord.setSumGold(refundUser.getSumGold()); userGoldRecord.setPayPlatform("金币系统"); @@ -149,6 +153,7 @@ public class RefundServiceImpl implements RefundService { userGoldRecord.setAuditStatus(0); userGoldRecord.setCreateTime(new Date()); List list = consumeMapper.selectOrderCodeByJwcode(userGoldRecord.getJwcode().toString(), orderCode); + //消费订单号校验 if (list == null || list.isEmpty()) { return Result.error("该用户没有该订单号"); }else if(list.size()==1){ @@ -165,6 +170,7 @@ public class RefundServiceImpl implements RefundService { return Result.success(); } + //获取退款类型 @Override public List getRefundType() { List list = refundMapper.getRefundType(); @@ -175,6 +181,7 @@ public class RefundServiceImpl implements RefundService { return filteredList; } + //查找退款商品 @Override public List selectGoods(Integer jwcode) { List refundUsers = refundMapper.selectGoods(jwcode); diff --git a/src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java index ce4de57..a5646ad 100644 --- a/src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/UserServiceImpl.java @@ -29,12 +29,14 @@ public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; + //查找用户部分信息 @Override public GoldUser selectUser(String jwcode) { GoldUser user = userMapper.selectUser(jwcode); return user; } + //查找用户全部信息 @Override public User selectAllUser(String jwcode) { User user = userMapper.selectAllUser(jwcode); @@ -72,6 +74,7 @@ public class UserServiceImpl implements UserService { } } + //查找用户金币 @Override public GoldUser selectgold(String jwcode) { GoldUser gold = userMapper.selectGold(jwcode);