## 计算等级处理;

This commit is contained in:
cabbage 2025-10-27 17:33:29 +08:00 committed by sangelxiu1
parent 5df6f78184
commit 4d22e81c1f
3 changed files with 72 additions and 18 deletions

View File

@ -104,14 +104,28 @@ public class ApiRetailOrderController {
.isEnough(false) .isEnough(false)
.build(); .build();
Long pkMember = SecurityUtils.getUserId();
if (ESpecialArea.RETAIL_REGISTER.getValue() == levelParam.getSpecialArea()) { 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 { try {
// 购物车中获取商品信息获取等级 // 购物车中获取商品信息获取等级
BdGrade bdGrade = iSaOrderService.calculateGrade(); BdGrade bdGrade = iRetailOrderService.calculateGrade(levelParam.getSpecialArea(), convertShoppingCarToSku(pkMember, levelParam.getShopList()),
null, levelParam.getUpgradeMember(), null);
if (null != bdGrade) { if (null != bdGrade) {
orderLevelVO.setIsEnough(true); orderLevelVO.setIsEnough(true);
orderLevelVO.setPkGradeVal(bdGrade.getGradeName()); orderLevelVO.setPkGradeVal(bdGrade.getGradeName());
@ -265,7 +279,7 @@ public class ApiRetailOrderController {
.waresItemsParamList(itemsParamList) .waresItemsParamList(itemsParamList)
.build()); .build());
} }
if(ObjectUtil.isEmpty(buyMember)){ if (ObjectUtil.isEmpty(buyMember)) {
buyMember = new CuMember(); buyMember = new CuMember();
List<BdGrade> gradeList = iGradeServiceApi.getRetailGradeList().getData(); List<BdGrade> gradeList = iGradeServiceApi.getRetailGradeList().getData();
// Map<String, BdAwards> awardsMap = iAwardsServiceApi.getAwards().getData(); // Map<String, BdAwards> awardsMap = iAwardsServiceApi.getAwards().getData();
@ -293,9 +307,9 @@ public class ApiRetailOrderController {
@PostMapping("/confirm-reg-order") @PostMapping("/confirm-reg-order")
public AjaxResult confirmRegisterOrder(@Valid @RequestBody RetailOrderRegisterParam registerParam, public AjaxResult confirmRegisterOrder(@Valid @RequestBody RetailOrderRegisterParam registerParam,
@RequestHeader("Source") Integer source) { @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(); Integer phoneCount = iMemberServiceApi.getMemberPhoneCount(registerParam.getPhone()).getData();
if(phoneCount > 0){ if (phoneCount > 0) {
return AjaxResult.error("已注册相同的手机号码,不允许重复注册!"); return AjaxResult.error("已注册相同的手机号码,不允许重复注册!");
} }
} }
@ -424,7 +438,7 @@ public class ApiRetailOrderController {
* @param source 数据来源 * @param source 数据来源
* @return * @return
*/ */
// @RepeatSubmit @RepeatSubmit
@PostMapping("/confirm-other-order") @PostMapping("/confirm-other-order")
public AjaxResult confirmOtherOrder(@Valid @RequestBody RetailOrderOtherParam orderParam, public AjaxResult confirmOtherOrder(@Valid @RequestBody RetailOrderOtherParam orderParam,
@RequestHeader("Source") Integer source) { @RequestHeader("Source") Integer source) {
@ -723,9 +737,9 @@ public class ApiRetailOrderController {
@PostMapping("/fans-confirm-order") @PostMapping("/fans-confirm-order")
public AjaxResult fansConfirmOrder(@RequestBody RetailOrderRegisterParam registerParam, public AjaxResult fansConfirmOrder(@RequestBody RetailOrderRegisterParam registerParam,
@RequestHeader("Source") Integer source) { @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(); Integer phoneCount = iMemberServiceApi.getMemberPhoneCount(registerParam.getPhone()).getData();
if(phoneCount > 0){ if (phoneCount > 0) {
return AjaxResult.error("已注册相同的手机号码,不允许重复注册!"); return AjaxResult.error("已注册相同的手机号码,不允许重复注册!");
} }
} }

View File

@ -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.RetailOrderOtherParam;
import com.hzs.retail.sale.param.RetailOrderParam; import com.hzs.retail.sale.param.RetailOrderParam;
import com.hzs.retail.sale.param.RetailOrderRegisterParam; import com.hzs.retail.sale.param.RetailOrderRegisterParam;
import com.hzs.sale.order.param.OrderItemsParam;
import com.hzs.system.base.dto.CurrencyDTO; import com.hzs.system.base.dto.CurrencyDTO;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@ -59,6 +61,15 @@ public interface IRetailOrderService {
List<SaOrderItems> createSaOrderItems(RetailOrderParam orderParam, List<BdGrade> gradeList, List<SaOrderItems> createSaOrderItems(RetailOrderParam orderParam, List<BdGrade> gradeList,
CuMember cuMember, SaOrderExt saOrderExt, CurrencyDTO currency); CuMember cuMember, SaOrderExt saOrderExt, CurrencyDTO currency);
/**
* 计算等级
*
* @return 返回 null 则为不满足升级条件
*/
BdGrade calculateGrade(Integer specialArea, List<OrderItemsParam> orderItemsParams,
List<BdGrade> gradeList, CuMember updateGradeMember, BigDecimal orderAchieve);
/** /**
* 查询会员账户 * 查询会员账户
* *

View File

@ -203,14 +203,15 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
if (ESpecialArea.RETAIL_REGISTER.getValue() == orderParam.getSpecialArea()) { 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) { if (null == newGrade) {
throw new ServiceException("会员不满足升级条件"); throw new ServiceException("会员不满足升级条件");
} }
saOrderExt.setPkGrade(newGrade.getPkId()); saOrderExt.setPkGrade(newGrade.getPkId());
// 会员信息 // 会员信息
if (null != cuMember) { if (null != cuMember) {
// cuMember.setPkSettleGrade(newGrade.getPkId()); cuMember.setPkSettleGrade(newGrade.getPkId());
cuMember.setPkAwards(newGrade.getPkAwards()); cuMember.setPkAwards(newGrade.getPkAwards());
// if (null == cuMember.getPkAwards()) { // if (null == cuMember.getPkAwards()) {
// // 新会员没有奖衔则进行赋值 // // 新会员没有奖衔则进行赋值
@ -259,9 +260,6 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
// 当前盒数 // 当前盒数
BigDecimal boxNum = BigDecimal.ZERO; BigDecimal boxNum = BigDecimal.ZERO;
// 设置已经累计盒数的商品列表
List<String> tmpBoxWares = new ArrayList<>();
// 遍历生成订单明细数据 // 遍历生成订单明细数据
for (BdWaresDetailExt waresDetailExt : waresDetailExtList) { for (BdWaresDetailExt waresDetailExt : waresDetailExtList) {
// 订单明细 // 订单明细
@ -296,20 +294,51 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
return orderItemsList; return orderItemsList;
} }
@Override
public BdGrade calculateGrade(Integer specialArea, List<OrderItemsParam> orderItemsParams, List<BdGrade> gradeList,
CuMember updateGradeMember, BigDecimal orderAchieve) {
// 需要计算等级以及商品价格
if (CollectionUtil.isEmpty(gradeList)) {
gradeList = iGradeServiceApi.getRetailGradeList().getData();
}
// 订单业绩
if (null == orderAchieve) {
orderAchieve = BigDecimal.ZERO;
// 商品+产品明细
List<BdWaresDetailExt> 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<BdGrade> 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 specialArea 所属专区
* @param orderItemsParams 订单参数列表 * @param orderItemsParams 订单参数列表
* @param cuMember 订单会员复购使用 * @param cuMember 订单会员复购使用
* @param systemTyype 系统类型 * @param systemType 系统类型
* @return * @return
*/ */
private List<BdWaresDetailExt> getWaresDetailExtList(Integer specialArea, List<OrderItemsParam> orderItemsParams, CuMember cuMember, Integer systemTyype) { private List<BdWaresDetailExt> getWaresDetailExtList(Integer specialArea, List<OrderItemsParam> orderItemsParams, CuMember cuMember, Integer systemType) {
// 商品编号 + sku列表找到所有的商品信息 // 商品编号 + sku列表找到所有的商品信息
List<BdWaresDetailExt> bdWaresDetailExtList = new ArrayList<>(); List<BdWaresDetailExt> bdWaresDetailExtList = new ArrayList<>();
if (CollectionUtil.isNotEmpty(orderItemsParams)) { if (CollectionUtil.isNotEmpty(orderItemsParams)) {
List<BdWaresDetailExt> waresDetailExtList = iBdWaresDetailService.queryWaresDetailByCondition(specialArea, ETransportType.LAND.getValue(), orderItemsParams, systemTyype); List<BdWaresDetailExt> waresDetailExtList = iBdWaresDetailService.queryWaresDetailByCondition(specialArea, ETransportType.LAND.getValue(), orderItemsParams, systemType);
// 复购处理极差 // 复购处理极差
setWaresRange(specialArea, waresDetailExtList, cuMember); setWaresRange(specialArea, waresDetailExtList, cuMember);
if (waresDetailExtList.size() > 0) { if (waresDetailExtList.size() > 0) {