diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java index 953aea10..12a23425 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java @@ -33,7 +33,6 @@ import com.hzs.common.domain.sale.ext.SaOrderExt; import com.hzs.common.domain.sale.order.SaOrder; import com.hzs.common.domain.system.config.BdAccount; import com.hzs.common.domain.system.config.BdAwards; -import com.hzs.common.domain.system.config.BdGrade; import com.hzs.common.domain.third.pay.TOnlinePayment; import com.hzs.common.util.TransactionUtils; import com.hzs.member.account.dto.BusinessCommissionDTO; @@ -600,7 +599,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { } // 处理推荐人等级 - handleParentLevel(saOrder, currentDateTime); + handleParentLevelCancel(saOrder, currentDateTime); // 删除会员区域 iCuMemberRetailRegionService.update(Wrappers.lambdaUpdate() .eq(CuMemberRetailRegion::getPkMember, saOrder.getPkMember()) @@ -876,14 +875,12 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { if (EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType()) { // 升级订单 - // 删除购买升级的升级记录 - iCuMemberLevelService.deleteCuMemberLevelRecord(saOrder.getPkId(), pkApprove, currentDateTime); - - // TODO 处理会员自己等级 + GradeDTO gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData(); + // 处理会员自己等级撤单 + gradeDTO = this.handleSelfCancel(gradeDTO, cuMember, saOrder, pkApprove, currentDateTime); // 如果会员等级非代理,则需要删除会员区域 - GradeDTO gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData(); if (gradeDTO.getGradeValue() != EGrade.REGION.getValue() && gradeDTO.getGradeValue() != EGrade.DIRECTOR.getValue()) { // 删除会员区域选择 @@ -912,8 +909,8 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { } } - // 处理推荐人等级 - this.handleParentLevel(saOrder, currentDateTime); + // 处理推荐人等级撤单 + this.handleParentLevelCancel(saOrder, currentDateTime); if (saOrder.getPayType().equals(EOrderPayType.WALLET.getValue())) { // 钱包支付,则需要回退金额 @@ -1529,7 +1526,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { } // 判断处理会员自己等级(下级有店主、代理,自己判断是否升级高级店主、董事代理) - this.handleSelfLevel(gradeDTO, cuMember, saOrder.getPayTime()); + this.handleSelfUpgrade(gradeDTO, cuMember, saOrder.getPayTime()); } // 更新会员信息 updateCuMember(cuMember); @@ -1594,7 +1591,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { } /** - * 判断推送MQ处理推荐人等级 + * 处理推荐人等级 * * @param cuMember */ @@ -1662,7 +1659,7 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { * @param cuMember 会员自己 * @param payTime 订单支付时间(升级记录时间) */ - private void handleSelfLevel(GradeDTO gradeDTO, CuMember cuMember, Date payTime) { + private void handleSelfUpgrade(GradeDTO gradeDTO, CuMember cuMember, Date payTime) { if (null == gradeDTO) { gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData(); } @@ -1686,12 +1683,73 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { } /** - * 处理推荐人等级 + * 处理自己等级撤单 + * + * @param gradeDTO + * @param cuMember + * @param saOrder + * @param pkApprove + * @param currentDateTime + * @return + */ + private GradeDTO handleSelfCancel(GradeDTO gradeDTO, CuMember cuMember, SaOrderExt saOrder, + Long pkApprove, Date currentDateTime) { + if (gradeDTO.getGradeValue() == EGrade.S_VIP.getValue() + || gradeDTO.getGradeValue() == EGrade.DIRECTOR.getValue()) { + // 会员等级为高级店主、董事代理,需要处理1+1逻辑 + // 查询会员所有升级列表 + List memberLevelList = iCuMemberLevelService.list(Wrappers.lambdaQuery() + .eq(CuMemberLevel::getPkMember, cuMember.getPkId()) + .orderByDesc(CuMemberLevel::getUpgradeTime) + ); + if (CollectionUtil.isNotEmpty(memberLevelList)) { + // 撤销的订单对应的升级记录 + Optional orderLevelOpt = memberLevelList.stream().filter( + tmpLevel -> tmpLevel.getPkOrder().equals(saOrder.getPkId()) + && tmpLevel.getUpType().equals(EUpgradeType.BUY_UPGRADE.getValue()) + ).findFirst(); + if (orderLevelOpt.isPresent()) { + // 订单存在对应升级记录 + List pkLevelList = new ArrayList<>(); + + CuMemberLevel orderLevel = orderLevelOpt.get(); + pkLevelList.add(orderLevel.getPkId()); + + Optional autoLevelOpt = memberLevelList.stream().filter( + tmpLevel -> tmpLevel.getPkMember().equals(cuMember.getPkId()) + && tmpLevel.getUpType().equals(EUpgradeType.AUTO_UPGRADE.getValue()) + && tmpLevel.getUpgradeTime().equals(orderLevel.getUpgradeTime()) + ).findFirst(); + autoLevelOpt.ifPresent(cuMemberLevel -> pkLevelList.add(cuMemberLevel.getPkId())); + + if (pkLevelList.size() > 0) { + iCuMemberLevelService.update(Wrappers.lambdaUpdate() + .in(CuMemberLevel::getPkId, pkLevelList) + .set(CuMemberLevel::getDelFlag, EDelFlag.DELETE.getValue()) + .set(CuMemberLevel::getPkModified, pkApprove) + .set(CuMemberLevel::getModifiedTime, currentDateTime) + ); + } + // 升级记录中去掉删除的,剩下最新的为最后的等级 + Optional lastLevelOpt = memberLevelList.stream() + .filter(tmpLevel -> !pkLevelList.contains(tmpLevel.getPkId())) + .max(Comparator.comparing(CuMemberLevel::getUpgradeTime)); + lastLevelOpt.ifPresent(cuMemberLevel -> cuMember.setPkSettleGrade(cuMemberLevel.getNewLevel())); + + gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData(); + } + } + } + return gradeDTO; + } + + /** + * 撤单处理推荐人等级 * * @param saOrder 升级订单 * @param currentDateTime 当前时间 */ - private void handleParentLevel(SaOrderExt saOrder, Date currentDateTime) { + private void handleParentLevelCancel(SaOrderExt saOrder, Date currentDateTime) { // 注册、升级订单,需要判断是否有推荐人升级的 if (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType() || EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType()) { @@ -1712,13 +1770,13 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { // 推荐人是高级店主,查询直推博羚店主以上订单 parentOrder = iCuMemberService.listRecommendVipOrder(parentMember.getPkId(), saOrder.getOrderCode(), EGrade.VIP.getValue()); } - this.handleParentLevelUpdate(parentOrder, parentLevel, parentMember, currentDateTime); + this.handleParentLevelCancelUpdate(parentOrder, parentLevel, parentMember, currentDateTime); } } } } - private void handleParentLevelUpdate(SaOrder parentOrder, CuMemberLevel parentLevel, CuMemberExt parentMember, Date currentDateTime) { + private void handleParentLevelCancelUpdate(SaOrder parentOrder, CuMemberLevel parentLevel, CuMemberExt parentMember, Date currentDateTime) { if (null != parentOrder) { // 存在其它博羚店主订单,重新处理升级记录 CuMemberLevel parentNewLevel = BeanUtil.copyProperties(parentLevel, CuMemberLevel.class); 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 df2f72c4..00bdaeaf 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 @@ -1998,16 +1998,17 @@ public class SaOrderServiceImpl extends ServiceImpl impl CuMemberLevel cuMemberLevel = iCuMemberDetailServiceApi.getLastUpgrade(cuMember.getPkId(), saOrderExt.getPkId(), null).getData(); if (null != cuMemberLevel) { cuMember.setPkSettleGrade(cuMemberLevel.getNewLevel()); + } else { + // 当前订单之前没有注册、升级订单,从空单注册cu_member_register中获取 + CuMemberRegister cuMemberRegister = iMemberServiceApi.queryCuMemberRegister(cuMember.getPkId()).getData(); + if (null == cuMemberRegister) { + throw new ServiceException("没有会员注册信息"); + } + cuMember.setPkRegisterGrade(cuMemberRegister.getPkRegisterGrade()); + cuMember.setPkSettleGrade(cuMemberRegister.getPkRegisterGrade()); + cuMember.setConsumeMoney(BigDecimal.ZERO); + cuMember.setConsumeAchieve(cuMemberRegister.getConsumeAchieve()); } - // 当前订单之前没有注册、升级订单,从空单注册cu_member_register中获取 - CuMemberRegister cuMemberRegister = iMemberServiceApi.queryCuMemberRegister(cuMember.getPkId()).getData(); - if (null == cuMemberRegister) { - throw new ServiceException("没有会员注册信息"); - } - cuMember.setPkRegisterGrade(cuMemberRegister.getPkRegisterGrade()); - cuMember.setPkSettleGrade(cuMemberRegister.getPkRegisterGrade()); - cuMember.setConsumeMoney(BigDecimal.ZERO); - cuMember.setConsumeAchieve(cuMemberRegister.getConsumeAchieve()); Date firstDate = baseMapper.getFirstPayTime(cuMember.getPkId()); if (null == firstDate) {