diff --git a/bd-api/bd-api-report/src/main/java/com/hzs/report/order/IPerformanceSummaryServiceApi.java b/bd-api/bd-api-report/src/main/java/com/hzs/report/order/IPerformanceSummaryServiceApi.java new file mode 100644 index 00000000..357fe024 --- /dev/null +++ b/bd-api/bd-api-report/src/main/java/com/hzs/report/order/IPerformanceSummaryServiceApi.java @@ -0,0 +1,19 @@ +package com.hzs.report.order; + +import com.hzs.common.core.domain.R; +import com.hzs.system.sys.dto.ApprovalBusinessResultDTO; + +/** + * 订单服务对外提供接口 + */ +public interface IPerformanceSummaryServiceApi { + + /** + * 按天创建统计数据 + * + * @param day + * @return + */ + R createDataByDay(String day); + +} diff --git a/bd-business/bd-business-bonus/pom.xml b/bd-business/bd-business-bonus/pom.xml index 21cf1ac9..caad04c9 100644 --- a/bd-business/bd-business-bonus/pom.xml +++ b/bd-business/bd-business-bonus/pom.xml @@ -39,11 +39,17 @@ com.bd bd-common-aop + com.bd bd-api-bonus + + com.bd + bd-api-report + + org.springframework.amqp diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java index 5358fd25..ab48d9c5 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/ICuMemberRetailDetailService.java @@ -16,7 +16,8 @@ public interface ICuMemberRetailDetailService extends IService memberRangeExtMap, EBonusStage eBonusStage); + void listMemberRetailDetail(String retailDetailTableName, Map memberRangeExtMap, + EBonusStage eBonusStage, List stageMemberList); /** * 指定会员获取对应的点位数据 diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java index e59bc8a9..435bcfb9 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailDetailServiceImpl.java @@ -23,8 +23,14 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl memberRangeExtMap, EBonusStage eBonusStage) { - List> pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM); + public void listMemberRetailDetail(String retailDetailTableName, Map memberRangeExtMap, + EBonusStage eBonusStage, List stageMemberList) { + List> pkMemberList; + if (CollectionUtil.isNotEmpty(stageMemberList)) { + pkMemberList = cuMemberBonusSettle.handleCutList(stageMemberList, MagicNumberConstants.BATCH_QUERY_NUM); + } else { + pkMemberList = cuMemberBonusSettle.handleCutList(memberRangeExtMap.keySet(), MagicNumberConstants.BATCH_QUERY_NUM); + } pkMemberList.forEach(tmpIdList -> { // 查询明细数据(指定阶段,未完成的) List tmpList = baseMapper.listMemberRetailDetail(retailDetailTableName, tmpIdList, eBonusStage.getValue()); @@ -41,9 +47,16 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl()); } + // 使用有序map,为了后续业务处理方便 if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { - // 阶段一点位列表(使用有序map,为了后续业务处理方便) + // 阶段一点位列表 cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); + } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { + // 阶段二点位列表 + cuMemberRetailRangeExt.getTwoDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); + } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) { + // 阶段三点位列表 + cuMemberRetailRangeExt.getThreeDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); } } } @@ -59,12 +72,26 @@ public class CuMemberRetailDetailServiceImpl extends ServiceImpl()); + } + if (null == cuMemberRetailRangeExt.getTwoDetailMap()) { + cuMemberRetailRangeExt.setTwoDetailMap(new LinkedHashMap<>()); + } + if (null == cuMemberRetailRangeExt.getThreeDetailMap()) { + cuMemberRetailRangeExt.setThreeDetailMap(new LinkedHashMap<>()); + } + // 使用有序map,为了后续业务处理方便 if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { - // 阶段一点位列表(使用有序map,为了后续业务处理方便) - if (null == cuMemberRetailRangeExt.getOneDetailMap()) { - cuMemberRetailRangeExt.setOneDetailMap(new LinkedHashMap<>()); - } + // 阶段一点位列表 cuMemberRetailRangeExt.getOneDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); + } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { + // 阶段二点位列表 + cuMemberRetailRangeExt.getTwoDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); + } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) { + // 阶段三点位列表 + cuMemberRetailRangeExt.getThreeDetailMap().put(cuMemberRetailDetail.getChildNode(), cuMemberRetailDetail); } } } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java index 87745682..91841667 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberRetailRangeServiceImpl.java @@ -106,6 +106,24 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl 0) { + Collection tmpDetailColl = value.getTwoDetailMap().values(); + for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailColl) { + // 只有需要更新的才进行入库操作 + if (null != cuMemberRetailDetail.getUpdateBool()) { + retailDetailColl.add(cuMemberRetailDetail); + } + } + } + if (null != value.getThreeDetailMap() && value.getThreeDetailMap().size() > 0) { + Collection tmpDetailColl = value.getThreeDetailMap().values(); + for (CuMemberRetailDetail cuMemberRetailDetail : tmpDetailColl) { + // 只有需要更新的才进行入库操作 + if (null != cuMemberRetailDetail.getUpdateBool()) { + retailDetailColl.add(cuMemberRetailDetail); + } + } + } }); List> list = cuMemberBonusSettle.handleCutList(retailDetailColl); list.forEach(tmpList -> { diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/controller/api/ApiCuMemberBonusController.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/controller/api/ApiCuMemberBonusController.java index 93552aa3..dc5a6d20 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/controller/api/ApiCuMemberBonusController.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/controller/api/ApiCuMemberBonusController.java @@ -50,10 +50,11 @@ 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.getRepurRangeIncome()), - cuMemberBonus.getRetailRealSubtotal() - ); +// BigDecimal serviceSpend = ComputeUtil.computeSubtract( +// ComputeUtil.computeAddNum(cuMemberBonus.getRetailRangeIncome(), cuMemberBonus.getRetailSameLevelIncome(), cuMemberBonus.getRetailAreaIncome(), cuMemberBonus.getRepurRangeIncome()), +// cuMemberBonus.getRetailRealSubtotal() +// ); + BigDecimal serviceSpend = BigDecimal.ZERO; memberBonusVO.setBackPoints(serviceSpend); memberBonusVOList.add(memberBonusVO); } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/dto/BonusStageData.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/dto/BonusStageData.java index 36cdcbbe..eb5ff7ea 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/dto/BonusStageData.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/dto/BonusStageData.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; /** - * 阶段奖金数据 + * 阶段数据 */ @Builder @AllArgsConstructor @@ -38,4 +38,13 @@ public class BonusStageData { */ private Integer stageNum; + /** + * 二阶段点位 + */ + private CuMemberRetailDetail twoRetailDetail; + /** + * 三阶段点位 + */ + private CuMemberRetailDetail threeRetailDetail; + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java index cffb0062..a3e1dec7 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/mapper/CuMemberBonusStageMapper.java @@ -1,7 +1,10 @@ package com.hzs.bonus.bonus.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hzs.bonus.bonus.param.BonusParam; import com.hzs.common.domain.member.bonus.CuMemberBonusStage; +import com.hzs.common.domain.member.ext.CuMemberBonusDetailExt; +import com.hzs.common.domain.member.ext.CuMemberBonusPushExt; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -21,4 +24,13 @@ public interface CuMemberBonusStageMapper extends BaseMapper */ void batchInsertCuMemberBonusStage(@Param("cuMemberBonusStageList") List cuMemberBonusStageList); + + + + /** + * 根据查询条件查询固定的奖金明细(阶段收益) + * + * @param bonusParam 查询条件 + */ + List queryMemberBonusStageByBonusItemsFoServer(@Param("bonusParam") BonusParam bonusParam); } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java index 3cc8468c..73ed092d 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/ICuMemberBonusStageService.java @@ -40,7 +40,7 @@ public interface ICuMemberBonusStageService extends IService /** * 填充指定点位 */ - boolean fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, + void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage, List bonusStageDataList); diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusGrantServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusGrantServiceImpl.java index 5f3dae11..c8a4d4a2 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusGrantServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusGrantServiceImpl.java @@ -179,9 +179,9 @@ public class BonusGrantServiceImpl implements IBonusGrantService { // 奖金币(首购+复购+云代+海粉+嗨粉+店铺) packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRealIncomeTotal(), currencyDTO.getOutExchangeRate()), settleDate); // 重销币(商城重消+平台服务费) - packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPEAT.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getBackPoints(), currencyDTO.getOutExchangeRate()), settleDate); +// 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.REPURCHASE.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRepurCouponSubtotal(), currencyDTO.getOutExchangeRate()), settleDate); }); List seqList = iCuMemberTradeService.batchQueryCuMemberTradeSeq(cuMemberTradeList.size()); // 新增流水明细,记录奖金明细的发放状态、消费明细 @@ -236,9 +236,9 @@ public class BonusGrantServiceImpl implements IBonusGrantService { // 奖金币(首购+复购+云代+海粉+嗨粉+店铺) packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRealIncomeTotal(), currencyDTO.getOutExchangeRate()), settleDate); // 重销币(商城重消+平台服务费) - packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPEAT.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getBackPoints(), currencyDTO.getOutExchangeRate()), settleDate); +// 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.REPURCHASE.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRepurCouponSubtotal(), currencyDTO.getOutExchangeRate()), settleDate); }); List seqList = iCuMemberTradeService.batchQueryCuMemberTradeSeq(cuMemberTradeList.size()); // 新增流水明细,记录奖金明细的发放状态、消费明细 diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java index c00f9fb9..9873611b 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHandle.java @@ -83,10 +83,18 @@ public abstract class BonusSettleHandle { */ protected void stageIncomeRemark(SaOrderExt saOrderExt, CuMemberBonusStage cuMemberBonusStage, CuMemberRetailRangeExt sourceMember, CuMemberRetailRangeExt targetMember) { - String remark = String.format(BonusMsgConstants.STAGE_INCOME, saOrderExt.getOrderCode(), - sourceMember.getMemberCode() + sourceMember.getMemberName(), - targetMember.getMemberCode() + targetMember.getMemberName(), - cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage()); + String remark; + if (null != saOrderExt) { + remark = String.format(BonusMsgConstants.STAGE_INCOME, saOrderExt.getOrderCode(), + sourceMember.getMemberCode() + sourceMember.getMemberName(), + targetMember.getMemberCode() + targetMember.getMemberName(), + cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage()); + } else { + remark = String.format(BonusMsgConstants.STAGE_INCOME_OTHER, + sourceMember.getMemberCode() + sourceMember.getMemberName(), + targetMember.getMemberCode() + targetMember.getMemberName(), + cuMemberBonusStage.getChildNode(), cuMemberBonusStage.getStage()); + } cuMemberBonusStage.setRemark(remark); } @@ -155,43 +163,43 @@ public abstract class BonusSettleHandle { .pkRate(pkRate) .incomeStatus(incomeStatus) .directIncome(BigDecimal.ZERO) - .expandIncome(BigDecimal.ZERO) - .expandNoCapping(BigDecimal.ZERO) - .expandCapping(BigDecimal.ZERO) - .coachIncome(BigDecimal.ZERO) - .shareIncome(BigDecimal.ZERO) - .serviceIncome(BigDecimal.ZERO) - .backPoints(BigDecimal.ZERO) - .serviceSpend(BigDecimal.ZERO) - .purRealSubtotal(BigDecimal.ZERO) - .repurPushIncome(BigDecimal.ZERO) - .repurRangeIncome(BigDecimal.ZERO) - .repurExpandIncome(BigDecimal.ZERO) - .repurRealSubtotal(BigDecimal.ZERO) - .cloudDirectIncome(BigDecimal.ZERO) - .cloudPurIncome(BigDecimal.ZERO) - .cloudRepurIncome(BigDecimal.ZERO) - .cloudRealSubtotal(BigDecimal.ZERO) - .repurCoupon(BigDecimal.ZERO) - .repurCouponShare(BigDecimal.ZERO) - .repurCouponSubtotal(BigDecimal.ZERO) +// .expandIncome(BigDecimal.ZERO) +// .expandNoCapping(BigDecimal.ZERO) +// .expandCapping(BigDecimal.ZERO) +// .coachIncome(BigDecimal.ZERO) +// .shareIncome(BigDecimal.ZERO) +// .serviceIncome(BigDecimal.ZERO) +// .backPoints(BigDecimal.ZERO) +// .serviceSpend(BigDecimal.ZERO) +// .purRealSubtotal(BigDecimal.ZERO) +// .repurPushIncome(BigDecimal.ZERO) +// .repurRangeIncome(BigDecimal.ZERO) +// .repurExpandIncome(BigDecimal.ZERO) +// .repurRealSubtotal(BigDecimal.ZERO) +// .cloudDirectIncome(BigDecimal.ZERO) +// .cloudPurIncome(BigDecimal.ZERO) +// .cloudRepurIncome(BigDecimal.ZERO) +// .cloudRealSubtotal(BigDecimal.ZERO) +// .repurCoupon(BigDecimal.ZERO) +// .repurCouponShare(BigDecimal.ZERO) +// .repurCouponSubtotal(BigDecimal.ZERO) .globalPoints(BigDecimal.ZERO) - .carAwardPoints(BigDecimal.ZERO) - .hiFunIncome(BigDecimal.ZERO) - .haiFunIncome(BigDecimal.ZERO) +// .carAwardPoints(BigDecimal.ZERO) +// .hiFunIncome(BigDecimal.ZERO) +// .haiFunIncome(BigDecimal.ZERO) .storeIncome(BigDecimal.ZERO) - .makerDirectIncome(BigDecimal.ZERO) - .makerShareIncome(BigDecimal.ZERO) - .makerRealSubtotal(BigDecimal.ZERO) +// .makerDirectIncome(BigDecimal.ZERO) +// .makerShareIncome(BigDecimal.ZERO) +// .makerRealSubtotal(BigDecimal.ZERO) .realIncomeTotal(BigDecimal.ZERO) - .retailRangeIncome(BigDecimal.ZERO) - .retailSameLevelIncome(BigDecimal.ZERO) - .retailAreaIncome(BigDecimal.ZERO) - .retailBenefitRangeIncome(BigDecimal.ZERO) - .retailMonthRepurchaseIncome(BigDecimal.ZERO) - .retailBenefitAvgIncome(BigDecimal.ZERO) - .retailBenefitIncome(BigDecimal.ZERO) - .retailRealSubtotal(BigDecimal.ZERO) +// .retailRangeIncome(BigDecimal.ZERO) +// .retailSameLevelIncome(BigDecimal.ZERO) +// .retailAreaIncome(BigDecimal.ZERO) +// .retailBenefitRangeIncome(BigDecimal.ZERO) +// .retailMonthRepurchaseIncome(BigDecimal.ZERO) +// .retailBenefitAvgIncome(BigDecimal.ZERO) +// .retailBenefitIncome(BigDecimal.ZERO) +// .retailRealSubtotal(BigDecimal.ZERO) .build(); cuMemberBonus.setPkCreator(MagicNumberConstants.PK_ADMIN); cuMemberBonus.setPkCountry(pkCountry); @@ -215,8 +223,8 @@ public abstract class BonusSettleHandle { backRatio = bdBonusDeduct.getBackRatio(); platformRatio = bdBonusDeduct.getPlatformRatio(); } - cuMemberBonus.setBackPoints(ComputeUtil.computeAdd(cuMemberBonus.getBackPoints(), ComputeUtil.computeBonusMultiply(pretaxIncome, backRatio))); - cuMemberBonus.setServiceSpend(ComputeUtil.computeAdd(cuMemberBonus.getServiceSpend(), ComputeUtil.computeBonusMultiply(pretaxIncome, platformRatio))); +// cuMemberBonus.setBackPoints(ComputeUtil.computeAdd(cuMemberBonus.getBackPoints(), ComputeUtil.computeBonusMultiply(pretaxIncome, backRatio))); +// cuMemberBonus.setServiceSpend(ComputeUtil.computeAdd(cuMemberBonus.getServiceSpend(), ComputeUtil.computeBonusMultiply(pretaxIncome, platformRatio))); } /** @@ -225,7 +233,7 @@ public abstract class BonusSettleHandle { protected void setRetailTotal(BdBonusDeduct bdBonusDeduct, CuMemberBonus cuMemberBonus, Object bonusDetail) { setBonusDeduct(bdBonusDeduct, cuMemberBonus, bonusDetail); BigDecimal realIncome = ReflectUtils.invokeGetter(bonusDetail, BonusFieldConstants.REAL_INCOME); - cuMemberBonus.setRetailRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getRetailRealSubtotal(), realIncome)); +// cuMemberBonus.setRetailRealSubtotal(ComputeUtil.computeAdd(cuMemberBonus.getRetailRealSubtotal(), realIncome)); cuMemberBonus.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonus.getRealIncomeTotal(), realIncome)); } @@ -248,7 +256,9 @@ public abstract class BonusSettleHandle { ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_TAX, incomeTax); ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.REAL_INCOME, realIncome); // 收益占比 - ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_RATIO, ComputeUtil.computeDivide(realIncome, ComputeUtil.computeDivide(orderAmount, exchangeRate))); + if (null != orderAmount && null != exchangeRate) { + ReflectUtils.invokeSetter(cuMemberDetail, BonusFieldConstants.INCOME_RATIO, ComputeUtil.computeDivide(realIncome, ComputeUtil.computeDivide(orderAmount, exchangeRate))); + } return bdBonusDeduct; } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java index d25286d4..b15967f9 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleRangeHandle.java @@ -275,7 +275,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { Date settleEndDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleStartDate); // 新零售订单(注册、复购) - List orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null, Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue())); + List orderList = iBonusOrderService.listRetailSaOrder(settleStartDate, settleEndDate, null, + Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue())); // 更新当月会员, 将昨天业绩更到到今天,更新当月会员考核结果,有消费的考核通过 // 结算期间表 @@ -294,6 +295,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 初始化结算明细数据(昨天数据更新到今天数据) iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName); + // 升阶段点位列表 + List stageList = new ArrayList<>(); + if (orderList.size() > 0) { // 按照血缘,查询该会员所有伞上会员 List memberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeParent(rangeTableName, orderList); @@ -306,7 +310,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } } // 查询血缘会员明细数据(一阶段) - iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE); + iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.ONE, null); // 奖衔 Map retailAwardsMap = new HashMap<>(); @@ -331,11 +335,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 直推收益 -- 来源订单金额,直推拿金额的10% this.calculateDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt, bonusConfigDTO, period, cuMemberBonusMap); - - // TODO 阶段收益 -- 来源订单金额 - this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period, - memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE); - + // 一阶段收益 -- 来源订单金额 + stageList.addAll(this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period, + memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName)); // TODO 领导级差收益 -- 来源PV // TODO 领导平差收益 -- 来源PV @@ -344,13 +346,32 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 见点收益 -- 来源订单业绩,血缘上20代,每代拿业绩的10% this.calculateRepurDirectIncome(cuMemberBonusPushList, memberRangeExtMap, saOrderExt, bonusConfigDTO, period, cuMemberBonusMap); - // TODO 阶段收益 -- 来源订单业绩 - + // 一阶段收益 -- 来源订单累计业绩 + stageList.addAll(this.calculateStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period, + memberRangeExtMap, saOrderExt, settleStartDate, rangeTableName, rangeDetailTableName)); } } - // TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理 + // TODO 处理升二阶段点位 + if (CollectionUtil.isNotEmpty(stageList)) { + List stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList()); + // 查询血缘会员明细数据(二阶段) + iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.TWO, stageMemberList); + // 二阶段收益 + stageList = this.calculateStageIncomeTwoThree(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period, + memberRangeExtMap, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.TWO, stageList); + } + + // TODO 处理升三阶段点位 + if (CollectionUtil.isNotEmpty(stageList)) { + List stageMemberList = stageList.stream().map(CuMemberRetailDetail::getPkMember).collect(Collectors.toList()); + // 查询血缘会员明细数据(三段) + iCuMemberRetailDetailService.listMemberRetailDetail(rangeDetailTableName, memberRangeExtMap, EBonusStage.THREE, stageMemberList); + // 二阶段收益 + this.calculateStageIncomeTwoThree(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period, + memberRangeExtMap, settleStartDate, rangeTableName, rangeDetailTableName, EBonusStage.THREE, stageList); + } if (cuMemberBonusPushList.size() > 0) { bonusRecordDetailVO.setCuMemberBonusPushList(cuMemberBonusPushList); @@ -721,7 +742,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { rangeRetailRemark(saOrderExt, cuMemberBonusRange, sourceMemberRangeExt, targetMemberRangeExt); BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) { - cuMemberBonus.setRetailRangeIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailRangeIncome(), cuMemberBonusRange.getPretaxIncome())); +// cuMemberBonus.setRetailRangeIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailRangeIncome(), cuMemberBonusRange.getPretaxIncome())); setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange); } memberBonusRangeList.add(cuMemberBonusRange); @@ -741,7 +762,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { oriRetailRangeRemark(saOrderExt, oriMemberBonusRange, sourceMemberRangeExt, targetMemberRangeExt); BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, oriMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); if (EBonusIncomeStatus.NORMAL.getValue() == oriMemberBonusRange.getIncomeStatus()) { - cuMemberBonus.setRetailSameLevelIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailSameLevelIncome(), oriMemberBonusRange.getPretaxIncome())); +// cuMemberBonus.setRetailSameLevelIncome(ComputeUtil.computeAdd(cuMemberBonus.getRetailSameLevelIncome(), oriMemberBonusRange.getPretaxIncome())); setRetailTotal(bdBonusDeduct, cuMemberBonus, oriMemberBonusRange); } memberBonusRangeList.add(oriMemberBonusRange); @@ -930,26 +951,44 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { } /** - * 计算阶段收益 -- 精品专区 + * 计算一阶段收益 -- 精品专区、商城专区 */ - private void calculateStageIncome(List cuMemberBonusStageList, Map cuMemberBonusMap, - BonusConfigDTO bonusConfigDTO, Integer period, - Map memberRangeExtMap, SaOrderExt saOrderExt, - Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage) { - // 订单金额除50取整,为新増点位数量 - int newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue(); - if (newPointInt == 0) { - // 当前精品专区订单不足生成点位 - return; - } - + private List calculateStageIncome(List cuMemberBonusStageList, Map cuMemberBonusMap, + BonusConfigDTO bonusConfigDTO, Integer period, + Map memberRangeExtMap, SaOrderExt saOrderExt, + Date settleDate, String rangeTableName, String rangeDetailTableName) { + List returnRetailDetailList = new ArrayList<>(); // 订单会员 CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(saOrderExt.getPkMember()); + if (null == sourceMember) { + log.error("阶段收益处理失败,订单会员不存在. orderCode: {}, pkMember: {}", saOrderExt.getOrderCode(), saOrderExt.getPkMember()); + return returnRetailDetailList; + } + + int newPointInt; + if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() + || EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) { + // 精品专区按订单金额计算 + // 订单金额除50取整,为新増点位数量 + newPointInt = saOrderExt.getOrderAmount().divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue(); + } else { + // 商城专区按累计业绩处理 + BigDecimal repPvBalance = sourceMember.getRepPvBalance().add(saOrderExt.getOrderAchieve()); + newPointInt = repPvBalance.divide(RetailConstants.POINT_VAL, 0, RoundingMode.DOWN).intValue(); + sourceMember.setRepPvBalance(repPvBalance.subtract(RetailConstants.POINT_VAL.multiply(new BigDecimal(newPointInt)))); + } + if (newPointInt == 0) { + // 当前订单不足生成点位 + return returnRetailDetailList; + } + // 会员一阶段子点位列表 LinkedHashMap detailList = sourceMember.getOneDetailMap(); if (null == detailList) { detailList = new LinkedHashMap<>(); sourceMember.setOneDetailMap(detailList); + sourceMember.setTwoDetailMap(new LinkedHashMap<>()); + sourceMember.setThreeDetailMap(new LinkedHashMap<>()); } // 当前会员子点位总数 int pointCount = sourceMember.getPointCount(); @@ -968,76 +1007,138 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { .build(); detailList.put(newRetailDetail.getChildNode(), newRetailDetail); - // 阶段奖金处理列表 - List bonusStageDataList = new ArrayList<>(); - // 推荐人 - Long pkParent = sourceMember.getPkParent(); - while (true) { - CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent); - if (null == targetMember) { - // 没有推荐人了,则直接结束 - break; - } - pkParent = targetMember.getPkParent(); + this.handleStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period, + memberRangeExtMap, saOrderExt, settleDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE, + sourceMember, newRetailDetail, returnRetailDetailList); + } + sourceMember.setPointCount(sourceMember.getPointCount() + newPointInt); + return returnRetailDetailList; + } - // 推荐人一阶段子点位列表 - LinkedHashMap parentDetailList = targetMember.getOneDetailMap(); - if (CollectionUtil.isEmpty(parentDetailList)) { - // 推荐人没有未完成点位,继续往上找 - continue; - } - - // 推荐人第一层点位处理 - boolean forBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, - memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); - if (forBool) { - // 在第一层找到并填充点位,就开始下一个点位的处理 - break; - } - - // 推荐人第二层点位处理 - forBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, - memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); - if (forBool) { - // 在第二层找到并填充点位,就开始下一个点位的处理 - break; - } - - // 推荐人第三层点位处理 - forBool = iCuMemberBonusStageService.thirdLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, - memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); - if (forBool) { - // 在第三层找到并填充点位,就开始下一个点位的处理 - break; - } + /** + * 计算二、三阶段收益 + */ + private List calculateStageIncomeTwoThree(List cuMemberBonusStageList, Map cuMemberBonusMap, + BonusConfigDTO bonusConfigDTO, Integer period, + Map memberRangeExtMap, + Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage, + List stageList) { + List returnRetailDetailList = new ArrayList<>(); + for (CuMemberRetailDetail memberRetailDetail : stageList) { + // 订单会员 + CuMemberRetailRangeExt sourceMember = memberRangeExtMap.get(memberRetailDetail.getPkMember()); + if (null == sourceMember) { + log.error("阶段收益处理失败,{}会员不存在. pkMember: {}", eBonusStage.getLabel(), memberRetailDetail.getPkMember()); + return returnRetailDetailList; } - if (CollectionUtil.isNotEmpty(bonusStageDataList)) { - // 有需要生成奖金的数据 - for (BonusStageData bonusStageData : bonusStageDataList) { - CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(bonusStageData.getTargetPkMember()); - // 会员奖金数据 - CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMember.getPkMember(), targetMember.getIncomeStatus(), - targetMember.getPkSettleCountry(), targetMember.getPkRate() == null ? saOrderExt.getPkRate() : targetMember.getPkRate()); + this.handleStageIncome(cuMemberBonusStageList, cuMemberBonusMap, bonusConfigDTO, period, + memberRangeExtMap, null, settleDate, rangeTableName, rangeDetailTableName, eBonusStage, + sourceMember, memberRetailDetail, returnRetailDetailList); + } + return returnRetailDetailList; + } - // 阶段奖金 - int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMember.getPkSettleCountry(), EBonusItems.STAGE_INCOME.getValue()); - // 阶段收益明细 - CuMemberBonusStage cuMemberBonusStage = iCuMemberBonusStageService.getCuMemberBonusStage(saOrderExt, targetMember, cuMemberBonus, pkBonusItem); - cuMemberBonusStage.setPretaxIncome(bonusStageData.getBonusIncome()); - cuMemberBonusStage.setChildNode(bonusStageData.getTargetChildNode()); - cuMemberBonusStage.setStage(bonusStageData.getStage()); - cuMemberBonusStage.setStageNum(bonusStageData.getStageNum()); - stageIncomeRemark(saOrderExt, cuMemberBonusStage, sourceMember, targetMember); - BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusStage, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate()); - if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusStage.getIncomeStatus()) { - cuMemberBonus.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonus.getStoreIncome(), cuMemberBonusStage.getPretaxIncome())); - setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusStage); - } - cuMemberBonusStageList.add(cuMemberBonusStage); - } + /** + * 处理阶段收益(一、二、三阶段) + */ + private void handleStageIncome(List cuMemberBonusStageList, Map cuMemberBonusMap, + BonusConfigDTO bonusConfigDTO, Integer period, + Map memberRangeExtMap, SaOrderExt saOrderExt, + Date settleDate, String rangeTableName, String rangeDetailTableName, EBonusStage eBonusStage, + CuMemberRetailRangeExt sourceMember, CuMemberRetailDetail newRetailDetail, + List returnRetailDetailList) { + // 阶段奖金处理列表 + List bonusStageDataList = new ArrayList<>(); + // 推荐人 + Long pkParent = sourceMember.getPkParent(); + while (true) { + CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(pkParent); + if (null == targetMember) { + // 没有推荐人了,则直接结束 + break; + } + pkParent = targetMember.getPkParent(); + + // 推荐人一阶段子点位列表 + LinkedHashMap parentDetailList = null; + if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { + parentDetailList = targetMember.getOneDetailMap(); + } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { + parentDetailList = targetMember.getTwoDetailMap(); + } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) { + parentDetailList = targetMember.getThreeDetailMap(); + } + if (CollectionUtil.isEmpty(parentDetailList)) { + // 推荐人没有未完成点位,继续往上找 + continue; } + // 推荐人第一层点位处理 + boolean forBool = iCuMemberBonusStageService.firstLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, + memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); + if (forBool) { + // 在第一层找到并填充点位,就开始下一个点位的处理 + break; + } + + // 推荐人第二层点位处理 + forBool = iCuMemberBonusStageService.secondLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, + memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); + if (forBool) { + // 在第二层找到并填充点位,就开始下一个点位的处理 + break; + } + + // 推荐人第三层点位处理 + forBool = iCuMemberBonusStageService.thirdLevelhandle(parentDetailList, newRetailDetail, rangeTableName, rangeDetailTableName, + memberRangeExtMap, settleDate, eBonusStage, bonusStageDataList); + if (forBool) { + // 在第三层找到并填充点位,就开始下一个点位的处理 + break; + } + } + + if (CollectionUtil.isNotEmpty(bonusStageDataList)) { + // 有需要生成奖金的数据 + for (BonusStageData bonusStageData : bonusStageDataList) { + CuMemberRetailRangeExt targetMember = memberRangeExtMap.get(bonusStageData.getTargetPkMember()); + // 会员奖金数据 + CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMember.getPkMember(), targetMember.getIncomeStatus(), + targetMember.getPkSettleCountry(), targetMember.getPkRate() == null ? (saOrderExt != null ? saOrderExt.getPkRate() : 0) : targetMember.getPkRate()); + // 阶段奖金 + int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMember.getPkSettleCountry(), EBonusItems.STAGE_INCOME.getValue()); + // 阶段收益明细 + CuMemberBonusStage cuMemberBonusStage = iCuMemberBonusStageService.getCuMemberBonusStage(saOrderExt, targetMember, cuMemberBonus, pkBonusItem); + cuMemberBonusStage.setPretaxIncome(bonusStageData.getBonusIncome()); + cuMemberBonusStage.setChildNode(bonusStageData.getTargetChildNode()); + cuMemberBonusStage.setStage(bonusStageData.getStage()); + cuMemberBonusStage.setStageNum(bonusStageData.getStageNum()); + cuMemberBonusStage.setPkSourceMember(sourceMember.getPkMember()); + stageIncomeRemark(saOrderExt, cuMemberBonusStage, sourceMember, targetMember); + BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusStage, saOrderExt != null ? saOrderExt.getOrderAmount() : null, saOrderExt != null ? saOrderExt.getInExchangeRate() : null); + if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusStage.getIncomeStatus()) { + cuMemberBonus.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonus.getStoreIncome(), cuMemberBonusStage.getPretaxIncome())); + setRetailTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusStage); + } + cuMemberBonusStageList.add(cuMemberBonusStage); + + // 升阶段数据 + if (EBonusStage.ONE.getValue() == bonusStageData.getStage()) { + // 一阶段需要处理升阶段 + CuMemberRetailDetail twoRetailDetail = bonusStageData.getTwoRetailDetail(); + targetMember.getTwoDetailMap().put(twoRetailDetail.getChildNode(), twoRetailDetail); + returnRetailDetailList.add(twoRetailDetail); + } else if (EBonusStage.TWO.getValue() == bonusStageData.getStage()) { + // 二阶段需要处理升阶段 + CuMemberRetailDetail threeRetailDetail = bonusStageData.getThreeRetailDetail(); + targetMember.getThreeDetailMap().put(threeRetailDetail.getChildNode(), threeRetailDetail); + returnRetailDetailList.add(threeRetailDetail); + } else if (EBonusStage.THREE.getValue() == bonusStageData.getStage()) { + // TODO 三阶段需要赠送点位 + + } + } } } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java index f6c7ff35..6065dcb6 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleServiceImpl.java @@ -18,6 +18,7 @@ import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.bonus.*; import com.hzs.common.domain.member.ext.CuMemberExt; import com.hzs.common.domain.sale.ext.SaOrderExt; +import com.hzs.report.order.IPerformanceSummaryServiceApi; import com.hzs.system.config.IBonusItemsServiceApi; import com.hzs.system.config.dto.BonusConfigDTO; import lombok.extern.slf4j.Slf4j; @@ -39,6 +40,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService { @DubboReference IBonusItemsServiceApi iBonusItemsServiceApi; + @DubboReference + IPerformanceSummaryServiceApi iPerformanceSummaryServiceApi; @Autowired private IBonusOrderService iBonusOrderService; @@ -107,6 +110,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService { log.error("奖金结算异常", e); throw new RuntimeException(e); } + try { + // 调用统计业绩汇总接口 + iPerformanceSummaryServiceApi.createDataByDay(settleDate); + } catch (Exception e) { + log.error("每日数据业绩汇总异常", e); + } } @Override diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java index 8f3edff8..7d7d1259 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusServiceImpl.java @@ -62,6 +62,8 @@ public class CuMemberBonusServiceImpl extends ServiceImpl cuMemberBonusDetailList = cuMemberBonusStageMapper.queryMemberBonusStageByBonusItemsFoServer(bonusParam); + dataTable = getDataTable(cuMemberBonusDetailList); + cuMemberBonusDetailList.forEach(cuMemberBonusDetail -> { + MemberBonusDetailSerVO memberBonusDetailVO = BeanUtil.copyProperties(cuMemberBonusDetail, MemberBonusDetailSerVO.class); + memberBonusDetailSerVoS.add(memberBonusDetailVO); + }); } else { // 其他收益 区域分红、月度分红平均、月度分红加权 List cuMemberBonusDetailList = cuMemberBonusDetailMapper.queryMemberBonusDetailByBonusItemsForServer(bonusParam); diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java index a5d4d8de..89551eda 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/CuMemberBonusStageServiceImpl.java @@ -18,6 +18,7 @@ import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt; import com.hzs.common.domain.member.bonus.CuMemberBonus; import com.hzs.common.domain.member.bonus.CuMemberBonusStage; import com.hzs.common.domain.sale.ext.SaOrderExt; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,6 +30,7 @@ import java.util.*; /** * 会员奖金-阶段收益明细表 服务实现类 */ +@Slf4j @Service public class CuMemberBonusStageServiceImpl extends ServiceImpl implements ICuMemberBonusStageService { @@ -71,7 +73,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl bonusStageDataList) { + public void fillRetailDetail(CuMemberRetailDetail targetRetailDetail, String point, + CuMemberRetailDetail sourceRetailDetail, Date settleDate, EBonusStage eBonusStage, + List bonusStageDataList) { ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + point, sourceRetailDetail.getPkMember()); ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.POINT_FIELD_NAME + point, sourceRetailDetail.getChildNode()); ReflectUtil.setFieldValue(targetRetailDetail, BonusConstants.UPDATE_FLAG, 0); - switch (point) { - case BonusConstants.POINT_31: - case BonusConstants.POINT_32: - case BonusConstants.POINT_33: - case BonusConstants.POINT_34: - case BonusConstants.POINT_35: - case BonusConstants.POINT_36: - case BonusConstants.POINT_37: - case BonusConstants.POINT_38: - // 如果填充的点位是第三层,理论上有可能已经全部填满,需要判断是否已经完成 - boolean isFinish = true; - for (String suffix : BonusConstants.FIELD_LIST) { - if (null == ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix)) { - isFinish = false; - break; + if (EBonusStage.ONE.getValue() == eBonusStage.getValue() + || EBonusStage.TWO.getValue() == eBonusStage.getValue()) { + switch (point) { + case BonusConstants.POINT_31: + case BonusConstants.POINT_32: + case BonusConstants.POINT_33: + case BonusConstants.POINT_34: + case BonusConstants.POINT_35: + case BonusConstants.POINT_36: + case BonusConstants.POINT_37: + case BonusConstants.POINT_38: + // 如果填充的点位是第三层,理论上有可能已经全部填满,需要判断是否已经完成 + boolean isFinish = true; + for (String suffix : BonusConstants.FIELD_LIST) { + if (null == ReflectUtil.getFieldValue(targetRetailDetail, BonusConstants.POINT_MEMBER_FIELD_NAME + suffix)) { + isFinish = false; + break; + } } - } - if (isFinish) { - targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue()); - targetRetailDetail.setStageDate(settleDate); - // TODO 统一处理第二阶段还是 fillRetailDetail 方法进行处理 - if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { - // 一阶段,全满发放阶段奖 - // 返回奖金收益处理数据 - bonusStageDataList.add(BonusStageData.builder() - .bonusIncome(BonusConstants.ONE_BONUS) - .targetPkMember(targetRetailDetail.getPkMember()) - .targetChildNode(targetRetailDetail.getChildNode()) - .stage(eBonusStage.getValue()) - .stageNum(14) - .build()); - } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { - // 二阶段,全满发放阶段奖 - // 返回奖金收益处理数据 - bonusStageDataList.add(BonusStageData.builder() - .bonusIncome(BonusConstants.TWO_BONUS) - .targetPkMember(targetRetailDetail.getPkMember()) - .targetChildNode(targetRetailDetail.getChildNode()) - .stage(eBonusStage.getValue()) - .stageNum(14) - .build()); + if (isFinish) { + targetRetailDetail.setStageStatus(EBonusStageStatus.YES.getValue()); + targetRetailDetail.setStageDate(settleDate); + if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { + // 一阶段,全满发放阶段奖 + // 返回奖金收益处理数据 + BonusStageData bonusStageData = BonusStageData.builder() + .bonusIncome(BonusConstants.ONE_BONUS) + .targetPkMember(targetRetailDetail.getPkMember()) + .targetChildNode(targetRetailDetail.getChildNode()) + .stage(eBonusStage.getValue()) + .stageNum(14) + .build(); + // 生成二阶段点位 + bonusStageData.setTwoRetailDetail(CuMemberRetailDetail.builder() + .pkMember(targetRetailDetail.getPkMember()) + .childNode(targetRetailDetail.getChildNode()) + .pkParent(targetRetailDetail.getPkParent()) + .stage(EBonusStage.TWO.getValue()) + .stageStatus(EBonusStageStatus.NO.getValue()) + .pointType(targetRetailDetail.getPointType()) + .pointGift(targetRetailDetail.getPointGift()) + .creationTime(settleDate) + .updateBool(0) + .build()); + bonusStageDataList.add(bonusStageData); + } else { + // 二阶段,全满发放阶段奖 + // 返回奖金收益处理数据 + BonusStageData bonusStageData = BonusStageData.builder() + .bonusIncome(BonusConstants.TWO_BONUS) + .targetPkMember(targetRetailDetail.getPkMember()) + .targetChildNode(targetRetailDetail.getChildNode()) + .stage(eBonusStage.getValue()) + .stageNum(14) + .build(); + bonusStageData.setThreeRetailDetail(CuMemberRetailDetail.builder() + .pkMember(targetRetailDetail.getPkMember()) + .childNode(targetRetailDetail.getChildNode()) + .pkParent(targetRetailDetail.getPkParent()) + .stage(EBonusStage.THREE.getValue()) + .stageStatus(EBonusStageStatus.NO.getValue()) + .pointType(targetRetailDetail.getPointType()) + .pointGift(targetRetailDetail.getPointGift()) + .creationTime(settleDate) + .updateBool(0) + .build()); + bonusStageDataList.add(bonusStageData); + } + return; } - return true; - } - break; + break; + } + } else { + // TODO 三阶段发放特殊处理 + // TODO 三阶段填充满,判断是否需要赠送点位 + switch (point) { + case BonusConstants.POINT_11: + case BonusConstants.POINT_12: + + break; + } } - return false; } @Override @@ -347,7 +384,7 @@ public class CuMemberBonusStageServiceImpl extends ServiceImpl getRetailDetailMap(CuMemberRetailRangeExt memberRetail, EBonusStage eBonusStage) { + if (EBonusStage.ONE.getValue() == eBonusStage.getValue()) { + return memberRetail.getOneDetailMap(); + } else if (EBonusStage.TWO.getValue() == eBonusStage.getValue()) { + return memberRetail.getTwoDetailMap(); + } else if (EBonusStage.THREE.getValue() == eBonusStage.getValue()) { + return memberRetail.getThreeDetailMap(); + } + return new LinkedHashMap<>(); + } + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/CuMemberBonusVO.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/CuMemberBonusVO.java index c9557d1b..778e11ad 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/CuMemberBonusVO.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/CuMemberBonusVO.java @@ -1,5 +1,6 @@ package com.hzs.bonus.bonus.vo; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.hzs.common.core.annotation.Excel; import lombok.Data; @@ -90,99 +91,34 @@ public class CuMemberBonusVO implements Serializable { * 需要转换人民币的 */ public static final String[] INCOME_ARRAY = new String[]{ - "backPoints", "retailRangeIncome", "retailSameLevelIncome", "retailAreaIncome", - "retailBenefitRangeIncome", "retailMonthRepurchaseIncome", "coachIncome", "retailBenefitAvgIncome", - "retailBenefitIncome", "retailRealSubtotal", "realIncomeTotal", "repurRangeIncome"}; + "directIncome", "storeIncome", "globalPoints", "realIncomeTotal", "realIncomeTotalOri"}; private BigDecimal retailRangeIncome; + /** - * 直推收益 + * 注册直推收益-众康 */ @Excel(name = "直推收益", scale = 2) - private BigDecimal retailRangeIncomeOri; - - private BigDecimal retailSameLevelIncome; - /** - * 平级收益 - */ - @Excel(name = "平级收益", scale = 2) - private BigDecimal retailSameLevelIncomeOri; - - private BigDecimal retailAreaIncome; - /** - * 区域分红 - */ - @Excel(name = "区域分红", scale = 2) - private BigDecimal retailAreaIncomeOri; + private BigDecimal directIncome; /** - * 新零售福利级差收益 + * 阶段收益-众康 */ - private BigDecimal retailBenefitRangeIncome; - @Excel(name = "月度福利级差收益", scale = 2) - private BigDecimal retailBenefitRangeIncomeOri; + @Excel(name = "阶段收益", scale = 2) + private BigDecimal storeIncome; /** - * 新零售复购级差收益 + * 复购见点收益-众康 */ - private BigDecimal retailMonthRepurchaseIncome; - @Excel(name = "月度复购级差收益", scale = 2) - private BigDecimal retailMonthRepurchaseIncomeOri; - - /** - * 培育津贴 - */ - private BigDecimal coachIncome; - @Excel(name = "培育津贴", scale = 2) - private BigDecimal coachIncomeOri; - - /** - * 新零售福利平均收益 - */ - private BigDecimal retailBenefitAvgIncome; - @Excel(name = " 福利平均收益", scale = 2) - private BigDecimal retailBenefitAvgIncomeOri; - - /** - * 新零售福利加权收益 - */ - private BigDecimal retailBenefitIncome; - @Excel(name = " 福利加权收益", scale = 2) - private BigDecimal retailBenefitIncomeOri; - - /** - * 复购级差收益 - */ - private BigDecimal repurRangeIncome; - @Excel(name = "复购级差收益", scale = 2) - private BigDecimal repurRangeIncomeOri; - - /** - * 商城重消 - */ - @Excel(name = "商城重消", scale = 2) - private BigDecimal backPointsOri; - - /** - * 商城重消 - */ - private BigDecimal backPoints; - - /** - * 新零售收益小计 - */ - private BigDecimal retailRealSubtotal; - -// @Excel(name = "收益小计", scale = 2) - private BigDecimal retailRealSubtotalOri; + @Excel(name = "见点收益", scale = 2) + private BigDecimal globalPoints; /** * 实发收益总计 */ @Excel(name = "实发收益总计", scale = 2) private BigDecimal realIncomeTotalOri; - /** * 实发收益总计 */ diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/constant/BonusConstants.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/constant/BonusConstants.java index e0ea54b8..021b5515 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/constant/BonusConstants.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/constant/BonusConstants.java @@ -20,6 +20,22 @@ public class BonusConstants { * 二阶段奖金 -- 满14,发220 */ public static final BigDecimal TWO_BONUS = new BigDecimal("220"); + /** + * 三阶段一层奖金 -- 第一层满2,发160 + */ + public static final BigDecimal THREE_BONUS_1 = new BigDecimal("160"); + /** + * 三阶段二层奖金 -- 第二层满4,发320 + */ + public static final BigDecimal THREE_BONUS_2 = new BigDecimal("320"); + /** + * 三阶段三层前7点奖金 -- 发130 + */ + public static final BigDecimal THREE_BONUS_3 = new BigDecimal("130"); + /** + * 三阶段三层前最后一点奖金 -- 发155 + */ + public static final BigDecimal THREE_BONUS_38 = new BigDecimal("155"); public static final String POINT_11 = "11"; public static final String POINT_12 = "12"; diff --git a/bd-business/bd-business-bonus/src/main/resources/bootstrap.yml b/bd-business/bd-business-bonus/src/main/resources/bootstrap.yml index e354fed0..415e76f1 100644 --- a/bd-business/bd-business-bonus/src/main/resources/bootstrap.yml +++ b/bd-business/bd-business-bonus/src/main/resources/bootstrap.yml @@ -67,7 +67,7 @@ dubbo: port: -1 cloud: # 订阅服务 - subscribed-services: bd-system, bd-third, bd-sale, bd-member + subscribed-services: bd-system, bd-third, bd-sale, bd-member, bd-report scan: # dubbo 服务扫描包(开启之后才会对外提供服务) base-packages: com.hzs.bonus diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml index d6667d93..f8dca51b 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberRetailRangeMapper.xml @@ -51,6 +51,7 @@ + @@ -92,7 +93,9 @@ rep_consume_new_amount = 0, rep_consume_new_pv = 0, rep_team_new_amount = 0, - rep_team_new_pv = 0 + rep_team_new_pv = 0, + point_count = 0, + rep_pv_balance = 0 @@ -103,7 +106,8 @@ consume_amount, month_consume_amount, team_consume_pv, team_month_pv, team_consume_amount, team_month_amount, - recommend_num, team_num, big_team_pv, small_team_pv + recommend_num, team_num, big_team_pv, small_team_pv, + point_count, rep_pv_balance from ${yesterdayRangeTableName} ) b on (a.pk_member = b.pk_member) @@ -115,7 +119,8 @@ a.team_consume_pv = b.team_consume_pv, a.team_consume_amount = b.team_consume_amount, a.recommend_num = b.recommend_num, a.team_num = b.team_num, - a.big_team_pv = b.big_team_pv, a.small_team_pv = b.small_team_pv + a.big_team_pv = b.big_team_pv, a.small_team_pv = b.small_team_pv, + a.point_count = b.point_count, a.rep_pv_balance = b.rep_pv_balance ,a.month_consume_pv = b.month_consume_pv ,a.month_consume_amount = b.month_consume_amount @@ -170,7 +175,10 @@ x.point_second, x.point_member_second, x.point_third, - x.point_member_third + x.point_member_third, + x.third_bonus_1, + x.third_bonus_2, + x.third_bonus_3 from ${yesterdayDetailTableName} x left join cu_member cm on cm.pk_id = x.pk_member @@ -219,7 +227,10 @@ point_second, point_member_second, point_third, - point_member_third) + point_member_third, + third_bonus_1, + third_bonus_2, + third_bonus_3) values (b.pk_member, b.child_node, b.pk_parent, @@ -262,7 +273,10 @@ b.point_second, b.point_member_second, b.point_third, - b.point_member_third) + b.point_member_third, + b.third_bonus_1, + b.third_bonus_2, + b.third_bonus_3) when matched then update set a.pk_parent = b.pk_parent, @@ -305,7 +319,10 @@ a.point_second = b.point_second, a.point_member_second = b.point_member_second, a.point_third = b.point_third, - a.point_member_third = b.point_member_third + a.point_member_third = b.point_member_third, + a.third_bonus_1 = b.third_bonus_1, + a.third_bonus_2 = b.third_bonus_2, + a.third_bonus_3 = b.third_bonus_3 @@ -322,7 +339,8 @@ #{item.regConsumeNewAmount} reg_consume_new_amount, #{item.regConsumeNewPv} reg_consume_new_pv, #{item.regTeamNewAmount} reg_team_new_amount, #{item.regTeamNewPv} reg_team_new_pv, #{item.repConsumeNewAmount} rep_consume_new_amount, #{item.repConsumeNewPv} rep_consume_new_pv, - #{item.repTeamNewAmount} rep_team_new_amount, #{item.repTeamNewPv} rep_team_new_pv + #{item.repTeamNewAmount} rep_team_new_amount, #{item.repTeamNewPv} rep_team_new_pv, + #{item.pointCount} point_count, #{item.repPvBalance} rep_pv_balance from dual ) b @@ -337,7 +355,8 @@ a.reg_consume_new_amount = b.reg_consume_new_amount, a.reg_consume_new_pv = b.reg_consume_new_pv, a.reg_team_new_amount = b.reg_team_new_amount, a.reg_team_new_pv = b.reg_team_new_pv, a.rep_consume_new_amount = b.rep_consume_new_amount, a.rep_consume_new_pv = b.rep_consume_new_pv, - a.rep_team_new_amount = b.rep_team_new_amount, a.rep_team_new_pv = b.rep_team_new_pv + a.rep_team_new_amount = b.rep_team_new_amount, a.rep_team_new_pv = b.rep_team_new_pv, + a.point_count = b.point_count, a.rep_pv_balance = b.rep_pv_balance @@ -647,6 +666,7 @@ rep_team_new_amount, rep_team_new_pv, point_count, + rep_pv_balance, bw.awards_value, bw.awards_name from ( @@ -701,6 +721,8 @@ rep_consume_new_pv, rep_team_new_amount, rep_team_new_pv, + point_count, + rep_pv_balance, bw.awards_value, bw.awards_name from ${tableName} a diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml index dd57f034..28dd067a 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/achieve/CuMemberTreeMapper.xml @@ -298,43 +298,46 @@ stage NUMBER(1) default 1 not null, stage_status NUMBER(1) default 1 not null, stage_date DATE, - point_11 NUMBER(8), point_member_11 NUMBER(20), - point_12 NUMBER(8), + point_11 NUMBER(8), point_member_12 NUMBER(20), - point_21 NUMBER(8), + point_12 NUMBER(8), point_member_21 NUMBER(20), - point_22 NUMBER(8), + point_21 NUMBER(8), point_member_22 NUMBER(20), - point_23 NUMBER(8), + point_22 NUMBER(8), point_member_23 NUMBER(20), - point_24 NUMBER(8), + point_23 NUMBER(8), point_member_24 NUMBER(20), - point_31 NUMBER(8), + point_24 NUMBER(8), point_member_31 NUMBER(20), - point_32 NUMBER(8), + point_31 NUMBER(8), point_member_32 NUMBER(20), - point_33 NUMBER(8), + point_32 NUMBER(8), point_member_33 NUMBER(20), - point_34 NUMBER(8), + point_33 NUMBER(8), point_member_34 NUMBER(20), - point_35 NUMBER(8), + point_34 NUMBER(8), point_member_35 NUMBER(20), - point_36 NUMBER(8), + point_35 NUMBER(8), point_member_36 NUMBER(20), - point_37 NUMBER(8), + point_36 NUMBER(8), point_member_37 NUMBER(20), - point_38 NUMBER(8), + point_37 NUMBER(8), point_member_38 NUMBER(20), + point_38 NUMBER(8), point_type NUMBER(1) default 0 not null, point_gift NUMBER(1) default 0 not null, creation_time DATE, - point_first NUMBER(8), point_member_first NUMBER(20), - point_second NUMBER(8), + point_first NUMBER(8), point_member_second NUMBER(20), + point_second NUMBER(8), + point_member_third NUMBER(20), point_third NUMBER(8), - point_member_third NUMBER(20) + third_bonus_1 NUMBER(8), + third_bonus_2 NUMBER(8), + third_bonus_3 NUMBER(8) ) @@ -572,7 +575,8 @@ rep_consume_new_pv number(17,6) default 0 not null, rep_team_new_amount number(17,6) default 0 not null, rep_team_new_pv number(17,6) default 0 not null, - point_count number(8) default 0 not null + point_count number(8) default 0 not null, + rep_pv_balance number(17,6) default 0 not null ) diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusDetailMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusDetailMapper.xml index 7dc5b3e3..22177ef7 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusDetailMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusDetailMapper.xml @@ -241,17 +241,39 @@ select - nvl(sum(cb.direct_income),0) direct_income, - nvl(sum(cb.expand_income),0) expand_income, - nvl(sum(cb.expand_no_capping),0) expand_no_capping, - nvl(sum(cb.expand_capping),0) expand_capping, - nvl(sum(cb.coach_income),0) coach_income, - nvl(sum(cb.share_income),0) share_income, - nvl(sum(cb.service_income),0) service_income, - nvl(sum(cb.back_points),0) back_points, - 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_expand_income),0) repur_expand_income, - nvl(sum(cb.repur_real_subtotal),0) repur_real_subtotal, - nvl(sum(cb.repur_coupon),0) repur_coupon, - nvl(sum(cb.repur_coupon_share),0) repur_coupon_share, - nvl(sum(cb.repur_coupon_subtotal),0) repur_coupon_subtotal, - nvl(sum(cb.store_income),0) store_income, - 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, - nvl(sum(cb.retail_benefit_range_income),0) retail_benefit_range_income, - nvl(sum(cb.retail_month_repurchase_income),0) retail_month_repurchase_income, - nvl(sum(cb.retail_benefit_avg_income),0) retail_benefit_avg_income, - nvl(sum(cb.retail_benefit_income),0) retail_benefit_income, - nvl(sum(cb.retail_real_subtotal),0) retail_real_subtotal, - nvl(sum(cb.real_income_total),0) real_income_total + nvl( sum( cb.direct_income ), 0 ) direct_income, + nvl( sum( cb.store_income ), 0 ) store_income, + nvl( sum( cb.global_points ), 0 ) global_points, + bc.out_exchange_rate from cu_member_bonus cb inner join cu_member cm on cb.pk_member = cm.pk_id diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusStageMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusStageMapper.xml index 42f3c685..f8a23ec0 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusStageMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/bonus/CuMemberBonusStageMapper.xml @@ -22,15 +22,139 @@ cal_type, cal_achieve, cal_value, pretax_income, income_tax, real_income, remark, income_ratio, income_dial_ratio, order_dial_ratio, - pk_creator, child_node, stage, stage_num) + pk_creator, child_node, stage, stage_num, pk_source_member) values ( #{item.pkBonus}, #{item.pkOrder}, #{item.pkBonusItems}, #{item.incomeStatus}, #{item.calType}, #{item.calAchieve}, #{item.calValue}, #{item.pretaxIncome}, #{item.incomeTax}, #{item.realIncome}, #{item.remark}, #{item.incomeRatio}, #{item.incomeDialRatio}, #{item.orderDialRatio}, - #{item.pkCreator}, #{item.childNode}, #{item.stage}, #{item.stageNum}) + #{item.pkCreator}, #{item.childNode}, #{item.stage}, #{item.stageNum}, #{item.pkSourceMember}) SELECT 1 FROM dual + diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml index 7d93e0e3..c73b43ae 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/bonus/order/BonusOrderMapper.xml @@ -80,7 +80,13 @@ where so.del_flag = 0 and so.order_status = 1 - and so.order_code=#{orderCode} + and so.order_code = #{orderCode} + + + and so.order_type in + + #{items} + and so.order_type in diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java index fa14d091..090b39db 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/base/service/impl/CuMemberBusinessServiceImpl.java @@ -587,10 +587,11 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService { deductCancelOrderCost(businessCommissionDTO); CuMemberAccount payMemberAccount = iCuMemberAccountService.queryCuMemberAccountByPkMember(saOrder.getPkCreator()); - - if (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType()) { - // 会员账号 验证会员账户是否存在金额 - CuMember member = cuMemberService.getMemberById(saOrder.getPkMember()); + // 会员账号 验证会员账户是否存在金额 + CuMember member = cuMemberService.getMemberById(saOrder.getPkMember()); + if (EOrderType.RETAIL_REGISTER.getValue() == saOrder.getOrderType() + ||(ObjectUtil.isNotEmpty(member) && EOrderType.RETAIL_REPURCHASE.getValue() == saOrder.getOrderType() && saOrder.getPayTime().equals(member.getPayTime())) + ) { // 会员变为死点 member.setCategory(ECategory.LOGGED_OUT.getValue()); member.setCustomerType(ECustomerType.DEAD_POINT.getValue()); diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/api/ApiMemberStructureController.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/api/ApiMemberStructureController.java index 08daf99d..fa356dbf 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/api/ApiMemberStructureController.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/structure/controller/api/ApiMemberStructureController.java @@ -69,7 +69,7 @@ public class ApiMemberStructureController extends BaseController { Integer isFind = iCumemberRetailDetailService.getFindCumemberRetailDetail(settleTableName); if (isFind == null || isFind != 1) { log.error("当前表名不存在{}",settleTableName); - return AjaxResult.error("当前日结信息表不存在",settleTableName); + return AjaxResult.error("数据查询错误,请联系客服处理"); } CuMemberRetailDetail cuMemberRetailDetail = iCumemberRetailDetailService.getCuMemberRetailDetailByUserId(userId,stage,stageStatus,childNode,settleTableName); log.info("日结表会员信息{}",cuMemberRetailDetail); diff --git a/bd-business/bd-business-report/src/main/java/com/hzs/report/order/controller/CuMemberPerformanceSummaryController.java b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/controller/CuMemberPerformanceSummaryController.java new file mode 100644 index 00000000..22b076a4 --- /dev/null +++ b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/controller/CuMemberPerformanceSummaryController.java @@ -0,0 +1,20 @@ +package com.hzs.report.order.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 销售业绩统计表 前端控制器 + *

+ * + * @author sangelxiu1 + * @since 2025-09-22 + */ +@RestController +@RequestMapping("/order/performance-summary") +public class CuMemberPerformanceSummaryController { + +} diff --git a/bd-business/bd-business-report/src/main/java/com/hzs/report/order/mapper/CuMemberPerformanceSummaryMapper.java b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/mapper/CuMemberPerformanceSummaryMapper.java new file mode 100644 index 00000000..2e78435c --- /dev/null +++ b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/mapper/CuMemberPerformanceSummaryMapper.java @@ -0,0 +1,21 @@ +package com.hzs.report.order.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hzs.common.domain.report.CuMemberPerformanceSummary; +import com.hzs.common.domain.sale.order.SaOrder; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; + +/** + *

+ * 销售业绩统计表 Mapper 接口 + *

+ * + * @author sangelxiu1 + * @since 2025-09-22 + */ +public interface CuMemberPerformanceSummaryMapper extends BaseMapper { + List getOrderByDay(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("orderTypeList") List orderTypeList); +} diff --git a/bd-business/bd-business-report/src/main/java/com/hzs/report/order/provider/PerformanceSummaryProvider.java b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/provider/PerformanceSummaryProvider.java new file mode 100644 index 00000000..d258a9e9 --- /dev/null +++ b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/provider/PerformanceSummaryProvider.java @@ -0,0 +1,24 @@ +package com.hzs.report.order.provider; + +import com.hzs.common.core.domain.R; +import com.hzs.report.order.IPerformanceSummaryServiceApi; +import com.hzs.report.order.service.ICuMemberPerformanceSummaryService; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; + +import javax.annotation.Resource; + +/** + * 销售业绩统计 + */ +@DubboService +@Slf4j +public class PerformanceSummaryProvider implements IPerformanceSummaryServiceApi { + @Resource + ICuMemberPerformanceSummaryService iCuMemberPerformanceSummaryService; + @Override + public R createDataByDay(String day) { + iCuMemberPerformanceSummaryService.createDataByDay(day); + return R.ok(); + } +} diff --git a/bd-business/bd-business-report/src/main/java/com/hzs/report/order/service/ICuMemberPerformanceSummaryService.java b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/service/ICuMemberPerformanceSummaryService.java new file mode 100644 index 00000000..da1e2887 --- /dev/null +++ b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/service/ICuMemberPerformanceSummaryService.java @@ -0,0 +1,16 @@ +package com.hzs.report.order.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.hzs.common.domain.report.CuMemberPerformanceSummary; + +/** + *

+ * 销售业绩统计表 服务类 + *

+ * + * @author sangelxiu1 + * @since 2025-09-22 + */ +public interface ICuMemberPerformanceSummaryService extends IService { + void createDataByDay(String day); +} diff --git a/bd-business/bd-business-report/src/main/java/com/hzs/report/order/service/impl/CuMemberPerformanceSummaryServiceImpl.java b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/service/impl/CuMemberPerformanceSummaryServiceImpl.java new file mode 100644 index 00000000..b7695955 --- /dev/null +++ b/bd-business/bd-business-report/src/main/java/com/hzs/report/order/service/impl/CuMemberPerformanceSummaryServiceImpl.java @@ -0,0 +1,85 @@ +package com.hzs.report.order.service.impl; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.hzs.common.core.constant.MagicNumberConstants; +import com.hzs.common.core.enums.EOrderType; +import com.hzs.common.core.utils.DateUtils; +import com.hzs.common.domain.report.CuMemberPerformanceSummary; +import com.hzs.common.domain.sale.order.SaOrder; +import com.hzs.report.order.mapper.CuMemberPerformanceSummaryMapper; +import com.hzs.report.order.service.ICuMemberPerformanceSummaryService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + *

+ * 销售业绩统计表 服务实现类 + *

+ * + * @author sangelxiu1 + * @since 2025-09-22 + */ +@Service +@Slf4j +public class CuMemberPerformanceSummaryServiceImpl extends ServiceImpl implements ICuMemberPerformanceSummaryService { + + @Override + public void createDataByDay(String day) { + Date startDate = DateUtils.getStartOfDay(day); + Date endDate = DateUtils.getEndOfDay(day); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CuMemberPerformanceSummary::getSummaryDate, startDate); + baseMapper.delete(queryWrapper); + List orderTypeList = Arrays.asList(EOrderType.RETAIL_REGISTER.getValue(), EOrderType.RETAIL_UPGRADE.getValue(), EOrderType.RETAIL_REPURCHASE.getValue()); + List orderList = baseMapper.getOrderByDay(startDate, endDate, orderTypeList); + Map> groupedOrders = orderList.stream().collect(Collectors.groupingBy(SaOrder::getOrderType)); + CuMemberPerformanceSummary summary = CuMemberPerformanceSummary.getInitCuMemberPerformanceSummary(startDate); + if(ObjectUtil.isNotEmpty(groupedOrders.get(EOrderType.RETAIL_REGISTER.getValue()))) { + for (SaOrder saOrder : groupedOrders.get(EOrderType.RETAIL_REGISTER.getValue())) { + summary.setRetailRegisterAmount(summary.getRetailDiscountAmount().add(saOrder.getOrderAmount())); + summary.setRetailRegisterPv(summary.getRetailDiscountPv().add(saOrder.getOrderAchieve())); + + summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount())); + summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount())); + } + } + if(ObjectUtil.isNotEmpty(groupedOrders.get(EOrderType.RETAIL_UPGRADE.getValue()))) { + for (SaOrder saOrder : groupedOrders.get(EOrderType.RETAIL_UPGRADE.getValue())) { + summary.setRetailUpgradeAmount(summary.getRetailUpgradeAmount().add(saOrder.getOrderAmount())); + summary.setRetailUpgradePv(summary.getRetailUpgradePv().add(saOrder.getOrderAchieve())); + + summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount())); + summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount())); + } + } + if(ObjectUtil.isNotEmpty(groupedOrders.get(EOrderType.RETAIL_REPURCHASE.getValue()))) { + for (SaOrder saOrder : groupedOrders.get(EOrderType.RETAIL_REPURCHASE.getValue())) { + summary.setRetailRepurchaseAmount(summary.getRetailRepurchaseAmount().add(saOrder.getOrderAmount())); + summary.setRetailRepurchasePv(summary.getRetailRepurchasePv().add(saOrder.getOrderAchieve())); + + summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount())); + summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount())); + } + } + if(ObjectUtil.isNotEmpty(groupedOrders.get(EOrderType.RETAIL_CONSUME.getValue()))){ + for (SaOrder saOrder : groupedOrders.get(EOrderType.RETAIL_CONSUME.getValue())) { + summary.setRetailDiscountAmount(summary.getRetailDiscountAmount().add(saOrder.getOrderAmount())); + summary.setDividendPv(summary.getDividendPv().add(saOrder.getOrderAchieve())); + + summary.setTotalAmount(summary.getTotalAmount().add(saOrder.getOrderAmount())); + summary.setTotalPv(summary.getTotalPv().add(saOrder.getOrderAmount())); + } + } + summary.setDividendPv(summary.getTotalPv().multiply(new BigDecimal("0.015"))); + summary.setPkCreator(MagicNumberConstants.PK_ADMIN); + baseMapper.insert(summary); + } +} diff --git a/bd-business/bd-business-report/src/main/resources/mapper/report/order/CuMemberPerformanceSummaryMapper.xml b/bd-business/bd-business-report/src/main/resources/mapper/report/order/CuMemberPerformanceSummaryMapper.xml new file mode 100644 index 00000000..492f82bf --- /dev/null +++ b/bd-business/bd-business-report/src/main/resources/mapper/report/order/CuMemberPerformanceSummaryMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DEL_FLAG, + PK_COUNTRY, + CREATION_TIME, + MODIFIED_TIME, + PK_CREATOR, + PK_MODIFIED, + PK_ID, SUMMARY_DATE, RETAIL_REGISTER_AMOUNT, RETAIL_REGISTER_PV, RETAIL_UPGRADE_AMOUNT, RETAIL_UPGRADE_PV, RETAIL_REPURCHASE_AMOUNT, RETAIL_REPURCHASE_PV, RETAIL_DISCOUNT_AMOUNT, RETAIL_DISCOUNT_PV, TOTAL_AMOUNT, TOTAL_PV, DIVIDEND_PV + + + + diff --git a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java index ed814c32..5466ab56 100644 --- a/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java +++ b/bd-business/bd-business-sale/src/main/java/com/hzs/sale/order/service/impl/SaOrderServiceImpl.java @@ -2,6 +2,7 @@ package com.hzs.sale.order.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; @@ -662,6 +663,7 @@ public class SaOrderServiceImpl extends ServiceImpl impl @Transactional(rollbackFor = Exception.class) public void revokeSaOrderByOrderCode(Long pkApprove, OrderCancelParam orderCancelParam, ValidateCancelOrderVO validateCancelOrderVO) { SaOrderExt saOrderExt = validateCancelOrderVO.getSaOrderExt(); + CuMemberExt memberExt = memberServiceApi.getMemberById(saOrderExt.getPkMember()).getData(); BusinessCommissionDTO businessCommissionDTO = null; if (orderCancelParam.getCancelRoad() == 1) { EApprovalBusiness approveBusiness = EApprovalBusiness.ORDER_CANCEL; @@ -750,7 +752,9 @@ public class SaOrderServiceImpl extends ServiceImpl impl } // 撤销注册订单 单点撤单 - if (ECancelOrderType.SINGLE_CANCEL_ORDER.getValue() == orderCancelParam.getCancelType()) { + if (ECancelOrderType.SINGLE_CANCEL_ORDER.getValue() == orderCancelParam.getCancelType() + ||(ObjectUtil.isNotEmpty(memberExt) && ECancelOrderType.OTHER_CANCEL_ORDER.getValue() == orderCancelParam.getCancelType() && saOrderExt.getPayTime().equals(memberExt.getPayTime())) + ) { // 单点撤单,变死点 R tmpR = memberServiceApi.singleRevokeMemberByRegisterOrder(pkApprove, saOrderExt, businessCommissionDTO); if (!tmpR.isSuccess()) { diff --git a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/msg/BonusMsgConstants.java b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/msg/BonusMsgConstants.java index 530a7a40..9424bce2 100644 --- a/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/msg/BonusMsgConstants.java +++ b/bd-common/bd-common-core/src/main/java/com/hzs/common/core/constant/msg/BonusMsgConstants.java @@ -19,6 +19,10 @@ public class BonusMsgConstants { * 阶段 收益说明 */ public static String STAGE_INCOME = "订单编号%s,%s为%s贡献了阶段收益,%s子点位%s阶段。"; + /** + * 二、三阶段 收益说明 + */ + public static String STAGE_INCOME_OTHER = "%s为%s贡献了阶段收益,%s子点位%s阶段。"; /** * 直推级差收益说明 diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java index ceaf9aa9..dee3dd8f 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailDetail.java @@ -57,173 +57,160 @@ public class CuMemberRetailDetail { @TableField("STAGE_DATE") private Date stageDate; + + /** + * 点位1-1会员ID + */ + @TableField("POINT_MEMBER_11") + private Long pointMember11; /** * 点位1-1会员子节点 */ @TableField("POINT_11") private Integer point11; + /** + * 点位1-2会员ID + */ + @TableField("POINT_MEMBER_12") + private Long pointMember12; /** * 点位1-2会员子节点 */ @TableField("POINT_12") private Integer point12; + /** + * 点位2-1会员ID + */ + @TableField("POINT_MEMBER_21") + private Long pointMember21; /** * 点位2-1会员子节点 */ @TableField("POINT_21") private Integer point21; + /** + * 点位2-2会员ID + */ + @TableField("POINT_MEMBER_22") + private Long pointMember22; /** * 点位2-2会员子节点 */ @TableField("POINT_22") private Integer point22; + /** + * 点位2-3会员ID + */ + @TableField("POINT_MEMBER_23") + private Long pointMember23; /** * 点位2-3会员子节点 */ @TableField("POINT_23") private Integer point23; + /** + * 点位2-4会员ID + */ + @TableField("POINT_MEMBER_24") + private Long pointMember24; /** * 点位2-4会员子节点 */ @TableField("POINT_24") private Integer point24; + /** + * 点位3-1会员ID + */ + @TableField("POINT_MEMBER_31") + private Long pointMember31; /** * 点位3-1会员子节点 */ @TableField("POINT_31") private Integer point31; + /** + * 点位3-2会员ID + */ + @TableField("POINT_MEMBER_32") + private Long pointMember32; /** * 点位3-2会员子节点 */ @TableField("POINT_32") private Integer point32; + /** + * 点位3-3会员ID + */ + @TableField("POINT_MEMBER_33") + private Long pointMember33; /** * 点位3-3会员子节点 */ @TableField("POINT_33") private Integer point33; + /** + * 点位3-4会员ID + */ + @TableField("POINT_MEMBER_34") + private Long pointMember34; /** * 点位3-4会员子节点 */ @TableField("POINT_34") private Integer point34; + /** + * 点位3-5会员ID + */ + @TableField("POINT_MEMBER_35") + private Long pointMember35; /** * 点位3-5会员子节点 */ @TableField("POINT_35") private Integer point35; + /** + * 点位3-6会员ID + */ + @TableField("POINT_MEMBER_36") + private Long pointMember36; /** * 点位3-6会员子节点 */ @TableField("POINT_36") private Integer point36; + /** + * 点位3-7会员ID + */ + @TableField("POINT_MEMBER_37") + private Long pointMember37; /** * 点位3-7会员子节点 */ @TableField("POINT_37") private Integer point37; - /** - * 点位3-8会员子节点 - */ - @TableField("POINT_38") - private Integer point38; - - /** - * 点位1-1会员ID - */ - @TableField("POINT_MEMBER_11") - private Long pointMember11; - - /** - * 点位1-2会员ID - */ - @TableField("POINT_MEMBER_12") - private Long pointMember12; - - /** - * 点位2-1会员ID - */ - @TableField("POINT_MEMBER_21") - private Long pointMember21; - - /** - * 点位2-2会员ID - */ - @TableField("POINT_MEMBER_22") - private Long pointMember22; - - /** - * 点位2-3会员ID - */ - @TableField("POINT_MEMBER_23") - private Long pointMember23; - - /** - * 点位2-4会员ID - */ - @TableField("POINT_MEMBER_24") - private Long pointMember24; - - /** - * 点位3-1会员ID - */ - @TableField("POINT_MEMBER_31") - private Long pointMember31; - - /** - * 点位3-2会员ID - */ - @TableField("POINT_MEMBER_32") - private Long pointMember32; - - /** - * 点位3-3会员ID - */ - @TableField("POINT_MEMBER_33") - private Long pointMember33; - - /** - * 点位3-4会员ID - */ - @TableField("POINT_MEMBER_34") - private Long pointMember34; - - /** - * 点位3-5会员ID - */ - @TableField("POINT_MEMBER_35") - private Long pointMember35; - - /** - * 点位3-6会员ID - */ - @TableField("POINT_MEMBER_36") - private Long pointMember36; - - /** - * 点位3-7会员ID - */ - @TableField("POINT_MEMBER_37") - private Long pointMember37; - /** * 点位3-8会员ID */ @TableField("POINT_MEMBER_38") private Long pointMember38; + /** + * 点位3-8会员子节点 + */ + @TableField("POINT_38") + private Integer point38; /** * 点位类型(0=普通,1=赠送点位) @@ -244,6 +231,11 @@ public class CuMemberRetailDetail { @TableField("CREATION_TIME") private Date creationTime; + /** + * 第一层会员ID + */ + @TableField("POINT_MEMBER_FIRST") + private Long pointMemberFirst; /** * 第一层会员子节点 */ @@ -251,11 +243,10 @@ public class CuMemberRetailDetail { private Integer pointFirst; /** - * 第一层会员ID + * 第二层会员ID */ - @TableField("POINT_MEMBER_FIRST") - private Long pointMemberFirst; - + @TableField("POINT_MEMBER_SECOND") + private Long pointMemberSecond; /** * 第二层会员子节点 */ @@ -263,11 +254,10 @@ public class CuMemberRetailDetail { private Integer pointSecond; /** - * 第二层会员ID + * 第三层会员ID */ - @TableField("POINT_MEMBER_SECOND") - private Long pointMemberSecond; - + @TableField("POINT_MEMBER_THIRD") + private Long pointMemberThird; /** * 第三层会员子节点 */ @@ -275,10 +265,22 @@ public class CuMemberRetailDetail { private Integer pointThird; /** - * 第三层会员ID + * 三阶段1层奖金次数 */ - @TableField("POINT_MEMBER_THIRD") - private Long pointMemberThird; + @TableField("THIRD_BONUS_1") + private Integer thirdBonus1; + + /** + * 三阶段2层奖金次数 + */ + @TableField("THIRD_BONUS_2") + private Integer thirdBonus2; + + /** + * 三阶段3层奖金次数 + */ + @TableField("THIRD_BONUS_3") + private Integer thirdBonus3; /** * 更新标记(不为null则需要入库) diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailRange.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailRange.java index 2e5c09ca..f5f6ea4a 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailRange.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/achieve/CuMemberRetailRange.java @@ -195,4 +195,10 @@ public class CuMemberRetailRange extends BaseEntity { @TableField("point_count") private Integer pointCount; + /** + * 复购业绩余额 + */ + @TableField("REP_PV_BALANCE") + private BigDecimal repPvBalance; + } diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonus.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonus.java index 3e8d8ded..a9c1f892 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonus.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonus.java @@ -56,124 +56,10 @@ public class CuMemberBonus extends BaseEntity { private BigDecimal directIncome; /** - * 拓展收益 + * 阶段收益-众康 */ - @TableField("EXPAND_INCOME") - private BigDecimal expandIncome; - - /** - * 拓展无封 (拓展收益按等级正常比例结算,并 拓展收益按等级正常比例结算 无封顶) - */ - @TableField("EXPAND_NO_CAPPING") - private BigDecimal expandNoCapping; - - /** - * 拓展封顶 (拓展收益按等级正常比例结算,不按4-N结算,根据配置的封顶值限制最大收益) - */ - @TableField("EXPAND_CAPPING") - private BigDecimal expandCapping; - - /** - * 培育津贴 - */ - @TableField("COACH_INCOME") - private BigDecimal coachIncome; - - /** - * 分红收益 - */ - @TableField("SHARE_INCOME") - private BigDecimal shareIncome; - - /** - * 报单收益 - */ - @TableField("SERVICE_INCOME") - private BigDecimal serviceIncome; - - /** - * 商城重消 - */ - @TableField("BACK_POINTS") - private BigDecimal backPoints; - - /** - * 平台服务费 - */ - @TableField("SERVICE_SPEND") - private BigDecimal serviceSpend; - - /** - * 首购实发小计 - */ - @TableField("PUR_REAL_SUBTOTAL") - private BigDecimal purRealSubtotal; - - /** - * 复购推荐收益 修改为互助收益 cu_member_bonus_push - */ - @TableField("REPUR_PUSH_INCOME") - private BigDecimal repurPushIncome; - - /** - * 复购级差收益 - */ - @TableField("REPUR_RANGE_INCOME") - private BigDecimal repurRangeIncome; - - /** - * 复购拓展收益 - */ - @TableField("REPUR_EXPAND_INCOME") - private BigDecimal repurExpandIncome; - - /** - * 复购实发小计 - */ - @TableField("REPUR_REAL_SUBTOTAL") - private BigDecimal repurRealSubtotal; - - /** - * 云代直推收益 修改为幸运收益 cu_member_bonus_coach - */ - @TableField("CLOUD_DIRECT_INCOME") - private BigDecimal cloudDirectIncome; - - /** - * 云代首购收益 修改为极差收益 cu_member_bonus_range - */ - @TableField("CLOUD_PUR_INCOME") - private BigDecimal cloudPurIncome; - - /** - * 云代复购收益 修改为平级收益 cu_member_bonus_range - */ - @TableField("CLOUD_REPUR_INCOME") - private BigDecimal cloudRepurIncome; - - /** - * 云代实发小计 修改为 极差小计 - */ - @TableField("CLOUD_REAL_SUBTOTAL") - private BigDecimal cloudRealSubtotal; - - /** - * 复购券 - */ - @TableField("REPUR_COUPON") - private BigDecimal repurCoupon; - - /** - * 复购券均分收益 - */ - @TableField("REPUR_COUPON_SHARE") - private BigDecimal repurCouponShare; - - /** - * 复购券小计 - */ - @TableField("REPUR_COUPON_SUBTOTAL") - private BigDecimal repurCouponSubtotal; + @TableField("STORE_INCOME") + private BigDecimal storeIncome; /** * 复购见点收益-众康 @@ -181,95 +67,7 @@ public class CuMemberBonus extends BaseEntity { @TableField("GLOBAL_POINTS") private BigDecimal globalPoints; - /** - * 车奖积分 - */ - @TableField("CAR_AWARD_POINTS") - private BigDecimal carAwardPoints; - /** - * 阶段收益-众康 - */ - @TableField("STORE_INCOME") - private BigDecimal storeIncome; - - /** - * 嗨粉推荐收益 - */ - @TableField("HI_FUN_INCOME") - private BigDecimal hiFunIncome; - - /** - * 海粉推荐收益 - */ - @TableField("HAI_FUN_INCOME") - private BigDecimal haiFunIncome; - - /** - * 创客空间直推收益 - */ - @TableField("MAKER_DIRECT_INCOME") - private BigDecimal makerDirectIncome; - - /** - * 创客共享收益 - */ - @TableField("MAKER_SHARE_INCOME") - private BigDecimal makerShareIncome; - - /** - * 创客空间收益小计 - */ - @TableField("MAKER_REAL_SUBTOTAL") - private BigDecimal makerRealSubtotal; - - /** - * 新零售直推收益 - */ - @TableField("RETAIL_RANGE_INCOME") - private BigDecimal retailRangeIncome; - - /** - * 新零售平级收益 - */ - @TableField("RETAIL_SAME_LEVEL_INCOME") - private BigDecimal retailSameLevelIncome; - - /** - * 新零售区域分红 - */ - @TableField("RETAIL_AREA_INCOME") - private BigDecimal retailAreaIncome; - - /** - * 新零售福利级差收益 - */ - @TableField("RETAIL_BENEFIT_RANGE_INCOME") - private BigDecimal retailBenefitRangeIncome; - - /** - * 新零售复购级差收益 - */ - @TableField("RETAIL_MONTH_REPURCHASE_INCOME") - private BigDecimal retailMonthRepurchaseIncome; - - /** - * 福利分红平均收益 - */ - @TableField("RETAIL_BENEFIT_AVG_INCOME") - private BigDecimal retailBenefitAvgIncome; - - /** - * 福利分红加权收益 - */ - @TableField("RETAIL_BENEFIT_INCOME") - private BigDecimal retailBenefitIncome; - - /** - * 新零售收益小计 - */ - @TableField("RETAIL_REAL_SUBTOTAL") - private BigDecimal retailRealSubtotal; /** * 实发收益总计 diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonusStage.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonusStage.java index 746a38e0..d67b6fe5 100644 --- a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonusStage.java +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/member/bonus/CuMemberBonusStage.java @@ -133,5 +133,11 @@ public class CuMemberBonusStage extends BaseEntity { @TableField("STAGE_NUM") private Integer stageNum; + /** + * 来源会员ID + */ + @TableField("PK_SOURCE_MEMBER") + private Long pkSourceMember; + } diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/report/CuMemberPerformanceSummary.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/report/CuMemberPerformanceSummary.java new file mode 100644 index 00000000..ebb87317 --- /dev/null +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/report/CuMemberPerformanceSummary.java @@ -0,0 +1,126 @@ +package com.hzs.common.domain.report; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.TableField; +import com.hzs.common.core.web.domain.BaseEntity; +import lombok.*; +import lombok.experimental.Accessors; + +/** + *

+ * 销售业绩统计表 + *

+ * + * @author sangelxiu1 + * @since 2025-09-22 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@TableName("CU_MEMBER_PERFORMANCE_SUMMARY") +@KeySequence("C_M_PERFORMANCE_SUMMARY_SEQ") +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class CuMemberPerformanceSummary extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableId("PK_ID") + private Long pkId; + + /** + * 统计日期 + */ + @TableField("SUMMARY_DATE") + private Date summaryDate; + + /** + * 精品专区销售金额 + */ + @TableField("RETAIL_REGISTER_AMOUNT") + private BigDecimal retailRegisterAmount; + + /** + * 精品专区销售业绩 + */ + @TableField("RETAIL_REGISTER_PV") + private BigDecimal retailRegisterPv; + + /** + * 甄选专区销售金额 + */ + @TableField("RETAIL_UPGRADE_AMOUNT") + private BigDecimal retailUpgradeAmount; + + /** + * 甄选专区销售业绩 + */ + @TableField("RETAIL_UPGRADE_PV") + private BigDecimal retailUpgradePv; + + /** + * 商城专区销售金额 + */ + @TableField("RETAIL_REPURCHASE_AMOUNT") + private BigDecimal retailRepurchaseAmount; + + /** + * 商城专区销售业绩 + */ + @TableField("RETAIL_REPURCHASE_PV") + private BigDecimal retailRepurchasePv; + + /** + * 五折专区销售金额 + */ + @TableField("RETAIL_DISCOUNT_AMOUNT") + private BigDecimal retailDiscountAmount; + + /** + * 五折专区销售业绩 + */ + @TableField("RETAIL_DISCOUNT_PV") + private BigDecimal retailDiscountPv; + + /** + * 当期销售金额合计 + */ + @TableField("TOTAL_AMOUNT") + private BigDecimal totalAmount; + + /** + * 当期销售业绩合计 + */ + @TableField("TOTAL_PV") + private BigDecimal totalPv; + + /** + * 当日分红合计(分红:所有专区PV值的1.5%每天进行记录) + */ + @TableField("DIVIDEND_PV") + private BigDecimal dividendPv; + + + public static CuMemberPerformanceSummary getInitCuMemberPerformanceSummary(Date summaryDate){ + return CuMemberPerformanceSummary.builder() + .summaryDate(summaryDate) + .retailRegisterAmount(BigDecimal.ZERO) + .retailRegisterPv(BigDecimal.ZERO) + .retailUpgradeAmount(BigDecimal.ZERO) + .retailUpgradePv(BigDecimal.ZERO) + .retailRepurchaseAmount(BigDecimal.ZERO) + .retailRepurchasePv(BigDecimal.ZERO) + .retailDiscountAmount(BigDecimal.ZERO) + .retailDiscountPv(BigDecimal.ZERO) + .totalAmount(BigDecimal.ZERO) + .totalPv(BigDecimal.ZERO) + .dividendPv(BigDecimal.ZERO) + .build(); + } +} diff --git a/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java index 3ff50551..c683b87b 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java +++ b/bd-third/src/main/java/com/hzs/third/pay/jdpay/dto/JdPayAggregateCreateOrderRequest.java @@ -72,11 +72,13 @@ public class JdPayAggregateCreateOrderRequest implements Serializable { * 同步通知页面url */ private String pageBackUrl; + private String pagebackUrl; /** * 点击完成按钮后跳转页面 */ private String callbackUrl; + private String callBackUrl; /** * 风控信息map-- json串 */ diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java index 0aad0171..b1963ee7 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java @@ -103,8 +103,13 @@ public class JdPayServiceImpl implements IJdPayService { // 用户标识(收银台必传) .userId(userId) // 同步通知URL(收银台必传,页面回调地址) + + .pagebackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam()) .pageBackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam()) + .callbackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam()) + .callBackUrl(jdPayBankProperties.getPageBackUrl() + "?extParam=" + onlinePayment.getExtParam()) + // 支付回调地址 .notifyUrl(jdPayBankProperties.getNotifyUrl()) // 交易类型 diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java index 911d8a75..b9bf39d8 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/TOnlinePaymentServiceImpl.java @@ -62,7 +62,7 @@ public class TOnlinePaymentServiceImpl extends ServiceImpl