From 78c9b8d038e36c7f54ec5b2eac6aea8012172460 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Wed, 11 Jun 2025 16:11:50 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E5=8D=87=E7=BA=A7=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=B8=80=E6=AC=A1=E6=80=A7=E8=A1=A5=E5=B7=AE?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SaOrderServiceImpl.java | 69 ++++++++++++------- .../mapper/sale/order/SaOrderItemsMapper.xml | 4 +- 2 files changed, 49 insertions(+), 24 deletions(-) diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java index b6632819..15b3741e 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java @@ -2638,7 +2638,7 @@ public class SaOrderServiceImpl extends ServiceImpl impl // 注册专区直接算等级 bdGrade = this.getGradeByBox(boxNum, gradeList, null, true); } else if (ESpecialArea.RETAIL_UPGRADE.getValue() == specialArea) { - // 升级专区取消,一次性补差升级 + // 升级专区,一次性补差升级 if (boxNum == 0) { // 不满足升级条件 throw new ServiceException("不满足升级条件"); @@ -2651,8 +2651,10 @@ public class SaOrderServiceImpl extends ServiceImpl impl throw new ServiceException("当前已经是可以购买的最高等级"); } + // 获取升级盒数基数 + int baseBoxNum = this.handleBaseBoxNum(updateGradeMember, memberGrade, gradeList, boxProductList, systemType); // 计算等级 - bdGrade = this.getGradeByBox(boxNum, gradeList, memberGrade, true); + bdGrade = this.getGradeByBox(boxNum + baseBoxNum, gradeList, memberGrade, true); // 会员等级 大于等于 购买盒数等级,则不充足升级条件 if (memberGrade.getGradeValue().compareTo(bdGrade.getGradeValue()) >= 0) { @@ -2703,7 +2705,7 @@ public class SaOrderServiceImpl extends ServiceImpl impl Optional gradeOptional = gradeList.stream().filter(tmpGrade -> tmpGrade.getGradeValue() > memberGrade.getGradeValue()) .sorted(Comparator.comparingInt(BdGrade::getGradeValue).reversed()) .filter(tmpGrade -> tmpGrade.getBoxNumber() != 0) - .filter(tmpGrade -> tmpGrade.getBoxNumber() - memberGrade.getBoxNumber() <= boxTotal).findFirst(); + .filter(tmpGrade -> tmpGrade.getBoxNumber() <= boxTotal).findFirst(); return gradeOptional.orElse(memberGrade); } } @@ -2715,7 +2717,7 @@ public class SaOrderServiceImpl extends ServiceImpl impl * @param cuMember 会员信息 * @param memberGrade 会员等级信息 * @param gradeList 等级列表 - * @param boxProductList 盒数商品商品 + * @param boxProductList 盒数商品列表 * @param systemType 所属系统 * @return */ @@ -2723,35 +2725,56 @@ public class SaOrderServiceImpl extends ServiceImpl impl public int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, List gradeList, List boxProductList, Integer systemType) { - // 获取今天开始时间 - Date todayDate = DateUtils.getStartTime(new Date()); - // 2025.03.18 调整需求,升级走当天累计,当天买的所有都进行积累,24点之后则重新累积(手动升级前后的盒数都算累计) + // 升级盒数基数 int baseBoxNum = 0; - - // 是否有升级记录 + // 会员所有升级记录 List memberLevelList = iCuMemberDetailServiceApi.getUpgradeList(cuMember.getPkId()).getData(); if (CollectionUtil.isNotEmpty(memberLevelList)) { - // 如果今天有手动升级记录,则以手动升级记录的盒数 + 今天购买的盒数做累计 - // 最新一次的手动升级记录 Optional lastManualOptional = memberLevelList.stream().filter(tmpGrade -> tmpGrade.getUpType().equals(EUpgradeType.MANUAL_UPGRADE.getValue())).findFirst(); - if (lastManualOptional.isPresent() && lastManualOptional.get().getUpgradeTime().compareTo(todayDate) >= 0) { - // 存在今天的手动升级记录 + if (lastManualOptional.isPresent()) { + // 最新一次的手动升级 CuMemberLevel lastMemberLevel = lastManualOptional.get(); BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().get(); - baseBoxNum = lastUpdateGrade.getBoxNumber(); + // 盒数基数 = 手动升级盒数 + 手动升级之后的升级订单盒数 + baseBoxNum = lastUpdateGrade.getBoxNumber() + + saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxProductList, lastMemberLevel.getUpgradeTime(), Collections.singletonList(EOrderType.RETAIL_UPGRADE.getValue()), systemType); } else { - // 如果今天没有手动升级记录,则以今天以前最后一条升级记录的盒数 + 今天购买的盒数做累计 - memberLevelList = memberLevelList.stream().filter(tmp -> tmp.getUpgradeTime().compareTo(todayDate) < 0).collect(Collectors.toList()); - if (CollectionUtil.isNotEmpty(memberLevelList)) { - CuMemberLevel lastMemberLevel = memberLevelList.get(0); - BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().get(); - baseBoxNum = lastUpdateGrade.getBoxNumber(); - } + // 没有手动升级记录 + saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxProductList, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue()), systemType); } } + return baseBoxNum; - return baseBoxNum + saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxProductList, todayDate, - Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()), systemType); + +// // 获取今天开始时间 +// Date todayDate = DateUtils.getStartTime(new Date()); +// // 2025.03.18 调整需求,升级走当天累计,当天买的所有都进行积累,24点之后则重新累积(手动升级前后的盒数都算累计) +// int baseBoxNum = 0; +// +// // 是否有升级记录 +// List memberLevelList = iCuMemberDetailServiceApi.getUpgradeList(cuMember.getPkId()).getData(); +// if (CollectionUtil.isNotEmpty(memberLevelList)) { +// // 如果今天有手动升级记录,则以手动升级记录的盒数 + 今天购买的盒数做累计 +// // 最新一次的手动升级记录 +// Optional lastManualOptional = memberLevelList.stream().filter(tmpGrade -> tmpGrade.getUpType().equals(EUpgradeType.MANUAL_UPGRADE.getValue())).findFirst(); +// if (lastManualOptional.isPresent() && lastManualOptional.get().getUpgradeTime().compareTo(todayDate) >= 0) { +// // 存在今天的手动升级记录 +// CuMemberLevel lastMemberLevel = lastManualOptional.get(); +// BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().get(); +// baseBoxNum = lastUpdateGrade.getBoxNumber(); +// } else { +// // 如果今天没有手动升级记录,则以今天以前最后一条升级记录的盒数 + 今天购买的盒数做累计 +// memberLevelList = memberLevelList.stream().filter(tmp -> tmp.getUpgradeTime().compareTo(todayDate) < 0).collect(Collectors.toList()); +// if (CollectionUtil.isNotEmpty(memberLevelList)) { +// CuMemberLevel lastMemberLevel = memberLevelList.get(0); +// BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().get(); +// baseBoxNum = lastUpdateGrade.getBoxNumber(); +// } +// } +// } +// +// return baseBoxNum + saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxProductList, todayDate, +// Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()), systemType); // // 是否当天购买(当天走累计升级,非当天走一次性补差) diff --git a/bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderItemsMapper.xml b/bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderItemsMapper.xml index 97ed422c..8f4f558e 100644 --- a/bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderItemsMapper.xml +++ b/bd-business/bd-business-sale/src/main/resources/mapper/sale/order/SaOrderItemsMapper.xml @@ -1183,7 +1183,9 @@ #{items} - and to_char(so.pay_time, 'yyyy-mm-dd') = to_char(#{payTime}, 'yyyy-mm-dd') + + and so.pay_time > #{payTime} +