## 特殊体系复购级差奖项;

This commit is contained in:
cabbage 2025-07-09 11:18:07 +08:00
parent e8d9cab955
commit 0dbc58f58b
48 changed files with 684 additions and 414 deletions

View File

@ -44,7 +44,7 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
for (SaOrderExt saOrderExt : saOrderExtList) {
orderIdSet.add(saOrderExt.getPkMember());
}
List<List<?>> cutOrderList = cuMemberBonusSettle.handleCutList(orderIdSet, MagicNumberConstants.DELETE_DATA_BATCH_UPDATE_NUM);
List<List<?>> cutOrderList = cuMemberBonusSettle.handleCutList(orderIdSet, MagicNumberConstants.BATCH_QUERY_NUM);
cutOrderList.forEach(orderList -> {
List<CuMemberRetailRangeExt> rangeExtList = baseMapper.queryCuMemberRetailRangeParent(tableName, orderList);
if (rangeExtList.size() > 0) {

View File

@ -0,0 +1,11 @@
package com.hzs.bonus.base.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.vertex.BdVertexBonus;
/**
* 体系奖金配置记录哪个体系走特殊奖金 Mapper 接口
*/
public interface BdVertexBonusMapper extends BaseMapper<BdVertexBonus> {
}

View File

@ -5,6 +5,7 @@ import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.detail.CuMemberAwards;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.vertex.BdVertexBonus;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
@ -44,8 +45,8 @@ public interface CuMemberMapper extends BaseMapper<CuMember> {
* @param cuMemberAwardsList 修改奖衔的会员
*/
int updateCuMemberRetailRangeByList(@Param("cuMemberAwardsList") List<CuMemberAwards> cuMemberAwardsList,
@Param("period") Integer period,
@Param("awardType") Integer awardType);
@Param("period") Integer period,
@Param("awardType") Integer awardType);
/**
* 更新会员奖衔根据临时表
@ -94,4 +95,12 @@ public interface CuMemberMapper extends BaseMapper<CuMember> {
*/
List<CuMember> queryCuMemberShareTotal(Integer pkCountry);
/**
* 查询体系奖项列表
*
* @param pkMember
* @return
*/
List<BdVertexBonus> listVertexBonus(@Param("pkMember") Long pkMember);
}

View File

@ -0,0 +1,21 @@
package com.hzs.bonus.base.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.vertex.BdVertexBonus;
import java.util.List;
import java.util.Map;
/**
* 体系奖金配置记录哪个体系走特殊奖金 服务类
*/
public interface IBdVertexBonusService extends IService<BdVertexBonus> {
/**
* 查询体系奖金map
*
* @return
*/
Map<Long, List<Integer>> queryVertexBonus();
}

View File

@ -5,6 +5,7 @@ import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.detail.CuMemberAwards;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.vertex.BdVertexBonus;
import java.util.Date;
import java.util.List;
@ -82,4 +83,13 @@ public interface ICuMemberService extends IService<CuMember> {
* 查询可以获得分红的会员人数
*/
List<CuMember> queryCuMemberShareTotal(Integer pkCountry);
/**
* 查询体系奖项列表
*
* @param pkMember
* @return
*/
List<BdVertexBonus> listVertexBonus(Long pkMember);
}

View File

@ -0,0 +1,41 @@
package com.hzs.bonus.base.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.base.mapper.BdVertexBonusMapper;
import com.hzs.bonus.base.service.IBdVertexBonusService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.domain.vertex.BdVertexBonus;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 体系奖金配置记录哪个体系走特殊奖金 服务实现类
*/
@Service
public class BdVertexBonusServiceImpl extends ServiceImpl<BdVertexBonusMapper, BdVertexBonus> implements IBdVertexBonusService {
@Override
public Map<Long, List<Integer>> queryVertexBonus() {
HashMap<Long, List<Integer>> resultMap = new HashMap<>();
List<BdVertexBonus> vertexBonusList = this.list();
if (CollectionUtil.isNotEmpty(vertexBonusList)) {
for (BdVertexBonus bdVertexBonus : vertexBonusList) {
if (resultMap.containsKey(bdVertexBonus.getPkVertex())) {
resultMap.get(bdVertexBonus.getPkVertex()).add(bdVertexBonus.getBonusItems());
} else {
List<Integer> tmpList = new ArrayList<>();
tmpList.add(bdVertexBonus.getBonusItems());
resultMap.put(bdVertexBonus.getPkVertex(), tmpList);
}
}
}
return resultMap;
}
}

View File

@ -9,6 +9,7 @@ import com.hzs.common.domain.member.detail.CuMemberAwards;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.bonus.base.mapper.CuMemberMapper;
import com.hzs.common.domain.vertex.BdVertexBonus;
import org.springframework.stereotype.Service;
import java.util.*;
@ -87,4 +88,8 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
return baseMapper.queryCuMemberShareTotal(pkCountry);
}
@Override
public List<BdVertexBonus> listVertexBonus(Long pkMember) {
return baseMapper.listVertexBonus(pkMember);
}
}

View File

@ -2,15 +2,18 @@ package com.hzs.bonus.bonus.controller.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.param.BonusParam;
import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.vo.*;
import com.hzs.common.core.enums.EBonusItems;
import com.hzs.common.core.enums.EGrantStatus;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.member.ext.CuMemberBonusExt;
import com.hzs.common.domain.vertex.BdVertexBonus;
import com.hzs.common.security.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -21,10 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
@RestController
@RequestMapping("/api/bonus")
@ -33,6 +33,8 @@ public class ApiCuMemberBonusController extends BaseController {
@Autowired
private ICuMemberBonusService iCuMemberBonusService;
@Autowired
private ICuMemberService iCuMemberService;
/**
* 新零售实时奖金查询会员实时奖金当日的奖金
@ -45,6 +47,9 @@ public class ApiCuMemberBonusController extends BaseController {
bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.currentDate()));
bonusParam.setGrantStatus(EGrantStatus.SETTLED.getValue());
// 控制复购级差收益的返回
final boolean rangeIncomeFlag = this.checkRangeIncome();
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberSecondBonusVoByCondition(bonusParam);
List<MemberBonusVO> memberBonusVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
@ -52,10 +57,17 @@ public class ApiCuMemberBonusController extends BaseController {
MemberBonusVO memberBonusVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusVO.class, "settleDate");
memberBonusVO.setServiceSpend(BigDecimal.ZERO);
memberBonusVO.setSettleDate(DateUtils.currentDate());
BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(cuMemberBonus.getRetailRangeIncome(), cuMemberBonus.getRetailSameLevelIncome(),
cuMemberBonus.getRetailAreaIncome()),
cuMemberBonus.getRetailRealSubtotal());
BigDecimal serviceSpend = ComputeUtil.computeSubtract(
ComputeUtil.computeAddNum(cuMemberBonus.getRetailRangeIncome(), cuMemberBonus.getRetailSameLevelIncome(),
cuMemberBonus.getRetailAreaIncome()), cuMemberBonus.getRetailRealSubtotal()
);
memberBonusVO.setBackPoints(serviceSpend);
if (!rangeIncomeFlag) {
// 没有复购级差
memberBonusVO.setRepurRangeIncome(null);
}
memberBonusVOList.add(memberBonusVO);
}
});
@ -63,7 +75,7 @@ public class ApiCuMemberBonusController extends BaseController {
}
/**
* 新零售实时奖金查询会员奖金列表
* 新零售日结奖金查询会员奖金列表
*/
@PostMapping("/query-bonus-first")
public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam) {
@ -71,17 +83,24 @@ public class ApiCuMemberBonusController extends BaseController {
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
// 控制复购级差收益的返回
final boolean rangeIncomeFlag = this.checkRangeIncome();
List<MemberBonusFirstPurchaseVO> firstPurchaseVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
MemberBonusFirstPurchaseVO memberBonusFirstPurchaseVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusFirstPurchaseVO.class, "settleDate");
packageSettleDate(cuMemberBonus, memberBonusFirstPurchaseVO);
if (!rangeIncomeFlag) {
// 没有复购级差
memberBonusFirstPurchaseVO.setRepurRangeIncome(null);
}
firstPurchaseVOList.add(memberBonusFirstPurchaseVO);
});
return getDataTable(firstPurchaseVOList);
}
/**
* 新零售实时奖金查询会员昨日奖金汇总
* 新零售日结奖金查询会员昨日奖金汇总
*/
@PostMapping("/query-bonus-total")
public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam) {
@ -158,8 +177,24 @@ public class ApiCuMemberBonusController extends BaseController {
public TableDataInfo listBonusSource(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
startPage();
TableDataInfo tableDataInfo = iCuMemberBonusService.queryMemberBonusDetailVoByCondition(bonusParam);
return tableDataInfo;
return iCuMemberBonusService.queryMemberBonusDetailVoByCondition(bonusParam);
}
/**
* 校验是否有复购级差
*
* @return
*/
private boolean checkRangeIncome() {
List<BdVertexBonus> vertexBonusList = iCuMemberService.listVertexBonus(SecurityUtils.getUserId());
if (CollectionUtil.isNotEmpty(vertexBonusList)) {
for (BdVertexBonus bdVertexBonus : vertexBonusList) {
if (EBonusItems.REPURCHASE_RANGE_INCOME.getValue() == bdVertexBonus.getBonusItems()) {
return true;
}
}
}
return false;
}
}

View File

@ -104,11 +104,7 @@ public class CuMemberBonusController extends BaseController {
private List<BonusTotalVO> getBonusTotalVoS(List<CuMemberBonusExt> cuMemberBonusList) {
List<BonusTotalVO> totalVoList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
BonusTotalVO bonusTotalVO = BeanUtil.copyProperties(cuMemberBonus, BonusTotalVO.class);
for (String key : CuMemberBonusVO.INCOME_ARRAY) {
ReflectUtils.invokeSetter(bonusTotalVO, key + BonusFieldConstants.INCOME_SUFFIX, ComputeUtil.computeMultiply(ReflectUtils.invokeGetter(cuMemberBonus, key), cuMemberBonus.getOutExchangeRate()));
}
totalVoList.add(bonusTotalVO);
totalVoList.add(BeanUtil.copyProperties(cuMemberBonus, BonusTotalVO.class));
});
return totalVoList;
}

View File

