3
0
Fork 0

## 商品、订单、结算支支持盒数为小数;

This commit is contained in:
cabbage 2025-08-20 18:30:12 +08:00
parent b1e16744e2
commit 671d8f112a
21 changed files with 137 additions and 147 deletions

View File

@ -126,7 +126,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 配送收益配置
Map<Integer, CuMemberRetailRegion> regionMap = iMemberServiceApi.listEffectiveRegion(settleStartDate).getData();
// 直推复购级差收益
List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
// 复购配送收益
@ -147,14 +146,14 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
// 订单指定产品盒数计算等级使用
int boxNum = saOrderExt.getBoxNum();
BigDecimal boxNum = saOrderExt.getBoxNum();
// 个人累计消费pv
BigDecimal orderAchieve = saOrderExt.getOrderAchieve();
// 复购重消盒数业绩算个人累计数据盒数业绩
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum() + boxNum);
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum() + boxNum);
sourceMemberRangeExt.setMonthBoxNum(sourceMemberRangeExt.getMonthBoxNum() + boxNum);
sourceMemberRangeExt.setNewBoxNum(sourceMemberRangeExt.getNewBoxNum().add(boxNum));
sourceMemberRangeExt.setConsumeBoxNum(sourceMemberRangeExt.getConsumeBoxNum().add(boxNum));
sourceMemberRangeExt.setMonthBoxNum(sourceMemberRangeExt.getMonthBoxNum().add(boxNum));
sourceMemberRangeExt.setNewConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getNewConsumePv(), orderAchieve));
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getConsumePv(), orderAchieve));
sourceMemberRangeExt.setMonthConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getMonthConsumePv(), orderAchieve));
@ -169,7 +168,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 计算奖金 直推级差
if ((EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType())
&& boxNum > 0
&& boxNum.compareTo(BigDecimal.ZERO) > 0
) {
// 注册或升级订单并且存在盒数产品才有 直推级差
cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, period, saOrderExt, gradeIdMap));
@ -186,20 +185,22 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
}
// 订单存在自动升级记录高级店主处理
// 订单存在自动升级记录高级店主区域董事处理
if (autoLevelMap.containsKey(saOrderExt.getPkId())) {
CuMemberLevel cuMemberLevel = autoLevelMap.get(saOrderExt.getPkId());
if (gradeIdMap.containsKey(cuMemberLevel.getNewLevel())) {
BdGrade bdGrade = gradeIdMap.get(cuMemberLevel.getNewLevel());
CuMemberRetailRangeExt tmpMemberRetailRange = memberRangeExtMap.get(cuMemberLevel.getPkMember());
tmpMemberRetailRange.setPkGrade(bdGrade.getPkId());
tmpMemberRetailRange.setGradeValue(bdGrade.getGradeValue());
tmpMemberRetailRange.setGradeName(bdGrade.getGradeName());
if (bdGrade.getGradeValue() > tmpMemberRetailRange.getGradeValue()) {
tmpMemberRetailRange.setPkGrade(bdGrade.getPkId());
tmpMemberRetailRange.setGradeValue(bdGrade.getGradeValue());
tmpMemberRetailRange.setGradeName(bdGrade.getGradeName());
}
}
}
} else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 复购订单
if (boxNum > 0) {
if (boxNum.compareTo(BigDecimal.ZERO) > 0) {
// 存在盒数商品计算复购级差
cuMemberBonusRangeList.addAll(calculateRetailRepurRangeBonus(memberRangeExtMap, cuMemberBonusMap,
bonusConfigDTO, period, saOrderExt));
@ -234,7 +235,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
* 累计团队盒数业绩等
*/
public void calculateRetailRangeGradeAwards(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, SaOrderExt saOrderExt,
Integer boxNum, Map<Long, Date> activateMap) {
BigDecimal boxNum, Map<Long, Date> activateMap) {
// 订单会员
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
// 订单会员的推荐人
@ -261,9 +262,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamConsumePv(), orderAchieve));
targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), orderAchieve));
// 累计盒数
targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum() + boxNum);
targetMemberRangeExt.setTeamBoxNum(targetMemberRangeExt.getTeamBoxNum() + boxNum);
targetMemberRangeExt.setTeamMonthBoxNum(targetMemberRangeExt.getTeamMonthBoxNum() + boxNum);
targetMemberRangeExt.setTeamNewBoxNum(targetMemberRangeExt.getTeamNewBoxNum().add(boxNum));
targetMemberRangeExt.setTeamBoxNum(targetMemberRangeExt.getTeamBoxNum().add(boxNum));
targetMemberRangeExt.setTeamMonthBoxNum(targetMemberRangeExt.getTeamMonthBoxNum().add(boxNum));
}
targetMemberRangeExt = memberRangeExtMap.get(targetMemberRangeExt.getPkParent());
}
@ -281,9 +282,23 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
// 推荐人
long pkParent = sourceMemberRangeExt.getPkParent();
// 订单等级值
// 订单金额
BigDecimal orderAmount = saOrderExt.getOrderAmount();
// // TODO 累计升级此处订单可能没有等级值
// if (null != saOrderExt.getPkGrade()) {
// // 订单存在升级记录信息
// // 订单等级值
// Integer orderGradeValue = gradeIdMap.get(saOrderExt.getPkGrade()).getGradeValue();
// } else {
//
// }
Integer orderGradeValue = gradeIdMap.get(saOrderExt.getPkGrade()).getGradeValue();
// 前一个会员等级
int beforeGradeValue = 0;
// 前面累计奖金
@ -598,7 +613,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 推荐人
long pkParent = sourceMemberRangeExt.getPkParent();
// 商品盒数
BigDecimal boxNum = new BigDecimal(saOrderExt.getBoxNum());
BigDecimal boxNum = saOrderExt.getBoxNum();
// 2025.08.13 添加分公司级差收益每1盒4个产品第一分公司4元第二分公司4元公司6元总拨出14元
int branch = 0;

