## 计算等级处理;

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)
.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<BdGrade> gradeList = iGradeServiceApi.getRetailGradeList().getData();
// Map<String, BdAwards> 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) {
@ -723,9 +737,9 @@ public class ApiRetailOrderController {
@PostMapping("/fans-confirm-order")
public AjaxResult fansConfirmOrder(@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("已注册相同的手机号码,不允许重复注册!");
}
}

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.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<SaOrderItems> createSaOrderItems(RetailOrderParam orderParam, List<BdGrade> gradeList,
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()) {
// 注册升级订单计算会员等级
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<String> 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<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 orderItemsParams 订单参数列表
* @param cuMember 订单会员复购使用
* @param systemTyype 系统类型
* @param systemType 系统类型
* @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列表找到所有的商品信息
List<BdWaresDetailExt> bdWaresDetailExtList = new ArrayList<>();
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);
if (waresDetailExtList.size() > 0) {