From 2b51c37be6c7f1ba630a2a5ef3036fb28a04fcbe Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Mon, 18 Aug 2025 22:53:59 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E4=BD=8D=E7=BD=AE=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=E6=8E=A8=E5=B9=BF=E8=90=A5=E9=94=80=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AdvertRoundServiceImpl.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java index db6f40790..b4860ba1e 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/AdvertRoundServiceImpl.java @@ -237,7 +237,7 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService { // 计算最新的间隔时间(如果为最新播放论,则展示第一轮正在播放时间与最后一天的差距) .setDurationDay(calculateDurationDay(tomorrow, advertRound.getEndTime(), Boolean.TRUE)); } - // 展示类型 为时间范围 则,修改价格并显示每一轮竞价状态 + // 展示类型 为时间范围 则,修改价格并显示每一轮竞价状态(位置枚举的价格是从另一个接口取的) if (Objects.equals(advertRound.getShowType(), AdShowType.TIME_RANGE.getValue())) { // 只有时间范围类型才显示起始价格 typeRoundResDTO.setStartPrice(advertRound.getStartPrice()); @@ -293,11 +293,21 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService { final LocalTime now = LocalTime.now(); // 当前时间 是否在 晚上22:00:00 到 晚上23:59:59之间 决定 biddingStatus 和 biddingTempStatus 用那一个字段 boolean tenClockAfter = now.isAfter(LocalTime.of(22, 0, 0)) && now.isBefore(LocalTime.of(23, 59, 59)); + final Date date = new Date(); List resList = advertRoundList.stream().map(advertRound -> { AdRoundTypeRoundBoughtResDTO bought = new AdRoundTypeRoundBoughtResDTO().setTypeId(advertRound.getTypeId()).setAdvertRoundId(advertRound.getId()) .setAdvertId(advertRound.getAdvertId()).setRoundId(advertRound.getRoundId()).setPosition(advertRound.getPosition()) .setStartPrice(advertRound.getStartPrice()).setPayPrice(advertRound.getPayPrice()).setStoreId(storeId) .setStartTime(advertRound.getStartTime()).setEndTime(advertRound.getEndTime()).setSymbol(advertRound.getSymbol()); + // 如果当前位置没有档口购买,且为第一轮 则需按照剩余时间比例进行减价 + if (ObjectUtils.isEmpty(advertRound.getStoreId()) && Objects.equals(advertRound.getRoundId(), AdRoundType.PLAY_ROUND.getValue())) { + Integer durationDay = calculateDurationDay(advertRound.getStartTime(), advertRound.getEndTime(), Boolean.TRUE); + // 根据当前日期与截止日期的占比修改推广价格 + BigDecimal numerator = BigDecimal.valueOf(calculateDurationDay(date, advertRound.getEndTime(), Boolean.FALSE)); + BigDecimal curStartPrice = numerator.multiply(advertRound.getStartPrice()) + .divide(BigDecimal.valueOf(durationDay), 0, RoundingMode.HALF_UP); + bought.setStartPrice(curStartPrice); + } // 当前档口购买的推广位置 if (Objects.equals(advertRound.getStoreId(), storeId)) { Integer biddingStatus = tenClockAfter ? advertRound.getBiddingTempStatus() : advertRound.getBiddingStatus(); @@ -308,7 +318,7 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService { }).collect(Collectors.toList()); // 档口未竞价成功的位置 List unBoughtPositionList = advertRoundList.stream().filter(x -> ObjectUtils.isNotEmpty(x.getStoreId()) && !Objects.equals(x.getStoreId(), storeId)) - .map(x -> x.getPosition()).collect(Collectors.toList()); + .map(AdvertRound::getPosition).collect(Collectors.toList()); if (CollectionUtils.isEmpty(unBoughtPositionList)) { return resList; } @@ -322,7 +332,8 @@ public class AdvertRoundServiceImpl implements IAdvertRoundService { return resList; } // 竞价失败的位置 - Map bindingFailMap = recordList.stream().collect(Collectors.toMap(x -> x.getAdvertRoundId(), x -> x.getBiddingStatus(), (s1, s2) -> s2)); + Map bindingFailMap = recordList.stream().collect(Collectors + .toMap(AdvertRoundRecord::getAdvertRoundId, AdvertRoundRecord::getBiddingStatus, (s1, s2) -> s2)); resList.forEach(x -> { Integer biddingStatus = bindingFailMap.get(x.getAdvertRoundId()); if (ObjectUtils.isNotEmpty(biddingStatus)) {