@ -179,14 +179,9 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
// 奖金币首购+复购+云代+海粉+嗨粉+店铺
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRealIncomeTotal(), currencyDTO.getOutExchangeRate()), settleDate);
// 重销币商城重消+平台服务费
// BigDecimal repeat = ComputeUtil.computeAdd(cuMemberBonus.getBackPoints(), cuMemberBonus.getServiceSpend());
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPEAT.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getBackPoints(), currencyDTO.getOutExchangeRate()), settleDate);
// 复购券
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPURCHASE.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRepurCouponSubtotal(), currencyDTO.getOutExchangeRate()), settleDate);
// 环球积分
// packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.GLOBAL_POINTS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getGlobalPoints(), currencyDTO.getOutExchangeRate()), settleDate);
// 车奖积分
// packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.CAR_AWARD_POINTS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getCarAwardPoints(), currencyDTO.getOutExchangeRate()), settleDate);
});
List<Long> seqList = iCuMemberTradeService.batchQueryCuMemberTradeSeq(cuMemberTradeList.size());
// 新增流水明细,记录奖金明细的发放状态消费明细
@ -241,7 +236,6 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
// 奖金币首购+复购+云代+海粉+嗨粉+店铺
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRealIncomeTotal(), currencyDTO.getOutExchangeRate()), settleDate);
// 重销币商城重消+平台服务费
// BigDecimal repeat = ComputeUtil.computeAdd(cuMemberBonus.getBackPoints(), cuMemberBonus.getServiceSpend());
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPEAT.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getBackPoints(), currencyDTO.getOutExchangeRate()), settleDate);
// 复购券
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPURCHASE.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRepurCouponSubtotal(), currencyDTO.getOutExchangeRate()), settleDate);

View File

@ -143,6 +143,23 @@ public abstract class BonusSettleHandle {
cuMemberBonusRange.setRemark(remark);
}
/**
* 获得 复购极差收益 备注
*
* @param saOrderExt 订单编号
* @param cuMemberBonusRange 报单服务费
* @param sourceMemberRangeExt 提供奖金的人
* @param targetMemberRangeExt 获得奖金的人
*/
protected void rangeRepurchaseRetailRemark(SaOrder saOrderExt, CuMemberBonusRange cuMemberBonusRange, CuMemberRetailRangeExt sourceMemberRangeExt,
CuMemberRetailRangeExt targetMemberRangeExt) {
String remark = String.format(BonusMsgConstants.RETAIL_REPURCHASE_INCOME, saOrderExt.getOrderCode(),
sourceMemberRangeExt.getMemberCode() + sourceMemberRangeExt.getMemberName(),
targetMemberRangeExt.getMemberCode() + targetMemberRangeExt.getMemberName(),
cuMemberBonusRange.getCalAchieve(), targetMemberRangeExt.getGradeName());
cuMemberBonusRange.setRemark(remark);
}
protected CuMemberBonus getCuMemberBonus(Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
Long pkMember, Integer incomeStatus, Integer pkCountry, Integer pkRate) {
if (cuMemberBonusMap.containsKey(pkMember)) {

View File

@ -3,6 +3,7 @@ package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.base.service.IBdVertexBonusService;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.detail.service.ICuMemberAwardsService;
@ -20,13 +21,12 @@ import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.bonus.*;
import com.hzs.common.domain.member.detail.CuMemberAwards;
import com.hzs.common.domain.member.detail.CuMemberGrade;
import com.hzs.common.domain.member.detail.CuMemberLevel;
import com.hzs.common.domain.member.detail.CuMemberServiceLog;
import com.hzs.common.domain.member.detail.*;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.sale.ext.SaOrderWaresExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.sale.wares.ext.WaresRangeTmp;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.member.detail.ICuMemberServiceLogServiceApi;
@ -59,6 +59,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
private ICuMemberService iCuMemberService;
@Autowired
private IBonusOrderService iBonusOrderService;
@Autowired
private IBdVertexBonusService iBdVertexBonusService;
@DubboReference
ICuMemberServiceLogServiceApi iCuMemberServiceLogServiceApi;
@ -110,6 +112,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 当期的手动激活的记录列表
Map<Long, Date> activateMap = this.getActivateMap(saOrderExt.getPayTime());
// 查询体系奖项配置
Map<Long, List<Integer>> vertexBonusMap = iBdVertexBonusService.queryVertexBonus();
// 计算自消费奖衔
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
@ -176,8 +180,18 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
cuMemberBonusDetailList.add(cuMemberBonusDetail);
}
// TODO 2025.07.04 部分体系单独奖项处理
if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 复购订单级差数据map(key:订单IDvalue:订单明细+级差)
Map<Long, List<SaOrderItemsExt>> rangeOrderMap = iBonusOrderService.getWaresRange(Collections.singletonList(saOrderExt));
// 复购订单
cuMemberBonusRangeList.addAll(this.calculateRepurchaseRangeBonus(saOrderExt, memberRangeExtMap, vertexBonusMap, rangeOrderMap,
bonusConfigDTO, currentPeriod, cuMemberBonusMap));
}
// 回退会员等级
iCuMemberGradeService.updateCuMemberGrade(secondRangeTableName, saOrderExt.getPkId());
if (cuMemberGradeList.size() > 0) {
// 插入会员等级升级记录
iCuMemberGradeService.insertCuMemberGrade(cuMemberGradeList);
@ -423,18 +437,25 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
* 计算新零售团队的奖金极差平级福利福利分红区域
*/
void calculateRetailBonusByDay(String settleDate, Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO, BonusRecordDetailVO bonusRecordDetailVO,
Integer period, Integer yesterdayPeriod, Boolean isSameMonth) {
Integer period, Integer yesterdayPeriod, Boolean isSameMonth, Map<Long, List<Integer>> vertexBonusMap) {
// 结算期间日期
Date settleStartDate = DateUtils.parseStringToDate(settleDate);
// 结算期间日期后一天
Date settleEndDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleStartDate);
// 所有有效订单列表
List<SaOrderExt> retailOrderList = new ArrayList<>();
// 复购订单列表
List<SaOrderExt> repurchaseOrderList = new ArrayList<>();
// 新零售订单
List<SaOrderExt> orderList = iBonusOrderService.queryRetailSaOrderByDay(settleStartDate, settleEndDate, null);
for (SaOrderExt saOrderExt : orderList) {
if (saOrderExt.getDelFlag() == EYesNo.YES.getIntValue()) {
retailOrderList.add(saOrderExt);
if (EOrderType.REPURCHASE_ORDER.getValue() == saOrderExt.getOrderType()) {
// 复购订单
repurchaseOrderList.add(saOrderExt);
}
}
}
@ -458,6 +479,12 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
Map<Long, Date> activateMap = this.getActivateMap(settleStartDate);
if (retailOrderList.size() > 0) {
// 复购订单级差数据map(key:订单IDvalue:订单明细+级差)
Map<Long, List<SaOrderItemsExt>> rangeOrderMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(repurchaseOrderList)) {
rangeOrderMap = iBonusOrderService.getWaresRange(repurchaseOrderList);
}
Map<Long, CuMemberLevel> memberLevelMap = new HashMap<>();
List<CuMemberLevel> memberLevelList = iCuMemberGradeService.calculateCuMemberRetailGradeInit(period, settleStartDate, settleEndDate, rangeTableName);
memberLevelList.forEach(cuMemberLevel -> memberLevelMap.put(cuMemberLevel.getPkOrder(), cuMemberLevel));
@ -488,6 +515,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
List<BdAwards> awardsList = bonusConfigDTO.getAwardsList();
awardsList.forEach(bdAwards -> retailAwardsMap.put(bdAwards.getAwardsValue(), bdAwards));
// 会员转map
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : memberRetailRangeExtList) {
if (!memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt);
@ -505,7 +533,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
List<CuMemberGrade> cuMemberGradeList = new ArrayList<>();
// 会员奖衔升级记录
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>();
// 平级收益
// 平级收益 + 复购级差收益
List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
// 会员奖金明细
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
@ -583,7 +611,15 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
if (cuMemberBonusDetail != null) {
cuMemberBonusDetailList.add(cuMemberBonusDetail);
}
// TODO 2025.07.04 部分体系单独奖项处理
if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 复购订单
cuMemberBonusRangeList.addAll(this.calculateRepurchaseRangeBonus(saOrderExt, memberRangeExtMap, vertexBonusMap, rangeOrderMap,
bonusConfigDTO, period, cuMemberBonusMap));
}
}
if (cuMemberBonusRangeList.size() > 0) {
if (bonusRecordDetailVO.getCuMemberBonusRangeList() == null) {
bonusRecordDetailVO.setCuMemberBonusRangeList(cuMemberBonusRangeList);
@ -1447,6 +1483,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
/**
* 团队福利福利分红等奖金 -- 月奖
*
* @param settleDateStr 结算日期
*/
void calculateRetailShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO,
@ -2039,4 +2077,111 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
)
));
}
/**
* 处理复购级差
*/
private List<CuMemberBonusRange> calculateRepurchaseRangeBonus(SaOrderExt saOrderExt, Map<Long, CuMemberRetailRangeExt> memberRangeExtMap,
Map<Long, List<Integer>> vertexBonusMap, Map<Long, List<SaOrderItemsExt>> rangeOrderMap,
BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap) {
// 直推级差返回数据
List<CuMemberBonusRange> memberBonusRangeList = new ArrayList<>();
// 订单会员
CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
List<Integer> vertexBonusList = vertexBonusMap.get(sourceMemberRangeExt.getPkVertex());
if (CollectionUtil.isNotEmpty(vertexBonusList)) {
// 存在体系奖项
for (Integer bonusItems : vertexBonusList) {
if (EBonusItems.REPURCHASE_RANGE_INCOME.getValue() == bonusItems) {
// 复购级差收益key:会员IDvalue:复购级差收益
Map<Long, BigDecimal> bonusIncomeMap = new HashMap<>();
List<SaOrderItemsExt> saOrderItemsExtList = rangeOrderMap.get(saOrderExt.getPkId());
for (SaOrderItemsExt saOrderItemsExt : saOrderItemsExtList) {
// 级别值比当前等级高的级差数据列表
Map<Integer, BigDecimal> itemsRangePriceMap = saOrderItemsExt.getWaresRangeTmpList().stream()
.filter(tmpData -> tmpData.getRangeValue().compareTo(sourceMemberRangeExt.getGradeValue()) > 0)
.collect(Collectors.toMap(WaresRangeTmp::getRangeValue, WaresRangeTmp::getRangePrice));
// 临时价格跟着每一次变动
BigDecimal tmpPrice = saOrderItemsExt.getPrice();
// 推荐人
long pkParent = sourceMemberRangeExt.getPkParent();
// 计算级差
while (true) {
// 推荐人
CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
if (null == targetMemberRangeExt) {
break;
}
// 上一级推荐人
pkParent = targetMemberRangeExt.getPkParent();
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus()
|| ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory()
|| targetMemberRangeExt.getEnableStatus() == EYesNo.NO.getIntValue()
|| targetMemberRangeExt.getGradeValue() == EGrade.START_UP.getValue()
|| EIncomeStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getIncomeStatus()) {
// 停算收益非正常会员未激活等级为顾客停止收益直接跳过
continue;
}
// 当前会员等级值
int calGradeValue = targetMemberRangeExt.getGradeValue();
// 当前会员的级差价格
BigDecimal targetRangePrice = itemsRangePriceMap.get(calGradeValue);
if (targetRangePrice.compareTo(tmpPrice) < 0) {
// 当前级差价格比上一次的低
// 差价就是级差收益
BigDecimal bonusIncome;
if (bonusIncomeMap.containsKey(targetMemberRangeExt.getPkMember())) {
bonusIncome = bonusIncomeMap.get(targetMemberRangeExt.getPkMember()).add(tmpPrice.subtract(targetRangePrice));
} else {
bonusIncome = tmpPrice.subtract(targetRangePrice);
}
bonusIncomeMap.put(targetMemberRangeExt.getPkMember(), bonusIncome);
// 临时价格更新
tmpPrice = targetRangePrice;
}
// 最高等级则退出
if (calGradeValue == EGrade.S_VIP.getValue()) {
break;
}
}
}
if (bonusIncomeMap.size() > 0) {
for (Long key : bonusIncomeMap.keySet()) {
// 复购级差收益
BigDecimal rangeBonusIncome = bonusIncomeMap.get(key);
if (rangeBonusIncome.compareTo(BigDecimal.ZERO) > 0) {
CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(key);
// 处理复购级差收益
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate() == null ? saOrderExt.getPkRate() : targetMemberRangeExt.getPkRate());
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.REPURCHASE_RANGE_INCOME.getValue());
CuMemberBonusRange cuMemberBonusRange = getCuMemberRetailBonusRange(saOrderExt, targetMemberRangeExt, cuMemberBonus, pkBonusItems);
cuMemberBonusRange.setCalValue(BigDecimal.ZERO);
cuMemberBonusRange.setCalAchieve(saOrderExt.getOrderAmount());
cuMemberBonusRange.setPretaxIncome(rangeBonusIncome);
cuMemberBonusRange.setPkRange(targetMemberRangeExt.getPkGrade());
cuMemberBonusRange.setPkBeforeRange(sourceMemberRangeExt.getPkGrade());
cuMemberBonusRange.setPkOrder(saOrderExt.getPkId());
rangeRepurchaseRetailRemark(saOrderExt, cuMemberBonusRange, sourceMemberRangeExt, targetMemberRangeExt);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) {
cuMemberBonus.setRepurRangeIncome(ComputeUtil.computeAdd(cuMemberBonus.getRepurRangeIncome(), cuMemberBonusRange.getPretaxIncome()));
setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange);
}
memberBonusRangeList.add(cuMemberBonusRange);
}
}
}
}
}
}
return memberBonusRangeList;
}
}

