From c95d15489b121a454f208dd50a43e12d99d84718 Mon Sep 17 00:00:00 2001 From: cabbage <281119120@qq.com> Date: Thu, 12 Jun 2025 17:03:38 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E7=A7=92=E7=BB=93=E3=80=81=E6=97=A5?= =?UTF-8?q?=E7=BB=93=E5=A4=84=E7=90=86=E4=BC=9A=E5=91=98=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E7=8A=B6=E6=80=81=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/ApiCuMemberBonusController.java | 94 +++++-------------- .../service/impl/BonusSettleRangeHandle.java | 21 ++--- .../com/hzs/bonus/bonus/vo/MemberBonusVO.java | 16 ++-- .../achieve/CuMemberRetailRangeMapper.xml | 13 ++- 4 files changed, 53 insertions(+), 91 deletions(-) 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 ee96c1bf..e7e4b8db 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 @@ -26,64 +26,19 @@ import java.util.Collections; import java.util.Date; import java.util.List; -/** - * @Description: - * @Author: sui q - * @Time: 2023/1/13 9:39 - * @Classname: ApiCuMemberBonusController - * @PackageName: com.hzs.member.bonus.controller.api - */ @RestController @RequestMapping("/api/bonus") @Slf4j -public class ApiCuMemberBonusController extends BaseController { - - private ICuMemberBonusService cuMemberBonusService; +public class ApiCuMemberBonusController extends BaseController { @Autowired - public void setCuMemberBonusService(ICuMemberBonusService cuMemberBonusService) { - this.cuMemberBonusService = cuMemberBonusService; - } - -// /** -// * 查询会员某个时间段内的奖金,默认查询15天内,查询直推 -// */ -// @PostMapping("/query-bonus-first") -// public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam){ -// setBonusParam(bonusParam); -// List cuMemberBonusList = cuMemberBonusService.queryMemberBonusVoByCondition(bonusParam); -// List firstPurchaseVOList = new ArrayList<>(); -// cuMemberBonusList.forEach(cuMemberBonus -> { -// MemberBonusFirstPurchaseVO memberBonusFirstPurchaseVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusFirstPurchaseVO.class, "settleDate"); -// packageSettleDate(cuMemberBonus, memberBonusFirstPurchaseVO); -//// if(DateUtils.compareDate(cuMemberBonus.getSettleDate(), DateUtils.parseStringToDate("2024-09-09"))>0) { -// BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getDirectIncome(), memberBonusFirstPurchaseVO.getExpandIncome(), -// memberBonusFirstPurchaseVO.getCoachIncome(), memberBonusFirstPurchaseVO.getServiceIncome(), memberBonusFirstPurchaseVO.getShareIncome(), -// memberBonusFirstPurchaseVO.getRepurExpandIncome(), memberBonusFirstPurchaseVO.getRepurRangeIncome(), memberBonusFirstPurchaseVO.getRepurPushIncome()), -// ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getRepurRealSubtotal())); -// memberBonusFirstPurchaseVO.setBackPoints(ComputeUtil.computeMultiplyHalf(serviceSpend)); -// memberBonusFirstPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend)); -// memberBonusFirstPurchaseVO.setExpandIncome(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getExpandIncome(), memberBonusFirstPurchaseVO.getRepurExpandIncome(), -// memberBonusFirstPurchaseVO.getRepurRangeIncome(), memberBonusFirstPurchaseVO.getRepurPushIncome())); -// memberBonusFirstPurchaseVO.setPurRealSubtotal(ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getRepurRealSubtotal())); -//// }else{ -//// BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getDirectIncome(), memberBonusFirstPurchaseVO.getExpandIncome(), -//// memberBonusFirstPurchaseVO.getCoachIncome(), memberBonusFirstPurchaseVO.getServiceIncome(), memberBonusFirstPurchaseVO.getShareIncome(), -//// memberBonusFirstPurchaseVO.getRepurExpandIncome(), memberBonusFirstPurchaseVO.getRepurExpandIncome()), -//// ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getRepurRealSubtotal())); -//// memberBonusFirstPurchaseVO.setBackPoints(ComputeUtil.computeMultiplyHalf(serviceSpend)); -//// memberBonusFirstPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend)); -//// } -// firstPurchaseVOList.add(memberBonusFirstPurchaseVO); -// }); -// return getDataTable(firstPurchaseVOList); -// } + private ICuMemberBonusService cuMemberBonusService; /** * 查询会员某个时间段内的奖金,默认查询15天内,查询直推 */ @PostMapping("/query-bonus-first") - public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam){ + public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam) { setBonusParam(bonusParam); List cuMemberBonusList = cuMemberBonusService.queryMemberBonusVoByCondition(bonusParam); List firstPurchaseVOList = new ArrayList<>(); @@ -97,8 +52,8 @@ public class ApiCuMemberBonusController extends BaseController { // memberBonusFirstPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend)); // if(DateUtils.compareDate(cuMemberBonus.getSettleDate(), DateUtils.parseStringToDate("2024-09-09"))>0) { BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getDirectIncome(), memberBonusFirstPurchaseVO.getExpandIncome(), - memberBonusFirstPurchaseVO.getCoachIncome(), memberBonusFirstPurchaseVO.getServiceIncome(), memberBonusFirstPurchaseVO.getShareIncome(), - memberBonusFirstPurchaseVO.getRepurExpandIncome(), memberBonusFirstPurchaseVO.getRepurRangeIncome(), memberBonusFirstPurchaseVO.getRepurPushIncome()), + memberBonusFirstPurchaseVO.getCoachIncome(), memberBonusFirstPurchaseVO.getServiceIncome(), memberBonusFirstPurchaseVO.getShareIncome(), + memberBonusFirstPurchaseVO.getRepurExpandIncome(), memberBonusFirstPurchaseVO.getRepurRangeIncome(), memberBonusFirstPurchaseVO.getRepurPushIncome()), ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getRepurRealSubtotal())); memberBonusFirstPurchaseVO.setBackPoints(ComputeUtil.computeMultiplyHalf(serviceSpend)); memberBonusFirstPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend)); @@ -122,21 +77,22 @@ public class ApiCuMemberBonusController extends BaseController { * 查询会员实时奖金,当日的奖金 */ @PostMapping("/query-current-bonus") - public TableDataInfo listCurrentBonus(@RequestBody BonusParam bonusParam){ + public TableDataInfo listCurrentBonus(@RequestBody BonusParam bonusParam) { bonusParam.setPkCountry(SecurityUtils.getPkCountry()); bonusParam.setPkMember(SecurityUtils.getUserId()); bonusParam.setStartDate(DateUtils.currentDate()); bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.currentDate())); bonusParam.setGrantStatus(EGrantStatus.SETTLED.getValue()); + List cuMemberBonusList = cuMemberBonusService.queryMemberSecondBonusVoByCondition(bonusParam); List memberBonusVOList = new ArrayList<>(); cuMemberBonusList.forEach(cuMemberBonus -> { - if(ComputeUtil.compareValue(cuMemberBonus.getRealIncomeTotal())) { + if (ComputeUtil.compareValue(cuMemberBonus.getRealIncomeTotal())) { 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.getRetailAreaIncome()), cuMemberBonus.getRetailRealSubtotal()); memberBonusVO.setBackPoints(serviceSpend); memberBonusVOList.add(memberBonusVO); @@ -149,7 +105,7 @@ public class ApiCuMemberBonusController extends BaseController { * 查询会员昨天奖金的值 */ @PostMapping("/query-bonus-total") - public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam){ + public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam) { bonusParam.setPkCountry(SecurityUtils.getPkCountry()); bonusParam.setPkMember(SecurityUtils.getUserId()); // bonusParam.setStartDate(DateUtils.beforeDate(1, ChronoUnit.DAYS)); @@ -159,9 +115,9 @@ public class ApiCuMemberBonusController extends BaseController { bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS)); List cuMemberBonusList = cuMemberBonusService.queryMemberBonusTotalByCondition(bonusParam); MemberRealIncomeVO memberRealIncomeVO = new MemberRealIncomeVO(); - if(CollectionUtil.isEmpty(cuMemberBonusList)){ + if (CollectionUtil.isEmpty(cuMemberBonusList)) { memberRealIncomeVO.setRealIncomeTotal(BigDecimal.ZERO); - }else { + } else { memberRealIncomeVO.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonusList.get(0).getRealIncomeTotal(), cuMemberBonusList.get(0).getBackPoints())); } return getDataTable(Collections.singletonList(memberRealIncomeVO)); @@ -171,7 +127,7 @@ public class ApiCuMemberBonusController extends BaseController { * 查询会员某个时间段内的奖金,默认查询15天内,查询复购 */ @PostMapping("/query-bonus-repurchase") - public TableDataInfo listRepurchaseBonus(@RequestBody BonusParam bonusParam){ + public TableDataInfo listRepurchaseBonus(@RequestBody BonusParam bonusParam) { setBonusParam(bonusParam); List cuMemberBonusList = cuMemberBonusService.queryMemberBonusVoByCondition(bonusParam); List memberBonusPurchaseVoList = new ArrayList<>(); @@ -179,9 +135,9 @@ public class ApiCuMemberBonusController extends BaseController { MemberBonusPurchaseVO memberBonusPurchaseVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusPurchaseVO.class, "settleDate"); packageSettleDate(cuMemberBonus, memberBonusPurchaseVO); BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(memberBonusPurchaseVO.getRetailRangeIncome(), - memberBonusPurchaseVO.getRetailSameLevelIncome(), memberBonusPurchaseVO.getRetailAreaIncome(), - memberBonusPurchaseVO.getRetailBenefitRangeIncome(), memberBonusPurchaseVO.getRetailBenefitAvgIncome(), - memberBonusPurchaseVO.getRetailBenefitIncome()), + memberBonusPurchaseVO.getRetailSameLevelIncome(), memberBonusPurchaseVO.getRetailAreaIncome(), + memberBonusPurchaseVO.getRetailBenefitRangeIncome(), memberBonusPurchaseVO.getRetailBenefitAvgIncome(), + memberBonusPurchaseVO.getRetailBenefitIncome()), memberBonusPurchaseVO.getRetailRealSubtotal()); memberBonusPurchaseVO.setBackPoints(serviceSpend); memberBonusPurchaseVO.setRetailBenefitIncome(ComputeUtil.computeAdd(memberBonusPurchaseVO.getRetailBenefitIncome(), memberBonusPurchaseVO.getRetailBenefitAvgIncome())); @@ -195,7 +151,7 @@ public class ApiCuMemberBonusController extends BaseController { * 查询会员某个时间段内的奖金,默认查询15天内,查询复购 */ @PostMapping("/query-bonus-hi-fun") - public TableDataInfo listHiFunBonus(@RequestBody BonusParam bonusParam){ + public TableDataInfo listHiFunBonus(@RequestBody BonusParam bonusParam) { setBonusParam(bonusParam); List cuMemberBonusList = cuMemberBonusService.queryMemberBonusVoByCondition(bonusParam); List bonusHiFunVoList = new ArrayList<>(); @@ -209,11 +165,11 @@ public class ApiCuMemberBonusController extends BaseController { } private static void packageSettleDate(CuMemberBonusExt cuMemberBonus, PubMemberBonusVO pubMemberBonusVO) { - if(cuMemberBonus.getEndSettleDate() == null){ + if (cuMemberBonus.getEndSettleDate() == null) { pubMemberBonusVO.setSettleDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, cuMemberBonus.getSettleDate())); - }else{ + } else { pubMemberBonusVO.setSettleDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, cuMemberBonus.getSettleDate()) + "-" + - DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, cuMemberBonus.getEndSettleDate()) ); + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, cuMemberBonus.getEndSettleDate())); } pubMemberBonusVO.setServiceSpend(BigDecimal.ZERO); } @@ -222,14 +178,14 @@ public class ApiCuMemberBonusController extends BaseController { bonusParam.setPkCountry(SecurityUtils.getPkCountry()); bonusParam.setPkMember(SecurityUtils.getUserId()); Date startDate = DateUtils.beforeDate(15, ChronoUnit.DAYS, DateUtils.currentDate()); - if(bonusParam.getStartDate() == null){ + if (bonusParam.getStartDate() == null) { bonusParam.setStartDate(startDate); - }else if(DateUtils.compareDateBefore(bonusParam.getStartDate(), startDate)){ + } else if (DateUtils.compareDateBefore(bonusParam.getStartDate(), startDate)) { bonusParam.setStartDate(startDate); } - if(bonusParam.getEndDate() == null){ + if (bonusParam.getEndDate() == null) { bonusParam.setEndDate(DateUtils.currentDate()); - }else { + } else { bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, bonusParam.getEndDate())); } } @@ -238,7 +194,7 @@ public class ApiCuMemberBonusController extends BaseController { * 查询会员某个时间段内的奖金来源 */ @PostMapping("/query-bonus-detail") - public TableDataInfo listBonusSource(@RequestBody BonusParam bonusParam){ + public TableDataInfo listBonusSource(@RequestBody BonusParam bonusParam) { setBonusParam(bonusParam); startPage(); // List memberBonusVoList = new ArrayList<>(); 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 1725dd6f..03c5472f 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 @@ -58,6 +58,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { private IBonusOrderService iBonusOrderService; /** + * 秒结: * 实时计算秒结数据(业绩、盒数、等级、奖衔、日奖) */ List calculateCuMemberRetailRangeBonusBySecond(String settleDate, SaOrderExt saOrderExt, BonusConfigDTO bonusConfigDTO, @@ -143,9 +144,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 指定盒数商品 // 计算直推级差收益 + 平级收益 cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, gradeMap, bonusConfigDTO, currentPeriod, saOrderItems, saOrderExt)); - - // 注册、升级 并且有盒数商品,算激活 - sourceMemberRangeExt.setEnableStatus(EYesNo.YES.getIntValue()); } } } @@ -470,14 +468,15 @@ public class BonusSettleRangeHandle extends BonusSettleHandle { // 会员奖金明细 List cuMemberBonusDetailList = new ArrayList<>(); - for (SaOrderExt saOrderExt : retailOrderList) { - CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember()); - if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() || - EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) { - // 注册、升级才能算激活状态 - sourceMemberRangeExt.setEnableStatus(EYesNo.YES.getIntValue()); - } - } + // 上面更新网体,按会员表是否激活进行处理 +// for (SaOrderExt saOrderExt : retailOrderList) { +// CuMemberRetailRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember()); +// if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType() || +// EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) { +// // 注册、升级才能算激活状态 +// sourceMemberRangeExt.setEnableStatus(EYesNo.YES.getIntValue()); +// } +// } for (SaOrderExt saOrderExt : retailOrderList) { // 计算自消费奖衔 diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/MemberBonusVO.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/MemberBonusVO.java index a4b0750b..a58a007e 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/MemberBonusVO.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/bonus/vo/MemberBonusVO.java @@ -1,7 +1,7 @@ package com.hzs.bonus.bonus.vo; -import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; +import com.hzs.common.core.annotation.BigDecimalFormat; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -12,11 +12,7 @@ import java.math.BigDecimal; import java.util.Date; /** - * @Description: 用于查询会员奖金 - * @Author: sui q - * @Time: 2023/1/13 10:38 - * @Classname: MemberBonusVO - * @PackageName: com.hzs.member.bonus.vo + * 用于查询会员奖金 */ @Data @Builder @@ -97,6 +93,7 @@ public class MemberBonusVO implements Serializable { /** * 商城重消 */ + @BigDecimalFormat private BigDecimal backPoints; /** @@ -117,6 +114,7 @@ public class MemberBonusVO implements Serializable { /** * 实发收益总计 */ + @BigDecimalFormat private BigDecimal realIncomeTotal; /** @@ -130,18 +128,21 @@ public class MemberBonusVO implements Serializable { private Integer pkCountry; /** - * 新零售极差收益 + * 新零售直推级差收益 */ + @BigDecimalFormat private BigDecimal retailRangeIncome; /** * 新零售平级收益 */ + @BigDecimalFormat private BigDecimal retailSameLevelIncome; /** * 新零售区域收益 */ + @BigDecimalFormat private BigDecimal retailAreaIncome; /** @@ -162,6 +163,7 @@ public class MemberBonusVO implements Serializable { /** * 新零售收益小计 */ + @BigDecimalFormat private BigDecimal retailRealSubtotal; /** 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 b6ae727b..434d7cb1 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 @@ -92,13 +92,14 @@ select pk_member,consume_box_num,new_box_num,team_box_num,month_box_num,team_new_box_num,enable_status, consume_pv,month_consume_pv,new_consume_pv,team_consume_amount,team_consume_pv,pk_share_awards, team_month_amount,team_month_pv,team_new_amount,team_new_pv,recommend_num,team_num,pk_grade, - big_box_num,small_box_num,big_team_pv,small_team_pv from ${yesterdayRangeTableName} + big_box_num,small_box_num,big_team_pv,small_team_pv + from ${yesterdayRangeTableName} ) b on (a.pk_member=b.pk_member) when matched then update set a.consume_box_num=b.consume_box_num,a.team_box_num=b.team_box_num, a.consume_pv=b.consume_pv,a.team_consume_amount=b.team_consume_amount,a.team_consume_pv=b.team_consume_pv, - a.recommend_num=b.recommend_num,a.team_num=b.team_num,a.pk_grade=b.pk_grade,a.enable_status=b.enable_status, + a.recommend_num=b.recommend_num,a.team_num=b.team_num,a.pk_grade=b.pk_grade, a.enable_status = b.enable_status, a.big_box_num=b.big_box_num,a.small_box_num=b.small_box_num, a.big_team_pv=b.big_team_pv,a.small_team_pv=b.small_team_pv @@ -298,7 +299,7 @@ a.pk_country, a.pk_settle_country, a.pk_share_awards, - a.enable_status, + nvl(cm.is_activate, a.enable_status) enable_status, consume_box_num, new_box_num, team_box_num, @@ -334,6 +335,10 @@ start with pk_member = #{item} connect by pk_member = prior pk_parent ) a + left join cu_member cm + on cm.pk_id = a.pk_member + and cm.del_flag = 0 + and cm.category = 0 inner join bd_grade ba on a.pk_grade = ba.pk_id inner join bd_awards bw @@ -576,7 +581,7 @@ cm.income_status, cm.pay_time, b.pk_rate, - a.enable_status, + nvl(cm.is_activate, a.enable_status) enable_status, nvl(b.consume_box_num, 0) + a.new_box_num consume_box_num, a.new_box_num, nvl(b.team_box_num, 0) + a.team_new_box_num team_box_num,