From 305117aba6944296f2aafbc11d7a73c4a199597f Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Mon, 21 Jul 2025 17:28:36 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E6=B3=A8=E5=86=8C=E3=80=81=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E3=80=81=E5=A4=8D=E8=B4=AD=E7=AD=89=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=A7=92=E7=BB=93=E4=B8=9A=E7=BB=A9=E5=A4=84=E7=90=86=EF=BC=9B?= =?UTF-8?q?188=E5=AE=89=E7=BD=AE=E5=85=B3=E7=B3=BB=E6=8C=89=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E4=B8=9A=E7=BB=A9=E5=B7=A6=E5=8F=B3=E5=8C=BA=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E5=AE=89=E7=BD=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzs/system/config/dto/BonusConfigDTO.java | 5 - .../service/impl/BonusSettleAgentHandle.java | 12 - .../bonus/service/impl/BonusSettleHandle.java | 3 +- .../service/impl/BonusSettleHiFunHandle.java | 12 - .../impl/BonusSettlePurchaseHandle.java | 6 +- .../service/impl/BonusSettleServiceImpl.java | 264 +++++++++++------- .../bonus/listener/SaOrderSecondListener.java | 9 +- .../member/achieve/CuMemberTreeMapper.xml | 11 +- .../impl/CuMemberAchieveServiceImpl.java | 4 +- .../controller/api/ApiMemberController.java | 4 +- .../impl/CuMemberBusinessServiceImpl.java | 6 +- .../member/achieve/CuMemberAchieveMapper.xml | 2 +- .../service/impl/SaOrderServiceImpl.java | 12 +- .../config/mapper/BdBonusCloudMapper.java | 9 +- .../provider/BonusItemsServiceProvider.java | 13 - .../config/service/IBdBonusCloudService.java | 32 +-- .../service/impl/BdBonusCloudServiceImpl.java | 32 +-- .../system/config/BdBonusCloudMapper.xml | 23 -- .../domain/system/config/BdBonusCloud.java | 8 +- 19 files changed, 205 insertions(+), 262 deletions(-) delete mode 100644 bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java delete mode 100644 bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java diff --git a/bd-api/bd-api-system/src/main/java/com/hzs/system/config/dto/BonusConfigDTO.java b/bd-api/bd-api-system/src/main/java/com/hzs/system/config/dto/BonusConfigDTO.java index 8aa118fd..a183af1c 100644 --- a/bd-api/bd-api-system/src/main/java/com/hzs/system/config/dto/BonusConfigDTO.java +++ b/bd-api/bd-api-system/src/main/java/com/hzs/system/config/dto/BonusConfigDTO.java @@ -87,9 +87,4 @@ public class BonusConfigDTO implements Serializable { */ private Map bonusServiceMap; - /** - * 云代奖金 需要主键 国家+收益类型 - */ - private Map bonusCloudMap; - } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java deleted file mode 100644 index be5feccb..00000000 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleAgentHandle.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.hzs.bonus.bonus.service.impl; - -import org.springframework.stereotype.Component; - -/** - * 计算云代奖金 - */ -@Component -public class BonusSettleAgentHandle extends BonusSettleHandle { - - -} 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 a051cf7e..d46ea1bc 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 @@ -1153,8 +1153,9 @@ public abstract class BonusSettleHandle { } /** + * 根据订单分类,分为首购、复购、真实,获取新增业绩 + * * @param orderExtList 订单列表 - * @Description: 根据订单分类,分为首购、复购、真实,获取新增业绩 */ public void assortSaOrder(Map cuMemberAchieveHashMap, List orderExtList, BonusConfigDTO bonusConfigDTO, Boolean isFirst) { diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java deleted file mode 100644 index 4574a0a7..00000000 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettleHiFunHandle.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.hzs.bonus.bonus.service.impl; - -import org.springframework.stereotype.Component; - -/** - * 计算嗨粉订单 - */ -@Component -public class BonusSettleHiFunHandle extends BonusSettleHandle { - - -} diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java index bde38865..d7f86710 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/service/impl/BonusSettlePurchaseHandle.java @@ -172,7 +172,8 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { } /** - * @Description: 秒接复购量奖 + * 秒接复购量奖 + * * @return: List */ protected List calculateRepurchaseExpandSecondBonus(Map riskControlMap, String settleTableName, Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, @@ -185,7 +186,8 @@ public class BonusSettlePurchaseHandle extends BonusSettleHandle { } /** - * @Description: 秒接复购量奖 + * 秒接复购量奖 + * * @return: List */ protected List calculateRepurchasePushSecondBonus(String settleTableName, Map cuMemberSettleExtMap, BonusConfigDTO bonusConfigDTO, Integer period, 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 d7485eb5..37708752 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 @@ -139,10 +139,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService { @Autowired private BonusSettleNewExpandHandle bonusSettleNewExpandHandle; @Autowired - private BonusSettleHiFunHandle bonusSettleHiFunHandle; - @Autowired - private BonusSettleAgentHandle bonusSettleAgentHandle; - @Autowired private BonusSettleRepCouponsHandle bonusSettleRepCouponsHandle; @Autowired private BonusSettleMallHandle bonusSettleMallHandle; @@ -155,27 +151,34 @@ public class BonusSettleServiceImpl implements IBonusSettleService { public void calculateCumberBonusBySecond(String orderCode) { log.info("开始执行秒接,订单编号:{}", orderCode); Date startDate = DateUtils.currentDate(); - SaOrderExt saOrderExt = iSaOrderServiceApi.querySaOrderByDay(startDate, - DateUtils.afterDate(1, ChronoUnit.DAYS, startDate), orderCode).getData(); + SaOrderExt saOrderExt = iSaOrderServiceApi.querySaOrderByDay(startDate, DateUtils.afterDate(1, ChronoUnit.DAYS, startDate), orderCode).getData(); + log.info("查询订单,订单参数:{}", JSONUtil.toJsonStr(saOrderExt)); + Map systemConfigMap = iSystemConfigServiceApi.getBonusSystemConfig().getData(); Map rangeDtoMap = iRangeServiceApi.queryRangeDto().getData(); + // 处理奖金结算秒结表,判断是否存在当天结算的秒接表,从cu_member中获取网体,从昨日结算表中获取累计、结余数据 String settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, saOrderExt.getPayTime()); String beforeDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS, saOrderExt.getPayTime())); String beforeYesDay = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(2, ChronoUnit.DAYS, saOrderExt.getPayTime())); + int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId(); int beforePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeDay).getPkId(); int beforeYesPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeYesDay).getPkId(); - log.info("查询订单,订单参数:{}", JSONUtil.toJsonStr(saOrderExt)); + + // 今天秒结表 String secondTableName = TableNameConstants.CU_MEMBER_SECOND + period; + // 昨天日结表 String settleTableName = TableNameConstants.CU_MEMBER_SETTLE + beforePeriod; - // 前天 + // 前天日结表 String yesSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + beforeYesPeriod; + Map cuMemberBonusMap = new HashMap<>(MagicNumberConstants.DELETE_DATA_BATCH_UPDATE_NUM); BonusConfigDTO bonusConfigDTO = iBonusItemsServiceApi.queryBonusConfigDTO().getData(); Map cuMemberSettleExtMap = new HashMap<>(); Map cuAwardsControlMap = getCuAwardsControlMap(); List awardsList = iAwardsServiceApi.queryAwards(saOrderExt.getPkCountry()).getData(); + // 计算奖金 if (EOrderType.REGISTER_ORDER.getValue() == saOrderExt.getOrderType() || EOrderType.UPGRADE_ORDER.getValue() == saOrderExt.getOrderType() || @@ -195,117 +198,176 @@ public class BonusSettleServiceImpl implements IBonusSettleService { memberList.add(cuMember.getPkCenterCode()); } getSettleMember(saOrderExt, secondTableName, settleTableName, yesSettleTableName, memberList); - // 查询出上面的网体数据 + // 查询出上面的网体数据(推荐) List cuMemberSettleExtList = iCuMemberTreeService.queryCuMemberSecondParent(secondTableName, memberList); bonusSettleFirstPurchaseHandle.getSecondMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); - // 计算奖金 - // 计算直推奖 - List gradeDtoList = iGradeServiceApi.queryGradeConfigByCondition(saOrderExt.getPkCountry()).getData(); - CuMemberBonusPush cuMemberBonusPush = bonusSettleFirstPurchaseHandle.calculatePushBonusOne(cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, cuMemberBonusMap, saOrderExt, iAwardsServiceApi.getAwards().getData(), gradeDtoList); - log.info("获得直推奖,奖金为:{}", JSONUtil.toJsonStr(cuMemberBonusPush)); - // 计算量奖 - // 所有需要计算的父节点,只计算新增 + + // 所有需要计算的父节点(安置),只计算新增 List expandMemberSettleExtList = iCuMemberTreeService.queryCuMemberSecondPlaceParent(secondTableName, saOrderExt.getPkMember()); bonusSettleFirstPurchaseHandle.getSecondMemberSettle(cuMemberSettleExtMap, expandMemberSettleExtList); - Map weekMemberBonusMap = getWeekMemberBonusMap(settleDate, period); - Map cuMemberAssessMap = bonusSettleFirstPurchaseHandle.getLongCuMemberAssessMap(settleDate, expandMemberSettleExtList); - // 查询K值控制 - List cuMemberRiskControlList = iCuMemberRiskControlService.queryCuMemberRiskControl(DateUtils.parseStringToDate(settleDate)); - Map riskControlMap = new HashMap<>(); - if (CollectionUtil.isNotEmpty(cuMemberRiskControlList)) { - cuMemberRiskControlList.forEach(cuMemberRiskControl -> riskControlMap.put(cuMemberRiskControl.getPkMember(), cuMemberRiskControl)); - } - Map cuBonusExpandExtMap = new HashMap<>(); - BonusExpandParam bonusExpandParam = BonusExpandParam.builder().settleDate(DateUtils.parseStringToDate(settleDate)).build(); - List cuBonusExpandExtList = iCuBonusExpandService.queryBonusExpand(bonusExpandParam); - cuBonusExpandExtList.forEach(cuBonusExpandExt -> cuBonusExpandExtMap.put(cuBonusExpandExt.getPkMember(), cuBonusExpandExt)); - BigDecimal addTouch = BigDecimal.ZERO; - for (int i = expandMemberSettleExtList.size() - 1; i >= 0; i--) { - CuMemberSettleExt cuMemberSettleExt = cuMemberSettleExtList.get(i); - if (cuBonusExpandExtMap.containsKey(cuMemberSettleExt.getPkMember())) { - addTouch = cuBonusExpandExtMap.get(cuMemberSettleExt.getPkMember()).getAddTouch(); - break; + for (CuMemberSettleExt cuMemberSettleExt : expandMemberSettleExtList) { + // 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序 + CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); + if (null == targetMemberSettleExt + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 + continue; + } + if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { + // 左区 + targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), saOrderExt.getOrderAmount())); + targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), saOrderExt.getUploadAchieve())); + targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve())); + } else { + // 右区 + targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), saOrderExt.getOrderAmount())); + targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), saOrderExt.getUploadAchieve())); + targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), saOrderExt.getUploadAchieve())); } } - List cuMemberBonusExpandList = bonusSettleFirstPurchaseHandle.calculateExpandBonusOne(riskControlMap, cuMemberAssessMap, settleTableName, cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, expandMemberSettleExtList, saOrderExt, false, addTouch, BigDecimal.ZERO, 0); - // 计算领导奖 - Map saOrderExtMap = new HashMap<>(1); - saOrderExtMap.put(saOrderExt.getPkId(), saOrderExt); - // 领导奖现在首购、复购都有,此处需要传入参数区分 - boolean firstFlag = EOrderType.SPECIAL_REGISTER_ORDER.getValue() == saOrderExt.getOrderType() - || EOrderType.SPECIAL_UPGRADE_ORDER.getValue() == saOrderExt.getOrderType(); - // 领导奖处理 - List cuMemberBonusCoachList = bonusSettleFirstPurchaseHandle.calculateCoachBonusOne(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, - cuMemberBonusExpandList, period, cuMemberBonusMap, saOrderExtMap, cuAwardsControlMap, riskControlMap, awardsList, firstFlag, false); - - // 计算报单服务费 - CuMemberBonusDetail cuMemberBonusDetail = bonusSettleFirstPurchaseHandle.calculateServiceBonusOne(settleDate, cuMemberAssessMap, cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt); - // 复购券 - List couponsBonusDetailList = bonusSettleRepCouponsHandle.calculateRepurchaseCoupons(startDate, Collections.singletonList(saOrderExt), period, bonusConfigDTO, cuMemberBonusMap, cuMemberSettleExtMap); - saveCuMemberBonus(period, settleDate, cuMemberBonusMap); - cuMemberBonusPush.setPkBonus(cuMemberBonusMap.get(cuMemberBonusPush.getPkBonus()).getPkId()); - Set memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(period); - iCuMemberBonusPushService.insertCuMemberBonusPush(cuMemberBonusPush); - cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> - cuMemberBonusExpand.setPkBonus(cuMemberBonusMap.get(cuMemberBonusExpand.getPkBonus()).getPkId())); - iCuMemberBonusExpandService.batchInsertCuMemberBonusExpand(cuMemberBonusExpandList, memberIdSet); - - cuMemberBonusCoachList.forEach(cuMemberBonusCoach -> - cuMemberBonusCoach.setPkBonus(cuMemberBonusMap.get(cuMemberBonusCoach.getPkBonus()).getPkId())); - iCuMemberBonusCoachService.batchInsertCuMemberBonusCoach(cuMemberBonusCoachList, memberIdSet); - - List cuMemberBonusDetailList = new ArrayList<>(); - if (cuMemberBonusDetail != null) { - cuMemberBonusDetailList.add(cuMemberBonusDetail); - } - if (CollectionUtil.isNotEmpty(couponsBonusDetailList)) { - cuMemberBonusDetailList.addAll(couponsBonusDetailList); - } - if (cuMemberBonusDetailList.size() > 0) { - cuMemberBonusDetailList.forEach(bonusDetail -> - bonusDetail.setPkBonus(cuMemberBonusMap.get(bonusDetail.getPkBonus()).getPkId())); - iCuMemberBonusDetailService.batchInsertCuMemberBonusDetail(cuMemberBonusDetailList, memberIdSet); - } +// // 计算奖金 +// // 计算直推奖 +// List gradeDtoList = iGradeServiceApi.queryGradeConfigByCondition(saOrderExt.getPkCountry()).getData(); +// CuMemberBonusPush cuMemberBonusPush = bonusSettleFirstPurchaseHandle.calculatePushBonusOne(cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, cuMemberBonusMap, saOrderExt, iAwardsServiceApi.getAwards().getData(), gradeDtoList); +// log.info("获得直推奖,奖金为:{}", JSONUtil.toJsonStr(cuMemberBonusPush)); +// // 计算量奖 +// // 所有需要计算的父节点,只计算新增 +// List expandMemberSettleExtList = iCuMemberTreeService.queryCuMemberSecondPlaceParent(secondTableName, saOrderExt.getPkMember()); +// bonusSettleFirstPurchaseHandle.getSecondMemberSettle(cuMemberSettleExtMap, expandMemberSettleExtList); +// Map weekMemberBonusMap = getWeekMemberBonusMap(settleDate, period); +// Map cuMemberAssessMap = bonusSettleFirstPurchaseHandle.getLongCuMemberAssessMap(settleDate, expandMemberSettleExtList); +// // 查询K值控制 +// List cuMemberRiskControlList = iCuMemberRiskControlService.queryCuMemberRiskControl(DateUtils.parseStringToDate(settleDate)); +// Map riskControlMap = new HashMap<>(); +// if (CollectionUtil.isNotEmpty(cuMemberRiskControlList)) { +// cuMemberRiskControlList.forEach(cuMemberRiskControl -> riskControlMap.put(cuMemberRiskControl.getPkMember(), cuMemberRiskControl)); +// } +// Map cuBonusExpandExtMap = new HashMap<>(); +// BonusExpandParam bonusExpandParam = BonusExpandParam.builder().settleDate(DateUtils.parseStringToDate(settleDate)).build(); +// List cuBonusExpandExtList = iCuBonusExpandService.queryBonusExpand(bonusExpandParam); +// cuBonusExpandExtList.forEach(cuBonusExpandExt -> cuBonusExpandExtMap.put(cuBonusExpandExt.getPkMember(), cuBonusExpandExt)); +// BigDecimal addTouch = BigDecimal.ZERO; +// for (int i = expandMemberSettleExtList.size() - 1; i >= 0; i--) { +// CuMemberSettleExt cuMemberSettleExt = cuMemberSettleExtList.get(i); +// if (cuBonusExpandExtMap.containsKey(cuMemberSettleExt.getPkMember())) { +// addTouch = cuBonusExpandExtMap.get(cuMemberSettleExt.getPkMember()).getAddTouch(); +// break; +// } +// } +// // 计算首购量奖 +// List cuMemberBonusExpandList = bonusSettleFirstPurchaseHandle.calculateExpandBonusOne(riskControlMap, cuMemberAssessMap, settleTableName, cuMemberSettleExtMap, +// bonusConfigDTO, systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, expandMemberSettleExtList, saOrderExt, false, addTouch, BigDecimal.ZERO, 0); +// // 计算领导奖 +// Map saOrderExtMap = new HashMap<>(1); +// saOrderExtMap.put(saOrderExt.getPkId(), saOrderExt); +// +// // 领导奖现在首购、复购都有,此处需要传入参数区分 +// boolean firstFlag = EOrderType.SPECIAL_REGISTER_ORDER.getValue() == saOrderExt.getOrderType() +// || EOrderType.SPECIAL_UPGRADE_ORDER.getValue() == saOrderExt.getOrderType(); +// // 领导奖处理 +// List cuMemberBonusCoachList = bonusSettleFirstPurchaseHandle.calculateCoachBonusOne(cuMemberSettleExtMap, settleTableName, settleDate, bonusConfigDTO, +// cuMemberBonusExpandList, period, cuMemberBonusMap, saOrderExtMap, cuAwardsControlMap, riskControlMap, awardsList, firstFlag, false); +// +// // 计算报单服务费 +// CuMemberBonusDetail cuMemberBonusDetail = bonusSettleFirstPurchaseHandle.calculateServiceBonusOne(settleDate, cuMemberAssessMap, cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt); +// // 复购券 +// List couponsBonusDetailList = bonusSettleRepCouponsHandle.calculateRepurchaseCoupons(startDate, Collections.singletonList(saOrderExt), period, bonusConfigDTO, cuMemberBonusMap, cuMemberSettleExtMap); +// saveCuMemberBonus(period, settleDate, cuMemberBonusMap); +// cuMemberBonusPush.setPkBonus(cuMemberBonusMap.get(cuMemberBonusPush.getPkBonus()).getPkId()); +// Set memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(period); +// iCuMemberBonusPushService.insertCuMemberBonusPush(cuMemberBonusPush); +// cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> +// cuMemberBonusExpand.setPkBonus(cuMemberBonusMap.get(cuMemberBonusExpand.getPkBonus()).getPkId())); +// iCuMemberBonusExpandService.batchInsertCuMemberBonusExpand(cuMemberBonusExpandList, memberIdSet); +// +// cuMemberBonusCoachList.forEach(cuMemberBonusCoach -> +// cuMemberBonusCoach.setPkBonus(cuMemberBonusMap.get(cuMemberBonusCoach.getPkBonus()).getPkId())); +// iCuMemberBonusCoachService.batchInsertCuMemberBonusCoach(cuMemberBonusCoachList, memberIdSet); +// +// List cuMemberBonusDetailList = new ArrayList<>(); +// if (cuMemberBonusDetail != null) { +// cuMemberBonusDetailList.add(cuMemberBonusDetail); +// } +// if (CollectionUtil.isNotEmpty(couponsBonusDetailList)) { +// cuMemberBonusDetailList.addAll(couponsBonusDetailList); +// } +// if (cuMemberBonusDetailList.size() > 0) { +// cuMemberBonusDetailList.forEach(bonusDetail -> +// bonusDetail.setPkBonus(cuMemberBonusMap.get(bonusDetail.getPkBonus()).getPkId())); +// iCuMemberBonusDetailService.batchInsertCuMemberBonusDetail(cuMemberBonusDetailList, memberIdSet); +// } log.info("首购奖金计算完毕"); } else { // 先处理关系 List memberList = new ArrayList<>(); getSettleMember(saOrderExt, secondTableName, yesSettleTableName, settleTableName, memberList); - // 初始化需要秒接结算的数据 + // 查询出上面的网体数据(推荐) List pushMemberSettleExtList = iCuMemberTreeService.queryCuMemberSecondParent(secondTableName, memberList); bonusSettleFirstPurchaseHandle.getSecondMemberSettle(cuMemberSettleExtMap, pushMemberSettleExtList); - List cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushSecondBonus(settleTableName, cuMemberSettleExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, pushMemberSettleExtList, settleDate); // 查询出上面的网体数据 List cuMemberSettleExtList = iCuMemberTreeService.queryCuMemberSecondPlaceParent(secondTableName, saOrderExt.getPkMember()); bonusSettleFirstPurchaseHandle.getSecondMemberSettle(cuMemberSettleExtMap, cuMemberSettleExtList); - Map weekMemberBonusMap = getWeekMemberBonusMap(settleDate, period); - // 复购订单,计算复购推荐 复购极差,复购拓展 - // 查询K值控制 - List cuMemberRiskControlList = iCuMemberRiskControlService.queryCuMemberRiskControl(DateUtils.parseStringToDate(settleDate)); - Map riskControlMap = new HashMap<>(); - if (CollectionUtil.isNotEmpty(cuMemberRiskControlList)) { - cuMemberRiskControlList.forEach(cuMemberRiskControl -> riskControlMap.put(cuMemberRiskControl.getPkMember(), cuMemberRiskControl)); - } - List cuMemberBonusExpandList = bonusSettlePurchaseHandle.calculateRepurchaseExpandSecondBonus(riskControlMap, settleTableName, - cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, saOrderExt, cuMemberSettleExtList, settleDate, BigDecimal.ZERO, BigDecimal.ZERO, 0); - // c)增加奖衔记录表 - Map awardsMap = iAwardsServiceApi.getAwards().getData(); - List cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap, - bonusConfigDTO, Collections.singletonList(saOrderExt), period, cuMemberBonusMap, cuAwardsControlMap); - if (cuMemberBonusMap.size() > 0) { - saveCuMemberBonus(period, settleDate, cuMemberBonusMap); - Set memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(period); - cuMemberBonusPushList.forEach(cuMemberBonusPush -> - cuMemberBonusPush.setPkBonus(cuMemberBonusMap.get(cuMemberBonusPush.getPkBonus()).getPkId())); - iCuMemberBonusPushService.batchInsertCuMemberBonusPush(cuMemberBonusPushList, memberIdSet); - cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> - cuMemberBonusExpand.setPkBonus(cuMemberBonusMap.get(cuMemberBonusExpand.getPkBonus()).getPkId())); - iCuMemberBonusExpandService.batchInsertCuMemberBonusExpand(cuMemberBonusExpandList, memberIdSet); - cuMemberBonusRangeList.forEach(cuMemberBonusRange -> - cuMemberBonusRange.setPkBonus(cuMemberBonusMap.get(cuMemberBonusRange.getPkBonus()).getPkId())); - iCuMemberBonusRangeService.batchInsertCuMemberBonusRange(cuMemberBonusRangeList, memberIdSet); + + // 所有需要计算的父节点(安置),只计算新增 + List expandMemberSettleExtList = iCuMemberTreeService.queryCuMemberSecondPlaceParent(secondTableName, saOrderExt.getPkMember()); + bonusSettleFirstPurchaseHandle.getSecondMemberSettle(cuMemberSettleExtMap, expandMemberSettleExtList); + for (CuMemberSettleExt cuMemberSettleExt : expandMemberSettleExtList) { + // 数据已经准备好了,肯定有值,map中是实际的值,先计算新增,然后根据新增结算计算碰次,list是为了存储碰次的顺序 + CuMemberSettleExt targetMemberSettleExt = cuMemberSettleExtMap.get(cuMemberSettleExt.getPkPlaceParent()); + if (null == targetMemberSettleExt + || ECategory.NORMAL.getValue() != targetMemberSettleExt.getCategory() + || EAccountStatus.STOP_INCOME.getValue() == targetMemberSettleExt.getAccountStatus() + || EGrade.START_UP.getValue() == targetMemberSettleExt.getGradeValue()) { + // 会员不满足计算奖金条件,跳过 + continue; + } + if (EPlaceDept.LEFT_DEPT.getValue() == cuMemberSettleExt.getPlaceDept()) { + // 左区 + targetMemberSettleExt.setANewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getANewAmount(), saOrderExt.getOrderAmount())); + targetMemberSettleExt.setANewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getANewPv(), saOrderExt.getUploadAchieve())); + targetMemberSettleExt.setABalance(ComputeUtil.computeAdd(targetMemberSettleExt.getABalance(), saOrderExt.getUploadAchieve())); + } else { + // 右区 + targetMemberSettleExt.setBNewAmount(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewAmount(), saOrderExt.getOrderAmount())); + targetMemberSettleExt.setBNewPv(ComputeUtil.computeAdd(targetMemberSettleExt.getBNewPv(), saOrderExt.getUploadAchieve())); + targetMemberSettleExt.setBBalance(ComputeUtil.computeAdd(targetMemberSettleExt.getBBalance(), saOrderExt.getUploadAchieve())); + } } + +// // 秒接复购量奖 +// List cuMemberBonusPushList = bonusSettlePurchaseHandle.calculateRepurchasePushSecondBonus(settleTableName, cuMemberSettleExtMap, +// bonusConfigDTO, period, cuMemberBonusMap, saOrderExt, pushMemberSettleExtList, settleDate); +// Map weekMemberBonusMap = getWeekMemberBonusMap(settleDate, period); +// // 复购订单,计算复购推荐 复购极差,复购拓展 +// // 查询K值控制 +// List cuMemberRiskControlList = iCuMemberRiskControlService.queryCuMemberRiskControl(DateUtils.parseStringToDate(settleDate)); +// Map riskControlMap = new HashMap<>(); +// if (CollectionUtil.isNotEmpty(cuMemberRiskControlList)) { +// cuMemberRiskControlList.forEach(cuMemberRiskControl -> riskControlMap.put(cuMemberRiskControl.getPkMember(), cuMemberRiskControl)); +// } +// // 计算复购量奖 +// List cuMemberBonusExpandList = bonusSettlePurchaseHandle.calculateRepurchaseExpandSecondBonus(riskControlMap, settleTableName, +// cuMemberSettleExtMap, bonusConfigDTO, systemConfigMap, period, weekMemberBonusMap, cuMemberBonusMap, saOrderExt, cuMemberSettleExtList, settleDate, BigDecimal.ZERO, BigDecimal.ZERO, 0); +// // c)增加奖衔记录表 +// Map awardsMap = iAwardsServiceApi.getAwards().getData(); +// List cuMemberBonusRangeList = bonusSettlePurchaseHandle.calculateRepurchaseRangeBonus(cuMemberSettleExtMap, settleTableName, settleDate, rangeDtoMap, awardsMap, +// bonusConfigDTO, Collections.singletonList(saOrderExt), period, cuMemberBonusMap, cuAwardsControlMap); +// if (cuMemberBonusMap.size() > 0) { +// saveCuMemberBonus(period, settleDate, cuMemberBonusMap); +// Set memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(period); +// cuMemberBonusPushList.forEach(cuMemberBonusPush -> +// cuMemberBonusPush.setPkBonus(cuMemberBonusMap.get(cuMemberBonusPush.getPkBonus()).getPkId())); +// iCuMemberBonusPushService.batchInsertCuMemberBonusPush(cuMemberBonusPushList, memberIdSet); +// cuMemberBonusExpandList.forEach(cuMemberBonusExpand -> +// cuMemberBonusExpand.setPkBonus(cuMemberBonusMap.get(cuMemberBonusExpand.getPkBonus()).getPkId())); +// iCuMemberBonusExpandService.batchInsertCuMemberBonusExpand(cuMemberBonusExpandList, memberIdSet); +// cuMemberBonusRangeList.forEach(cuMemberBonusRange -> +// cuMemberBonusRange.setPkBonus(cuMemberBonusMap.get(cuMemberBonusRange.getPkBonus()).getPkId())); +// iCuMemberBonusRangeService.batchInsertCuMemberBonusRange(cuMemberBonusRangeList, memberIdSet); +// } log.info("复购奖金计算完毕"); } // 更新网体结构 diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java index a1710cca..a7432a39 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/listener/SaOrderSecondListener.java @@ -19,7 +19,7 @@ import org.springframework.stereotype.Component; public class SaOrderSecondListener { @Autowired - private IBonusSettleService bonusSettleService; + private IBonusSettleService iBonusSettleService; @RabbitListener(bindings = @QueueBinding( exchange = @Exchange(value = RabbitMqConstants.ORDER_SECOND_EXCHANGE, type = "topic"), @@ -28,13 +28,14 @@ public class SaOrderSecondListener { @RabbitHandler public void onMessage(Message message, Channel channel) throws Exception { SaOrderExt saOrderExt = message.getPayload(); - log.info("秒结开始消费,接收到的参数:{}", saOrderExt.getOrderCode()); Long deliveryTag = (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG); channel.basicAck(deliveryTag, false); + + log.info("秒结开始消费,接收到的参数:{}", saOrderExt.getOrderCode()); + try { Thread.sleep(500); - // 订单当日订单只计算奖衔 - bonusSettleService.calculateCumberBonusBySecond(saOrderExt.getOrderCode()); + iBonusSettleService.calculateCumberBonusBySecond(saOrderExt.getOrderCode()); } catch (Exception e) { e.printStackTrace(); } diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml index 60f1f8ec..06a477d2 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberTreeMapper.xml @@ -593,21 +593,22 @@ merge into ${secondTableName} a using ( - select B.pk_id,b.pk_settle_country pk_country,nvl(st.A_BALANCE,0) A_BALANCE,nvl(st.B_BALANCE,0) B_BALANCE, + select B.pk_id, b.pk_settle_country pk_country, + nvl(st.A_BALANCE, 0) A_BALANCE, nvl(st.B_BALANCE, 0) B_BALANCE, nvl(yt.A_SUM_AMOUNT,0) A_SUM_AMOUNT,nvl(yt.B_SUM_AMOUNT,0) B_SUM_AMOUNT, nvl(yt.A_SUM_PV,0) A_SUM_PV,nvl(yt.b_SUM_PV,0) b_SUM_PV,nvl(st.A_NEW_AMOUNT,0) A_NEW_AMOUNT, nvl(st.B_NEW_AMOUNT,0) B_NEW_AMOUNT,nvl(st.A_NEW_PV,0) A_NEW_PV, nvl(ST.B_NEW_PV,0) B_NEW_PV,nvl(yt.A_SUM_REAL_AMOUNT,0) A_SUM_REAL_AMOUNT, nvl(yt.B_SUM_REAL_AMOUNT,0) B_SUM_REAL_AMOUNT, - nvl(yt.A_SUM_REAL_PV,0) A_SUM_REAL_PV, - nvl(yt.B_SUM_REAL_PV,0) B_SUM_REAL_PV, + nvl(yt.A_SUM_REAL_PV,0) a_sum_real_pv, nvl(yt.B_SUM_REAL_PV,0) b_sum_real_pv, nvl(ST.REP_A_BALANCE,0) REP_A_BALANCE,nvl(ST.REP_B_BALANCE,0) REP_B_BALANCE, nvl(ST.REP_A_NEW_AMOUNT,0) REP_A_NEW_AMOUNT, nvl(ST.REP_B_NEW_AMOUNT,0) REP_B_NEW_AMOUNT,nvl(ST.REP_A_NEW_PV,0) REP_A_NEW_PV, nvl(ST.REP_B_NEW_PV,0) REP_B_NEW_PV,nvl(yt.REP_A_SUM_AMOUNT,0) REP_A_SUM_AMOUNT, nvl(yt.REP_B_SUM_AMOUNT,0) REP_B_SUM_AMOUNT,nvl(yt.REP_A_SUM_PV,0) REP_A_SUM_PV, nvl(yt.REP_B_SUM_PV,0) REP_B_SUM_PV, - nvl(ST.ROUND,0) ROUND,nvl(nvl(ST.SECOND,yt.second),1) SECOND,nvl(ST.MIN_ACHIEVE,0) MIN_ACHIEVE,b.expire_status + nvl(ST.ROUND,0) ROUND,nvl(nvl(ST.SECOND,yt.second),1) SECOND,nvl(ST.MIN_ACHIEVE,0) MIN_ACHIEVE, + b.expire_status from (select t.pk_id,t.pk_settle_country,t.expire_status from cu_member t where t.del_flag = 0 start with t.pk_id = #{pkMember} @@ -628,7 +629,7 @@ left join ${secondTableName} st on b.pk_id = st.pk_member left join ${settleTableName} yt - on b.pk_id=yt.pk_member + on b.pk_id = yt.pk_member ) b on (a.pk_member = b.pk_id) when matched then diff --git a/bd-business/bd-business-member/src/main/java/com/hzs/member/achieve/service/impl/CuMemberAchieveServiceImpl.java b/bd-business/bd-business-member/src/main/java/com/hzs/member/achieve/service/impl/CuMemberAchieveServiceImpl.java index a529bede..1eab8472 100644 --- a/bd-business/bd-business-member/src/main/java/com/hzs/member/achieve/service/impl/CuMemberAchieveServiceImpl.java +++ b/bd-business/bd-business-member/src/main/java/com/hzs/member/achieve/service/impl/CuMemberAchieveServiceImpl.java @@ -102,8 +102,8 @@ public class CuMemberAchieveServiceImpl extends ServiceImpl