View File

@ -2,6 +2,7 @@ package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.base.service.IBdVertexBonusService;
import com.hzs.bonus.bonus.service.*;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.detail.service.ICuRegionAssessService;
@ -42,48 +43,21 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
private ICuMemberSettlePeriodService cuMemberSettlePeriodService;
@Autowired
private BonusSettleRangeHandle bonusSettleRangeHandle;
@Autowired
private ICuMemberBonusService cuMemberBonusService;
@Autowired
private ICuMemberBonusPushService cuMemberBonusPushService;
@Autowired
private ICuMemberBonusExpandService cuMemberBonusExpandService;
@Autowired
private ICuMemberBonusCoachService cuMemberBonusCoachService;
@Autowired
private ICuMemberBonusDetailService cuMemberBonusDetailService;
@Autowired
private ICuMemberBonusRangeService cuMemberBonusRangeService;
@Autowired
public void setCuMemberBonusPushService(ICuMemberBonusPushService cuMemberBonusPushService) {
this.cuMemberBonusPushService = cuMemberBonusPushService;
}
private IBdVertexBonusService iBdVertexBonusService;
@Autowired
public void setCuMemberBonusExpandService(ICuMemberBonusExpandService cuMemberBonusExpandService) {
this.cuMemberBonusExpandService = cuMemberBonusExpandService;
}
@Autowired
public void setCuMemberBonusCoachService(ICuMemberBonusCoachService cuMemberBonusCoachService) {
this.cuMemberBonusCoachService = cuMemberBonusCoachService;
}
@Autowired
public void setCuMemberBonusDetailService(ICuMemberBonusDetailService cuMemberBonusDetailService) {
this.cuMemberBonusDetailService = cuMemberBonusDetailService;
}
@Autowired
public void setCuMemberBonusRangeService(ICuMemberBonusRangeService cuMemberBonusRangeService) {
this.cuMemberBonusRangeService = cuMemberBonusRangeService;
}
@Autowired
public void setCuMemberBonusService(ICuMemberBonusService cuMemberBonusService) {
this.cuMemberBonusService = cuMemberBonusService;
}
/**
* 保存会员奖金
@ -121,10 +95,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
BonusRecordDetailVO recordDetailVO = new BonusRecordDetailVO();
// 今天和昨天是否同月
Boolean isSameMonth = DateUtils.getMonth(settleDate).equals(DateUtils.getMonth(yesterday));
// 查询体系奖项配置
Map<Long, List<Integer>> vertexBonusMap = iBdVertexBonusService.queryVertexBonus();
// 计算新零售团队奖金
bonusSettleRangeHandle.calculateRetailBonusByDay(settleDate, cuMemberBonusMap, bonusConfigDTO, recordDetailVO,
period, yesterdayPeriod, isSameMonth);
period, yesterdayPeriod, isSameMonth, vertexBonusMap);
// new 每月1号需要计算4个月奖
if (EEnv.TEST.getValue().equals(BdConfig.getEnv())) {
@ -164,7 +140,7 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
if (CollectionUtil.isNotEmpty(retailOrderList)) {
// 会员奖金map
Map<Long, CuMemberBonus> cuMemberBonusMap = new HashMap<>(MagicNumberConstants.DELETE_DATA_BATCH_UPDATE_NUM);
Map<Long, CuMemberBonus> cuMemberBonusMap = new HashMap<>(MagicNumberConstants.BATCH_UPDATE_NUM);
// 订单数据
SaOrderExt saOrderExt = retailOrderList.get(0);

View File

@ -162,7 +162,6 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setServiceSpend(BigDecimal.ZERO);
cuMemberBonusExt.setPurRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurPushIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurExpandIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCoupon(BigDecimal.ZERO);
@ -173,6 +172,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setRealIncomeTotal(BigDecimal.ZERO);
cuMemberBonusExt.setStoreIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailSameLevelIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailAreaIncome(BigDecimal.ZERO);
@ -213,7 +213,6 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setServiceSpend(ComputeUtil.computeMultiply(cuMemberBonusExt.getServiceSpend(), inExchangeRate));
cuMemberBonusExt.setPurRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getPurRealSubtotal(), inExchangeRate));
cuMemberBonusExt.setRepurPushIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurPushIncome(), inExchangeRate));
cuMemberBonusExt.setRepurRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurRangeIncome(), inExchangeRate));
cuMemberBonusExt.setRepurExpandIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurExpandIncome(), inExchangeRate));
cuMemberBonusExt.setRepurRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurRealSubtotal(), inExchangeRate));
cuMemberBonusExt.setRepurCoupon(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurCoupon(), inExchangeRate));
@ -223,6 +222,8 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setCarAwardPoints(ComputeUtil.computeMultiply(cuMemberBonusExt.getCarAwardPoints(), inExchangeRate));
cuMemberBonusExt.setRealIncomeTotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRealIncomeTotal(), inExchangeRate));
cuMemberBonusExt.setStoreIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getStoreIncome(), inExchangeRate));
cuMemberBonusExt.setRepurRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurRangeIncome(), inExchangeRate));
cuMemberBonusExt.setRetailRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailRangeIncome(), inExchangeRate));
cuMemberBonusExt.setRetailSameLevelIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailSameLevelIncome(), inExchangeRate));
cuMemberBonusExt.setRetailAreaIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailAreaIncome(), inExchangeRate));
@ -247,7 +248,6 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setServiceSpend(ComputeUtil.computeAdd(cuMemberBonusExt.getServiceSpend(), memberBonusExt.getServiceSpend()));
cuMemberBonusExt.setPurRealSubtotal(ComputeUtil.computeAdd(cuMemberBonusExt.getPurRealSubtotal(), memberBonusExt.getPurRealSubtotal()));
cuMemberBonusExt.setRepurPushIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getRepurPushIncome(), memberBonusExt.getRepurPushIncome()));
cuMemberBonusExt.setRepurRangeIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getRepurRangeIncome(), memberBonusExt.getRepurRangeIncome()));
cuMemberBonusExt.setRepurExpandIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getRepurExpandIncome(), memberBonusExt.getRepurExpandIncome()));
cuMemberBonusExt.setRepurRealSubtotal(ComputeUtil.computeAdd(cuMemberBonusExt.getRepurRealSubtotal(), memberBonusExt.getRepurRealSubtotal()));
cuMemberBonusExt.setRepurCoupon(ComputeUtil.computeAdd(cuMemberBonusExt.getRepurCoupon(), memberBonusExt.getRepurCoupon()));
@ -258,6 +258,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonusExt.getRealIncomeTotal(), memberBonusExt.getRealIncomeTotal()));
cuMemberBonusExt.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getStoreIncome(), memberBonusExt.getStoreIncome()));
cuMemberBonusExt.setRepurRangeIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getRepurRangeIncome(), memberBonusExt.getRepurRangeIncome()));
cuMemberBonusExt.setRetailRangeIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getRetailRangeIncome(), memberBonusExt.getRetailRangeIncome()));
cuMemberBonusExt.setRetailSameLevelIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getRetailSameLevelIncome(), memberBonusExt.getRetailSameLevelIncome()));
cuMemberBonusExt.setRetailAreaIncome(ComputeUtil.computeAdd(cuMemberBonusExt.getRetailAreaIncome(), memberBonusExt.getRetailAreaIncome()));
@ -287,7 +288,6 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setServiceSpend(BigDecimal.ZERO);
cuMemberBonusExt.setPurRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurPushIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurExpandIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCoupon(BigDecimal.ZERO);
@ -298,6 +298,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setCarAwardPoints(BigDecimal.ZERO);
cuMemberBonusExt.setRealIncomeTotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailSameLevelIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailAreaIncome(BigDecimal.ZERO);
@ -346,9 +347,8 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
memberBonusDetailVO.setSourceMemberName(cuMemberBonusDetail.getSourceMemberName());
memberBonusDetailVOList.add(memberBonusDetailVO);
});
} else if (EBonusItems.BOOT_CARD.getValue() == bonusItemsValue || EBonusItems.DIRECT_INCOME.getValue() == bonusItemsValue ||
EBonusItems.HELP_EACH_INCOME.getValue() == bonusItemsValue) {
// 启动卡直推 推荐收益
} else if (EBonusItems.DIRECT_INCOME.getValue() == bonusItemsValue) {
// 直推收益
List<CuMemberBonusPushExt> cuMemberBonusPushList = cuMemberBonusPushMapper.queryMemberBonusPushByBonusItems(bonusParam);
dataTable = getDataTable(cuMemberBonusPushList);
cuMemberBonusPushList.forEach(cuMemberBonusPush -> {
@ -381,7 +381,6 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
});
} else if (EBonusItems.REPURCHASE_RANGE_INCOME.getValue() == bonusItemsValue) {
// 复购极差
// 拓展收益复购拓展收益
List<CuMemberBonusRangeExt> cuMemberBonusRangeList = cuMemberBonusRangeMapper.queryMemberBonusRangeByBonusItems(bonusParam);
dataTable = getDataTable(cuMemberBonusRangeList);
cuMemberBonusRangeList.forEach(cuMemberBonusRange -> {
@ -446,9 +445,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
MemberBonusDetailSerVO memberBonusDetailVO = BeanUtil.copyProperties(cuMemberBonusDetail, MemberBonusDetailSerVO.class);
memberBonusDetailSerVoS.add(memberBonusDetailVO);
});
} else if (EBonusItems.BOOT_CARD.getValue() == bonusItemsValue
|| EBonusItems.DIRECT_INCOME.getValue() == bonusItemsValue
|| EBonusItems.HELP_EACH_INCOME.getValue() == bonusItemsValue) {
} else if (EBonusItems.DIRECT_INCOME.getValue() == bonusItemsValue) {
// 启动卡直推 推荐收益
List<CuMemberBonusPushExt> cuMemberBonusPushList = cuMemberBonusPushMapper.queryMemberBonusPushByBonusItemsFoServer(bonusParam);
dataTable = getDataTable(cuMemberBonusPushList);
@ -619,6 +616,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_RANGE_INCOME.getValue());
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_SAME_LEVEL_INCOME.getValue());
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_AREA_INCOME.getValue());
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.REPURCHASE_RANGE_INCOME.getValue());
}
@Override

View File

@ -38,7 +38,7 @@ public class BonusRecordDetailVO implements Serializable {
private List<CuMemberBonusDetail> cuMemberBonusDetailList;
/**
* 新零售 - 直推收益平级收益福利级差复购级差
* 新零售 - 直推收益平级收益月度福利级差月度复购级差复购级差
*/
private List<CuMemberBonusRange> cuMemberBonusRangeList;
}

