From 1a6d4558cd31341b415fc8201dd6c97f061eb315 Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Wed, 6 Aug 2025 19:11:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E8=96=AA=E8=B5=84=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E9=BB=98=E8=AE=A4=E5=A4=A9=E6=95=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/guildgame/GameUsdService.java | 65 ++++++++++++------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildgame/GameUsdService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildgame/GameUsdService.java index 058acfbde..850f58c03 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildgame/GameUsdService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildgame/GameUsdService.java @@ -1,5 +1,6 @@ package com.accompany.business.service.guildgame; +import cn.hutool.core.date.DateUtil; import com.accompany.business.constant.guildgame.GameUsdOperateTypeEnum; import com.accompany.business.model.UserPurse; import com.accompany.business.model.guild.Guild; @@ -119,34 +120,50 @@ public class GameUsdService { private List getGameDayDetailList(Long guildMemberId, String monthDate, Integer partitionId, ZonedDateTime nowZoneDateTime) { List resultList = new ArrayList<>(); + Map realMap = new HashMap<>(); List guildGameMonthList = gameDiamondStatDayService.getGuildGameMonthList(guildMemberId, monthDate); - if (CollectionUtils.isEmpty(guildGameMonthList)) { - return resultList; + if (CollectionUtils.isNotEmpty(guildGameMonthList)) { + TreeMap salaryMap = gameDiamondSalaryService.getDiamondSalaryMap(partitionId); + PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId); + + ZonedDateTime thirtyDaysAgoInZone = nowZoneDateTime.minusDays(30); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + guildGameMonthList.forEach(gameDiamondStatDay -> { + GuildGameDayDetailVo guildGameDayDetailVo = GuildGameDayDetailVo.builder() + .statDate(gameDiamondStatDay.getStatDate()) + .playGameNum(gameDiamondStatDay.getPlayGameNum()) + .daySalary(salaryMap.headMap(gameDiamondStatDay.getPlayGameNum(), true).lastEntry().getValue().getBaseSalary()) + .build(); + + LocalDate localDate = LocalDate.parse(gameDiamondStatDay.getStatDate(), formatter); + ZonedDateTime statTimeInZone = localDate.atStartOfDay(ZoneId.of(partitionEnum.getZoneId())); + boolean expire = statTimeInZone.isBefore(thirtyDaysAgoInZone); + if (nowZoneDateTime.format(DateTimeUtil.dateFormatter).equalsIgnoreCase(gameDiamondStatDay.getStatDate())) { + guildGameDayDetailVo.setReceiveStatus((byte) 4); + } else { + guildGameDayDetailVo.setReceiveStatus(expire ? 2 : gameDiamondStatDay.getReceiveStatus()); + } + realMap.put(gameDiamondStatDay.getStatDate(), guildGameDayDetailVo); + }); } - TreeMap salaryMap = gameDiamondSalaryService.getDiamondSalaryMap(partitionId); - PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId); - - ZonedDateTime thirtyDaysAgoInZone = nowZoneDateTime.minusDays(30); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - - guildGameMonthList.forEach(gameDiamondStatDay -> { - GuildGameDayDetailVo guildGameDayDetailVo = GuildGameDayDetailVo.builder() - .statDate(gameDiamondStatDay.getStatDate()) - .playGameNum(gameDiamondStatDay.getPlayGameNum()) - .daySalary(salaryMap.headMap(gameDiamondStatDay.getPlayGameNum(), true).lastEntry().getValue().getBaseSalary()) - .build(); - - LocalDate localDate = LocalDate.parse(gameDiamondStatDay.getStatDate(), formatter); - ZonedDateTime statTimeInZone = localDate.atStartOfDay(ZoneId.of(partitionEnum.getZoneId())); - boolean expire = statTimeInZone.isBefore(thirtyDaysAgoInZone); - if (nowZoneDateTime.format(DateTimeUtil.dateFormatter).equalsIgnoreCase(gameDiamondStatDay.getStatDate())) { - guildGameDayDetailVo.setReceiveStatus((byte) 4); - } else { - guildGameDayDetailVo.setReceiveStatus(expire ? 2 : gameDiamondStatDay.getReceiveStatus()); - } + Date monthBegin = DateUtil.parseDate(monthDate); + Date now = DateUtil.parseDate(nowZoneDateTime.format(DateTimeUtil.dateFormatter)); + Date monthEnd = DateUtil.beginOfDay(DateUtil.endOfMonth(monthBegin)); + if (monthEnd.after(now)) { + monthEnd = now; + } + while (monthEnd.after(monthBegin) || monthEnd.equals(monthBegin)){ + String date = DateUtil.formatDate(monthEnd); + GuildGameDayDetailVo guildGameDayDetailVo = realMap.getOrDefault(date, GuildGameDayDetailVo.builder() + .statDate(date) + .playGameNum(0) + .daySalary(BigDecimal.ZERO) + .receiveStatus((byte) 0) + .build()); resultList.add(guildGameDayDetailVo); - }); + monthEnd = DateUtil.offsetDay(monthEnd, -1); + } return resultList; }