View File

@ -434,15 +434,15 @@
pk_country number(4) default 1 not null,
system_type NUMBER(2) default 2 not null,
pk_rate NUMBER(6),
new_box_num number(8) default 0 not null,
consume_box_num number(8) default 0 not null,
month_box_num number(8) default 0 not null,
new_box_num number(10,2) default 0 not null,
consume_box_num number(10,2) default 0 not null,
month_box_num number(10,2) default 0 not null,
new_consume_pv number(17,6) default 0 not null,
consume_pv number(17,6) default 0 not null,
month_consume_pv number(17,6) default 0 not null,
team_new_box_num number(8) default 0 not null,
team_box_num number(8) default 0 not null,
team_month_box_num number(8) default 0 not null,
team_new_box_num number(10,2) default 0 not null,
team_box_num number(10,2) default 0 not null,
team_month_box_num number(10,2) default 0 not null,
team_new_pv number(17,6) default 0 not null,
team_consume_pv number(17,6) default 0 not null,
team_month_pv number(17,6) default 0 not null,
@ -452,8 +452,8 @@
recommend_num number(8) default 0 not null,
team_num number(8) default 0 not null,
region_address number(8) default 0 not null,
big_box_num number(8) default 0 not null,
small_box_num number(8) default 0 not null,
big_box_num number(10,2) default 0 not null,
small_box_num number(10,2) default 0 not null,
big_team_pv number(17,6) default 0 not null,
small_team_pv number(17,6) default 0 not null
)

View File