View File

@ -60,13 +60,13 @@ public class BonusTotalVO implements Serializable {
/**
* 新零售福利级差收益
*/
@Excel(name = "福利级差收益", scale = 2)
@Excel(name = "月度福利级差收益", scale = 2)
private BigDecimal retailBenefitRangeIncome;
/**
* 新零售复购级差收益
*/
@Excel(name = "复购级差收益", scale = 2)
@Excel(name = "月度复购级差收益", scale = 2)
private BigDecimal retailMonthRepurchaseIncome;
/**
@ -87,18 +87,23 @@ public class BonusTotalVO implements Serializable {
@Excel(name = "福利分红加权收益", scale = 2)
private BigDecimal retailBenefitIncome;
/**
* 复购级差收益
*/
@Excel(name = "复购级差收益", scale = 2)
private BigDecimal repurRangeIncome;
/**
* 重消收益
*/
@Excel(name = "重消收益", scale = 2)
private BigDecimal backPointsOri;
private BigDecimal backPoints;
/**
* 实发收益总计
*/
@Excel(name = "实发收益总计", scale = 2)
private BigDecimal realIncomeTotalOri;
private BigDecimal realIncomeTotal;
/**
@ -154,11 +159,6 @@ public class BonusTotalVO implements Serializable {
private BigDecimal repurPushIncomeOri;
/**
* 复购级差收益
*/
private BigDecimal repurRangeIncomeOri;
/**
* 复购拓展收益
*/
@ -267,11 +267,6 @@ public class BonusTotalVO implements Serializable {
private BigDecimal repurPushIncome;
/**
* 复购级差收益
*/
private BigDecimal repurRangeIncome;
/**
* 复购拓展收益
*/
@ -287,11 +282,6 @@ public class BonusTotalVO implements Serializable {
*/
private BigDecimal repurCouponShare;
/**
* 商城重消
*/
private BigDecimal backPoints;
/**
* 平台服务费
*/
@ -337,10 +327,4 @@ public class BonusTotalVO implements Serializable {
*/
private BigDecimal repurCouponSubtotal;
/**
* 实发收益总计
*/
private BigDecimal realIncomeTotal;
}

View File

@ -92,7 +92,7 @@ public class CuMemberBonusVO implements Serializable {
public static final String[] INCOME_ARRAY = new String[]{
"backPoints", "retailRangeIncome", "retailSameLevelIncome", "retailAreaIncome",
"retailBenefitRangeIncome", "retailMonthRepurchaseIncome", "coachIncome", "retailBenefitAvgIncome",
"retailBenefitIncome", "retailRealSubtotal", "realIncomeTotal"};
"retailBenefitIncome", "retailRealSubtotal", "realIncomeTotal", "repurRangeIncome"};
private BigDecimal retailRangeIncome;
@ -120,14 +120,14 @@ public class CuMemberBonusVO implements Serializable {
* 新零售福利级差收益
*/
private BigDecimal retailBenefitRangeIncome;
@Excel(name = " 福利级差收益", scale = 2)
@Excel(name = "月度福利级差收益", scale = 2)
private BigDecimal retailBenefitRangeIncomeOri;
/**
* 新零售复购级差收益
*/
private BigDecimal retailMonthRepurchaseIncome;
@Excel(name = "复购级差收益", scale = 2)
@Excel(name = "月度复购级差收益", scale = 2)
private BigDecimal retailMonthRepurchaseIncomeOri;
/**
@ -151,6 +151,13 @@ public class CuMemberBonusVO implements Serializable {
@Excel(name = " 福利加权收益", scale = 2)
private BigDecimal retailBenefitIncomeOri;
/**
* 复购级差收益
*/
private BigDecimal repurRangeIncome;
@Excel(name = "复购级差收益", scale = 2)
private BigDecimal repurRangeIncomeOri;
/**
* 商城重消
*/

View File

@ -55,12 +55,12 @@ public class MemberBonusFirstPurchaseVO extends PubMemberBonusVO {
// * 复购拓展收益
// */
// private BigDecimal repurExpandIncome;
//
// /**
// * 复购级差收益
// */
// private BigDecimal repurRangeIncome;
//
/**
* 复购级差收益
*/
private BigDecimal repurRangeIncome;
// /**
// * 复购实发小计
// */

View File

@ -160,6 +160,12 @@ public class MemberBonusVO implements Serializable {
*/
private BigDecimal retailBenefitIncome;
/**
* 复购级差收益
*/
@BigDecimalFormat("#0.0000")
private BigDecimal repurRangeIncome;
/**
* 新零售收益小计
*/

View File

@ -71,7 +71,7 @@ public class CuMemberAssessDetailServiceImpl extends ServiceImpl<CuMemberAssessD
@Override
public void deleteCuMemberAssessDetailByList(List<CuMemberAssessDetail> revokeDetailList) {
List<List<?>> handleCutList = cuMemberBonusSettle.handleCutList(revokeDetailList,
MagicNumberConstants.DELETE_DATA_BATCH_UPDATE_NUM);
MagicNumberConstants.BATCH_UPDATE_NUM);
handleCutList.forEach(list -> {
baseMapper.updateCuMemberAssessDetailByRevoke(list);
});

View File

@ -1,6 +1,7 @@
package com.hzs.bonus.order.mapper;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.sale.order.SaOrder;
import org.apache.ibatis.annotations.Param;
@ -40,4 +41,12 @@ public interface BonusOrderMapper {
@Param("endDate") Date endDate,
@Param("orderType") List<Integer> orderType);
/**
* 查询订单商品级差数据
*
* @param orderList 订单列表
* @return
*/
List<SaOrderItemsExt> listOrderWaresRange(@Param("orderList") List<SaOrderExt> orderList);
}

View File

@ -1,10 +1,12 @@
package com.hzs.bonus.order.service;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.sale.order.SaOrder;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface IBonusOrderService {
@ -30,4 +32,12 @@ public interface IBonusOrderService {
*/
List<SaOrder> listSaOrderByTime(Date startDate, Date endDate, List<Integer> orderType);
/**
* 查询商品级差数据
*
* @param orderList
* @return
*/
Map<Long, List<SaOrderItemsExt>> getWaresRange(List<SaOrderExt> orderList);
}

View File

@ -1,21 +1,26 @@
package com.hzs.bonus.order.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.achieve.service.impl.CuMemberBonusSettle;
import com.hzs.bonus.order.mapper.BonusOrderMapper;
import com.hzs.bonus.order.service.IBonusOrderService;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.sale.order.SaOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.*;
@Service
public class BonusOrderServiceImpl implements IBonusOrderService {
@Resource
private BonusOrderMapper bonusOrderMapper;
@Autowired
private CuMemberBonusSettle cuMemberBonusSettle;
@Override
public List<SaOrderExt> queryRetailSaOrderByDay(Date startDate, Date endDate, String orderCode) {
@ -36,4 +41,26 @@ public class BonusOrderServiceImpl implements IBonusOrderService {
return bonusOrderMapper.listSaOrderByTime(startDate, endDate, orderType);
}
@Override
public Map<Long, List<SaOrderItemsExt>> getWaresRange(List<SaOrderExt> orderList) {
Map<Long, List<SaOrderItemsExt>> resultMap = new HashMap<>();
List<SaOrderItemsExt> resultList = new ArrayList<>();
List<List<?>> handleCutList = cuMemberBonusSettle.handleCutList(orderList, MagicNumberConstants.BATCH_UPDATE_NUM);
handleCutList.forEach(list -> {
resultList.addAll(bonusOrderMapper.listOrderWaresRange(orderList));
});
for (SaOrderItemsExt saOrderItemsExt : resultList) {
if (resultMap.containsKey(saOrderItemsExt.getPkOrder())) {
resultMap.get(saOrderItemsExt.getPkOrder()).add(saOrderItemsExt);
} else {
List<SaOrderItemsExt> tmpList = new ArrayList<>();
tmpList.add(saOrderItemsExt);
resultMap.put(saOrderItemsExt.getPkOrder(), tmpList);
}
}
return resultMap;
}
}

View File

@ -1,28 +1,11 @@
package com.hzs.bonus.swing.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.achieve.ext.CuMemberAchieveExt;
import com.hzs.common.domain.member.swing.CuMemberSwingNetLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 会员甩网业绩记录 Mapper 接口
* </p>
*
* @author hzs
* @since 2024-03-05
*/
public interface CuMemberSwingNetLogMapper extends BaseMapper<CuMemberSwingNetLog> {
/*
* @description: 更新或修改甩网业绩记录
* @author: sui q
* @date: 2024/3/5 11:23
* @param: null null
**/
void mergeCuMemberSwingNetLogByAchieve(@Param("cuMemberAchieveExtList") List<CuMemberAchieveExt> cuMemberAchieveExtList,
@Param("settleTableName") String settleTableName);
}

View File

@ -1,26 +1,11 @@
package com.hzs.bonus.swing.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.achieve.ext.CuMemberAchieveExt;
import com.hzs.common.domain.member.swing.CuMemberSwingNetLog;
import java.util.List;
/**
* <p>
* 会员甩网业绩记录 服务类
* </p>
*
* @author hzs
* @since 2024-03-05
*/
public interface ICuMemberSwingNetLogService extends IService<CuMemberSwingNetLog> {
/*
* @description: 更新或修改甩网业绩记录
* @author: sui q
* @date: 2024/3/5 11:23
* @param: null null
**/
void mergeCuMemberSwingNetLogByAchieve(List<CuMemberAchieveExt> cuMemberAchieveExtList, String settleTableName);
}

View File

@ -3,25 +3,13 @@ package com.hzs.bonus.swing.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.swing.mapper.CuMemberSwingNetLogMapper;
import com.hzs.bonus.swing.service.ICuMemberSwingNetLogService;
import com.hzs.common.domain.member.achieve.ext.CuMemberAchieveExt;
import com.hzs.common.domain.member.swing.CuMemberSwingNetLog;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 会员甩网业绩记录 服务实现类
* </p>
*
* @author hzs
* @since 2024-03-05
*/
@Service
public class CuMemberSwingNetLogServiceImpl extends ServiceImpl<CuMemberSwingNetLogMapper, CuMemberSwingNetLog> implements ICuMemberSwingNetLogService {
@Override
public void mergeCuMemberSwingNetLogByAchieve(List<CuMemberAchieveExt> cuMemberAchieveExtList, String settleTableName) {
baseMapper.mergeCuMemberSwingNetLogByAchieve(cuMemberAchieveExtList, settleTableName);
}
}

View File

@ -398,6 +398,7 @@
bw.benefit_avg_ratio,
bw.benefit_share_ratio,
br.name country_name,
a.pk_vertex,
bv.region_vertex_pk_id
from (
select * from ${tableName}
@ -694,6 +695,7 @@
a.pk_share_awards,
cm.income_status,
cm.pay_time,
cm.pk_vertex,
nvl(b.pk_rate, bt.pk_id) pk_rate,
nvl(cm.is_activate, a.enable_status) enable_status,
a.new_box_num,

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.base.mapper.BdVertexBonusMapper">
</mapper>

View File

@ -343,4 +343,14 @@
when matched then
update set a.pk_settle_grade = b.pk_grade, a.modified_time = sysdate
</update>
<!-- 查询体系奖项列表 -->
<select id="listVertexBonus" resultType="com.hzs.common.domain.vertex.BdVertexBonus">
select * from cu_member cm
left join bd_vertex_bonus bvb
on bvb.pk_vertex = cm.pk_vertex
where cm.pk_id = #{pkMember}
order by cm.pk_id desc
</select>
</mapper>

View File

@ -47,7 +47,6 @@
<result column="SETTLE_COUNTRY" property="settleCountry"/>
<result column="PERIOD" property="period"/>
<result column="pk_source_country" property="pkSourceCountry"/>
<result column="service_code" property="serviceCode"/>
<result column="pk_vertex" property="pkVertex"/>
<result column="nick_name" property="nickName"/>
@ -67,7 +66,7 @@
#{item.calType}, #{item.calAchieve, jdbcType=NUMERIC}, #{item.calValue, jdbcType=NUMERIC}, #{item.pretaxIncome, jdbcType=NUMERIC},
#{item.incomeTax, jdbcType=NUMERIC}, #{item.realIncome, jdbcType=NUMERIC}, #{item.remark},
#{item.incomeRatio, jdbcType=NUMERIC}, #{item.incomeDialRatio, jdbcType=NUMERIC}, #{item.orderDialRatio, jdbcType=NUMERIC},
#{item.pkCountry},#{item.pkCreator})
#{item.pkCountry}, #{item.pkCreator})
</foreach>
SELECT 1 FROM dual
</insert>

View File

@ -84,33 +84,42 @@
<update id="mergeBackRangeBonusIncome">
merge into cu_member_bonus a
using(
select b.* from bd_bonus_items bt
inner join(
select pk_bonus,pk_bonus_items, sum(pretax_income) pretax_income,
sum(income_tax) income_tax, sum(real_income) real_income from
<choose>
<when test="bonusValue == 27"> cu_member_bonus_detail </when>
<otherwise> cu_member_bonus_range </otherwise>
</choose>
where del_flag=0 and pk_order= #{pkOrder}
group by pk_bonus, pk_bonus_items) b
on bt.pk_id = b.pk_bonus_items
where bt.bonus_value = #{bonusValue}) b
on (a.pk_id = b.pk_bonus)
when matched then
update set a.retail_real_subtotal=a.retail_real_subtotal-b.real_income,
a.back_points=a.back_points-b.income_tax,
a.real_income_total=a.real_income_total-b.real_income
<if test="bonusValue == 25">
,a.retail_range_income = a.retail_range_income - b.pretax_income
</if>
<if test="bonusValue == 26">
,a.retail_same_level_income = a.retail_same_level_income - b.pretax_income
</if>
<if test="bonusValue == 27">
,a.retail_area_income = a.retail_area_income - b.pretax_income
</if>
using (
select b.* from bd_bonus_items bt
inner join (
select pk_bonus, pk_bonus_items,
sum(pretax_income) pretax_income,
sum(income_tax) income_tax,
sum(real_income) real_income
from
<choose>
<when test="bonusValue == 27">cu_member_bonus_detail</when>
<otherwise>cu_member_bonus_range</otherwise>
</choose>
where del_flag = 0
and pk_order= #{pkOrder}
group by pk_bonus, pk_bonus_items
) b
on bt.pk_id = b.pk_bonus_items
where bt.bonus_value = #{bonusValue}
) b
on (a.pk_id = b.pk_bonus)
when matched then
update set a.retail_real_subtotal = a.retail_real_subtotal - b.real_income,
a.back_points = a.back_points - b.income_tax,
a.real_income_total = a.real_income_total - b.real_income
<if test="bonusValue == 8">
,a.repur_range_income = a.repur_range_income - b.pretax_income
</if>
<if test="bonusValue == 25">
,a.retail_range_income = a.retail_range_income - b.pretax_income
</if>
<if test="bonusValue == 26">
,a.retail_same_level_income = a.retail_same_level_income - b.pretax_income
</if>
<if test="bonusValue == 27">
,a.retail_area_income = a.retail_area_income - b.pretax_income
</if>
</update>
<delete id="deleteCuMemberBonus">
@ -178,21 +187,25 @@
using(
select pk_id,pk_member,period,pk_rate,direct_income,expand_income,expand_no_capping,
expand_capping,coach_income,share_income,service_income,back_points,service_spend,
pur_real_subtotal,repur_push_income,repur_range_income,repur_expand_income,repur_real_subtotal,
pur_real_subtotal,repur_push_income,
repur_range_income,
repur_expand_income,repur_real_subtotal,
cloud_direct_income,cloud_pur_income,cloud_repur_income,cloud_real_subtotal,
repur_coupon,repur_coupon_subtotal,global_points,
car_award_points,hi_fun_income,hai_fun_income,retail_range_income,retail_same_level_income,retail_area_income,
retail_benefit_range_income,retail_benefit_avg_income,
retail_benefit_income,retail_real_subtotal,
maker_direct_income,maker_share_income,maker_real_subtotal,real_income_total,
pk_country,pk_creator,grant_status,income_status from(
car_award_points,hi_fun_income,hai_fun_income,
retail_range_income, retail_same_level_income, retail_area_income,
retail_benefit_range_income, retail_benefit_avg_income, retail_benefit_income,
retail_real_subtotal, maker_direct_income,maker_share_income, maker_real_subtotal, real_income_total,
pk_country, pk_creator, grant_status, income_status
from (
<foreach item="item" index="index" collection="cuMemberBonusList" separator=" union ">
select #{item.pkId} pk_id,#{item.pkMember} pk_member,#{item.period} period,#{item.pkRate} pk_rate,
#{item.directIncome} direct_income,#{item.expandIncome} expand_income,#{item.expandNoCapping} expand_no_capping,
#{item.expandCapping} expand_capping,#{item.coachIncome} coach_income,#{item.shareIncome} share_income,
#{item.serviceIncome} service_income,#{item.backPoints} back_points,#{item.serviceSpend} service_spend,
#{item.purRealSubtotal} pur_real_subtotal,#{item.repurPushIncome} repur_push_income,
#{item.repurRangeIncome} repur_range_income,#{item.repurExpandIncome} repur_expand_income,
#{item.repurRangeIncome} repur_range_income,
#{item.repurExpandIncome} repur_expand_income,
#{item.repurRealSubtotal} repur_real_subtotal,#{item.cloudDirectIncome} cloud_direct_income,
#{item.cloudPurIncome} cloud_pur_income,#{item.cloudRepurIncome} cloud_repur_income,
#{item.cloudRealSubtotal} cloud_real_subtotal,#{item.repurCoupon} repur_coupon,
@ -201,11 +214,12 @@
#{item.haiFunIncome} hai_fun_income,#{item.makerDirectIncome} maker_direct_income,
#{item.makerShareIncome} maker_share_income,#{item.makerRealSubtotal} maker_real_subtotal,
#{item.realIncomeTotal} real_income_total,#{item.pkCountry} pk_country,#{item.pkCreator} pk_creator,
#{item.grantStatus} grant_status,#{item.incomeStatus} income_status,
#{item.retailRangeIncome} retail_range_income,#{item.retailSameLevelIncome} retail_same_level_income,
#{item.retailAreaIncome} retail_area_income,#{item.retailBenefitRangeIncome} retail_benefit_range_income,
#{item.retailBenefitAvgIncome} retail_benefit_avg_income,#{item.retailBenefitIncome} retail_benefit_income,
#{item.retailRealSubtotal} retail_real_subtotal from dual
#{item.grantStatus} grant_status, #{item.incomeStatus} income_status,
#{item.retailRangeIncome} retail_range_income, #{item.retailSameLevelIncome} retail_same_level_income,
#{item.retailAreaIncome} retail_area_income, #{item.retailBenefitRangeIncome} retail_benefit_range_income,
#{item.retailBenefitAvgIncome} retail_benefit_avg_income, #{item.retailBenefitIncome} retail_benefit_income,
#{item.retailRealSubtotal} retail_real_subtotal
from dual
</foreach>)
) b
on (a.pk_member = b.pk_member and a.period = b.period)
@ -216,31 +230,44 @@
a.coach_income=a.coach_income+b.coach_income,a.share_income=a.share_income+b.share_income,
a.service_income=a.service_income+b.service_income,a.back_points=a.back_points+b.back_points,a.service_spend=a.service_spend+b.service_spend,
a.pur_real_subtotal=a.pur_real_subtotal+b.pur_real_subtotal,a.repur_push_income=a.repur_push_income+b.repur_push_income,
a.repur_range_income=a.repur_range_income+b.repur_range_income,a.repur_expand_income=a.repur_expand_income+b.repur_expand_income,
a.repur_range_income = a.repur_range_income + b.repur_range_income,
a.repur_expand_income=a.repur_expand_income+b.repur_expand_income,
a.repur_real_subtotal=a.repur_real_subtotal+b.repur_real_subtotal,a.cloud_direct_income=a.cloud_direct_income+b.cloud_direct_income,
a.cloud_pur_income=a.cloud_pur_income+b.cloud_pur_income,a.cloud_repur_income=a.cloud_repur_income+b.cloud_repur_income,
a.cloud_real_subtotal=a.cloud_real_subtotal+b.cloud_real_subtotal,a.repur_coupon=a.repur_coupon+b.repur_coupon,
a.global_points=a.global_points+b.global_points,a.car_award_points=a.car_award_points+b.car_award_points,
a.hi_fun_income=a.hi_fun_income+b.hi_fun_income,a.real_income_total=a.real_income_total+b.real_income_total,
a.retail_range_income=a.retail_range_income+b.retail_range_income,a.retail_same_level_income=a.retail_same_level_income+b.retail_same_level_income,
a.retail_area_income=a.retail_area_income+b.retail_area_income,a.retail_benefit_range_income=a.retail_benefit_range_income+b.retail_benefit_range_income,
a.retail_benefit_avg_income=a.retail_benefit_avg_income+b.retail_benefit_avg_income,a.retail_benefit_income=a.retail_benefit_income+b.retail_benefit_income,
a.retail_real_subtotal=a.retail_real_subtotal+b.retail_real_subtotal
a.retail_range_income = a.retail_range_income + b.retail_range_income,
a.retail_same_level_income = a.retail_same_level_income + b.retail_same_level_income,
a.retail_area_income = a.retail_area_income + b.retail_area_income,
a.retail_benefit_range_income = a.retail_benefit_range_income + b.retail_benefit_range_income,
a.retail_benefit_avg_income = a.retail_benefit_avg_income + b.retail_benefit_avg_income,
a.retail_benefit_income = a.retail_benefit_income + b.retail_benefit_income,
a.retail_real_subtotal = a.retail_real_subtotal + b.retail_real_subtotal
when not matched then
insert (pk_id,pk_member,period,pk_rate,direct_income,expand_income,expand_no_capping,
insert (
pk_id,pk_member,period,pk_rate,direct_income,expand_income,expand_no_capping,
expand_capping,coach_income,share_income,service_income,back_points,service_spend,
pur_real_subtotal,repur_push_income,repur_range_income,repur_expand_income,repur_real_subtotal,
pur_real_subtotal,repur_push_income,
repur_range_income,
repur_expand_income,repur_real_subtotal,
cloud_direct_income,cloud_pur_income,cloud_repur_income,cloud_real_subtotal,
repur_coupon,global_points,car_award_points,hi_fun_income,real_income_total,
pk_country,pk_creator,grant_status,income_status,retail_range_income,retail_same_level_income,
retail_area_income,retail_benefit_range_income,retail_benefit_avg_income,retail_benefit_income,retail_real_subtotal)
values(b.pk_id,b.pk_member,b.period,b.pk_rate,b.direct_income,b.expand_income,b.expand_no_capping,
pk_country,pk_creator,grant_status,income_status,
retail_range_income, retail_same_level_income, retail_area_income,
retail_benefit_range_income, retail_benefit_avg_income, retail_benefit_income,
retail_real_subtotal)
values (
b.pk_id,b.pk_member,b.period,b.pk_rate,b.direct_income,b.expand_income,b.expand_no_capping,
b.expand_capping,b.coach_income,b.share_income,b.service_income,b.back_points,b.service_spend,
b.pur_real_subtotal,b.repur_push_income,b.repur_range_income,b.repur_expand_income,b.repur_real_subtotal,
b.pur_real_subtotal,b.repur_push_income,
b.repur_range_income,
b.repur_expand_income,b.repur_real_subtotal,
b.cloud_direct_income,b.cloud_pur_income,b.cloud_repur_income,b.cloud_real_subtotal,
b.repur_coupon,b.global_points,b.car_award_points,b.hi_fun_income,b.real_income_total,
b.pk_country,b.pk_creator,b.grant_status,b.income_status,b.retail_range_income,b.retail_same_level_income,
b.retail_area_income,b.retail_benefit_range_income,b.retail_benefit_avg_income,b.retail_benefit_income,
b.pk_country,b.pk_creator,b.grant_status,b.income_status,
b.retail_range_income, b.retail_same_level_income, b.retail_area_income,
b.retail_benefit_range_income, b.retail_benefit_avg_income, b.retail_benefit_income,
b.retail_real_subtotal)
</insert>
@ -257,15 +284,14 @@
cb.service_spend,
cb.pur_real_subtotal,
cb.repur_push_income,
cb.repur_range_income,
cb.repur_expand_income,
cb.repur_real_subtotal,
cb.repur_coupon,
cb.repur_coupon_share,
cb.repur_coupon_subtotal,
cb.store_income,
cb.global_points,
cb.car_award_points,
cb.global_points, cb.car_award_points,
cb.repur_range_income,
cb.retail_range_income,
cb.retail_same_level_income,
cb.retail_area_income,
@ -298,10 +324,11 @@
bv.vertex_name, ct.team_name,
cb.period,cp.settle_date,cb.direct_income,cb.expand_income,cb.expand_no_capping,
cb.expand_capping,cb.share_income,cb.service_income,cb.back_points,cb.service_spend,
cb.pur_real_subtotal,cb.repur_push_income,cb.repur_range_income,cb.repur_expand_income,cb.repur_real_subtotal,
cb.pur_real_subtotal,cb.repur_push_income,cb.repur_expand_income,cb.repur_real_subtotal,
cb.repur_coupon,cb.repur_coupon_share,cb.repur_coupon_subtotal,cb.store_income,
cb.global_points,cb.car_award_points,cb.pk_rate,bc.out_exchange_rate,
cb.coach_income,
cb.repur_range_income,
cb.retail_range_income, cb.retail_same_level_income, cb.retail_area_income,
cb.retail_benefit_range_income, cb.retail_month_repurchase_income,
cb.retail_benefit_avg_income, cb.retail_benefit_income,cb.retail_real_subtotal,
@ -392,7 +419,6 @@
nvl(sum(cb.service_spend),0) service_spend,
nvl(sum(cb.pur_real_subtotal),0) pur_real_subtotal,
nvl(sum(cb.repur_push_income),0) repur_push_income,
nvl(sum(cb.repur_range_income),0) repur_range_income,
nvl(sum(cb.repur_expand_income),0) repur_expand_income,
nvl(sum(cb.repur_real_subtotal),0) repur_real_subtotal,
nvl(sum(cb.repur_coupon),0) repur_coupon,
@ -402,6 +428,7 @@
nvl(sum(cb.global_points),0) global_points,
nvl(sum(cb.car_award_points),0) car_award_points,
bc.out_exchange_rate,
nvl(sum(cb.repur_range_income),0) repur_range_income,
nvl(sum(cb.retail_range_income),0) retail_range_income,
nvl(sum(cb.retail_same_level_income),0) retail_same_level_income,
nvl(sum(cb.retail_area_income),0) retail_area_income,
@ -487,11 +514,12 @@
sum(cb.share_income) share_income, sum(cb.service_spend) service_spend,
sum(cb.service_income) service_income, sum(cb.back_points) back_points,
sum(cb.pur_real_subtotal) pur_real_subtotal,
sum(cb.repur_push_income) repur_push_income, sum(cb.repur_range_income) repur_range_income,
sum(cb.repur_push_income) repur_push_income,
sum(cb.repur_expand_income) repur_expand_income, sum(cb.repur_real_subtotal) repur_real_subtotal,
sum(cb.repur_coupon) repur_coupon, sum(repur_coupon_share) repur_coupon_share,
sum(cb.repur_coupon_subtotal) repur_coupon_subtotal,
sum(cb.global_points) global_points, sum(cb.car_award_points) car_award_points,
sum(cb.repur_range_income) repur_range_income,
sum(cb.retail_range_income) retail_range_income,
sum(cb.retail_same_level_income) retail_same_level_income,
sum(cb.retail_area_income) retail_area_income,

View File

@ -85,7 +85,6 @@
</collection>
</resultMap>
<!-- 订单+详情返回映射 -->
<resultMap id="saOrderExtResultMap" type="com.hzs.common.domain.sale.ext.SaOrderExt" extends="SaOrder">
<result column="MEMBER_CODE" property="memberCode"/>
@ -329,4 +328,69 @@
and #{endDate} > so.pay_time
</select>
<!-- 通用查询映射结果 -->
<resultMap id="SaOrderItems" type="com.hzs.common.domain.sale.ext.SaOrderItemsExt">
<result column="PK_ORDER" property="pkOrder"/>
<result column="PK_ID" property="pkId"/>
<result column="PRICE" property="price"/>
<result column="PK_WARES" property="pkWares"/>
<result column="PK_PRODUCT" property="pkProduct"/>
<result column="PK_WARES_DETAIL" property="pkWaresDetail"/>
<result column="PK_WARES_SPECS_SKU" property="pkWaresSpecsSku"/>
<collection property="waresRangeTmpList" ofType="com.hzs.common.domain.sale.wares.ext.WaresRangeTmp">
<result column="RANGE_PRICE" property="rangePrice"/>
<result column="RANGE_VALUE" property="rangeValue"/>
</collection>
</resultMap>
<!-- 查询商品级差数据 -->
<select id="listOrderWaresRange" resultType="com.hzs.common.domain.sale.ext.SaOrderItemsExt">
select soi.pk_order,
soi.pk_id,
soi.price,
bwr.pk_wares,
bwr.pk_product,
bwr.pk_wares_detail,
bwr.pk_wares_specs_sku,
bwr.price range_price,
br.range_value
from (select so.pk_id pk_order,
soi.pk_id,
soi.pk_wares,
soi.pk_product,
soi.pk_wares_detail,
soi.pk_wares_specs_sku,
soi.price
from sa_order so
left join sa_order_items soi
on soi.pk_order = so.pk_id
where so.del_flag = 0
and soi.del_flag = 0
and soi.is_gift = 1
and so.order_code in
<foreach collection="orderList" item="items" open="(" separator="," close=")">
#{items.orderCode}
</foreach>
group by so.pk_id,
soi.pk_id,
soi.pk_wares,
soi.pk_product,
soi.pk_wares_detail,
soi.pk_wares_specs_sku,
soi.price) soi
left join bd_wares_range bwr
on bwr.pk_wares = soi.pk_wares
and bwr.pk_product = soi.pk_product
and bwr.pk_wares_detail = soi.pk_wares_detail
and bwr.pk_wares_specs_sku = soi.pk_wares_specs_sku
left join bd_range br
on br.pk_id = bwr.pk_range
and br.del_flag = 0
order by bwr.pk_wares,
bwr.pk_product,
bwr.pk_wares_detail,
bwr.pk_wares_specs_sku,
br.range_value
</select>
</mapper>

View File

@ -2,58 +2,4 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.swing.mapper.CuMemberSwingNetLogMapper">
<!-- 通用查询映射结果 -->
<resultMap id="CuMemberSwingNetLog" type="com.hzs.common.domain.member.swing.CuMemberSwingNetLog">
<id column="PK_ID" property="pkId" />
<result column="CREATION_TIME" property="creationTime" />
<result column="MODIFIED_TIME" property="modifiedTime" />
<result column="DEL_FLAG" property="delFlag" />
<result column="PK_CREATOR" property="pkCreator" />
<result column="PK_MODIFIED" property="pkModified" />
<result column="PK_COUNTRY" property="pkCountry" />
<result column="PK_MEMBER" property="pkMember" />
<result column="PERIOD" property="period" />
<result column="PLACE_DEPT" property="placeDept" />
<result column="NET_FIRST_ACHIEVE" property="netFirstAchieve" />
<result column="NET_REPURCHASE_ACHIEVE" property="netRepurchaseAchieve" />
<result column="NET_REAL_ACHIEVE" property="netRealAchieve" />
<result column="A_SUM_PV" property="aSumPv" />
<result column="B_SUM_PV" property="bSumPv" />
<result column="A_SUM_REAL_PV" property="aSumRealPv" />
<result column="B_SUM_REAL_PV" property="bSumRealPv" />
<result column="REP_A_SUM_PV" property="repASumPv" />
<result column="REP_B_SUM_PV" property="repBSumPv" />
</resultMap>
<update id="mergeCuMemberSwingNetLogByAchieve">
merge into cu_member_swing_net_log a
using (
select x.*,(x.net_first_achieve+x.net_repurchase_achieve) net_real_achieve,
y.a_sum_pv,y.b_sum_pv,y.a_sum_real_pv,y.b_sum_real_pv,y.rep_a_new_pv rep_a_sum_pv,y.rep_b_new_pv rep_b_sum_pv,'100000000' pk_creator from(
select pk_member,place_dept,period,pk_country,sum(net_first_achieve) net_first_achieve,
sum(net_repurchase_achieve) net_repurchase_achieve from(
<foreach collection="cuMemberAchieveExtList" item="item" separator=" union all">
select
#{item.pkMember} pk_member,#{item.placeDept} place_dept,#{item.period} period,
#{item.netFirstAchieve} net_first_achieve,#{item.netRepurchaseAchieve} net_repurchase_achieve,
#{item.pkCountry} pk_country from dual
</foreach>)
group by pk_member,place_dept,period,pk_country) x
inner join ${settleTableName} y
on x.pk_member=y.pk_member
) b
on (a.pk_member=b.pk_member and a.period=b.period and a.place_dept=b.place_dept)
when matched then
update set a.net_first_achieve=b.net_first_achieve,a.net_repurchase_achieve=b.net_repurchase_achieve,
a.net_real_achieve=b.net_real_achieve,a.a_sum_pv=b.a_sum_pv,a.b_sum_pv=b.b_sum_pv,
a.a_sum_real_pv=b.a_sum_real_pv,a.b_sum_real_pv=b.b_sum_real_pv,
a.rep_a_sum_pv=b.rep_a_sum_pv,a.rep_b_sum_pv=b.rep_b_sum_pv,modified_time=sysdate
when not matched then
insert
(PK_ID,pk_member,period,place_dept,net_first_achieve,net_repurchase_achieve,net_real_achieve,
a_sum_pv,b_sum_pv,a_sum_real_pv,b_sum_real_pv,rep_a_sum_pv,rep_b_sum_pv,pk_creator,pk_country)
values (CU_MEMBER_SWING_NET_LOG_SEQ.NEXTVAL,b.pk_member,b.period,b.place_dept,b.net_first_achieve,
b.net_repurchase_achieve,b.net_real_achieve,b.a_sum_pv,b.b_sum_pv,b.a_sum_real_pv,b.b_sum_real_pv,
b.rep_a_sum_pv,b.rep_b_sum_pv,b.pk_creator,b.pk_country)
</update>
</mapper>

View File

@ -197,23 +197,6 @@ public class CuBonusStatisServiceImpl extends ServiceImpl<CuBonusStatisMapper, C
case REPURCHASE_COUPONS:
oldBon.setRepurCouponSubtotal(addOrInitializeAmount(oldBon.getRepurCouponSubtotal(), newBon.getRealIncome(), 2));
break;
case HELP_EACH_INCOME:
oldBon.setRepurPushIncome(addOrInitializeAmount(oldBon.getRepurPushIncome(), newBon.getRealIncome(), 2));
break;
//云代
case CLOUD_AGENT_DIRECT_PUSH:
oldBon.setAgentIntroduceBonus(addOrInitializeAmount(oldBon.getAgentIntroduceBonus(), newBon.getRealIncome(), 2));
break;
case CLOUD_AGENT_FIRST_PURCHASE:
oldBon.setCloudAgentFirstPurchase(addOrInitializeAmount(oldBon.getCloudAgentFirstPurchase(), newBon.getRealIncome(), 2));
break;
case CLOUD_AGENT_REPURCHASE:
oldBon.setCloudAgentRepurchase(addOrInitializeAmount(oldBon.getCloudAgentRepurchase(), newBon.getRealIncome(), 2));
break;
//嗨粉直推收益
case HI_PINK:
oldBon.setHiFunIncome(addOrInitializeAmount(oldBon.getHiFunIncome(), newBon.getRealIncome(), 2));
break;
}
return oldBon;
}

View File

@ -120,6 +120,9 @@ public class ApiRetailWaresController extends BaseController {
param.setPkCountry(SecurityUtils.getPkCountry());
// 商品详情
RetailWaresDetailVO waresDetailVO = iBdWaresSpecsSkuService.queryWaresDetail(param, cuMemberExt.getPkSettleGrade());
if (null == waresDetailVO) {
return AjaxResult.error("商品数据不存在,请刷新后重试");
}
// 预计发货时间
if (waresDetailVO.getArrivalTime() != null && waresDetailVO.getCreationTime() != null) {

View File

@ -573,6 +573,7 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
productList.addAll(productResultList);
waresDetailVO.setProductList(productList);
waresDetailVO.setSpecialArea(param.getSpecialArea());
return waresDetailVO;
}
return null;

View File

@ -31,19 +31,14 @@ public class MagicNumberConstants {
public static final Integer ADDEND = 1;
/**
* 更新条数
* 更新删除条数
*/
public static final Integer BATCH_UPDATE_NUM = 300;
public static final Integer BATCH_UPDATE_NUM = 200;
/**
* 更新条数
* 查询条数
*/
public static final Integer BATCH_QUERY_NUM = 400;
/**
* 数据库批量更新(删除)
*/
public static final Integer DELETE_DATA_BATCH_UPDATE_NUM = 200;
public static final Integer BATCH_QUERY_NUM = 300;
/**
* 系统管理员主键

View File

@ -14,7 +14,6 @@ public class BonusMsgConstants {
* 月度分红平均收益
*/
public static String RETAIL_BENEFIT_AVG_INCOME = "获得 %f 月度分红福利平均收益,结算月%s。";
/**
* 月度分红加权收益
*/
@ -33,11 +32,11 @@ public class BonusMsgConstants {
/**
* 月度福利级差
*/
public static String RETAIL_RANGE = "订单编号%s,%s为%s贡献了福利级差收益,计算业绩%f,前一级差等级名称%s,当前级差等级名称%s。";
public static String RETAIL_RANGE = "订单编号%s,%s为%s贡献了月度福利级差收益,计算业绩%f,前一级差等级名称%s,当前级差等级名称%s。";
/**
* 月度复购级差
*/
public static String RETAIL_MONTH_REPURCHASE_INCOME = "订单编号%s,%s为%s贡献了复购级差收益,计算业绩%f,前一级差等级名称%s,当前级差等级名称%s。";
public static String RETAIL_MONTH_REPURCHASE_INCOME = "订单编号%s,%s为%s贡献了月度复购级差收益,计算业绩%f,前一级差等级名称%s,当前级差等级名称%s。";
/**
* 直推级差收益说明
@ -49,6 +48,11 @@ public class BonusMsgConstants {
*/
public static String ORI_RANGE = "订单编号%s,%s为%s贡献了平级收益,计算业绩%f,等级名称%s。";
/**
* 复购级差
*/
public static String RETAIL_REPURCHASE_INCOME = "订单编号%s,%s为%s贡献了复购级差收益,计算金额%f,当前级差等级名称%s。";
/**
* 奖金重算 -- 只能重算7天内的奖金
*/

View File

@ -11,14 +11,6 @@ import lombok.Getter;
@Getter
public enum EBonusItems {
/**
* 嗨粉直推 禁用
*/
HI_PINK(1, "旧嗨粉直推", 1, EnumsPrefixConstants.BONUS_ITEMS + 1),
/**
* 启动卡直推
*/
BOOT_CARD(2, "旧启动卡直推", 0, EnumsPrefixConstants.BONUS_ITEMS + 2),
/**
* 直推收益
*/
@ -40,9 +32,9 @@ public enum EBonusItems {
*/
SERVICE_SUBSIDIES(7, "旧服务补贴", 0, EnumsPrefixConstants.BONUS_ITEMS + 7),
/**
* 复购差收益
* 复购差收益
*/
REPURCHASE_RANGE_INCOME(8, "旧复购极差收益", 0, EnumsPrefixConstants.BONUS_ITEMS + 8),
REPURCHASE_RANGE_INCOME(8, "复购级差收益", 0, EnumsPrefixConstants.BONUS_ITEMS + 8),
/**
* 消费拓展收益
*/
@ -63,26 +55,10 @@ public enum EBonusItems {
* 复购券均分收益
*/
REPURCHASE_COUPONS_SHARE(13, "旧复购券均分", 0, EnumsPrefixConstants.BONUS_ITEMS + 13),
/**
* 云代直推收益 修改为幸运收益
*/
CLOUD_AGENT_DIRECT_PUSH(14, "旧幸运收益", 0, EnumsPrefixConstants.BONUS_ITEMS + 14),
/**
* 云代首购收益 修改为极差收益
*/
CLOUD_AGENT_FIRST_PURCHASE(15, "旧极差收益", 0, EnumsPrefixConstants.BONUS_ITEMS + 15),
/**
* 云代复购收益 修改为平级收益
*/
CLOUD_AGENT_REPURCHASE(16, "旧平级收益", 0, EnumsPrefixConstants.BONUS_ITEMS + 16),
/**
* 店铺收益
*/
STORE_INCOME(23, "旧店铺收益", 0, EnumsPrefixConstants.BONUS_ITEMS + 23),
/**
* 复购直推收益 修改为互助收益
*/
HELP_EACH_INCOME(24, "旧互助收益", 0, EnumsPrefixConstants.BONUS_ITEMS + 24),
////////////////////////////////////////////////// 新奖项 //////////////////////////////////////////////////

View File

@ -6,12 +6,6 @@ import lombok.Getter;
/**
* 业绩查询数据类型
*
* @Description:
* @Author: ljc
* @Time: 2023/5/24 17:59
* @Classname: EDadaType
* @Package_name: com.hzs.common.core.enums
*/
@AllArgsConstructor
@Getter
@ -25,7 +19,7 @@ public enum EDadaType {
*/
FIRST_PURCHASE(2, "首购", 0, EnumsPrefixConstants.DADA_TYPE + "2"),
/**
*复购
* 复购
*/
REPURCHASE(3, "复购", 0, EnumsPrefixConstants.DADA_TYPE + "3"),

View File

@ -1,51 +0,0 @@
package com.hzs.common.core.enums;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Description: 极差奖衔枚举
* @Author: sui q
* @Time: 2022/9/1 17:39
* @Classname: EAwards
* @PackageName: com.hzs.common.core.enums
*/
@AllArgsConstructor
@Getter
public enum ERangeAwards {
S0(0, "S0", 0, EnumsPrefixConstants.RANGE_AWARDS + 0),
S1(2, "S1", 0, EnumsPrefixConstants.RANGE_AWARDS + 2),
S2(4, "S2", 0, EnumsPrefixConstants.RANGE_AWARDS + 4),
S3(6, "S3", 0, EnumsPrefixConstants.RANGE_AWARDS + 6),
S4(8, "S4", 0, EnumsPrefixConstants.RANGE_AWARDS + 8),
S5(10, "S5", 0, EnumsPrefixConstants.RANGE_AWARDS + 10),
S6(12, "S6", 0, EnumsPrefixConstants.RANGE_AWARDS + 12),
S7(14, "S7", 0, EnumsPrefixConstants.RANGE_AWARDS + 14);
/**
* 实际值
*/
private final int value;
/**
* 显示标签
*/
private final String label;
/**
* 是否启用0=,1= -- 来源EYesNo
*/
private final int enable;
/**
* 国际化翻译key值
*/
private final String key;
}

View File

@ -5,11 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author: sui q
* @time: 2022/8/27 10:35
* @description: 极差类型枚举
* @classname: ERangeType
* @package_name: com.hzs.common.core.enums
* 极差类型枚举
*/
@AllArgsConstructor
@Getter

View File

@ -3,18 +3,16 @@ package com.hzs.common.domain.sale.ext;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hzs.common.domain.sale.order.SaOrderItems;
import com.hzs.common.domain.sale.wares.ext.WaresRangeTmp;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Description: 订单详情扩展
* @Author: jiang chao
* @Time: 2022/10/19 16:46
* @Classname: SaOrderItemExt
* @PackageName: com.hzs.common.domain.sale.ext
* 订单详情扩展
*/
@EqualsAndHashCode(callSuper = true)
@Data
@ -180,4 +178,10 @@ public class SaOrderItemsExt extends SaOrderItems {
* 供货价格
*/
private BigDecimal supplyPrice;
/**
* 极差数据
*/
private List<WaresRangeTmp> waresRangeTmpList;
}

View File

@ -12,12 +12,7 @@ import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* <p>
* 极差明细表
* </p>
*
* @author hzs
* @since 2022-09-09
*/
@Data
@EqualsAndHashCode(callSuper = true)

View File

@ -0,0 +1,23 @@
package com.hzs.common.domain.sale.wares.ext;
import lombok.Data;
import java.math.BigDecimal;
/**
* 极差明细临时实体
*/
@Data
public class WaresRangeTmp {
/**
* 价格
*/
private BigDecimal rangePrice;
/**
* 级别值
*/
private Integer rangeValue;
}

View File

@ -10,12 +10,7 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
* 体系配置
* </p>
*
* @author hzs
* @since 2022-10-31
*/
@Data
@EqualsAndHashCode(callSuper = true)

View File

@ -0,0 +1,40 @@
package com.hzs.common.domain.vertex;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 体系奖金配置记录哪个体系走特殊奖金
*/
@Data
@Accessors(chain = true)
@KeySequence("BD_VERTEX_BONUS_SEQ")
@TableName("BD_VERTEX_BONUS")
public class BdVertexBonus {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId("PK_ID")
private Integer pkId;
/**
* 体系ID
*/
@TableField("PK_VERTEX")
private Long pkVertex;
/**
* 类型8=复购级差 -- 使用 EBonusItems 枚举
*/
@TableField("BONUS_ITEMS")
private Integer bonusItems;
}

View File

@ -20,7 +20,7 @@ public class CodeGenerator {
// 模块名称包名
String moduleName = "com.hzs.common.domain";
// 表名
String[] tables = {"SA_TICKET"};
String[] tables = {"BD_VERTEX_SYSTEM"};
// 生成实体是否继承统一父类
boolean superBool = true;
@ -32,7 +32,7 @@ public class CodeGenerator {
// 输出目录
globalConfig.setOutputDir(projectPath + "/code-util/src/main/java")
// 作者
.setAuthor("hzs")
.setAuthor("bd")
// 时间使用Date
.setDateType(DateType.ONLY_DATE)
// // 生成实体后缀追加 Entity
@ -48,10 +48,10 @@ public class CodeGenerator {
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
// dsc.setSchemaName("public");
dataSourceConfig.setUrl("jdbc:oracle:thin:@39.107.153.159:1521/orcl")
dataSourceConfig.setUrl("jdbc:oracle:thin:@101.201.51.180:1521/orcl")
.setDriverName("oracle.jdbc.driver.OracleDriver")
.setUsername("hzs_retail")
.setPassword("123456")
.setUsername("retail")
.setPassword("pwRetailTest180")
.setDbType(DbType.ORACLE);
mpg.setDataSource(dataSourceConfig);