From 4d22e81c1f0e8b816521e97851017807eacf7cee Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Mon, 27 Oct 2025 17:33:29 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E8=AE=A1=E7=AE=97=E7=AD=89=E7=BA=A7?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/ApiRetailOrderController.java | 34 +++++++++----- .../service/IRetailOrderService.java | 11 +++++ .../service/impl/RetailOrderServiceImpl.java | 45 +++++++++++++++---- 3 files changed, 72 insertions(+), 18 deletions(-) diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java index 0476a5de..072fb4da 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/api/ApiRetailOrderController.java @@ -104,14 +104,28 @@ public class ApiRetailOrderController { .isEnough(false) .build(); + Long pkMember = SecurityUtils.getUserId(); + if (ESpecialArea.RETAIL_REGISTER.getValue() == levelParam.getSpecialArea()) { // 注册订单 - levelParam.setUpgradeMember(iMemberServiceApi.getMember(SecurityUtils.getUserId()).getData()); + levelParam.setUpgradeMember(iMemberServiceApi.getMember(pkMember).getData()); + } else if (ESpecialArea.RETAIL_UPGRADE.getValue() == levelParam.getSpecialArea()) { + // 升级校验 + if (StringUtils.isEmpty(levelParam.getUpgradeMemberCode())) { + return AjaxResult.error("购买编号不能为空"); + } + + CuMember updateGradeMember = iMemberServiceApi.getRetailMember(null, levelParam.getUpgradeMemberCode()).getData(); + if (null == updateGradeMember) { + throw new ServiceException("购买编号不存在,请重试"); + } + levelParam.setUpgradeMember(updateGradeMember); } try { // 购物车中获取商品信息,获取等级 - BdGrade bdGrade = iSaOrderService.calculateGrade(); + BdGrade bdGrade = iRetailOrderService.calculateGrade(levelParam.getSpecialArea(), convertShoppingCarToSku(pkMember, levelParam.getShopList()), + null, levelParam.getUpgradeMember(), null); if (null != bdGrade) { orderLevelVO.setIsEnough(true); orderLevelVO.setPkGradeVal(bdGrade.getGradeName()); @@ -265,7 +279,7 @@ public class ApiRetailOrderController { .waresItemsParamList(itemsParamList) .build()); } - if(ObjectUtil.isEmpty(buyMember)){ + if (ObjectUtil.isEmpty(buyMember)) { buyMember = new CuMember(); List gradeList = iGradeServiceApi.getRetailGradeList().getData(); // Map awardsMap = iAwardsServiceApi.getAwards().getData(); @@ -293,9 +307,9 @@ public class ApiRetailOrderController { @PostMapping("/confirm-reg-order") public AjaxResult confirmRegisterOrder(@Valid @RequestBody RetailOrderRegisterParam registerParam, @RequestHeader("Source") Integer source) { - if(RetailConstants.LIMIT_TO_REG_PHONE_NUMBER){ + if (RetailConstants.LIMIT_TO_REG_PHONE_NUMBER) { Integer phoneCount = iMemberServiceApi.getMemberPhoneCount(registerParam.getPhone()).getData(); - if(phoneCount > 0){ + if (phoneCount > 0) { return AjaxResult.error("已注册相同的手机号码,不允许重复注册!"); } } @@ -424,7 +438,7 @@ public class ApiRetailOrderController { * @param source 数据来源 * @return */ -// @RepeatSubmit + @RepeatSubmit @PostMapping("/confirm-other-order") public AjaxResult confirmOtherOrder(@Valid @RequestBody RetailOrderOtherParam orderParam, @RequestHeader("Source") Integer source) { @@ -722,10 +736,10 @@ public class ApiRetailOrderController { @RepeatSubmit @PostMapping("/fans-confirm-order") public AjaxResult fansConfirmOrder(@RequestBody RetailOrderRegisterParam registerParam, - @RequestHeader("Source") Integer source) { - if(RetailConstants.LIMIT_TO_REG_PHONE_NUMBER){ + @RequestHeader("Source") Integer source) { + if (RetailConstants.LIMIT_TO_REG_PHONE_NUMBER) { Integer phoneCount = iMemberServiceApi.getMemberPhoneCount(registerParam.getPhone()).getData(); - if(phoneCount > 0){ + if (phoneCount > 0) { return AjaxResult.error("已注册相同的手机号码,不允许重复注册!"); } } @@ -835,7 +849,7 @@ public class ApiRetailOrderController { } return AjaxResult.success(RetailOrderVO.builder() .orderCode(orderCode) - .orderAmount(orderAmount) + .orderAmount(orderAmount) .build()); } return AjaxResult.error(str); diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/IRetailOrderService.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/IRetailOrderService.java index b7c2f958..284cb0b6 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/IRetailOrderService.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/IRetailOrderService.java @@ -10,8 +10,10 @@ import com.hzs.common.domain.system.config.BdGrade; import com.hzs.retail.sale.param.RetailOrderOtherParam; import com.hzs.retail.sale.param.RetailOrderParam; import com.hzs.retail.sale.param.RetailOrderRegisterParam; +import com.hzs.sale.order.param.OrderItemsParam; import com.hzs.system.base.dto.CurrencyDTO; +import java.math.BigDecimal; import java.util.List; /** @@ -59,6 +61,15 @@ public interface IRetailOrderService { List createSaOrderItems(RetailOrderParam orderParam, List gradeList, CuMember cuMember, SaOrderExt saOrderExt, CurrencyDTO currency); + /** + * 计算等级 + * + * @return 返回 null 则为不满足升级条件 + */ + BdGrade calculateGrade(Integer specialArea, List orderItemsParams, + List gradeList, CuMember updateGradeMember, BigDecimal orderAchieve); + + /** * 查询会员账户 * diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java index 028381e3..a10f579a 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/retail/sale/controller/service/impl/RetailOrderServiceImpl.java @@ -203,14 +203,15 @@ public class RetailOrderServiceImpl implements IRetailOrderService { if (ESpecialArea.RETAIL_REGISTER.getValue() == orderParam.getSpecialArea()) { // 注册、升级订单,计算会员等级 - BdGrade newGrade = iSaOrderService.calculateGrade(); + BdGrade newGrade = this.calculateGrade(orderParam.getSpecialArea(), orderParam.getOrderItemsParams(), + gradeList, cuMember, orderAchieve); if (null == newGrade) { throw new ServiceException("会员不满足升级条件"); } saOrderExt.setPkGrade(newGrade.getPkId()); // 会员信息 if (null != cuMember) { -// cuMember.setPkSettleGrade(newGrade.getPkId()); + cuMember.setPkSettleGrade(newGrade.getPkId()); cuMember.setPkAwards(newGrade.getPkAwards()); // if (null == cuMember.getPkAwards()) { // // 新会员没有奖衔,则进行赋值 @@ -259,9 +260,6 @@ public class RetailOrderServiceImpl implements IRetailOrderService { // 当前盒数 BigDecimal boxNum = BigDecimal.ZERO; - // 设置已经累计盒数的商品列表 - List tmpBoxWares = new ArrayList<>(); - // 遍历生成订单明细数据 for (BdWaresDetailExt waresDetailExt : waresDetailExtList) { // 订单明细 @@ -296,20 +294,51 @@ public class RetailOrderServiceImpl implements IRetailOrderService { return orderItemsList; } + @Override + public BdGrade calculateGrade(Integer specialArea, List orderItemsParams, List gradeList, + CuMember updateGradeMember, BigDecimal orderAchieve) { + // 需要计算等级,以及商品价格 + if (CollectionUtil.isEmpty(gradeList)) { + gradeList = iGradeServiceApi.getRetailGradeList().getData(); + } + + // 订单业绩 + if (null == orderAchieve) { + orderAchieve = BigDecimal.ZERO; + // 商品+产品明细 + List waresDetailExtList = getWaresDetailExtList(ESpecialArea.getRetailSpecialAreaValue(specialArea), orderItemsParams, updateGradeMember, null); + // 遍历生成订单明细数据 + for (BdWaresDetailExt waresDetailExt : waresDetailExtList) { + // 不是赠品,需要计算业绩 + if (EYesNo.NO.getIntValue() == waresDetailExt.getIsGift()) { + orderAchieve = ComputeUtil.computeAddMultiply(orderAchieve, waresDetailExt.getAchieve(), waresDetailExt.getQuantity() * waresDetailExt.getWaresQuantity()); + } + } + } + + List tmpGradeList = gradeList.stream().sorted(Comparator.comparingInt(BdGrade::getGradeValue).reversed()).collect(Collectors.toList()); + for (BdGrade tmpGrade : tmpGradeList) { + if (orderAchieve.compareTo(tmpGrade.getStartValue()) >= 0) { + return tmpGrade; + } + } + return null; + } + /** * 获取商品及产品详情 * * @param specialArea 所属专区 * @param orderItemsParams 订单参数列表 * @param cuMember 订单会员(复购使用) - * @param systemTyype 系统类型 + * @param systemType 系统类型 * @return */ - private List getWaresDetailExtList(Integer specialArea, List orderItemsParams, CuMember cuMember, Integer systemTyype) { + private List getWaresDetailExtList(Integer specialArea, List orderItemsParams, CuMember cuMember, Integer systemType) { // 商品编号 + sku列表找到所有的商品信息 List bdWaresDetailExtList = new ArrayList<>(); if (CollectionUtil.isNotEmpty(orderItemsParams)) { - List waresDetailExtList = iBdWaresDetailService.queryWaresDetailByCondition(specialArea, ETransportType.LAND.getValue(), orderItemsParams, systemTyype); + List waresDetailExtList = iBdWaresDetailService.queryWaresDetailByCondition(specialArea, ETransportType.LAND.getValue(), orderItemsParams, systemType); // 复购处理极差 setWaresRange(specialArea, waresDetailExtList, cuMember); if (waresDetailExtList.size() > 0) {