@ -52,7 +52,7 @@ public class CuMemberRetailAchieveVO implements Serializable {
/**
* 盒数
*/
private Integer boxs;
private BigDecimal boxs;
/**
* 状态

View File

@ -9,11 +9,7 @@ import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @description: 伞下直推查询会员大小区金额业绩盒数
* @author: zhang jing
* @date: 2025/2/10 18:00
* @param:
* @return:
* 伞下直推查询会员大小区金额业绩盒数
**/
@AllArgsConstructor
@NoArgsConstructor
@ -36,71 +32,65 @@ public class DirectPushAmountPvBoxVo {
/**
* 盒数
*/
private Integer boxNum;
private BigDecimal boxNum;
/**
* 金额
*/
@BigDecimalFormat()
private BigDecimal orderAmountReg=BigDecimal.ZERO;
private BigDecimal orderAmountReg = BigDecimal.ZERO;
/**
* 金额
*/
@BigDecimalFormat()
private BigDecimal orderAmountUpg=BigDecimal.ZERO;
private BigDecimal orderAmountUpg = BigDecimal.ZERO;
/**
* 金额
*/
@BigDecimalFormat()
private BigDecimal orderAmountRep=BigDecimal.ZERO;
private BigDecimal orderAmountRep = BigDecimal.ZERO;
/**
* 金额
*/
@BigDecimalFormat()
private BigDecimal orderAmountCon=BigDecimal.ZERO;
private BigDecimal orderAmountCon = BigDecimal.ZERO;
/**
* 业绩
*/
@BigDecimalFormat()
private BigDecimal orderAchieveReg=BigDecimal.ZERO;
private BigDecimal orderAchieveReg = BigDecimal.ZERO;
/**
* 业绩
*/
@BigDecimalFormat()
private BigDecimal orderAchieveUpg=BigDecimal.ZERO;
private BigDecimal orderAchieveUpg = BigDecimal.ZERO;
/**
* 业绩
*/
@BigDecimalFormat()
private BigDecimal orderAchieveRep=BigDecimal.ZERO;
private BigDecimal orderAchieveRep = BigDecimal.ZERO;
/**
* 业绩
*/
@BigDecimalFormat()
private BigDecimal orderAchieveCon=BigDecimal.ZERO;
private BigDecimal orderAchieveCon = BigDecimal.ZERO;
/**
* 盒数
*/
private int boxNumReg;
private BigDecimal boxNumReg;
/**
* 盒数
*/
private int boxNumUpg;
private BigDecimal boxNumUpg;
/**
* 盒数
*/
private int boxNumRep;
private BigDecimal boxNumRep;
/**
* 盒数
*/
private int boxNumCon;
private BigDecimal boxNumCon;
}

View File

@ -38,23 +38,23 @@
TEAM_REP_AMOUNT NUMBER(17,6) default 0 not null,
TEAM_CON_AMOUNT NUMBER(17,6) default 0 not null,
SUM_BOX NUMBER(8) default 0,
BIG_BOX NUMBER(8) default 0,
SMALL_BOX NUMBER(8) default 0,
REG_BOX NUMBER(8) default 0,
UPG_BOX NUMBER(8) default 0,
REP_BOX NUMBER(8) default 0,
CON_BOX NUMBER(8) default 0,
INFLATE_BIG_BOX NUMBER(8) default 0,
INFLATE_SMALL_BOX NUMBER(8) default 0,
SUM_BOX NUMBER(10, 2) default 0,
BIG_BOX NUMBER(10, 2) default 0,
SMALL_BOX NUMBER(10, 2) default 0,
REG_BOX NUMBER(10, 2) default 0,
UPG_BOX NUMBER(10, 2) default 0,
REP_BOX NUMBER(10, 2) default 0,
CON_BOX NUMBER(10, 2) default 0,
INFLATE_BIG_BOX NUMBER(10, 2) default 0,
INFLATE_SMALL_BOX NUMBER(10, 2) default 0,
TEAM_SUM_BOX NUMBER(18) default 0,
TEAM_BIG_BOX NUMBER(18) default 0,
TEAM_SMALL_BOX NUMBER(8) default 0,
TEAM_REG_BOX NUMBER(18) default 0,
TEAM_UPG_BOX NUMBER(18) default 0,
TEAM_REP_BOX NUMBER(18) default 0,
TEAM_CON_BOX NUMBER(18) default 0,
TEAM_SUM_BOX NUMBER(18, 2) default 0,
TEAM_BIG_BOX NUMBER(18, 2) default 0,
TEAM_SMALL_BOX NUMBER(8, 2) default 0,
TEAM_REG_BOX NUMBER(18, 2) default 0,
TEAM_UPG_BOX NUMBER(18, 2) default 0,
TEAM_REP_BOX NUMBER(18, 2) default 0,
TEAM_CON_BOX NUMBER(18, 2) default 0,
SUM_PV NUMBER(17,6) default 0 not null,
BIG_PV NUMBER(17,6) default 0 not null,

View File

@ -273,7 +273,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
Map<Integer, List<SaOrderItems>> postageMap = new HashMap<>(ComputeUtil.mapInitCapacity(waresDetailExtList.size()));
// 当前盒数
int boxNum = 0;
BigDecimal boxNum = BigDecimal.ZERO;
// 设置已经累计盒数的商品列表
List<String> tmpBoxWares = new ArrayList<>();
@ -298,7 +298,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
if (boxWaresList.contains(waresDetailExt.getWaresCode())) {
// 商品是盒数商品需要累计数量
if (!tmpBoxWares.contains(waresDetailExt.getWaresCode())) {
boxNum += waresDetailExt.getBoxNum() * orderItems.getWaresQuantity();
boxNum = boxNum.add(waresDetailExt.getBoxNum().multiply(new BigDecimal(orderItems.getWaresQuantity())));
tmpBoxWares.add(waresDetailExt.getWaresCode());
}
}
@ -387,26 +387,6 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
}
}
/**
* 根据购买盒数返回商品价格
*
* @param boxNum 盒数
* @param gradeList 等级列表倒序排序
* @return
*/
private BigDecimal getWaresPrice(int boxNum, List<BdGrade> gradeList) {
// 去掉升级条件带有累计盒数的V4,V5并且升级购买合数小于等于订单商品盒数的再进行等级值倒序排序
gradeList = gradeList.stream().filter(tmpGrade -> tmpGrade.getBoxTotal() == 0 && tmpGrade.getBoxNumber() <= boxNum).sorted(Comparator.comparingInt(BdGrade::getGradeValue).reversed()).collect(Collectors.toList());
for (BdGrade bdGrade : gradeList) {
if (boxNum > bdGrade.getBoxNumber()) {
// 盒数大于等于购买盒数
return ERetailWaresPrice.getEnumByValue(bdGrade.getGradeValue()).getPrice();
}
}
return ERetailWaresPrice.V0.getPrice();
}
/**
* 封装订单信息
*
@ -871,7 +851,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrder.getOrderType())
) {
// 会员激活状态为空 未激活并且是 注册升级 订单判断会员是否激活
if (saOrder.getBoxNum() > 0) {
if (saOrder.getBoxNum().compareTo(BigDecimal.ZERO) > 0) {
// 存在指定盒数商品
cuMember.setIsActivate(EYesNo.YES.getIntValue());
if (EPayStatus.UNPAID.getValue() == cuMember.getPayStatus()) {

View File

@ -14,6 +14,7 @@ import com.hzs.sale.order.param.WaresOrderParam;
import com.hzs.sale.order.vo.WaresOrderVo;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -285,11 +286,11 @@ public interface SaOrderItemsMapper extends BaseMapper<SaOrderItems> {
* @param systemType 系统类型可为null
* @return
*/
int getRetailWaresQuantityNew(@Param("pkMember") Long pkMember,
@Param("waresCodeList") List<String> waresCodeList,
@Param("payTime") Date payTime,
@Param("orderTypeList") List<Integer> orderTypeList,
@Param("systemType") Integer systemType);
BigDecimal getRetailWaresQuantityNew(@Param("pkMember") Long pkMember,
@Param("waresCodeList") List<String> waresCodeList,
@Param("payTime") Date payTime,
@Param("orderTypeList") List<Integer> orderTypeList,
@Param("systemType") Integer systemType);
/**
* 订单发货数量

View File

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
@ -42,7 +43,7 @@ public class OrderItemsParam implements Serializable {
/**
* 商品盒数
*/
private Integer boxNum;
private BigDecimal boxNum;
/**
* 商品明细

View File

@ -14,6 +14,7 @@ import com.hzs.sale.order.param.WaresOrderParam;
import com.hzs.sale.order.vo.WaresOrderVo;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -249,7 +250,7 @@ public interface ISaOrderItemsService extends IService<SaOrderItems> {
* @param systemType 系统类型可为null
* @return
*/
int getRetailWaresQuantityNew(Long pkMember, List<String> waresCodeList, Date payTime, List<Integer> orderTypeList, Integer systemType);
BigDecimal getRetailWaresQuantityNew(Long pkMember, List<String> waresCodeList, Date payTime, List<Integer> orderTypeList, Integer systemType);
/**
* 订单发货数量

View File

@ -603,7 +603,7 @@ public interface ISaOrderService extends IService<SaOrder> {
* @param checkUpgrade 校验升级
* @return
*/
BdGrade getGradeByBox(final Integer boxTotal, List<BdGrade> gradeList, BdGrade memberGrade, boolean checkUpgrade);
BdGrade getGradeByBox(final BigDecimal boxTotal, List<BdGrade> gradeList, BdGrade memberGrade, boolean checkUpgrade);
/**
* 处理升级盒数基数
@ -615,7 +615,7 @@ public interface ISaOrderService extends IService<SaOrder> {
* @param systemType 所属系统
* @return
*/
int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, List<BdGrade> gradeList, List<String> boxProductList, Integer systemType);
BigDecimal handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, List<BdGrade> gradeList, List<String> boxProductList, Integer systemType);
/**
* 查询省区绑定次数

View File

@ -2286,7 +2286,7 @@ public class OrderBusinessServiceImpl implements IOrderBusinessService {
// 调换货物选择不同产品没有商品信息此处先全部按默认值来处理
// 2025.02.11 如果盒数商品历史商品ID不变非盒数商品进行处理
if (saOrder.getBoxNum() == 0) {
if (saOrder.getBoxNum().compareTo(BigDecimal.ZERO) == 0) {
saOrderItems.setPkWares(0);
}
saOrderItems.setPkWaresDetail(0);

View File

@ -20,6 +20,7 @@ import com.hzs.sale.order.vo.WaresOrderVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
/**
@ -191,7 +192,7 @@ public class SaOrderItemsServiceImpl extends ServiceImpl<SaOrderItemsMapper, SaO
}
@Override
public int getRetailWaresQuantityNew(Long pkMember, List<String> waresCodeList, Date payTime, List<Integer> orderTypeList, Integer systemType) {
public BigDecimal getRetailWaresQuantityNew(Long pkMember, List<String> waresCodeList, Date payTime, List<Integer> orderTypeList, Integer systemType) {
return baseMapper.getRetailWaresQuantityNew(pkMember, waresCodeList, payTime, orderTypeList, systemType);
}

View File

@ -2132,18 +2132,18 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
gradeList = iGradeServiceApi.getRetailGradeList().getData();
}
// 盒数
// 盒数
List<String> boxWaresList = BoxProductUtil.getBoxProductListBySystemType(systemType);
// 当前产品盒数
int boxNum = 0;
BigDecimal boxNum = BigDecimal.ZERO;
// 处理商品盒数
this.handleWaresBoxNum(specialArea, orderItemsParams);
// 判断订单明细中指定产品数量校验等级
for (OrderItemsParam orderItemsParam : orderItemsParams) {
if (boxWaresList.contains(orderItemsParam.getWaresCode())) {
// 存在指定商品需要累计盒数
boxNum += orderItemsParam.getBoxNum() * orderItemsParam.getQuantity();
boxNum = boxNum.add(orderItemsParam.getBoxNum().multiply(new BigDecimal(orderItemsParam.getQuantity())));
}
}
@ -2154,7 +2154,8 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
bdGrade = this.getGradeByBox(boxNum, gradeList, null, true);
} else if (ESpecialArea.RETAIL_UPGRADE.getValue() == specialArea) {
// 升级专区一次性补差升级
if (boxNum == 0) {
// 2025.08.20 升级方式改为累计升级制
if (boxNum.compareTo(BigDecimal.ZERO) == 0) {
// 不满足升级条件
throw new ServiceException("不满足升级条件");
}
@ -2167,9 +2168,14 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
}
// 获取升级盒数基数
int baseBoxNum = this.handleBaseBoxNum(updateGradeMember, memberGrade, gradeList, boxWaresList, systemType);
BigDecimal baseBoxNum = this.handleBaseBoxNum(updateGradeMember, memberGrade, gradeList, boxWaresList, systemType);
// 计算等级
bdGrade = this.getGradeByBox(boxNum + baseBoxNum, gradeList, memberGrade, true);
bdGrade = this.getGradeByBox(boxNum.add(baseBoxNum), gradeList, memberGrade, true);
// 2025.08.20 升级方式改为累计升级制
if (memberGrade.getGradeValue().equals(bdGrade.getGradeValue())) {
return bdGrade;
}
// 会员等级 大于等于 购买盒数等级则不充足升级条件
if (memberGrade.getGradeValue().compareTo(bdGrade.getGradeValue()) >= 0) {
@ -2180,18 +2186,18 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
}
@Override
public BdGrade getGradeByBox(final Integer boxTotal, List<BdGrade> gradeList, BdGrade memberGrade, boolean checkUpgrade) {
public BdGrade getGradeByBox(final BigDecimal boxTotal, List<BdGrade> gradeList, BdGrade memberGrade, boolean checkUpgrade) {
if (CollectionUtil.isEmpty(gradeList)) {
gradeList = iGradeServiceApi.getRetailGradeList().getData();
}
if (null == memberGrade) {
// 注册处理
// 小于总公司等级 并且 排除高级店主 并且 升级盒数小于购买盒数的最大一个等级为注册等级
// 小于总公司等级 并且 排除高级店主董事代理 并且 升级盒数小于购买盒数的最大一个等级为注册等级
return gradeList.stream()
.filter(tmpGrade -> tmpGrade.getGradeValue() != EGrade.S_VIP.getValue()
.filter(tmpGrade -> tmpGrade.getGradeValue() != EGrade.S_VIP.getValue() && tmpGrade.getGradeValue() != EGrade.DIRECTOR.getValue()
&& tmpGrade.getGradeValue() < EGrade.COMPANY.getValue()
&& tmpGrade.getBoxNumber() <= boxTotal)
&& tmpGrade.getBoxNumber().compareTo(boxTotal) <= 0)
.max(Comparator.comparingInt(BdGrade::getGradeValue)).get();
} else {
// 非注册处理
@ -2213,8 +2219,8 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
Optional<BdGrade> gradeOptional = gradeList.stream()
.filter(tmpGrade -> tmpGrade.getGradeValue() != EGrade.S_VIP.getValue() && tmpGrade.getGradeValue() > memberGrade.getGradeValue())
.sorted(Comparator.comparingInt(BdGrade::getGradeValue).reversed())
.filter(tmpGrade -> tmpGrade.getBoxNumber() != 0)
.filter(tmpGrade -> tmpGrade.getBoxNumber() <= boxTotal).findFirst();
.filter(tmpGrade -> tmpGrade.getBoxNumber().compareTo(BigDecimal.ZERO) > 0)
.filter(tmpGrade -> tmpGrade.getBoxNumber().compareTo(boxTotal) <= 0).findFirst();
return gradeOptional.orElse(memberGrade);
}
}
@ -2231,11 +2237,10 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
* @return
*/
@Override
public int handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade,
List<BdGrade> gradeList, List<String> boxWaresList,
public BigDecimal handleBaseBoxNum(CuMember cuMember, BdGrade memberGrade, List<BdGrade> gradeList, List<String> boxWaresList,
Integer systemType) {
// 升级盒数基数
int baseBoxNum = 0;
BigDecimal baseBoxNum = BigDecimal.ZERO;
// 会员所有升级记录
List<CuMemberLevel> memberLevelList = iCuMemberDetailServiceApi.getUpgradeList(cuMember.getPkId()).getData();
if (CollectionUtil.isNotEmpty(memberLevelList)) {
@ -2245,11 +2250,18 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
CuMemberLevel lastMemberLevel = lastManualOptional.get();
BdGrade lastUpdateGrade = gradeList.stream().filter(tmpGrade -> tmpGrade.getPkId().equals(lastMemberLevel.getNewLevel())).findFirst().get();
// 盒数基数 = 手动升级盒数 + 手动升级之后的升级订单盒数
baseBoxNum = lastUpdateGrade.getBoxNumber()
+ iSaOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxWaresList, lastMemberLevel.getUpgradeTime(), Collections.singletonList(EOrderType.RETAIL_UPGRADE.getValue()), systemType);
BigDecimal oldBoxNum = iSaOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxWaresList, lastMemberLevel.getUpgradeTime(), Collections.singletonList(EOrderType.RETAIL_UPGRADE.getValue()), systemType);
if (null != oldBoxNum) {
baseBoxNum = lastUpdateGrade.getBoxNumber().add(oldBoxNum);
} else {
baseBoxNum = lastUpdateGrade.getBoxNumber();
}
} else {
// 没有手动升级记录
baseBoxNum = iSaOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxWaresList, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue()), systemType);
BigDecimal oldBoxNum = iSaOrderItemsService.getRetailWaresQuantityNew(cuMember.getPkId(), boxWaresList, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue()), systemType);
if (null != oldBoxNum) {
baseBoxNum = oldBoxNum;
}
}
}
return baseBoxNum;

