## 升级方式改为一次性补差升级;

This commit is contained in:
cabbage 2025-06-11 16:11:50 +08:00
parent 5cedaa4f2e
commit 78c9b8d038
2 changed files with 49 additions and 24 deletions

View File

@ -2638,7 +2638,7 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
// 注册专区直接算等级 // 注册专区直接算等级
bdGrade = this.getGradeByBox(boxNum, gradeList, null, true); bdGrade = this.getGradeByBox(boxNum, gradeList, null, true);
} else if (ESpecialArea.RETAIL_UPGRADE.getValue() == specialArea) { } else if (ESpecialArea.RETAIL_UPGRADE.getValue() == specialArea) {
// 升级专区取消一次性补差升级 // 升级专区一次性补差升级
if (boxNum == 0) { if (boxNum == 0) {
// 不满足升级条件 // 不满足升级条件
throw new ServiceException("不满足升级条件"); throw new ServiceException("不满足升级条件");
@ -2651,8 +2651,10 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
throw new ServiceException("当前已经是可以购买的最高等级"); 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) { if (memberGrade.getGradeValue().compareTo(bdGrade.getGradeValue()) >= 0) {
@ -2703,7 +2705,7 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
Optional<BdGrade> gradeOptional = gradeList.stream().filter(tmpGrade -> tmpGrade.getGradeValue() > memberGrade.getGradeValue()) Optional<BdGrade> gradeOptional = gradeList.stream().filter(tmpGrade -> tmpGrade.getGradeValue() > memberGrade.getGradeValue())
.sorted(Comparator.comparingInt(BdGrade::getGradeValue).reversed()) .sorted(Comparator.comparingInt(BdGrade::getGradeValue).reversed())
.filter(tmpGrade -> tmpGrade.getBoxNumber() != 0) .filter(tmpGrade -> tmpGrade.getBoxNumber() != 0)
.filter(tmpGrade -> tmpGrade.getBoxNumber() - memberGrade.getBoxNumber() <= boxTotal).findFirst(); .filter(tmpGrade -> tmpGrade.getBoxNumber() <= boxTotal).findFirst();
return gradeOptional.orElse(memberGrade); return gradeOptional.orElse(memberGrade);
} }
} }
@ -2715,7 +2717,7 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
* @param cuMember 会员信息 * @param cuMember 会员信息
* @param memberGrade 会员等级信息 * @param memberGrade 会员等级信息
* @param gradeList 等级列表 * @param gradeList 等级列表
* @param boxProductList 盒数商品商品 * @param boxProductList 盒数商品列表
* @param systemType 所属系统 * @param systemType 所属系统
* @return * @return
*/ */
@ -2723,35 +2725,56 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
public int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, public int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade,
List<BdGrade> gradeList, List<String> boxProductList, List<BdGrade> gradeList, List<String> boxProductList,
Integer systemType) { Integer systemType) {
// 获取今天开始时间 // 升级盒数基数
Date todayDate = DateUtils.getStartTime(new Date());
// 2025.03.18 调整需求升级走当天累计当天买的所有都进行积累24点之后则重新累积手动升级前后的盒数都算累计
int baseBoxNum = 0; int baseBoxNum = 0;
// 会员所有升级记录
// 是否有升级记录
List<CuMemberLevel> memberLevelList = iCuMemberDetailServiceApi.getUpgradeList(cuMember.getPkId()).getData(); List<CuMemberLevel> memberLevelList = iCuMemberDetailServiceApi.getUpgradeList(cuMember.getPkId()).getData();
if (CollectionUtil.isNotEmpty(memberLevelList)) { if (CollectionUtil.isNotEmpty(memberLevelList)) {
// 如果今天有手动升级记录则以手动升级记录的盒数 + 今天购买的盒数做累计
// 最新一次的手动升级记录
Optional<CuMemberLevel> lastManualOptional = memberLevelList.stream().filter(tmpGrade -> tmpGrade.getUpType().equals(EUpgradeType.MANUAL_UPGRADE.getValue())).findFirst(); Optional<CuMemberLevel> 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(); CuMemberLevel lastMemberLevel = lastManualOptional.get();
BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().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 { } else {
// 如果今天没有手动升级记录则以今天以前最后一条升级记录的盒数 + 今天购买的盒数做累计 // 没有手动升级记录
memberLevelList = memberLevelList.stream().filter(tmp -> tmp.getUpgradeTime().compareTo(todayDate) < 0).collect(Collectors.toList()); saOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxProductList, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue()), systemType);
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;
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<CuMemberLevel> memberLevelList = iCuMemberDetailServiceApi.getUpgradeList(cuMember.getPkId()).getData();
// if (CollectionUtil.isNotEmpty(memberLevelList)) {
// // 如果今天有手动升级记录则以手动升级记录的盒数 + 今天购买的盒数做累计
// // 最新一次的手动升级记录
// Optional<CuMemberLevel> 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);
// // 是否当天购买当天走累计升级非当天走一次性补差 // // 是否当天购买当天走累计升级非当天走一次性补差

View File

@ -1183,7 +1183,9 @@
<foreach collection="waresCodeList" item="items" open="(" close=")" separator=","> <foreach collection="waresCodeList" item="items" open="(" close=")" separator=",">
#{items} #{items}
</foreach> </foreach>
and to_char(so.pay_time, 'yyyy-mm-dd') = to_char(#{payTime}, 'yyyy-mm-dd') <if test="payTime != null">
and so.pay_time > #{payTime}
</if>
</select> </select>
<!-- 订单发货数量 --> <!-- 订单发货数量 -->