3
0
Fork 0

Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
sangelxiu1 2025-08-21 09:23:27 +08:00
commit 7f629705ab
28 changed files with 224 additions and 210 deletions

View File

@ -11,11 +11,7 @@ import java.math.BigDecimal;
import java.util.List;
/**
* @Description: 等级的dto
* @Author: sui q
* @Time: 2022/9/24 15:06
* @Classname: GradeDTO
* @PackageName: com.hzs.system.config.dto
* 等级的dto
*/
@Data
@Builder
@ -113,16 +109,16 @@ public class GradeDTO implements Serializable {
/**
* 购买盒数
*/
private Integer boxNumber;
private BigDecimal boxNumber;
/**
* 累计盒数
*/
private Integer boxTotal;
private BigDecimal boxTotal;
/**
* 小市场盒数
*/
private Integer boxSmallTotal;
private BigDecimal boxSmallTotal;
}

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());
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

@ -604,7 +604,7 @@ public interface CuMemberMapper extends BaseMapper<CuMember> {
*
* @return
*/
CuMember getShopkeeperMember(@Param("pkMember") Long pkMember);
CuMember getShopkeeperMember(@Param("pkMember") Long pkMember, @Param("gradeValue") Integer gradeValue);
/**
* 查询高级店主

View File

@ -873,7 +873,7 @@ public interface ICuMemberService extends IService<CuMember> {
*
* @return
*/
CuMember getShopkeeperMember(Long pkMember);
CuMember getShopkeeperMember(Long pkMember, Integer gradeValue);
/**
* 查询高级店主

View File

@ -918,7 +918,6 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
// 处理推荐人等级
this.handleParentLevel(saOrder, currentDateTime);
// 部分撤单 todo 发货后邮费不退未发货退邮费
if (saOrder.getPayType().equals(EOrderPayType.WALLET.getValue())) {
// 钱包支付则需要回退金额
// 部分撤单
@ -1606,9 +1605,9 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
if (null == gradeDTO) {
gradeDTO = iGradeServiceApi.getGrade(cuMember.getPkSettleGrade()).getData();
}
if (EGrade.VIP.getValue() == gradeDTO.getGradeValue()) {
// 会员等级 博羚店主推荐人如果也是博羚店主需要升级为高级店主
CuMember parentMember = iCuMemberService.getShopkeeperMember(cuMember.getPkParent());
if (gradeDTO.getGradeValue() >= EGrade.VIP.getValue()) {
// 会员等级大于等于 博羚店主推荐人如果也是博羚店主需要升级为高级店主
CuMember parentMember = iCuMemberService.getShopkeeperMember(cuMember.getPkParent(), EGrade.VIP.getValue());
if (null != parentMember) {
// 记录升级历史
GradeDTO upgradeDTO = iGradeServiceApi.getGradeByGradeValue(EGrade.S_VIP.getValue(), cuMember.getPkSettleCountry()).getData();
@ -1624,6 +1623,31 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
cuMemberLevel.setPkCreator(cuMember.getPkId());
iCuMemberLevelService.save(cuMemberLevel);
LambdaUpdateWrapper<CuMember> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(CuMember::getPkSettleGrade, upgradeDTO.getPkId());
updateWrapper.eq(CuMember::getPkId, parentMember.getPkId());
updateWrapper.set(CuMember::getPkModified, cuMember.getPkId());
updateWrapper.set(CuMember::getModifiedTime, new Date());
iCuMemberService.update(updateWrapper);
}
} else if (gradeDTO.getGradeValue() >= EGrade.REGION.getValue()) {
// 会员等级大于等于 区域代理推荐人如果也是区域代理需要升级为董事代理
CuMember parentMember = iCuMemberService.getShopkeeperMember(cuMember.getPkParent(), EGrade.REGION.getValue());
if (null != parentMember) {
// 记录升级历史
GradeDTO upgradeDTO = iGradeServiceApi.getGradeByGradeValue(EGrade.DIRECTOR.getValue(), cuMember.getPkSettleCountry()).getData();
CuMemberLevel cuMemberLevel = CuMemberLevel.builder()
.pkMember(parentMember.getPkId())
.upType(EUpgradeType.AUTO_UPGRADE.getValue())
.oldLevel(parentMember.getPkSettleGrade())
.newLevel(upgradeDTO.getPkId())
.upgradeTime(saOrder.getPayTime())
.pkOrder(saOrder.getPkId())
.build();
cuMemberLevel.setPkCountry(cuMember.getPkSettleCountry());
cuMemberLevel.setPkCreator(cuMember.getPkId());
iCuMemberLevelService.save(cuMemberLevel);
LambdaUpdateWrapper<CuMember> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(CuMember::getPkSettleGrade, upgradeDTO.getPkId());
updateWrapper.eq(CuMember::getPkId, parentMember.getPkId());

View File

@ -121,7 +121,7 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
@Autowired
private ICuSettleCountryDetailedService iCuSettleCountryDetailedService;
@Autowired
private ICuMemberBusinessService cuMemberBusinessService;
private ICuMemberBusinessService iCuMemberBusinessService;
@Autowired
private RabbitTemplate rabbitTemplate;
@ -2398,7 +2398,7 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
cuMember.setPkRegisterGrade(gradeDTO.getPkId());
cuMember.setPkSettleGrade(gradeDTO.getPkId());
cuMember.setPkAwards(gradeDTO.getPkAwards());
cuMemberBusinessService.saveShareMember(cuMember);
iCuMemberBusinessService.saveShareMember(cuMember);
return cuMember;
}
@ -3245,8 +3245,8 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
}
@Override
public CuMember getShopkeeperMember(Long pkMember) {
return baseMapper.getShopkeeperMember(pkMember);
public CuMember getShopkeeperMember(Long pkMember, Integer gradeValue) {
return baseMapper.getShopkeeperMember(pkMember, gradeValue);
}
@Override

View File

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

View File

@ -2379,7 +2379,7 @@
left join bd_grade bg
on bg.pk_id = cm.pk_settle_grade
where cm.pk_id = #{pkMember}
and bg.grade_value = 60
and bg.grade_value = #{gradeValue}
</select>
<!-- 查询高级店主 -->

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,7 +32,7 @@ public class DirectPushAmountPvBoxVo {
/**
* 盒数
*/
private Integer boxNum;
private BigDecimal boxNum;
/**
* 金额
@ -83,24 +79,18 @@ public class DirectPushAmountPvBoxVo {
/**
* 盒数
*/
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

@ -236,7 +236,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
}
}
// TODO 2025.08.04 注册升级专区下单支付会员如果是分公司订单不需要发货直接放入提货中心
// 2025.08.04 注册升级专区下单支付会员如果是分公司订单不需要发货直接放入提货中心
CuMember createMember = orderParam.getCreatorMember();
if (null == createMember) {
createMember = iMemberServiceApi.getMember(orderParam.getPkCreator()).getData();
@ -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()) {
@ -961,6 +941,7 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
if (EYesNo.NO.getIntValue() == BdConfig.getProductSync()) {
return;
}
try {
Map<Integer, BdProduct> productMap = iBdProductService.queryProductMap(saOrderExt.getOrderItemsList().stream().map(SaOrderItems::getPkProduct).collect(Collectors.toSet()), null);
// 开启线程调用全网产品库存
// 请求参数
@ -1004,6 +985,9 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
.build());
}
});
} catch (Exception e) {
log.error("同步产品异常: ", e);
}
}
}

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,7 +286,7 @@ public interface SaOrderItemsMapper extends BaseMapper<SaOrderItems> {
* @param systemType 系统类型可为null
* @return
*/
int getRetailWaresQuantityNew(@Param("pkMember") Long pkMember,
BigDecimal getRetailWaresQuantityNew(@Param("pkMember") Long pkMember,
@Param("waresCodeList") List<String> waresCodeList,
@Param("payTime") Date payTime,
@Param("orderTypeList") List<Integer> orderTypeList,

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

@ -12,7 +12,7 @@ import lombok.Getter;
public enum EUpgradeType {
/**
* 1=自动升级 -- 目前只高级店主升级为自动升级
* 1=自动升级 -- 高级店主升级为自动升级董事代理为自动升级
*/
AUTO_UPGRADE(1, "自动升级", 0, EnumsPrefixConstants.UPGRADE_TYPE + 1),

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;
/**
* 购买价格