View File

@ -517,8 +517,7 @@ public class BdWaresController extends BaseController {
waresParams.setPkSpecialCurrency(waresExtend.getPkSpecialCurrency());
waresParams.setSortStatus(wares.getSortStatus());
waresParams.setSystemType(waresExtend.getSystemType());
waresParams.
setAreaIncome(wares.getAreaIncome());
waresParams.setAreaIncome(wares.getAreaIncome());
waresParams.setBoxNum(wares.getBoxNum());
BdAreaClassify parentAreaClassify = areaClassifyService.getAreaClassify(wares.getPkAreaClassify());

View File

@ -412,6 +412,6 @@ public class WaresParams implements Serializable {
/**
* 商品上传盒数
*/
private Integer boxNum;
private BigDecimal boxNum;
}

View File

@ -1160,15 +1160,9 @@
</select>
<!-- 查询新零售购买指定商品数量(新) -->
<select id="getRetailWaresQuantityNew" resultType="int">
select nvl(sum(soi.wares_quantity * bw.box_num), 0) wares_quantity
<select id="getRetailWaresQuantityNew" resultType="decimal">
select sum(so.box_num) wares_quantity
from sa_order so
left join sa_order_items soi
on soi.pk_order = so.pk_id
and soi.del_flag = 0
and soi.is_gift = 1
left join bd_wares bw
on bw.pk_id = soi.pk_wares
where so.del_flag = 0
and so.order_status = 1
and so.pk_member = #{pkMember}
@ -1179,10 +1173,6 @@
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
and bw.wares_code in
<foreach collection="waresCodeList" item="items" open="(" close=")" separator=",">
#{items}
</foreach>
<if test="payTime != null">
and so.pay_time > #{payTime}
</if>

View File

@ -117,17 +117,17 @@ public class CuMemberRetailRange extends BaseEntity {
* 本人当天新消费盒数
*/
@TableField("NEW_BOX_NUM")
private Integer newBoxNum;
private BigDecimal newBoxNum;
/**
* 本人累计消费盒数
*/
@TableField("CONSUME_BOX_NUM")
private Integer consumeBoxNum;
private BigDecimal consumeBoxNum;
/**
* 本人月累计盒数
*/
@TableField("MONTH_BOX_NUM")
private Integer monthBoxNum;
private BigDecimal monthBoxNum;
/**
* 本人当天新消费pv
@ -159,17 +159,17 @@ public class CuMemberRetailRange extends BaseEntity {
* 团队当天新增盒数
*/
@TableField("TEAM_NEW_BOX_NUM")
private Integer teamNewBoxNum;
private BigDecimal teamNewBoxNum;
/**
* 团队累计盒数
*/
@TableField("TEAM_BOX_NUM")
private Integer teamBoxNum;
private BigDecimal teamBoxNum;
/**
* 团队月累计盒数
*/
@TableField("TEAM_MONTH_BOX_NUM")
private Integer teamMonthBoxNum;
private BigDecimal teamMonthBoxNum;
/**
* 团队当天新增消费pv
@ -238,13 +238,13 @@ public class CuMemberRetailRange extends BaseEntity {
* 大区注水盒数
*/
@TableField("big_box_num")
private Integer bigBoxNum;
private BigDecimal bigBoxNum;
/**
* 小区注水盒数
*/
@TableField("small_box_num")
private Integer smallBoxNum;
private BigDecimal smallBoxNum;
@TableField("big_team_pv")
private BigDecimal bigTeamPv;

View File

@ -141,6 +141,6 @@ public class BdWaresDetailExt extends BdWaresDetail {
/**
* 商品上传盒数
*/
private Integer boxNum;
private BigDecimal boxNum;
}

View File

@ -224,6 +224,6 @@ public class SaOrder extends BaseEntity {
* 指定商品盒数
*/
@TableField("BOX_NUM")
private Integer boxNum;
private BigDecimal boxNum;
}

View File

@ -226,6 +226,6 @@ public class BdWares extends BaseEntity {
* 商品上传盒数
*/
@TableField("BOX_NUM")
private Integer boxNum;
private BigDecimal boxNum;
}

View File

@ -161,19 +161,19 @@ public class BdGrade extends BaseEntity {
* 购买盒数
*/
@TableField("BOX_NUMBER")
private Integer boxNumber;
private BigDecimal boxNumber;
/**
* 累计盒数
*/
@TableField("BOX_TOTAL")
private Integer boxTotal;
private BigDecimal boxTotal;
/**
* 小市场盒数
*/
@TableField("BOX_SMALL_TOTAL")
private Integer boxSmallTotal;
private BigDecimal boxSmallTotal;
/**
* 购买价格