## 见点奖复购考核;

This commit is contained in:
cabbage 2025-07-23 15:42:36 +08:00
parent 512af3d529
commit 4ffedd6734
39 changed files with 564 additions and 1522 deletions

View File

@ -6,7 +6,6 @@ import com.hzs.bonus.achieve.service.ICuMemberMonthAchieveService;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
import com.hzs.bonus.bonus.service.IBonusGrantService;
import com.hzs.bonus.bonus.service.IBonusSettleService;
import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.vo.MemberSettlePeriodVO;
import com.hzs.common.core.annotation.AccessPermissions;
@ -16,7 +15,6 @@ import com.hzs.common.core.enums.EOperationBusiness;
import com.hzs.common.core.enums.EOperationMethod;
import com.hzs.common.core.enums.EOperationModule;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo;
@ -31,13 +29,6 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @Description:
* @Author: sui q
* @Time: 2022/11/2 16:21
* @Classname: CuMemberSettleController
* @PackageName: com.hzs.member.achieve.controller
*/
@RestController
@RequestMapping("/manage/settle")
public class CuMemberSettleController extends BaseController {
@ -45,8 +36,6 @@ public class CuMemberSettleController extends BaseController {
@Autowired
private ICuMemberBonusService cuMemberBonusService;
@Autowired
private IBonusSettleService bonusSettleService;
@Autowired
private ICuMemberTreeService cuMemberTreeService;
@Autowired
private ICuMemberSettlePeriodService cuMemberSettlePeriodService;
@ -184,21 +173,6 @@ public class CuMemberSettleController extends BaseController {
return AjaxResult.success();
}
/**
* 秒接结算业绩仅用于测试
*
* @return AjaxResult
*/
@GetMapping("/settle-second-bonus")
public AjaxResult settleSecondBonus(String orderCode) {
if (StringUtils.isEmpty(orderCode)) {
return AjaxResult.error();
}
// bonusSettleService.calculateCumberBonusBySecond(orderCode);
bonusSettleService.calculateCuMemberRangAwardsBySaOrder(orderCode);
return AjaxResult.success();
}
/**
* 秒接结算业绩仅用于测试
*
@ -223,10 +197,7 @@ public class CuMemberSettleController extends BaseController {
}
/*
* @description: 查询奖金计算期数列表
* @author: sui q
* @date: 2023/4/26 17:10
* @param: null null
* 查询奖金计算期数列表
**/
@AccessPermissions("bonusCount")
@Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.SELECT)

View File

@ -8,51 +8,41 @@ import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
/**
*
*/
public interface CuMemberRangeMapper extends BaseMapper<CuMemberRange> {
/*
* @description: 更新极差秒接表用昨天的结算表
* @param: null null
* 更新极差秒接表用昨天的结算表
**/
void mergeMemberSecondRangeByRange(@Param("rangeTableName") String rangeTableName, @Param("secondRangeTableName") String secondRangeTableName,
@Param("pkMember") Long pkMember);
/*
* @description: 根据会员查询会员上的所有网体
* @param: null null
* 根据会员查询会员上的所有网体
**/
List<CuMemberRangeExt> queryCuMemberRangeParent(@Param("tableName") String tableName, @Param("saOrderExtList") List<?> saOrderExtList);
/*
* @description: 根据会员查询会员上的所有网体, 按照pkParent作为key
* @param: null null
* 根据会员查询会员上的所有网体, 按照pkParent作为key
**/
List<CuMemberRangeExt> queryCuMemberSecondRangeParent(@Param("rangeTableName") String rangeTableName, @Param("secondTableName") String tableName, @Param("pkMember") Long pkMember);
/*
* @description: 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
* @param: null null
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
**/
List<CuMemberRangeExt> queryCuMemberRangeExtByParent(@Param("tableName") String tableName, @Param("pkParent") Long pkParent, @Param("orderDate") Date orderDate);
/*
* @description: 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
* @param: null null
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
**/
List<CuMemberRangeExt> querySecondCuMemberRangeExtByParent(@Param("tableName") String tableName, @Param("secondTableName") String secondTableName, @Param("pkParent") Long pkParent);
/*
* @description: 批量更新网体
* @param: null null
* 批量更新网体
**/
void mergeCuMemberRangeExt(@Param("rangeTableName") String rangeTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);
/*
* @description: 批量更新网体
* @param: null null
* 批量更新网体
**/
void mergeSecondCuMemberRangeExt(@Param("secondTableName") String secondTableName, @Param("cuMemberRangeExtList") List<CuMemberRangeExt> cuMemberRangeExtList);
@ -66,15 +56,13 @@ public interface CuMemberRangeMapper extends BaseMapper<CuMemberRange> {
void mergeCuMemberSecondRange(@Param("secondTableName") String secondTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);
/*
* @description: 验证血缘部门 有多少个满足等级
* @param: null null
* 验证血缘部门 有多少个满足等级
**/
Integer validateCuMemberPlaceAwards(@Param("rangeTableName") String rangeTableName, @Param("cuMemberRangeExtList") List<CuMemberRangeExt> cuMemberRangeExtList,
@Param("pkRangeAwards") Integer pkRangeAwards, @Param("orderDate") Date orderDate);
/*
* @description: 验证血缘部门 有多少个满足等级
* @param: null null
* 验证血缘部门 有多少个满足等级
**/
Integer validateSecondCuMemberPlaceAwards(@Param("secondTableName") String secondTableName, @Param("cuMemberRangeExtList") List<CuMemberRangeExt> cuMemberRangeExtList,
@Param("pkRangeAwards") Integer pkRangeAwards);

View File

@ -352,4 +352,13 @@ public interface CuMemberTreeMapper extends BaseMapper<CuMemberTree> {
@Param("settleTableNameMonthLast") String settleTableNameMonthLast,
@Param("pkMemberList") List<?> pkMemberList);
/**
* 更新日结复购考核
*
* @param settleTableName
* @param assessTableName
* @return
*/
int updateCuMemberSettlePointAssess(@Param("settleTableName") String settleTableName, @Param("assessTableName") String assessTableName);
}

View File

@ -15,8 +15,7 @@ import java.util.Map;
public interface ICuMemberRangeService extends IService<CuMemberRange> {
/*
* @description: 更新极差秒接表用昨天的结算表
* @param: null null
* 更新极差秒接表用昨天的结算表
**/
void mergeMemberSecondRangeByRange(String rangeTableName, String secondRangeTableName, Long pkMember);
@ -30,50 +29,42 @@ public interface ICuMemberRangeService extends IService<CuMemberRange> {
void updateCuMemberSecondRange(String secondTableName, Map<Long, CuMemberRangeExt> cuMemberTreeMap);
/*
* @description: 根据会员查询会员上的所有网体, 按照pkParent作为key
* @param: null null
* 根据会员查询会员上的所有网体, 按照pkParent作为key
**/
Map<Long, List<CuMemberRangeExt>> queryCuMemberRangeParent(String tableName, List<SaOrderExt> saOrderExtList);
/*
* @description: 根据会员查询会员上的所有网体, 按照pkParent作为key,查询极差秒接表
* @param: null null
* 根据会员查询会员上的所有网体, 按照pkParent作为key,查询极差秒接表
**/
Map<Long, List<CuMemberRangeExt>> queryCuMemberSecondRangeParent(String rangeTableName, String secondTableName, Long pkMember);
/*
* @description: 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
* @param: null null
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
**/
List<CuMemberRangeExt> queryCuMemberRangeExtByParent(String tableName, Long pkParent, Date orderDate);
/*
* @description: 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
* @param: null null
* 推荐推荐人查询推荐人下的所有部门, 该订单日期之前的算他的网体
**/
List<CuMemberRangeExt> querySecondCuMemberRangeExtByParent(String tableName, String secondTableName, Long pkParent);
/*
* @description: 批量更新网体
* @param: null null
* 批量更新网体
**/
void mergeCuMemberRangeExt(String rangeTableName, List<CuMemberRangeExt> cuMemberRangeExtList);
/*
* @description: 批量更新网体
* @param: null null
* 批量更新网体
**/
void mergeSecondCuMemberRangeExt(String secondTableName, List<CuMemberRangeExt> cuMemberRangeExtList);
/*
* @description: 验证血缘部门 有多少个满足等级
* @param: null null
* 验证血缘部门 有多少个满足等级
**/
Integer validateCuMemberPlaceAwards(String rangeTableName, List<CuMemberRangeExt> cuMemberRangeExtList, Integer pkRangeAwards, Date orderDate);
/*
* @description: 验证血缘部门 有多少个满足等级
* @param: null null
* 验证血缘部门 有多少个满足等级
**/
Integer validateSecondCuMemberPlaceAwards(String secondTableName, List<CuMemberRangeExt> cuMemberRangeExtList, Integer pkRangeAwards);
}

View File

@ -91,7 +91,6 @@ public interface ICuMemberTreeService extends IService<CuMemberTree> {
* 判断是否存在临时表
*
* @param tableName 表名
* @Description:
* @return: void
*/
Integer queryExistOracleTable(String tableName);
@ -359,4 +358,12 @@ public interface ICuMemberTreeService extends IService<CuMemberTree> {
*/
List<CuMemberSettleExt> listUpgradeAwards(String settleTableName, Integer awardsValue);
/**
* 更新日结复购考核
*
* @param settleTableName
* @param assessTableName
*/
void updateCuMemberSettlePointAssess(String settleTableName, String assessTableName);
}

View File

@ -12,9 +12,6 @@ import org.springframework.stereotype.Service;
import java.util.*;
/**
*
*/
@Service
public class CuMemberRangeServiceImpl extends ServiceImpl<CuMemberRangeMapper, CuMemberRange> implements ICuMemberRangeService {

View File

@ -61,12 +61,6 @@ public class CuMemberTreeServiceImpl extends ServiceImpl<CuMemberTreeMapper, CuM
if (number == null || number <= 0) {
// 初始化日表数据将cu_member数据插入到最新的日表记录表
baseMapper.insertCuMemberSettleByMember(settleTableName);
// 结算日期月份的第一天
// TODO new 复购考核按月新増业绩走晋升奖衔首月不处理复购免考
// Date settleDate = DateUtils.parseStringToDate(date);
// Date endDate = DateUtils.afterDate(1, ChronoUnit.DAYS, settleDate);
// Date startDate = DateUtils.beforeMonthFirstDate(settleDate);
// updateCuMemberSettleExemptByAward(settleTableName, startDate, endDate);
}
// // 创建极差结算记录表
@ -91,6 +85,8 @@ public class CuMemberTreeServiceImpl extends ServiceImpl<CuMemberTreeMapper, CuM
createMonthTreeTableName(date);
// 创建月表业绩记录表cu_member_achieve
iCuMemberAchieveService.createCuMemberAchieve(date);
// 创建考核月表cu_member_assess
iCuMemberAssessService.createCuMemberAssessMonth(date);
// 创建秒接表秒结表只需要表结构跟日表一模一样秒结表期间是date+1期间
Date tomorrowDate = DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.parseStringToDate(date));
@ -119,7 +115,6 @@ public class CuMemberTreeServiceImpl extends ServiceImpl<CuMemberTreeMapper, CuM
int beforePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, beforeDate)).getPkId();
// 不删除每月最后一天数据
String afterDate = DateUtils.parseDateTimeToStr(DateUtils.YYYY_MM_DD, DateUtils.afterDate(1, ChronoUnit.DAYS, beforeDate));
log.info("afterDate: {}", afterDate);
if (!afterDate.endsWith("01")) {
String beforeSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + beforePeriod;
number = baseMapper.queryExistOracleTable(beforeSettleTableName);
@ -470,4 +465,9 @@ public class CuMemberTreeServiceImpl extends ServiceImpl<CuMemberTreeMapper, CuM
return baseMapper.listUpgradeAwards(settleTableName, awardsValue);
}
@Override
public void updateCuMemberSettlePointAssess(String settleTableName, String assessTableName) {
baseMapper.updateCuMemberSettlePointAssess(settleTableName, assessTableName);
}
}

View File

@ -1,20 +1,11 @@
package com.hzs.bonus.bonus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.bonus.bonus.param.BdWaresBonusParam;
import com.hzs.common.domain.member.bonus.BdWaresBonus;
import com.hzs.common.domain.member.ext.BdWaresBonusExt;
import java.util.List;
/**
* 特殊商品分配奖金 Mapper 接口
*/
public interface BdWaresBonusMapper extends BaseMapper<BdWaresBonus> {
/*
* 查询特殊品奖金配置
**/
List<BdWaresBonusExt> querySpecialWaresBonus(BdWaresBonusParam waresBonusParam);
}

View File

@ -7,12 +7,7 @@ import java.math.BigDecimal;
import java.util.List;
/**
* @description: 商品奖金配置表
* @author: sui q
* @time: 2024/11/7 09:46
* @classname: BdWaresBonusParam
* @package_name: com.hzs.bonus.bonus.param
* version 1.0.0
* 商品奖金配置表
*/
@Data
public class BdWaresBonusParam implements Serializable {

View File

@ -1,20 +1,11 @@
package com.hzs.bonus.bonus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.bonus.bonus.param.BdWaresBonusParam;
import com.hzs.common.domain.member.bonus.BdWaresBonus;
import com.hzs.common.domain.member.ext.BdWaresBonusExt;
import java.util.List;
/**
* 特殊商品分配奖金 服务类
*/
public interface IBdWaresBonusService extends IService<BdWaresBonus> {
/*
* 查询特殊品奖金配置
**/
List<BdWaresBonusExt> querySpecialWaresBonus(BdWaresBonusParam waresBonusParam);
}

View File

@ -26,12 +26,7 @@ public interface IBonusSettleService {
void calculateCuMemberBonus(String date, List<SaOrderExt> saOrderExtList);
/*
* @description: 根据订单实时计算奖衔
**/
void calculateCuMemberRangAwardsBySaOrder(String orderCode);
/*
* @description: 4-n配置修改后重算首购奖金
* 4-n配置修改后重算首购奖金
**/
void repeatCuMemberBonusByExpand(String settleDate, List<SaOrderExt> saOrderExtList);
}

View File

@ -2,23 +2,14 @@ package com.hzs.bonus.bonus.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.bonus.mapper.BdWaresBonusMapper;
import com.hzs.bonus.bonus.param.BdWaresBonusParam;
import com.hzs.bonus.bonus.service.IBdWaresBonusService;
import com.hzs.common.domain.member.bonus.BdWaresBonus;
import com.hzs.common.domain.member.ext.BdWaresBonusExt;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 特殊商品分配奖金 服务实现类
*/
@Service
public class BdWaresBonusServiceImpl extends ServiceImpl<BdWaresBonusMapper, BdWaresBonus> implements IBdWaresBonusService {
@Override
public List<BdWaresBonusExt> querySpecialWaresBonus(BdWaresBonusParam waresBonusParam) {
return baseMapper.querySpecialWaresBonus(waresBonusParam);
}
}

View File

@ -858,71 +858,6 @@ public class BonusSettleFirstPurchaseHandle extends BonusSettleHandle {
return cuMemberBonusDetail;
}
/**
* 计算报单服务费
* 车奖 全球分红 有奖衔的会员复购考核通过的根据对应奖衔可拿代数配置拿下面代数的推荐+拓展+领导+分红奖金合计为基数的相应代数的比率配置值
* 跟领导奖一样的算法不算启动卡
*
* @param settleDateStr 结算日期
* @param period 期间
*/
List<CuMemberBonusDetail> calculateShareBonus(String settleDateStr, BonusConfigDTO bonusConfigDTO, Integer period,
Map<Long, CuMemberBonus> cuMemberBonusMap, Map<Long, CuAwardsControl> cuAwardsControlMap) {
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
Date settleDate = DateUtils.parseStringToDate(settleDateStr);
String currentFirstDate = DateUtils.currentMonthFirstDateStr(settleDate);
String beforeMonthLastDate = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentFirstDate);
// 查询上月最后一天
Integer beforeMonthLastPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthLastDate).getPkId();
String settleTableName = TableNameConstants.CU_MEMBER_SETTLE + beforeMonthLastPeriod;
String rangeTableName = TableNameConstants.CU_MEMBER_RANGE + beforeMonthLastPeriod;
// 查询上月第一天
String beforeMonthFirstDate = DateUtils.beforeMonthFirstDateStr(settleDate);
Integer beforeMonthFirstPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDate).getPkId();
// 查询上月最后一天会员等级达到奖衔的会员
Integer assessPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentFirstDate).getPkId();
String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(settleDateStr);
// 获取结算日期的第一天的日期
// 查询复购考核结果
List<CuMemberSettleExt> cuMemberSettleExtList = iCuMemberTreeService.queryMemberSettleByAwards(settleTableName, rangeTableName, beforeMonthFirstPeriod, beforeMonthLastPeriod);
if (CollectionUtil.isNotEmpty(cuMemberSettleExtList)) {
Map<Long, CuMemberAssess> cuMemberAssessMap = iCuMemberAssessService.queryCuMemberAssessByMember(assessTableName, assessPeriod, EAssessmentType.REPURCHASE_ASSESS.getValue(), cuMemberSettleExtList);
for (CuMemberSettleExt targetMemberSettleExt : cuMemberSettleExtList) {
SaOrder saOrder = SaOrder.builder().pkId(0L).orderAchieve(BigDecimal.ZERO).build();
saOrder.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, saOrder, targetMemberSettleExt);
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrder, targetMemberSettleExt, cuMemberBonus);
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberSettleExt.getPkSettleCountry(), EBonusItems.DIVIDEND_INCOME.getValue()));
// 获取计算比例根据奖衔获取
// 计算比例
cuMemberBonusDetail.setCalAchieve(targetMemberSettleExt.getRealIncomeTotal());
cuMemberBonusDetail.setCalValue(targetMemberSettleExt.getAbonusRatio());
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(targetMemberSettleExt.getRealIncomeTotal(), targetMemberSettleExt.getAbonusRatio()));
shareRemark(cuMemberBonusDetail, settleDateStr);
BdBonusDeduct bdBonusDeduct = bonusConfigDTO.getBonusDeductsMap().get(cuMemberBonusDetail.getPkBonusItems());
cuMemberBonusDetail.setIncomeTax(BigDecimal.ZERO);
cuMemberBonusDetail.setRealIncome(ComputeUtil.computeSubtract(cuMemberBonusDetail.getPretaxIncome(), cuMemberBonusDetail.getIncomeTax()));
cuMemberBonusDetail.setPkCountry(targetMemberSettleExt.getPkSettleCountry());
cuMemberBonusDetail.setPkCreator(MagicNumberConstants.PK_ADMIN);
// if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()
// && EYesNo.NO.getIntValue() == targetMemberSettleExt.getPurchaseStatus()) {
// // 需要复购考核的
// CuMemberAssess cuMemberAssess = cuMemberAssessMap.get(targetMemberSettleExt.getPkMember());
// if (cuMemberAssess == null) {
// cuMemberBonusDetail.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
// }
// }
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setShareIncome(ComputeUtil.computeAdd(cuMemberBonus.getShareIncome(), cuMemberBonusDetail.getPretaxIncome()));
setFirstPurchaseTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
cuMemberBonusDetailList.add(cuMemberBonusDetail);
}
}
return cuMemberBonusDetailList;
}
void calculateCuMemberBloodAchieveByOrder(String settleTableName, Map<Long, CuMemberSettleExt> cuMemberSettleExtMap,
List<SaOrderExt> firPurchaseOrderList, List<SaOrderExt> repurchaseOrderList,
List<SaOrderExt> mallOrderList) {

View File

@ -1,690 +0,0 @@
package com.hzs.bonus.bonus.service.impl;
import com.hzs.bonus.achieve.service.ICuMemberRangeService;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.detail.service.ICuMemberAwardsService;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.domain.bonus.BdBonusDeduct;
import com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt;
import com.hzs.common.domain.member.bonus.*;
import com.hzs.common.domain.member.detail.CuMemberAwards;
import com.hzs.common.domain.member.ext.BdWaresBonusExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.ext.SaOrderItemsExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdRangeAwards;
import com.hzs.system.config.dto.BonusConfigDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
/**
* 计算乐享极差收益
*/
@Component
public class BonusSettleRangeHandle extends BonusSettleHandle {
@Autowired
private ICuMemberRangeService iCuMemberRangeService;
@Autowired
private ICuMemberAwardsService iCuMemberAwardsService;
@Autowired
private ICuMemberService iCuMemberService;
/**
* 实时计算当月奖衔
*/
Map<Long, CuMemberRangeExt> calculateCuMemberRangeAwardsByDay(SaOrderExt saOrderExt, List<BdRangeAwards> rangeAwardsList, String secondRangeTableName, int beforePeriod, int currentPeriod) {
String rangeTableName = TableNameConstants.CU_MEMBER_RANGE + beforePeriod;
iCuMemberRangeService.mergeMemberSecondRangeByRange(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
// 极差奖衔封装为2个treeMap
Map<Integer, BdRangeAwards> consumeRangeAwardsMap = new TreeMap<>();
Map<Integer, BdRangeAwards> bloodRangeAwardsMap = new TreeMap<>();
packageRangeAwardsByType(rangeAwardsList, consumeRangeAwardsMap, bloodRangeAwardsMap);
// 按照血缘查询该会员所有伞上会员
Map<Long, List<CuMemberRangeExt>> parentRangeExtMap = iCuMemberRangeService.queryCuMemberSecondRangeParent(rangeTableName, secondRangeTableName, saOrderExt.getPkMember());
Map<Long, CuMemberRangeExt> memberRangeExtMap = getMemberSettle(parentRangeExtMap);
// 计算奖衔
// 先算团队奖衔计算完奖金后在计算消费奖衔计算完奖衔计算奖金
// 计算自消费奖衔
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(sourceMemberRangeExt.getPkParent());
// 个人累计消费pv
sourceMemberRangeExt.setConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getConsumePv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
sourceMemberRangeExt.setNewPv(ComputeUtil.computeAdd(sourceMemberRangeExt.getNewPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
// 个人月消费pv,当月会员且当月有消费推荐有效数量+1
if (sourceMemberRangeExt.getMonthMember() == EYesNo.YES.getIntValue() && ComputeUtil.compareEqual(sourceMemberRangeExt.getMonthPv(), BigDecimal.ZERO)) {
targetMemberRangeExt.setEffectiveNum(targetMemberRangeExt.getEffectiveNum() + 1);
targetMemberRangeExt.setNewEffectiveNum(targetMemberRangeExt.getNewEffectiveNum() + 1);
}
sourceMemberRangeExt.setMonthPv(ComputeUtil.computeAdd(sourceMemberRangeExt.getMonthPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
// 奖衔升级记录
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>();
// 消费奖衔
cuMemberAwardsList.addAll(calculateConsumeRangeAwards(currentPeriod, parentRangeExtMap, memberRangeExtMap, rangeTableName, sourceMemberRangeExt, saOrderExt, consumeRangeAwardsMap));
// 团队奖衔
cuMemberAwardsList.addAll(calculateBloodRangeAwards(currentPeriod, parentRangeExtMap, memberRangeExtMap, rangeTableName, saOrderExt, bloodRangeAwardsMap, sourceMemberRangeExt.getPkParent(), secondRangeTableName));
if (cuMemberAwardsList.size() > 0) {
iCuMemberAwardsService.saveBatchCuMemberAwards(cuMemberAwardsList);
// 更新会员表,更新奖衔
iCuMemberService.updateCuMemberRangeByPeriod(cuMemberAwardsList, currentPeriod);
}
return memberRangeExtMap;
}
void calculateRangeEvBonus(Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberRangeExt> memberRangeExtMap, List<CuMemberBonusPush> cuMemberBonusPushList, List<BdWaresBonusExt> bdWaresBonusExtList, SaOrderExt saOrderExt) {
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
if (ComputeUtil.compareValue(saOrderExt.getOrderAssAchieve(), BigDecimal.valueOf(15.625))) {
// 1= 自己购买了11单 2= 上3代拿 100 200 300 上3代各拿100 上11代各拿1100
int specialWaresState = 0;
BdWaresBonusExt calWaresBonusExt = null;
for (SaOrderItemsExt saOrderItemsExt : saOrderExt.getOrderItemsExtList()) {
boolean flag = Boolean.FALSE;
if (bdWaresBonusExtList != null && bdWaresBonusExtList.size() > 0) {
for (BdWaresBonusExt bdWaresBonusExt : bdWaresBonusExtList) {
if (bdWaresBonusExt.getPkWares().equals(saOrderItemsExt.getPkWares())) {
specialWaresState = 2;
flag = Boolean.TRUE;
calWaresBonusExt = bdWaresBonusExt;
break;
}
}
}
if (flag) {
break;
}
}
if (specialWaresState > 0) {
sourceMemberRangeExt.setBuyEffectiveNum(sourceMemberRangeExt.getBuyEffectiveNum() + calWaresBonusExt.getTotalAlgebra());
int algebra = 0;
for (BdWaresBonusItems bdWaresBonusItems : calWaresBonusExt.getBdWaresBonusItemsList()) {
CuMemberBonusPush cuMemberBonusPush = calculatePushBonusOne(sourceMemberRangeExt, memberRangeExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt,
bdWaresBonusItems.getAlgebra() - algebra, bdWaresBonusItems.getAssAchieve(), cuMemberBonusPushList);
if (cuMemberBonusPush != null) {
sourceMemberRangeExt = memberRangeExtMap.get(cuMemberBonusPush.getPkBonus());
algebra = bdWaresBonusItems.getAlgebra();
}
}
} else {
sourceMemberRangeExt.setBuyEffectiveNum(sourceMemberRangeExt.getBuyEffectiveNum() + 1);
calculatePushBonusOne(sourceMemberRangeExt, memberRangeExtMap, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt,
sourceMemberRangeExt.getBuyEffectiveNum(), saOrderExt.getOrderAssAchieve(), cuMemberBonusPushList);
}
}
}
private void packageRangeAwardsByType(List<BdRangeAwards> rangeAwardsList, Map<Integer, BdRangeAwards> consumeRangeAwardsMap, Map<Integer, BdRangeAwards> bloodRangeAwardsMap) {
for (BdRangeAwards bdRangeAwards : rangeAwardsList) {
if (ComputeUtil.compareValue(bdRangeAwards.getConsumePv())) {
consumeRangeAwardsMap.put(bdRangeAwards.getAwardsValue(), bdRangeAwards);
}
if (ComputeUtil.compareValue(bdRangeAwards.getTeamConsumeCheck())) {
bloodRangeAwardsMap.put(bdRangeAwards.getAwardsValue(), bdRangeAwards);
}
}
}
/*
* 先计算奖衔,奖衔计算分为2种先计算自己消费足够的S1-S3S4以上的另一种方式自消费的只有购买人其他的都是根据业绩注意有人可以直接是S4
* 先验证团队业绩小区业绩验证小市场需要从上往下走 s1只能通过自消费除了购买人其他人丛S2开始升级
* 计算个人消费奖项
**/
public List<CuMemberAwards> calculateConsumeRangeAwards(Integer period, Map<Long, List<CuMemberRangeExt>> parentRangeExtMap, Map<Long, CuMemberRangeExt> memberRangeExtMap, String rangeTableName,
CuMemberRangeExt sourceMemberRangeExt, SaOrderExt saOrderExt,
Map<Integer, BdRangeAwards> consumeRangeAwardsMap) {
int rangeAwardsValue = 2;
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>();
while (consumeRangeAwardsMap.containsKey(sourceMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue)) {
// 验证pv是否满足
BdRangeAwards bdRangeAwards = consumeRangeAwardsMap.get(sourceMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue);
if (ComputeUtil.compareValue(sourceMemberRangeExt.getTeamConsumePv(), bdRangeAwards.getTeamConsumeCheck()) &&
ComputeUtil.compareValue(sourceMemberRangeExt.getConsumePv(), bdRangeAwards.getConsumePv())) {
// 去结算表种查询该会员下所有会员会员团队业绩+消费业绩是业绩 计算小区业绩 团队业绩-小区业绩 验证小区直推必有一种
// 如果需要验证小区
if (ComputeUtil.compareValue(bdRangeAwards.getCommunityCheck())) {
List<CuMemberRangeExt> cuMemberRangeExtList = iCuMemberRangeService.queryCuMemberRangeExtByParent(rangeTableName, sourceMemberRangeExt.getPkMember(), saOrderExt.getPayTime());
// 需要验证团队业绩小区业绩
if (calculateAwards(parentRangeExtMap, memberRangeExtMap, sourceMemberRangeExt, bdRangeAwards, cuMemberRangeExtList, false)) {
break;
}
}
cuMemberAwardsList.add(getCuMemberAwards(sourceMemberRangeExt, period, saOrderExt, bdRangeAwards));
sourceMemberRangeExt.setPkRangeAwards(bdRangeAwards.getPkId());
sourceMemberRangeExt.setPkAwards(bdRangeAwards.getPkAwards());
sourceMemberRangeExt.setRangeAwardsValue(bdRangeAwards.getAwardsValue());
rangeAwardsValue += 2;
} else {
break;
}
}
// 当月有消费修改为考核通过
if (sourceMemberRangeExt.getMonthMember() == EYesNo.YES.getIntValue() && ComputeUtil.compareValue(sourceMemberRangeExt.getMonthPv())) {
sourceMemberRangeExt.setAssessStatus(EAssessStatus.EXAMINE_PASS.getValue());
}
sourceMemberRangeExt.setConsumeStatus(EYesNo.YES.getIntValue());
return cuMemberAwardsList;
}
/*
* 计算团队极差奖衔
**/
public List<CuMemberAwards> calculateBloodRangeAwards(Integer period, Map<Long, List<CuMemberRangeExt>> parentRangeExtMap, Map<Long, CuMemberRangeExt> memberRangeExtMap, String rangeTableName, SaOrderExt saOrderExt,
Map<Integer, BdRangeAwards> bloodRangeAwardsMap, long pkParent, String secondRangeTableName) {
// 计算血缘奖衔一级一级升级分为2段s2s3 一级s3以上一级先验证团队总业绩,
// 小市场先验证目前小市场加新增是否满足满足计算不满足不计算不满足小市场先累计算小市场每天最终计算完毕重新计算S1以上小市场
List<CuMemberAwards> cuMemberAwardsList = new ArrayList<>();
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
while (true) {
CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
if (targetMemberRangeExt == null) {
break;
}
// 无效会员不累计业绩,当月会员有消费上月会员考核通过
if (EYesNo.YES.getIntValue() == targetMemberRangeExt.getConsumeStatus()) {
targetMemberRangeExt.setTeamConsumeAmount(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamConsumeAmount(), saOrderExt.getOrderAmount()));
targetMemberRangeExt.setTeamConsumePv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamConsumePv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
targetMemberRangeExt.setTeamMonthAmount(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthAmount(), saOrderExt.getOrderAmount()));
targetMemberRangeExt.setTeamMonthPv(ComputeUtil.computeAdd(targetMemberRangeExt.getTeamMonthPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
targetMemberRangeExt.setNewTeamPv(ComputeUtil.computeAdd(targetMemberRangeExt.getNewTeamPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
sourceMemberRangeExt.setDeptTeamConsumeAmount(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamConsumeAmount(), saOrderExt.getOrderAmount()));
sourceMemberRangeExt.setDeptTeamConsumePv(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamConsumePv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
sourceMemberRangeExt.setDeptTeamMonthAmount(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamMonthAmount(), saOrderExt.getOrderAmount()));
sourceMemberRangeExt.setDeptTeamMonthPv(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptTeamMonthPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
sourceMemberRangeExt.setDeptNewTeamPv(ComputeUtil.computeAdd(sourceMemberRangeExt.getDeptNewTeamPv(), ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve())));
}
if (targetMemberRangeExt.getAssessStatus() == EAssessStatus.EXAMINE_PASS.getValue()) {
int rangeAwardsValue = 2;
while (bloodRangeAwardsMap.containsKey(targetMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue)) {
// 验证pv是否满足
BdRangeAwards bdRangeAwards = bloodRangeAwardsMap.get(targetMemberRangeExt.getRangeAwardsValue() + rangeAwardsValue);
if (ComputeUtil.compareValue(targetMemberRangeExt.getTeamConsumePv(), bdRangeAwards.getTeamConsumeCheck())) {
// 去结算表种查询该会员下所有会员会员团队业绩+消费业绩是业绩 计算小区业绩 团队业绩-小区业绩 验证小区直推必有一种
List<CuMemberRangeExt> cuMemberRangeExtList;
if (secondRangeTableName != null) {
cuMemberRangeExtList = iCuMemberRangeService.querySecondCuMemberRangeExtByParent(rangeTableName, secondRangeTableName, targetMemberRangeExt.getPkMember());
} else {
cuMemberRangeExtList = iCuMemberRangeService.queryCuMemberRangeExtByParent(rangeTableName, targetMemberRangeExt.getPkMember(), saOrderExt.getPayTime());
}
if (cuMemberRangeExtList.size() > 0) {
if (calculateAwards(parentRangeExtMap, memberRangeExtMap, targetMemberRangeExt, bdRangeAwards, cuMemberRangeExtList, true)) {
break;
}
// 验证血缘部门需要有几个部门大于考核等级数据库验证一次
// 当日的实时奖衔这个位置直接在会员表中计算就可以
if (bdRangeAwards.getPlaceNum() > 0) {
if (secondRangeTableName != null) {
iCuMemberRangeService.mergeSecondCuMemberRangeExt(secondRangeTableName, parentRangeExtMap.get(targetMemberRangeExt.getPkMember()));
// 验证
Integer placeNum = iCuMemberRangeService.validateSecondCuMemberPlaceAwards(secondRangeTableName, cuMemberRangeExtList, bdRangeAwards.getCheckAwards());
if (bdRangeAwards.getPlaceNum() > placeNum) {
break;
}
} else {
// 更新网体更新伞下
iCuMemberRangeService.mergeCuMemberRangeExt(rangeTableName, parentRangeExtMap.get(targetMemberRangeExt.getPkMember()));
// 验证
Integer placeNum = iCuMemberRangeService.validateCuMemberPlaceAwards(rangeTableName, cuMemberRangeExtList, bdRangeAwards.getCheckAwards(), saOrderExt.getPayTime());
if (bdRangeAwards.getPlaceNum() > placeNum) {
break;
}
}
}
}
cuMemberAwardsList.add(getCuMemberAwards(targetMemberRangeExt, period, saOrderExt, bdRangeAwards));
targetMemberRangeExt.setPkRangeAwards(bdRangeAwards.getPkId());
targetMemberRangeExt.setPkAwards(bdRangeAwards.getPkAwards());
targetMemberRangeExt.setRangeAwardsValue(bdRangeAwards.getAwardsValue());
rangeAwardsValue += 2;
continue;
}
break;
}
}
pkParent = targetMemberRangeExt.getPkParent();
sourceMemberRangeExt = targetMemberRangeExt;
}
return cuMemberAwardsList;
}
/*
* 计算奖衔验证小区业绩和推荐数量是否满足
**/
private boolean calculateAwards(Map<Long, List<CuMemberRangeExt>> parentRangeExtMap, Map<Long, CuMemberRangeExt> memberRangeExtMap, CuMemberRangeExt targetMemberRangeExt, BdRangeAwards bdRangeAwards, List<CuMemberRangeExt> cuMemberRangeExtList, Boolean isRecommend) {
BigDecimal bigAreaPv = BigDecimal.ZERO;
Integer recommendNum = 0;
for (CuMemberRangeExt cuMemberRangeExt : cuMemberRangeExtList) {
if (parentRangeExtMap.containsKey(cuMemberRangeExt.getPkParent())) {
parentRangeExtMap.get(cuMemberRangeExt.getPkParent()).add(cuMemberRangeExt);
} else {
List<CuMemberRangeExt> memberRangeExtList = new ArrayList<>();
memberRangeExtList.add(cuMemberRangeExt);
parentRangeExtMap.put(cuMemberRangeExt.getPkParent(), memberRangeExtList);
}
if (memberRangeExtMap.containsKey(cuMemberRangeExt.getPkMember())) {
cuMemberRangeExt = memberRangeExtMap.get(cuMemberRangeExt.getPkMember());
}
// 团队业绩+个人业绩
BigDecimal validatePv = ComputeUtil.computeAdd(cuMemberRangeExt.getDeptTeamConsumePv(), cuMemberRangeExt.getConsumePv());
if (ComputeUtil.compareValue(validatePv, bigAreaPv)) {
bigAreaPv = validatePv;
}
// 有效的,等级满足的算推荐数量验证部门数量的 需要走语句
if (cuMemberRangeExt.getAssessStatus() == EAssessStatus.EXAMINE_PASS.getValue() && bdRangeAwards.getCheckAwards() <= cuMemberRangeExt.getPkRangeAwards()) {
recommendNum += 1;
}
}
// 小区业绩
BigDecimal communityCheck = ComputeUtil.computeSubtract(targetMemberRangeExt.getTeamConsumePv(), bigAreaPv);
// 验证小区,验证失败
if (ComputeUtil.compareGreaterThan(bdRangeAwards.getCommunityCheck(), communityCheck)) {
return true;
}
// 验证推荐
return isRecommend && bdRangeAwards.getRecommendNum() > recommendNum;
}
/*
* 计算幸运奖先计算有效代数所有有效代数均分比例10%
**/
CuMemberBonusCoach calculateLuckPushBonus(Map<Long, CuMemberRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO,
Integer period, SaOrderExt saOrderExt) {
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
long pkParent = sourceMemberRangeExt.getPkParent();
// 计算代数
while (true) {
CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
if (targetMemberRangeExt == null) {
break;
}
pkParent = targetMemberRangeExt.getPkParent();
if (ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() ||
EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus()) {
continue;
}
// 验证推荐有效代数是否大于当前代数
if (targetMemberRangeExt.getEffectiveNum() >= 1 && EAssessStatus.EXAMINE_PASS.getValue() == targetMemberRangeExt.getAssessStatus()) {
getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
CuMemberBonusCoach cuMemberBonusCoach = getCuMemberBonusCoach(bonusConfigDTO, saOrderExt, 1, targetMemberRangeExt);
BigDecimal bonusRatio = BigDecimal.valueOf(10);
cuMemberBonusCoach.setCoachGeneration(1);
cuMemberBonusCoach.setCalValue(bonusRatio);
cuMemberBonusCoach.setPretaxIncome(ComputeUtil.computeBonusMultiply(cuMemberBonusCoach.getCalAchieve(), bonusRatio));
CuMemberBonus cuMemberBonus = cuMemberBonusMap.get(cuMemberBonusCoach.getPkBonus());
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusCoach, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
coachRangeRemark(saOrderExt, cuMemberBonusCoach, sourceMemberRangeExt, targetMemberRangeExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusCoach.getIncomeStatus()) {
cuMemberBonus.setCloudDirectIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudDirectIncome(), cuMemberBonusCoach.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusCoach);
}
return cuMemberBonusCoach;
}
}
return null;
}
/*
* 计算极差收益根据极差收益计算平级收益
**/
List<CuMemberBonusRange> calculateRangeBonus(Map<Long, CuMemberRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap, BonusConfigDTO bonusConfigDTO,
Integer period, SaOrderExt saOrderExt, List<BdRangeAwards> rangeAwardsList, List<CuMemberBonusDetail> cuMemberBonusDetailList) {
List<CuMemberBonusRange> memberBonusRangeList = new ArrayList<>();
// 用等级计算按照一级级算
BigDecimal bonusRatio = BigDecimal.ZERO;
CuMemberRangeExt sourceMemberRangeExt = memberRangeExtMap.get(saOrderExt.getPkMember());
long pkParent = sourceMemberRangeExt.getPkParent();
int i = 0;
boolean storeFlag = Boolean.TRUE;
// 计算极差
while (true) {
CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
if (targetMemberRangeExt == null) {
break;
}
pkParent = targetMemberRangeExt.getPkParent();
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() ||
ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() ||
EAssessStatus.EXAMINE_PASS.getValue() != targetMemberRangeExt.getAssessStatus()) {
continue;
}
// 计算店铺收益
if (storeFlag && targetMemberRangeExt.getRangeStoreStatus() == 2) {
cuMemberBonusDetailList.add(calculateRangeStoreBonusOne(memberRangeExtMap, targetMemberRangeExt, bonusConfigDTO, period, cuMemberBonusMap, saOrderExt));
storeFlag = Boolean.FALSE;
}
for (int j = i; j < rangeAwardsList.size(); j++) {
BdRangeAwards bdRangeAwards = rangeAwardsList.get(j);
if (targetMemberRangeExt.getPkRangeAwards().equals(bdRangeAwards.getPkId())) {
bonusRatio = ComputeUtil.computeSubtract(bdRangeAwards.getRangeRatio(), bonusRatio);
if (ComputeUtil.compareValue(bonusRatio)) {
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_FIRST_PURCHASE.getValue());
CuMemberBonusRange cuMemberBonusRange = getCuMemberBonusRange(saOrderExt, targetMemberRangeExt, cuMemberBonus, pkBonusItems);
cuMemberBonusRange.setCalValue(bonusRatio);
cuMemberBonusRange.setPretaxIncome(ComputeUtil.computeBonusMultiply(saOrderExt.getOrderAchieve(), bonusRatio));
cuMemberBonusRange.setPkRange(targetMemberRangeExt.getPkRangeAwards());
cuMemberBonusRange.setPkBeforeRange(sourceMemberRangeExt.getPkRangeAwards());
cuMemberBonusRange.setPkOrderItems(0L);
rangeRemark(saOrderExt, cuMemberBonusRange, sourceMemberRangeExt, targetMemberRangeExt);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusRange.getIncomeStatus()) {
cuMemberBonus.setCloudPurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudPurIncome(), cuMemberBonusRange.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusRange);
}
memberBonusRangeList.add(cuMemberBonusRange);
bonusRatio = bdRangeAwards.getRangeRatio();
sourceMemberRangeExt = targetMemberRangeExt;
}
j++;
i = j;
break;
}
}
if (i >= rangeAwardsList.size()) {
break;
}
}
// 根据极差奖金计算平级奖金
List<CuMemberBonusRange> memberOrdBonusRangeList = new ArrayList<>();
for (CuMemberBonusRange cuMemberBonusRange : memberBonusRangeList) {
sourceMemberRangeExt = memberRangeExtMap.get(cuMemberBonusRange.getPkBonus());
pkParent = sourceMemberRangeExt.getPkParent();
// 拿2次平级
int oriLevel = 0;
while (true) {
CuMemberRangeExt targetMemberRangeExt = memberRangeExtMap.get(pkParent);
if (targetMemberRangeExt == null) {
break;
}
pkParent = targetMemberRangeExt.getPkParent();
if (EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() ||
ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() ||
EAssessStatus.EXAMINE_PASS.getValue() != targetMemberRangeExt.getAssessStatus()) {
continue;
}
if (oriLevel < 2) {
if (targetMemberRangeExt.getPkRangeAwards().equals(sourceMemberRangeExt.getPkRangeAwards())) {
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
int pkBonusItems = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_REPURCHASE.getValue());
CuMemberBonusRange oriMemberBonusRange = getCuMemberBonusRange(saOrderExt, targetMemberRangeExt, cuMemberBonus, pkBonusItems);
oriMemberBonusRange.setCalAchieve(cuMemberBonusRange.getPretaxIncome());
oriMemberBonusRange.setCalValue(BigDecimal.valueOf(10));
oriMemberBonusRange.setPretaxIncome(ComputeUtil.computeBonusMultiply(oriMemberBonusRange.getCalAchieve(), oriMemberBonusRange.getCalValue()));
oriMemberBonusRange.setPkRange(targetMemberRangeExt.getPkRangeAwards());
oriMemberBonusRange.setPkBeforeRange(sourceMemberRangeExt.getPkRangeAwards());
oriMemberBonusRange.setPkOrderItems(0L);
oriRangeRemark(saOrderExt, oriMemberBonusRange, sourceMemberRangeExt, targetMemberRangeExt);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, oriMemberBonusRange, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
if (EBonusIncomeStatus.NORMAL.getValue() == oriMemberBonusRange.getIncomeStatus()) {
cuMemberBonus.setCloudRepurIncome(ComputeUtil.computeAdd(cuMemberBonus.getCloudRepurIncome(), oriMemberBonusRange.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, oriMemberBonusRange);
}
memberOrdBonusRangeList.add(oriMemberBonusRange);
oriLevel++;
}
} else {
break;
}
}
}
if (memberOrdBonusRangeList.size() > 0) {
memberBonusRangeList.addAll(memberOrdBonusRangeList);
}
return memberBonusRangeList;
}
/**
* 计算某条订单的推荐奖金
*/
CuMemberBonusPush calculatePushBonusOne(CuMemberRangeExt sourceMemberRangeExt, Map<Long, CuMemberRangeExt> cuMemberRangeExtMap, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap,
SaOrderExt saOrderExt, int algebra, BigDecimal orderAssAchieve, List<CuMemberBonusPush> cuMemberBonusPushList) {
if (sourceMemberRangeExt == null) {
return null;
}
if (algebra >= 12) {
return null;
}
long pkParent = sourceMemberRangeExt.getPkParent();
int i = 1;
while (true) {
CuMemberRangeExt targetMemberRangeExt = cuMemberRangeExtMap.get(pkParent);
if (targetMemberRangeExt == null) {
break;
}
pkParent = targetMemberRangeExt.getPkParent();
if (i < algebra) {
i++;
continue;
}
// 死点没有奖金,自身没有购买没有奖金
if (ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() ||
targetMemberRangeExt.getBuyEffectiveNum() <= 0 || EAssessStatus.EXAMINE_PASS.getValue() != targetMemberRangeExt.getAssessStatus()) {
// 记录烧伤记录
targetMemberRangeExt.setIncomeStatus(EBonusIncomeStatus.FIRE_BURN.getValue());
}
if (validatePkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.HELP_EACH_INCOME.getValue())) {
continue;
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
// 直推奖金明细
int pkBonusItem = getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.HELP_EACH_INCOME.getValue());
CuMemberBonusPush cuMemberBonusPush = getCuMemberBonusPush(saOrderExt, targetMemberRangeExt, cuMemberBonus, pkBonusItem);
cuMemberBonusPush.setCalType(ECalType.VALUE.getValue());
// 前2代买的有特殊规则
if (algebra == 1) {
// 第一代前三单需要自购一单从第四单开始需要自动二单需要验证是否买了第二单
if (targetMemberRangeExt.getFirstAgent() >= 3 && targetMemberRangeExt.getBuyEffectiveNum() <= 1) {
continue;
}
targetMemberRangeExt.setFirstAgent(targetMemberRangeExt.getFirstAgent() + 1);
cuMemberBonusPush.setSecond(targetMemberRangeExt.getFirstAgent());
} else if (algebra == 2) {
if (targetMemberRangeExt.getSecondAgent() < 3 && targetMemberRangeExt.getBuyEffectiveNum() <= 1) {
continue;
} else if (targetMemberRangeExt.getSecondAgent() >= 3 && targetMemberRangeExt.getBuyEffectiveNum() <= 2) {
continue;
}
targetMemberRangeExt.setSecondAgent(targetMemberRangeExt.getSecondAgent() + 1);
cuMemberBonusPush.setSecond(targetMemberRangeExt.getSecondAgent());
} else {
if (targetMemberRangeExt.getBuyEffectiveNum() < algebra) {
continue;
}
cuMemberBonusPush.setSecond(-1);
}
cuMemberBonusPush.setRound(algebra);
cuMemberBonusPush.setCalAchieve(orderAssAchieve);
cuMemberBonusPush.setCalValue(BigDecimal.ONE);
cuMemberBonusPush.setPretaxIncome(orderAssAchieve);
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusPush, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
recommendRangeRemark(saOrderExt, cuMemberBonusPush, cuMemberRangeExtMap, targetMemberRangeExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusPush.getIncomeStatus()) {
cuMemberBonus.setRepurPushIncome(ComputeUtil.computeAdd(cuMemberBonus.getRepurPushIncome(), cuMemberBonusPush.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusPush);
}
cuMemberBonusPushList.add(cuMemberBonusPush);
if (targetMemberRangeExt.getIncomeStatus() == EBonusIncomeStatus.NORMAL.getValue()) {
return cuMemberBonusPush;
} else {
cuMemberBonusPush.setSecond(-1);
}
}
return null;
}
/**
* 计算服务中心奖
*/
CuMemberBonusDetail calculateRangeStoreBonusOne(Map<Long, CuMemberRangeExt> cuMemberRangeExtMap, CuMemberRangeExt targetMemberRangeExt, BonusConfigDTO bonusConfigDTO, Integer period, Map<Long, CuMemberBonus> cuMemberBonusMap, SaOrderExt saOrderExt) {
CuMemberRangeExt sourceMemberRangeExt = cuMemberRangeExtMap.get(saOrderExt.getPkMember());
if (targetMemberRangeExt == null || ECategory.NORMAL.getValue() != targetMemberRangeExt.getCategory() || EAccountStatus.STOP_INCOME.getValue() == targetMemberRangeExt.getAccountStatus() ||
EAssessStatus.EXAMINE_PASS.getValue() != targetMemberRangeExt.getAssessStatus()) {
return null;
}
// 验证是否有奖金
if (validatePkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.STORE_INCOME.getValue())) {
return null;
}
CuMemberBonus cuMemberBonus = getCuMemberBonus(period, cuMemberBonusMap, targetMemberRangeExt.getPkMember(),
targetMemberRangeExt.getIncomeStatus(), targetMemberRangeExt.getPkSettleCountry(), targetMemberRangeExt.getPkRate());
CuMemberBonusDetail cuMemberBonusDetail = getCuMemberBonusDetail(saOrderExt, targetMemberRangeExt, cuMemberBonus);
BigDecimal serviceRadio = BigDecimal.valueOf(5);
// 计算比例
cuMemberBonusDetail.setCalValue(serviceRadio);
cuMemberBonusDetail.setPkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.STORE_INCOME.getValue()));
cuMemberBonusDetail.setPretaxIncome(ComputeUtil.computeBonusMultiply(cuMemberBonusDetail.getCalAchieve(), serviceRadio));
// 收益占比
BdBonusDeduct bdBonusDeduct = setBonusDetailDeduct(bonusConfigDTO, cuMemberBonusDetail, saOrderExt.getOrderAmount(), saOrderExt.getInExchangeRate());
rangeServiceRemark(saOrderExt, cuMemberBonusDetail, sourceMemberRangeExt, targetMemberRangeExt);
if (EBonusIncomeStatus.NORMAL.getValue() == cuMemberBonusDetail.getIncomeStatus()) {
cuMemberBonus.setStoreIncome(ComputeUtil.computeAdd(cuMemberBonus.getStoreIncome(), cuMemberBonusDetail.getPretaxIncome()));
setCloudTotal(bdBonusDeduct, cuMemberBonus, cuMemberBonusDetail);
}
return cuMemberBonusDetail;
}
CuMemberBonusPush getCuMemberBonusPush(SaOrderExt saOrderExt, CuMemberRangeExt cuMemberRangeExt, CuMemberBonus cuMemberBonus, Integer pkBonusItems) {
CuMemberBonusPush cuMemberBonusPush = CuMemberBonusPush.builder()
.pkOrder(saOrderExt.getPkId())
.pkBonus(cuMemberBonus.getPkId())
.pkBonusItems(pkBonusItems)
// 正常还是烧伤
.incomeStatus(cuMemberRangeExt.getIncomeStatus())
.calType(ECalType.RATIO.getValue())
.pretaxIncome(BigDecimal.ZERO)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.round(-1)
.second(-1)
.build();
cuMemberBonusPush.setPkCountry(cuMemberRangeExt.getPkSettleCountry());
cuMemberBonusPush.setPkCreator(MagicNumberConstants.PK_ADMIN);
return cuMemberBonusPush;
}
protected CuMemberBonusCoach getCuMemberBonusCoach(BonusConfigDTO bonusConfigDTO, SaOrderExt saOrderExt,
int i, CuMemberRangeExt targetMemberRangeExt) {
CuMemberBonusCoach cuMemberBonusCoach = CuMemberBonusCoach.builder()
.pkBonus(targetMemberRangeExt.getPkMember())
.pkOrder(saOrderExt.getPkId())
.pkBonusItems(getPkBonusItems(bonusConfigDTO, targetMemberRangeExt.getPkSettleCountry(), EBonusItems.CLOUD_AGENT_DIRECT_PUSH.getValue()))
.calType(ECalType.RATIO.getValue())
.incomeStatus(targetMemberRangeExt.getIncomeStatus())
.calAchieve(saOrderExt.getOrderAchieve())
.currentGeneration(i)
// 计算比例
.calValue(BigDecimal.ZERO)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.pretaxIncome(BigDecimal.ZERO)
.coachNoCapping(BigDecimal.ZERO)
.coachCapping(BigDecimal.ZERO)
.coachNormalHalf(BigDecimal.ZERO)
.coachNormalReal(BigDecimal.ZERO)
.build();
cuMemberBonusCoach.setPkCountry(targetMemberRangeExt.getPkSettleCountry());
cuMemberBonusCoach.setPkCreator(MagicNumberConstants.PK_ADMIN);
return cuMemberBonusCoach;
}
private CuMemberBonusRange getCuMemberBonusRange(SaOrderExt saOrderExt, CuMemberRangeExt targetMemberRangeExt,
CuMemberBonus cuMemberBonus, Integer pkBonusItems) {
CuMemberBonusRange cuMemberBonusRange = CuMemberBonusRange.builder()
.pkOrder(saOrderExt.getPkId())
.pkBonus(cuMemberBonus.getPkId())
.pkBonusItems(pkBonusItems)
// 正常还是烧伤
.incomeStatus(targetMemberRangeExt.getIncomeStatus())
.calType(ECalType.VALUE.getValue())
.calAchieve(saOrderExt.getOrderAchieve())
.calValue(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.build();
cuMemberBonusRange.setPkCountry(targetMemberRangeExt.getPkSettleCountry());
cuMemberBonusRange.setPkCreator(MagicNumberConstants.PK_ADMIN);
return cuMemberBonusRange;
}
/**
* @param memberRangeMap 查询出来的结算数据
* 记录需要修改的会员结算表数据, 安置的
*/
private Map<Long, CuMemberRangeExt> getMemberSettle(Map<Long, List<CuMemberRangeExt>> memberRangeMap) {
Map<Long, CuMemberRangeExt> memberRangeExtMap = new HashMap<>();
memberRangeMap.forEach((key, memberRangeExtList) -> {
memberRangeExtList.forEach(cuMemberSettleExt -> {
if (!memberRangeExtMap.containsKey(cuMemberSettleExt.getPkMember())) {
memberRangeExtMap.put(cuMemberSettleExt.getPkMember(), cuMemberSettleExt);
} else {
CuMemberRangeExt cuMemberRangeExt = memberRangeExtMap.get(cuMemberSettleExt.getPkMember());
if (cuMemberRangeExt.getNewTeamPv() == null) {
cuMemberRangeExt.setNewTeamPv(BigDecimal.ZERO);
}
}
});
});
return memberRangeExtMap;
}
private CuMemberAwards getCuMemberAwards(CuMemberRangeExt sourceRangeExt, Integer period, SaOrderExt saOrderExt, BdRangeAwards bdRangeAwards) {
CuMemberAwards cuMemberAwards = CuMemberAwards.builder()
.pkMember(sourceRangeExt.getPkMember())
.period(period)
.upType(EUpgradeType.AUTO_UPGRADE.getValue())
// 原等级
.oldLevel(sourceRangeExt.getPkRangeAwards())
.newLevel(bdRangeAwards.getPkId())
// 默认不免考
.purchaseStatus(EYesNo.NO.getIntValue())
.pkOrder(saOrderExt.getPkId())
.build();
cuMemberAwards.setPkCreator(MagicNumberConstants.PK_ADMIN);
cuMemberAwards.setPkCountry(saOrderExt.getPkCountry());
cuMemberAwards.setCreationTime(saOrderExt.getPayTime());
return cuMemberAwards;
}
/**
* @param saOrderExt 订单
* @param targetMemberRangeExt 奖金网体
* @param cuMemberBonus 奖金主表
* 奖金明细 报单服务费分红云代首购云代复购海豆收益
* @return: CuMemberBonusDetail
*/
private CuMemberBonusDetail getCuMemberBonusDetail(SaOrder saOrderExt, CuMemberRangeExt targetMemberRangeExt, CuMemberBonus cuMemberBonus) {
CuMemberBonusDetail cuMemberBonusDetail = CuMemberBonusDetail.builder()
.pkOrder(saOrderExt.getPkId())
.calType(ECalType.RATIO.getValue())
.incomeStatus(targetMemberRangeExt.getIncomeStatus())
.calAchieve(ComputeUtil.computeAdd(saOrderExt.getOrderAchieve(), saOrderExt.getOrderAssAchieve()))
.pkBonus(cuMemberBonus.getPkId())
.pretaxIncome(BigDecimal.ZERO)
.incomeTax(BigDecimal.ZERO)
.realIncome(BigDecimal.ZERO)
.incomeRatio(BigDecimal.ZERO)
.incomeDialRatio(BigDecimal.ZERO)
.orderDialRatio(BigDecimal.ZERO)
.build();
cuMemberBonusDetail.setPkCountry(targetMemberRangeExt.getPkSettleCountry());
cuMemberBonusDetail.setPkCreator(MagicNumberConstants.PK_ADMIN);
return cuMemberBonusDetail;
}
}

View File

@ -5,24 +5,22 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.hzs.bonus.achieve.param.MemberAchieveParam;
import com.hzs.bonus.achieve.service.ICuMemberAchieveService;
import com.hzs.bonus.achieve.service.ICuMemberRangeService;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
import com.hzs.bonus.base.service.ICuAwardsControlService;
import com.hzs.bonus.base.service.ICuMemberAchieveLogService;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.param.BdWaresBonusParam;
import com.hzs.bonus.bonus.param.BonusExpandParam;
import com.hzs.bonus.bonus.service.*;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.bonus.vo.MemberBonusDetailCalVO;
import com.hzs.bonus.detail.service.ICuMemberAssessService;
import com.hzs.bonus.detail.service.ICuMemberAwardsService;
import com.hzs.bonus.risk.service.ICuMemberRiskControlService;
import com.hzs.bonus.swing.service.ICuMemberSwingNetLogService;
import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.constant.BonusFieldConstants;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
@ -31,12 +29,10 @@ import com.hzs.common.core.utils.reflect.ReflectUtils;
import com.hzs.common.domain.bonus.risk.CuMemberRiskControl;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
import com.hzs.common.domain.member.achieve.ext.CuMemberAchieveExt;
import com.hzs.common.domain.member.achieve.ext.CuMemberRangeExt;
import com.hzs.common.domain.member.base.CuAwardsControl;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.bonus.*;
import com.hzs.common.domain.member.detail.CuMemberAchieveLog;
import com.hzs.common.domain.member.ext.BdWaresBonusExt;
import com.hzs.common.domain.member.ext.CuBonusExpandExt;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
@ -45,7 +41,6 @@ import com.hzs.common.domain.member.swing.ext.CuMemberSwingNetExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.domain.system.config.BdRangeAwards;
import com.hzs.member.base.IMemberServiceApi;
import com.hzs.sale.order.ISaOrderServiceApi;
import com.hzs.system.base.ISystemConfigServiceApi;
@ -107,8 +102,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
@Autowired
private ICuMemberRepeatBonusService iCuMemberRepeatBonusService;
@Autowired
private IBdWaresBonusService iBdWaresBonusService;
@Autowired
private ICuBonusExpandService iCuBonusExpandService;
@Autowired
private ICuMemberBonusService iCuMemberBonusService;
@ -123,16 +116,12 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
@Autowired
private ICuMemberBonusRangeService iCuMemberBonusRangeService;
@Autowired
private ICuMemberRangeService iCuMemberRangeService;
@Autowired
private ICuMemberRiskControlService iCuMemberRiskControlService;
@Autowired
private ICuMemberBonusDelayService iCuMemberBonusDelayService;
@Autowired
private ICuMemberBonusDelayDetailService iCuMemberBonusDelayDetailService;
@Autowired
private BonusSettleRangeHandle bonusSettleRangeHandle;
@Autowired
private BonusSettleFirstPurchaseHandle bonusSettleFirstPurchaseHandle;
@Autowired
private BonusSettlePurchaseHandle bonusSettlePurchaseHandle;
@ -142,6 +131,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
private BonusSettleRepCouponsHandle bonusSettleRepCouponsHandle;
@Autowired
private BonusSettleMallHandle bonusSettleMallHandle;
@Autowired
private ICuMemberAssessService iCuMemberAssessService;
// 新拓展处理时间
private final String newExpandDate = "2025-06-01";
@ -400,26 +391,11 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
iCuMemberTreeService.updateCuMemberSecondPlaceParent(secondTableName, settleTableName, yesSettleTableName, saOrderExt.getPkMember(), memberList, EYesNo.YES.getIntValue());
}
/**
* 保存会员奖金
*
* @param cuMemberBonusMap 奖金map
* @return: CuMemberBonus 奖金
*/
protected void saveCuMemberBonus(int period, String settleDate, Map<Long, CuMemberBonus> cuMemberBonusMap) {
// 保存奖金
List<CuMemberBonus> cuMemberBonusList = setCuMemberBonusSeq(settleDate, cuMemberBonusMap);
// 插入奖金主表
iCuMemberBonusService.insertOrUpdateCuMemberBonus(cuMemberBonusList);
List<CuMemberBonus> cuMemberBonuses = iCuMemberBonusService.queryCuMemberBonus(period, cuMemberBonusList);
cuMemberBonuses.forEach(cuMemberBonus -> cuMemberBonusMap.put(cuMemberBonus.getPkMember(), cuMemberBonus));
}
/**
* 每日计算会员奖金最终的奖金
*/
@Override
@Transactional(rollbackFor = Exception.class)
@Override
public void calculateCuMemberBonus(String settleDate, List<SaOrderExt> saOrderExtList) {
try {
// 今天期间
@ -427,8 +403,8 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// 会员结算日表cu_member_settle + 期间
String currentSettleTableName = TableNameConstants.CU_MEMBER_SETTLE + period;
// 昨日期间
String yesterday = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, settleDate);
// 昨日期间
Integer yesterdayPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(yesterday).getPkId();
// 查询日期-1的网体数据从日历史表中获得
@ -437,6 +413,9 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// 将结算日昨日业绩数据 迁移到 网体业绩历史记录结算表cu_member_settle
iCuMemberTreeService.initCuMemberTreeTable(yesterdayTableName, currentSettleTableName);
// 处理复购考核数据见点收益 -- 新会员当月次月免考本月从复购订单下单时间开始
iCuMemberAssessService.initMemberAssess(settleDate, currentSettleTableName);
// 国家奖衔map
Map<String, BdAwards> awardsMap = iAwardsServiceApi.getAwards().getData();
// 等级map
@ -555,18 +534,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// calculateShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap, cuAwardsControlMap);
// }
// // 计算店铺奖金
// if (settleDate.endsWith("10")) {
// calculateStoreOrder(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
// }
// // 计算实际分红奖金
// if (settleDate.endsWith("10")) {
// calculateShareBonus(settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
// }
// // 计算全球积分车奖积分
// // 环球积分和车奖积分的规则有荣衔复购考核通过的10代不压缩以推荐+拓展+领导+分红为合计基数获取对应比例比例根据参数配置
// calculateGlobalCarBonus(cuMemberSettleExtMap, currentSettleTableName, settleDate, bonusConfigDTO, period, recordDetailVO, cuMemberBonusMap);
// 保存当日计算的奖金等
insertCuMemberBonus(settleDate, period, cuMemberBonusMap, recordDetailVO);
// 处理血缘业绩统计伞下直推
@ -587,8 +554,9 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// 迁移网体数据到月表会员网体月表会员业绩月表
iCuMemberTreeService.insertCuMemberTreeBySettleDate(settleDate, currentSettleTableName, period);
// 计算完当日奖金后根据业绩计算下月奖衔
// 计算完当日奖金后处理下月表初始化
Date currentDate = DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.parseStringToDate(settleDate));
// 结算日期的后一天
String afterDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate);
if (afterDate.endsWith("01")) {
// new 不是月奖衔每月初不更新月度级差奖衔需要去掉
@ -601,9 +569,9 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// iCuMemberTreeService.updateCuMemberAwardsBySettle(currentSettleTableName, rangeTableName, startPeriod, period);
// 结算每月月末那一天都是先删除在新增重新考核
iCuMemberTreeService.initCuMemberAssessData(settleDate);
// iCuMemberTreeService.initCuMemberAssessData(settleDate);
// 更新奖衔考核结果
iCuMemberAwardsService.updateCuMemberAwardsExamine(currentDate, period);
// iCuMemberAwardsService.updateCuMemberAwardsExamine(currentDate, period);
// 生成月表cu_member_month
String monthTableName = TableNameConstants.CU_MEMBER_MONTH + DateUtils.getMonth(afterDate);
@ -624,59 +592,19 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void calculateCuMemberRangAwardsBySaOrder(String orderCode) {
Map<Long, CuMemberBonus> cuMemberBonusMap = new HashMap<>(MagicNumberConstants.DELETE_DATA_BATCH_UPDATE_NUM);
BonusConfigDTO bonusConfigDTO = iBonusItemsServiceApi.queryBonusConfigDTO().getData();
SaOrderExt saOrderExt = iSaOrderServiceApi.querySaOrderByDay(DateUtils.currentDate(), DateUtils.afterDate(1, ChronoUnit.DAYS), orderCode).getData();
if (saOrderExt != null) {
// 处理奖金结算秒结表判断是否存在当天结算的秒接表从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()));
int currentPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
int beforePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeDay).getPkId();
List<BdRangeAwards> rangeAwardsList = iAwardsServiceApi.queryRangeAwards().getData();
String secondRangeTableName = TableNameConstants.CU_MEMBER_RANGE_S + currentPeriod;
Map<Long, CuMemberRangeExt> memberRangeExtMap = bonusSettleRangeHandle.calculateCuMemberRangeAwardsByDay(saOrderExt, rangeAwardsList, secondRangeTableName, beforePeriod, currentPeriod);
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
List<CuMemberBonusPush> cuMemberBonusPushList = new ArrayList<>();
List<CuMemberBonusCoach> cuMemberBonusCoachList = new ArrayList<>();
// 计算奖金幸运收益极差收益平级收益
CuMemberBonusCoach cuMemberBonusCoach = bonusSettleRangeHandle.calculateLuckPushBonus(memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, currentPeriod, saOrderExt);
if (cuMemberBonusCoach != null) {
cuMemberBonusCoachList.add(cuMemberBonusCoach);
}
List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>(bonusSettleRangeHandle.calculateRangeBonus(memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, currentPeriod, saOrderExt, rangeAwardsList, cuMemberBonusDetailList));
List<BdWaresBonusExt> bdWaresBonusExtList = iBdWaresBonusService.querySpecialWaresBonus(new BdWaresBonusParam());
bonusSettleRangeHandle.calculateRangeEvBonus(cuMemberBonusMap, bonusConfigDTO, currentPeriod, memberRangeExtMap, cuMemberBonusPushList, bdWaresBonusExtList, saOrderExt);
saveCuMemberBonus(currentPeriod, settleDate, cuMemberBonusMap);
if (cuMemberBonusPushList.size() > 0) {
for (CuMemberBonusPush cuMemberBonusPush : cuMemberBonusPushList) {
cuMemberBonusPush.setPkBonus(cuMemberBonusMap.get(cuMemberBonusPush.getPkBonus()).getPkId());
iCuMemberBonusPushService.insertCuMemberBonusPush(cuMemberBonusPush);
}
}
Set<Long> memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(currentPeriod);
if (cuMemberBonusCoachList.size() > 0) {
cuMemberBonusCoachList.forEach(cuMemberBonusCoach1 ->
cuMemberBonusCoach1.setPkBonus(cuMemberBonusMap.get(cuMemberBonusCoach1.getPkBonus()).getPkId()));
iCuMemberBonusCoachService.batchInsertCuMemberBonusCoach(cuMemberBonusCoachList, memberIdSet);
}
if (cuMemberBonusRangeList.size() > 0) {
cuMemberBonusRangeList.forEach(cuMemberBonusRange ->
cuMemberBonusRange.setPkBonus(cuMemberBonusMap.get(cuMemberBonusRange.getPkBonus()).getPkId()));
iCuMemberBonusRangeService.batchInsertCuMemberBonusRange(cuMemberBonusRangeList, memberIdSet);
}
if (cuMemberBonusDetailList.size() > 0) {
cuMemberBonusDetailList.forEach(bonusDetail ->
bonusDetail.setPkBonus(cuMemberBonusMap.get(bonusDetail.getPkBonus()).getPkId()));
iCuMemberBonusDetailService.batchInsertCuMemberBonusDetail(cuMemberBonusDetailList, memberIdSet);
}
if (memberRangeExtMap.size() > 0) {
iCuMemberRangeService.updateCuMemberSecondRange(secondRangeTableName, memberRangeExtMap);
}
}
/**
* 保存会员奖金
*
* @param cuMemberBonusMap 奖金map
* @return: CuMemberBonus 奖金
*/
protected void saveCuMemberBonus(int period, String settleDate, Map<Long, CuMemberBonus> cuMemberBonusMap) {
// 保存奖金
List<CuMemberBonus> cuMemberBonusList = setCuMemberBonusSeq(settleDate, cuMemberBonusMap);
// 插入奖金主表
iCuMemberBonusService.insertOrUpdateCuMemberBonus(cuMemberBonusList);
List<CuMemberBonus> cuMemberBonuses = iCuMemberBonusService.queryCuMemberBonus(period, cuMemberBonusList);
cuMemberBonuses.forEach(cuMemberBonus -> cuMemberBonusMap.put(cuMemberBonus.getPkMember(), cuMemberBonus));
}
@Override
@ -829,6 +757,14 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
}
}
private Map<Long, CuMemberBonus> getWeekMemberBonusMap(String settleDate, Integer period) {
// 根据结算日期获取周期的期间用于海外
String recentlyMonday = DateUtils.getRecentlyTuesday(settleDate);
CuMemberSettlePeriod startMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(recentlyMonday);
// 查询封顶周期是周的国家的所有人的拓展收益复购拓展收益
return iCuMemberBonusService.queryWeekMemberBonus(startMemberSettlePeriod.getPkId(), period);
}
/**
* 根据不同的订单类型计算奖金
*
@ -911,14 +847,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
});
}
private Map<Long, CuMemberBonus> getWeekMemberBonusMap(String settleDate, Integer period) {
// 根据结算日期获取周期的期间用于海外
String recentlyMonday = DateUtils.getRecentlyTuesday(settleDate);
CuMemberSettlePeriod startMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(recentlyMonday);
// 查询封顶周期是周的国家的所有人的拓展收益复购拓展收益
return iCuMemberBonusService.queryWeekMemberBonus(startMemberSettlePeriod.getPkId(), period);
}
private Map<Long, CuAwardsControl> getCuAwardsControlMap() {
// 查询真实奖衔控制
List<CuAwardsControl> cuAwardsControls = iCuAwardsControlService.queryAllCuAwardsControl();

View File

@ -11,17 +11,13 @@ import java.util.List;
/**
* 会员信息-会员考核记录 Mapper 接口
*
* @author hzs
* @since 2022-08-31
*/
public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
/**
* 创建每年的会员考核表
* 创建会员考核表
*
* @param tableName 表名
* @return: void
*/
void createCuMemberAssessTable(String tableName);
@ -29,13 +25,11 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* 创建会员网体推荐人索引
*
* @param tableName 日期
* @return: void
*/
void createCuMemberTableUniqueIndex(String tableName);
/*
* @description: 清空表数据
* @param: null null
* 清空表数据
**/
void deleteCuMemberAssessByPeriod(@Param("tableName") String tableName, @Param("period") Integer period);
@ -46,7 +40,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param sourceTableName 来源表用哪个表进行更新
* @param period 期间
* @param month 考核月份
* @return: Integer
*/
Integer insertRepCuMemberAssess(@Param("tableName") String tableName, @Param("sourceTableName") String sourceTableName,
@Param("period") Integer period, @Param("month") String month);
@ -58,7 +51,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param sourceTableName 来源表用哪个表进行更新
* @param period 期间
* @param month 考核月份
* @return: Integer
*/
Integer insertRepCuMemberRangeAssess(@Param("tableName") String tableName, @Param("sourceTableName") String sourceTableName,
@Param("period") Integer period, @Param("month") String month);
@ -71,7 +63,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param sourcePeriod 来源结算期
* @param period 结算结算期间
* @param assessType 考核类型 0=复购考核 1=分红考核
* @return: Integer
*/
Integer updateAssessPeriodBeginByBeforeMonth(@Param("beforeTableName") String beforeTableName, @Param("tableName") String tableName,
@Param("sourcePeriod") Integer sourcePeriod,
@ -86,7 +77,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param startDate 开始时间
* @param endDate 结束时间
* @param orderTypeList 订单类型
* @return: Integer
*/
Integer updateAssessPeriodAddBySaOrder(@Param("tableName") String tableName, @Param("period") Integer period,
@Param("assessType") Integer assessType, @Param("startDate") Date startDate,
@ -99,7 +89,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
*
* @param tableName 表名
* @param period 期间
* @return: Integer
*/
Integer updateAssessPeriodExemptBalanceByUsed(@Param("tableName") String tableName, @Param("period") Integer period);
@ -111,7 +100,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param period 期间
* @param startDate 开始日期
* @param endDate 结束日期
* @return: Integer
*/
Integer updateAssessCuMemberToRepExempt(@Param("tableName") String tableName, @Param("settleTableName") String settleTableName,
@Param("period") Integer period, @Param("startDate") Date startDate, @Param("endDate") Date endDate,
@ -123,7 +111,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param settleTableName 每日结算表
* @param startDate 开始日期
* @param endDate 结束日期
* @return: Integer
*/
Integer updateCuMemberSettleToRepExempt(@Param("settleTableName") String settleTableName, @Param("startDate") Date startDate,
@Param("endDate") Date endDate, @Param("startPeriod") Integer startPeriod,
@ -136,7 +123,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param settleTableName 每日结算表
* @param period 期间
* @param saOrderList 根据撤单数据过来的订单
* @return: List<CuMemberAssess>
*/
List<CuMemberAssessExt> queryAssessPeriodByRevokeOrder(@Param("tableName") String tableName, @Param("settleTableName") String settleTableName,
@Param("period") Integer period, @Param("saOrderList") List<?> saOrderList);
@ -148,7 +134,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
* @param period 期间
* @param assessType 考核类型
* @param cuMemberSettleExtList 会员列表
* @return: List<CuMemberAssess>
*/
List<CuMemberAssess> queryCuMemberAssessByMember(@Param("tableName") String tableName, @Param("period") Integer period,
@Param("assessType") Integer assessType,
@ -159,7 +144,6 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
*
* @param tableName 表名
* @param period 期间
* @return: List<CuMemberAssess>
*/
List<CuMemberAssess> queryCuMemberShareAssess(@Param("tableName") String tableName, @Param("period") Integer period);
@ -170,15 +154,11 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
*
* @param tableName 表名
* @param period 期间
* @return: Integer
*/
Integer updateAssessPeriodCheckBalanceByUsed(@Param("tableName") String tableName, @Param("period") Integer period);
/**
* 会员-考核明细列表
*
* @param: [cuMemberAssessVO] 查询条件
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
List<CuMemberAssessVO> selectAssessList(@Param("tableName") String tableName,
@Param("pkMember") Long pkMember,
@ -194,9 +174,7 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
);
/**
* @description: 查询会员月度考核
* @param: [tableName, cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 查询会员月度考核
**/
List<CuMemberAssessVO> getMemberAssessMonthList(@Param("tableName") String tableName,
@Param("pkMember") Long pkMember,
@ -207,23 +185,43 @@ public interface CuMemberAssessMapper extends BaseMapper<CuMemberAssess> {
/**
* @description: 查询会员订单考核积分
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 查询会员订单考核积分
**/
CuMemberAssessVO getOrderAssessList(CuMemberAssessVO cuMemberAssessVO);
/**
* @description: 根据考核类型查询会员订单信息
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 根据考核类型查询会员订单信息
**/
List<CuMemberAssessVO> getOrderByAssessList(CuMemberAssessVO cuMemberAssessVO);
/*
* @description: 查询满足分红考核的人数达标人数
* @param: null null
* 查询满足分红考核的人数达标人数
**/
List<CuMemberAssess> queryCuMemberAssTotal(@Param("settleTable") String settleTable, @Param("period") Integer period,
@Param("pkCountry") Integer pkCountry);
/**
* 创建免考会员数据
*
* @param accessTableName
* @param startDate
* @param endDate
* @return
*/
int createPassMemberAssess(@Param("accessTableName") String accessTableName,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
/**
* 处理考试通过会员
*
* @param accessTableName
* @param startDate
* @param endDate
* @return
*/
int updatePassMemberAssess(@Param("accessTableName") String accessTableName,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
}

View File

@ -10,12 +10,7 @@ import java.util.List;
import java.util.Map;
/**
* <p>
* 会员信息-会员考核记录 服务类
* </p>
*
* @author hzs
* @since 2022-08-31
*/
public interface ICuMemberAssessService extends IService<CuMemberAssess> {
@ -24,19 +19,18 @@ public interface ICuMemberAssessService extends IService<CuMemberAssess> {
*
* @param settleDate 结算日期
* @param period 结算期间
* @return: void
* @Author: sui q
* @Date: 2022/11/7 13:45
*/
void initCuMemberAssessData(String settleDate, int period);
/**
* 创建考核月表
*
* @param date
*/
void createCuMemberAssessMonth(String date);
/**
* 复购考核每月第一考核调用此方法
*
* @return: void
* @Author: sui q
* @Date: 2022/11/8 11:43
*/
void calculationCuMemberAssess(Date currentDate);
@ -44,9 +38,6 @@ public interface ICuMemberAssessService extends IService<CuMemberAssess> {
* 重算考核 奖金用每天的重算复购考核用复购考核分红考核,只重算免考的
*
* @param currentDate 哪一天进行重新复购考核拿昨天的值跟现在的值对比
* @return: void
* @Author: sui q
* @Date: 2022/11/7 11:19
*/
void retryCalculationAssess(Date currentDate, Boolean flag);
@ -57,71 +48,50 @@ public interface ICuMemberAssessService extends IService<CuMemberAssess> {
* @param period 期间
* @param assessType 考核类型
* @param cuMemberSettleExtList 会员列表
* @return: Map<Long, CuMemberAssess> 会员作为键
* @Author: sui q
* @Date: 2022/11/16 19:13
*/
Map<Long, CuMemberAssess> queryCuMemberAssessByMember(String assessTableName, Integer period, Integer assessType, List<CuMemberSettleExt> cuMemberSettleExtList);
/**
* 查询会员分红考核结果只查询出免考或者考核通过的用于分红
*
* @param tableName 表名
* @param period 期间
* @return: List<CuMemberAssess>
* @Author: sui q
* @Date: 2022/11/16 19:13
* @param period 期间
*/
List<CuMemberAssess> queryCuMemberShareAssess(String tableName, Integer period);
/**
* @description: 会员-考核明细列表
* @author: zhang jing
* @date: 2023/1/23 10:17
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 会员-考核明细列表
**/
List<CuMemberAssessVO> selectAssessList(CuMemberAssessVO cuMemberAssessVO,List<Integer> orderTypeList);
List<CuMemberAssessVO> selectAssessList(CuMemberAssessVO cuMemberAssessVO, List<Integer> orderTypeList);
/**
* @description: 查询会员月度考核查询列表用
* @author: zhang jing
* @date: 2023/3/14 14:46
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 查询会员月度考核查询列表用
**/
List<CuMemberAssessVO> getMemberAssessMonthList(CuMemberAssessVO cuMemberAssessVO);
/**
* @description: 查询会员月度考核查询积分用
* @author: zhang jing
* @date: 2023/3/14 14:46
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 查询会员月度考核查询积分用
**/
List<CuMemberAssessVO> getMemberAssessMonth(CuMemberAssessVO cuMemberAssessVO);
/**
* @description: 查询会员订单考核积分
* @author: zhang jing
* @date: 2023/3/14 17:52
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 查询会员订单考核积分
**/
CuMemberAssessVO getOrderAssessList(CuMemberAssessVO cuMemberAssessVO);
/**
* @description:
* @author: zhang jing
* @date: 2023/4/23 19:44
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
List<CuMemberAssessVO> getOrderByAssessList(CuMemberAssessVO cuMemberAssessVO);
/*
* @description: 查询满足分红考核的人数达标人数
* @author: sui q
* @date: 2023/7/3 16:51
* @param: null null
**/
/**
* 查询满足分红考核的人数达标人数
*/
List<CuMemberAssess> queryCuMemberAssTotal(String startDate, Integer pkCountry);
/**
* 初始化会员考核数据
*
* @param settleDate
* @param currentSettleTableName
*/
void initMemberAssess(String settleDate, String currentSettleTableName);
}

View File

@ -14,61 +14,32 @@ import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
import com.hzs.common.domain.member.detail.CuMemberAssess;
import com.hzs.common.domain.member.detail.CuMemberAssessDetail;
import com.hzs.common.domain.member.ext.CuMemberAssessExt;
import com.hzs.common.domain.member.ext.CuMemberSettleExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.common.domain.system.config.BdAwards;
import com.hzs.bonus.detail.mapper.CuMemberAssessMapper;
import com.hzs.bonus.detail.vo.CuMemberAssessVO;
import com.hzs.sale.order.ISaOrderServiceApi;
import com.hzs.system.config.IAwardsServiceApi;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.temporal.ChronoUnit;
import java.util.*;
/**
* 会员信息-会员考核记录 服务实现类
*
* @author hzs
* @since 2022-08-31
*/
@Service
public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper, CuMemberAssess> implements ICuMemberAssessService {
private ICuMemberTreeService cuMemberTreeService;
private ICuMemberSettlePeriodService cuMemberSettlePeriodService;
private ICuMemberAssessDetailService cuMemberAssessDetailService;
@Autowired
private ICuMemberTreeService iCuMemberTreeService;
@Autowired
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@Autowired
private ICuMemberAssessDetailService iCuMemberAssessDetailService;
@Autowired
private CuMemberBonusSettle cuMemberBonusSettle;
@DubboReference
ISaOrderServiceApi saOrderServiceApi;
@DubboReference
IAwardsServiceApi awardsServiceApi;
@Autowired
public void setCuMemberAssessDetailService(ICuMemberAssessDetailService cuMemberAssessDetailService) {
this.cuMemberAssessDetailService = cuMemberAssessDetailService;
}
@Autowired
public void setCuMemberSettlePeriodService(ICuMemberSettlePeriodService cuMemberSettlePeriodService) {
this.cuMemberSettlePeriodService = cuMemberSettlePeriodService;
}
@Autowired
public void setCuMemberTreeService(ICuMemberTreeService cuMemberTreeService) {
this.cuMemberTreeService = cuMemberTreeService;
}
@Override
@Transactional(rollbackFor = Exception.class)
@ -85,19 +56,19 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
if (DateUtils.currentDay(currentDate) == 1) {
// 考核表
String tableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.currentYear(currentDate);
Integer num = cuMemberTreeService.queryExistOracleTable(tableName);
Integer num = iCuMemberTreeService.queryExistOracleTable(tableName);
if (num == null || num <= 0) {
// 判断是否存在年表
// 判断是否存在年表cu_member_assess
baseMapper.createCuMemberAssessTable(tableName);
baseMapper.createCuMemberTableUniqueIndex(tableName);
cuMemberTreeService.createCuMemberTableSequence(tableName, TableNameConstants.CU_MEMBER_ASSESS_SEQ);
iCuMemberTreeService.createCuMemberTableSequence(tableName, TableNameConstants.CU_MEMBER_ASSESS_SEQ);
}
// TODO cabbage 目前没有月考核了此处不需要创建月考核数据
// 目前没有月考核了此处不需要创建月考核数据
// calculationCuMemberAssess(currentDate);
// String sourceTable = TableNameConstants.CU_MEMBER_SETTLE + period;
// 判断当前时间是月初第一天需要初始化数据,判断表中是否有数据,没有数据可以进行初始化
// String assessDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate);
// period = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(assessDate).getPkId();
// period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(assessDate).getPkId();
// num = baseMapper.queryCuMemberAssessCount(tableName, period);
// if (num == null || num <= 0) {
// // 初始化复购考核
@ -108,7 +79,17 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// baseMapper.insertShareCuMemberAssess(tableName, sourceTable, period, month);
// }
}
}
@Override
public void createCuMemberAssessMonth(String date) {
String accessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getMonth(date);
Integer num = iCuMemberTreeService.queryExistOracleTable(accessTableName);
if (num == null || num <= 0) {
// 判断是否存在年表cu_member_assess
baseMapper.createCuMemberAssessTable(accessTableName);
baseMapper.createCuMemberTableUniqueIndex(accessTableName);
}
}
/**
@ -122,7 +103,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// 考核日期不能跨越考核只能当月考核当月考核上月
if (DateUtils.currentDay(currentDate) == 1) {
String currentMonthFirstDate = DateUtils.currentMonthFirstDateStr(currentDate);
Integer currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
Integer currentPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
String currentTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(currentMonthFirstDate);
// 清空数据 根据期数清空cu_member_assess cu_member_assess_detail表数据
initCurrentAssess(currentDate, currentTableName, currentPeriod);
@ -136,7 +117,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
baseMapper.updateAssessPeriodExemptBalanceByUsed(currentTableName, currentPeriod);
// 2 需要扣除通过的需要记录流水
// 记录流水新增或修改
cuMemberAssessDetailService.updateCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
iCuMemberAssessDetailService.updateCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
baseMapper.updateAssessPeriodCheckBalanceByUsed(currentTableName, currentPeriod);
}
}
@ -161,7 +142,8 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
}
/**
* @description: 会员-考核明细列表
* 会员-考核明细列表
*
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
@ -185,7 +167,8 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
}
/**
* @description: 查询会员月度考核(查询列表用)
* 查询会员月度考核(查询列表用)
*
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
@ -208,7 +191,8 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
}
/**
* @description: 查询会员月度考核(查询积分用)
* 查询会员月度考核(查询积分用)
*
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
**/
@ -223,17 +207,17 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
if (DateUtils.compareDateBefore(date, cuMemberAssessVO.getStartDate()) || DateUtils.compareDateEqual(date, cuMemberAssessVO.getStartDate())) {
//获取当前月第一天
Date date1 = DateUtils.currentMonthFirstDate(DateUtils.beforeDate(1, ChronoUnit.DAYS, date));
period = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(
period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(
DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date1)).getPkId();
} else {
Date date1 = DateUtils.currentMonthFirstDate(cuMemberAssessVO.getStartDate());
period = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(
period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(
DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date1)).getPkId();
}
} else {
year = DateUtils.currentYear(date);
Date date1 = DateUtils.currentMonthFirstDate(DateUtils.beforeDate(1, ChronoUnit.DAYS, date));
period = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(
period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(
DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, date1)).getPkId();
}
String tableName = TableNameConstants.CU_MEMBER_ASSESS + year;
@ -252,13 +236,13 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
@Transactional(rollbackFor = Exception.class)
public void retryCalculationAssess(Date currentDate, Boolean flag) {
// String beforeDateStr = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, currentDate);
// Integer beforePeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeDateStr).getPkId();
Integer currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate)).getPkId();
// Integer beforePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeDateStr).getPkId();
Integer currentPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate)).getPkId();
// String beforeTableName = TableNameConstants.CU_MEMBER_SETTLE + beforePeriod;
//// a)更新结算表会员前2部分会员免考状态 满足首次注册的会员 满足满足首次升级的会员
// String tableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.currentYear(currentDate);
// String currentMonthFirstDateStr = DateUtils.currentMonthFirstDateStr(currentDate);
// Integer monthFirstPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
// Integer monthFirstPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
// // 结算日期月份的第一天
Date startDate = DateUtils.beforeMonthFirstDate(currentDate);
// // 结算日期后一天
@ -269,8 +253,8 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
//// d)前一天不免考后一天免考需要做重新考核直接变考核通过原来考核通过的不回退考核金额且考核状态为考核通过不是免考通过
// // 所有的海粉会员设置复购考核失败存在任意订单的海粉会员复购考核成功
// // 复购免考通过
Integer startPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
Integer startPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
// baseMapper.updateAssessCuMemberToRepExempt(tableName, settleTableName, monthFirstPeriod, startDate, endDate, startPeriod, endPeriod);
// // 奖金重算时更新结算表,flag=true代表奖金重算时重算考核需要更新网体 flag=false 代表重算考核
if (flag) {
@ -282,7 +266,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// // 查询出考核表免考的数据
// List<CuMemberAssess> oldCuMemberAssessList = baseMapper.queryExemptAssessCuMember(tableName, monthFirstPeriod);
//// b)查询前一天的会员免考记录查询结算日会员免考记录
// List<CuMemberSettleExt> oldCuMemberSettleExtList = cuMemberTreeService.queryExemptCuMemberSettle(beforeTableName);
// List<CuMemberSettleExt> oldCuMemberSettleExtList = iCuMemberTreeService.queryExemptCuMemberSettle(beforeTableName);
//// c)比较会员2天免考发生的状态只需要计算变化的值去掉没有发生变化的值
// List<CuMemberSettleExt> newCuMemberSettleExtList = new ArrayList<>();
// if (oldCuMemberAssessList.size() > 0 && oldCuMemberSettleExtList != null && oldCuMemberSettleExtList.size() > 0) {
@ -308,7 +292,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// if (newCuMemberSettleExtList.size() > 0) {
// // 处理考核数据
// // 记录流水新增或修改
// cuMemberAssessDetailService.insertCuMemberAssessDetailByPeriod(tableName, monthFirstPeriod, newCuMemberSettleExtList);
// iCuMemberAssessDetailService.insertCuMemberAssessDetailByPeriod(tableName, monthFirstPeriod, newCuMemberSettleExtList);
// List<List<?>> cutCuMemberSettleExtList = cuMemberBonusSettle.handleCutList(newCuMemberSettleExtList);
// cutCuMemberSettleExtList.forEach(assessExtList ->
// baseMapper.updateAssessPeriodCheckBalanceByTmp(tableName, monthFirstPeriod, assessExtList));
@ -319,12 +303,12 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
private void initCurrentAssess(Date currentDate, String currentTableName, Integer currentPeriod) {
// 获取上月最后一天
String beforeLastDate = DateUtils.beforeMonthLastDateStr(currentDate);
CuMemberSettlePeriod cuMemberSettlePeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeLastDate);
CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeLastDate);
int period = cuMemberSettlePeriod.getPkId();
String sourceTable = TableNameConstants.CU_MEMBER_SETTLE + period;
String rangeSourceTable = TableNameConstants.CU_MEMBER_RANGE + period;
// 清空子表主表数据
cuMemberAssessDetailService.deleteCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
iCuMemberAssessDetailService.deleteCuMemberAssessDetailByPeriod(currentTableName, currentPeriod);
baseMapper.deleteCuMemberAssessByPeriod(currentTableName, currentPeriod);
// 初始化复购考核
String month = DateUtils.getMonth(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, currentDate));
@ -337,7 +321,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// a)更新结算表会员前2部分会员免考状态 满足首次注册的会员 满足满足首次升级的会员
String tableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.currentYear(currentDate);
String currentMonthFirstDateStr = DateUtils.currentMonthFirstDateStr(currentDate);
Integer monthFirstPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
Integer monthFirstPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDateStr).getPkId();
// 结算日期月份的第一天
Date startDate = DateUtils.beforeMonthFirstDate(currentDate);
// 结算日期后一天
@ -345,22 +329,22 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
String settleTableName = TableNameConstants.CU_MEMBER_SETTLE + currentPeriod;
if (DateUtils.currentDay(DateUtils.currentDate()) == 1) {
String currentMonthFirstDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.beforeDate(1, ChronoUnit.DAYS, currentDate));
Integer yesterdayPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
Integer yesterdayPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(currentMonthFirstDate).getPkId();
settleTableName = TableNameConstants.CU_MEMBER_SETTLE + yesterdayPeriod;
}
// 首次晋升首次升级都是当月加下月考核查询出上月1号到考核日期的值
// 等级看会员表支付时间奖衔看奖衔变更表是否免考分组取,手动免考查看 最新的结算表手动考核
// d)前一天不免考后一天免考需要做重新考核直接变考核通过原来考核通过的不回退考核金额且考核状态为考核通过不是免考通过
// 复购免考通过
Integer startPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
Integer startPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, startDate)).getPkId();
Integer endPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate)).getPkId();
baseMapper.updateAssessCuMemberToRepExempt(tableName, settleTableName, monthFirstPeriod, startDate, endDate, startPeriod, endPeriod);
// 初始化订单数据将当月新增加入数据库
// 上月第一天上月最后一天
Date beforeFirstDate = DateUtils.beforeMonthFirstDate(currentDate);
Date currentFirstDate = DateUtils.currentMonthFirstDate(currentDate);
cuMemberAssessDetailService.insertCuMemberAssesDetailByOrder(currentTableName, currentPeriod, beforeFirstDate, currentFirstDate);
iCuMemberAssessDetailService.insertCuMemberAssesDetailByOrder(currentTableName, currentPeriod, beforeFirstDate, currentFirstDate);
}
/**
@ -384,7 +368,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
// 获取结算日上月最后一天获取期间
Date beforeMonthFirstDate = DateUtils.beforeMonthFirstDate(currentDate);
String beforeMonthFirstDateStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, beforeMonthFirstDate);
Integer beforePeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDateStr).getPkId();
Integer beforePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(beforeMonthFirstDateStr).getPkId();
String beforeTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(beforeMonthFirstDateStr);
Date currentMonthFirstDate = DateUtils.currentMonthFirstDate(currentDate);
// 初始化复购考核的上月结余 // 更新当月结余
@ -395,11 +379,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
}
/**
* @description: 查询会员订单考核积分
* @author: zhang jing
* @date: 2023/3/14 17:52
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 查询会员订单考核积分
**/
@Override
public CuMemberAssessVO getOrderAssessList(CuMemberAssessVO cuMemberAssessVO) {
@ -407,11 +387,7 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
}
/**
* @description: 根据考核类型查询会员订单信息
* @author: zhang jing
* @date: 2023/4/23 19:45
* @param: [cuMemberAssessVO]
* @return: java.util.List<com.hzs.member.detail.vo.CuMemberAssessVO>
* 根据考核类型查询会员订单信息
**/
@Override
public List<CuMemberAssessVO> getOrderByAssessList(CuMemberAssessVO cuMemberAssessVO) {
@ -420,8 +396,32 @@ public class CuMemberAssessServiceImpl extends ServiceImpl<CuMemberAssessMapper,
@Override
public List<CuMemberAssess> queryCuMemberAssTotal(String startDate, Integer pkCountry) {
int period = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(startDate).getPkId();
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(startDate).getPkId();
String tableTable = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getYear(startDate);
return baseMapper.queryCuMemberAssTotal(tableTable, period, pkCountry);
}
@Override
public void initMemberAssess(String settleDate, String currentSettleTableName) {
// 本月考核表
String assessTableName = TableNameConstants.CU_MEMBER_ASSESS + DateUtils.getMonth(settleDate);
// 当月时间
Date monthDate = DateUtils.parseDateOne(settleDate, DateUtils.YYYY_MM_DD);
// 上月第一天
Date startDate = DateUtils.getFirstDayOfMonth(DateUtils.addMonths(monthDate, -1));
// 当月最后一天
Date endDate = DateUtils.getLastDayOfMonth(monthDate);
// 上月新会员本月免考
baseMapper.createPassMemberAssess(assessTableName, startDate, endDate);
// 会员复购订单首月免考
// 当月第一天
startDate = DateUtils.getFirstDayOfMonth(monthDate);
// 当月会员复购考试
baseMapper.updatePassMemberAssess(assessTableName, startDate, endDate);
// 更新日结表会员免考信息
iCuMemberTreeService.updateCuMemberSettlePointAssess(currentSettleTableName, assessTableName);
}
}

View File

@ -386,7 +386,8 @@
</update>
<update id="createCuMemberTreeParentIndex">
create index ${tableName}_parent
create index
${tableName}_parent
on ${tableName}
(
pk_parent
@ -394,7 +395,8 @@
</update>
<update id="createCuMemberTreePlaceIndex">
create index ${tableName}_place
create index
${tableName}_place
on ${tableName}
(
pk_place_parent,
@ -403,7 +405,8 @@
</update>
<update id="createCuMemberTableUniqueIndex">
create unique index ${tableName}_PK_M
create unique index
${tableName}_PK_M
on ${tableName}
(
PK_MEMBER,
@ -412,7 +415,8 @@
</update>
<update id="createCuMemberTreeDayOnlyIndex">
create unique index ${tableName}_PK_M
create unique index
${tableName}_PK_M
on ${tableName}
(
PK_MEMBER
@ -1263,4 +1267,17 @@
on cms.pk_member = t.pk_member
</select>
<!-- 更新日结复购考核 -->
<update id="updateCuMemberSettlePointAssess">
merge into #{settleTableName} cms
using (select cma.pk_member
from #{assessTableName} cma
where cma.del_flag = 0
and cma.assess_type = 0
and cma.assess_status in (1, 2)) tmp
on (tmp.pk_member = cms.pk_member)
when matched then
update set cms.purchase_status = 0
</update>
</mapper>

View File

@ -2,39 +2,4 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.bonus.mapper.BdWaresBonusMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BdWaresBonusExt" type="com.hzs.common.domain.member.ext.BdWaresBonusExt">
<id column="PK_ID" property="pkId"/>
<result column="DEL_FLAG" property="delFlag"/>
<result column="PK_COUNTRY" property="pkCountry"/>
<result column="CREATION_TIME" property="creationTime"/>
<result column="MODIFIED_TIME" property="modifiedTime"/>
<result column="PK_CREATOR" property="pkCreator"/>
<result column="PK_MODIFIED" property="pkModified"/>
<result column="PK_WARES" property="pkWares"/>
<result column="ORDER_ASS_ACHIEVE" property="orderAssAchieve"/>
<result column="TOTAL_ALGEBRA" property="totalAlgebra"/>
<collection property="bdWaresBonusItemsList" ofType="com.hzs.common.domain.member.bonus.BdWaresBonusItems">
<result column="PK_ID_ITEM" property="pkId"/>
<result column="ASS_ACHIEVE" property="assAchieve"/>
<result column="ALGEBRA" property="algebra"/>
</collection>
</resultMap>
<select id="querySpecialWaresBonus" resultMap="BdWaresBonusExt">
select bw.*,ba.wares_code,ba.wares_name,bt.pk_id pk_id_item,bt.ass_achieve,bt.algebra from bd_wares_bonus bw
inner join bd_wares_bonus_items bt
on bw.pk_id=bt.pk_wares_bonus
inner join bd_wares ba
on ba.pk_id=bw.pk_wares
where bw.del_flag=0 and bt.del_flag=0 and ba.del_flag=0
<if test="waresCode != null and waresCode != ''">
and ba.wares_code=#{waresCode}
</if>
<if test="waresName != null and waresName != ''">
and ba.wares_name = #{waresName}
</if>
order by bw.pk_wares,bt.algebra
</select>
</mapper>

View File

@ -4,116 +4,141 @@
<!-- 通用查询映射结果 -->
<resultMap id="CuMemberAssess" type="com.hzs.common.domain.member.ext.CuMemberAssessExt">
<id column="PK_ID" property="pkId" />
<result column="DEL_FLAG" property="delFlag" />
<result column="PK_CREATOR" property="pkCreator" />
<result column="CREATION_TIME" property="creationTime" />
<result column="PK_MODIFIED" property="pkModified" />
<result column="MODIFIED_TIME" property="modifiedTime" />
<result column="PK_COUNTRY" property="pkCountry" />
<result column="PK_MEMBER" property="pkMember" />
<result column="PERIOD" property="period" />
<result column="SETTLE_MONTH" property="settleMonth" />
<result column="ASSESS_TYPE" property="assessType" />
<result column="DEL_FLAG" property="delFlag"/>
<result column="PK_CREATOR" property="pkCreator"/>
<result column="CREATION_TIME" property="creationTime"/>
<result column="PK_MODIFIED" property="pkModified"/>
<result column="MODIFIED_TIME" property="modifiedTime"/>
<result column="PK_COUNTRY" property="pkCountry"/>
<result column="PK_MEMBER" property="pkMember"/>
<result column="PERIOD" property="period"/>
<result column="SETTLE_MONTH" property="settleMonth"/>
<result column="ASSESS_TYPE" property="assessType"/>
<result column="PK_ORIGINAL_AWARDS" property="pkOriginalAwards"/>
<result column="PK_AWARDS" property="pkAwards" />
<result column="ASSESS_TARGET" property="assessTarget" />
<result column="IS_EXAMINE" property="isExamine" />
<result column="ASSESS_STATUS" property="assessStatus" />
<result column="MONTH_BALANCE" property="monthBalance" />
<result column="MONTH_ADD" property="monthAdd" />
<result column="CUR_MONTH_ADD" property="curMonthAdd" />
<result column="MONTH_USED" property="monthUsed" />
<result column="MONTH_SURPLUS" property="monthSurplus" />
<result column="PK_AWARDS" property="pkAwards"/>
<result column="ASSESS_TARGET" property="assessTarget"/>
<result column="IS_EXAMINE" property="isExamine"/>
<result column="ASSESS_STATUS" property="assessStatus"/>
<result column="MONTH_BALANCE" property="monthBalance"/>
<result column="MONTH_ADD" property="monthAdd"/>
<result column="CUR_MONTH_ADD" property="curMonthAdd"/>
<result column="MONTH_USED" property="monthUsed"/>
<result column="MONTH_SURPLUS" property="monthSurplus"/>
</resultMap>
<!-- 通用查询结果列 -->
<sql id="CuMemberAssessColumn">
pk_id NUMBER(20) primary key,
pk_member NUMBER(20) not null,
period NUMBER(6) not null,
settle_month VARCHAR2(12) not null,
assess_type NUMBER(2) not null,
pk_awards NUMBER(6) not null,
assess_target NUMBER(17,6) default 0 not null,
is_examine NUMBER(1) default 1 not null,
assess_status NUMBER(2) not null,
month_balance NUMBER(17,6) default 0 not null,
month_add NUMBER(17,6) default 0 not null,
cur_month_add number(17,6) default 0 not null,
month_used NUMBER(17,6) default 0 not null,
month_surplus NUMBER(17,6) default 0 not null,
del_flag NUMBER(1) default 0 not null,
pk_country NUMBER(4) not null,
pk_creator NUMBER(20) not null,
creation_time DATE default sysdate not null,
modified_time DATE,
pk_modified NUMBER(20)
pk_member NUMBER(20) not null,
period NUMBER(6) default 0 not null,
settle_month VARCHAR2(10),
assess_type NUMBER(2) not null,
pk_awards NUMBER(6) default 1 not null,
assess_target NUMBER(17,6) default 0 not null,
is_examine NUMBER(1) default 1 not null,
assess_status NUMBER(2) not null,
month_balance NUMBER(17,6) default 0 not null,
month_add NUMBER(17,6) default 0 not null,
cur_month_add NUMBER(17,6) default 0 not null,
month_used NUMBER(17,6) default 0 not null,
month_surplus NUMBER(17,6) default 0 not null,
del_flag NUMBER(1) default 0 not null,
creation_time DATE default sysdate not null,
modified_time DATE,
pk_country NUMBER(4) default 1 not null,
pk_creator NUMBER(20) not null,
pk_modified NUMBER(20),
start_date DATE,
end_date DATE
</sql>
<update id="createCuMemberAssessTable">
create table ${tableName}
(
<include refid="CuMemberAssessColumn"></include>
)
</update>
<update id="createCuMemberTableUniqueIndex">
create index
${tableName}_MEMBER
on ${tableName}
(
PK_MEMBER,
ASSESS_TYPE
)
</update>
<insert id="insertRepCuMemberAssess">
merge into ${tableName} a
using(
select pk_member,#{period} period,#{month} settle_month,0 assess_type,pk_awards,nvl(b.purchase_check,0) ASSESS_TARGET,
1 IS_EXAMINE,2 assess_status,ct.pk_settle_country PK_COUNTRY,1 pk_creator
from ${sourceTableName} ct
left join bd_awards b
on ct.pk_awards=b.pk_id
where category=0
using (
select pk_member,
#{period} period,
#{month} settle_month,
0 assess_type,
pk_awards,
nvl(b.purchase_check, 0) ASSESS_TARGET,
1 IS_EXAMINE,
2 assess_status,
ct.pk_settle_country PK_COUNTRY,
1 pk_creator
from ${sourceTableName} ct
left join bd_awards b
on ct.pk_awards = b.pk_id
where category = 0
) b
on (a.pk_member=b.pk_member and a.period=b.period and a.assess_type=b.assess_type)
WHEN MATCHED THEN
update set a.SETTLE_MONTH=b.SETTLE_MONTH,a.PK_AWARDS=b.PK_AWARDS,a.ASSESS_TARGET=b.ASSESS_TARGET,
a.IS_EXAMINE=b.IS_EXAMINE,a.ASSESS_STATUS=b.ASSESS_STATUS
when not matched then
insert (PK_MEMBER,period,SETTLE_MONTH,ASSESS_TYPE,PK_AWARDS,ASSESS_TARGET,
IS_EXAMINE,ASSESS_STATUS,PK_COUNTRY,PK_CREATOR)
values(b.PK_MEMBER,b.period,b.SETTLE_MONTH,b.ASSESS_TYPE,b.PK_AWARDS,b.ASSESS_TARGET,
b.IS_EXAMINE,b.ASSESS_STATUS,b.PK_COUNTRY,b.PK_CREATOR)
on (a.pk_member = b.pk_member and a.period = b.period and a.assess_type = b.assess_type)
WHEN MATCHED THEN
update set a.SETTLE_MONTH = b.SETTLE_MONTH,a.PK_AWARDS = b.PK_AWARDS,a.ASSESS_TARGET = b.ASSESS_TARGET,
a.IS_EXAMINE = b.IS_EXAMINE,a.ASSESS_STATUS = b.ASSESS_STATUS
when not matched then
insert (PK_MEMBER, period, SETTLE_MONTH, ASSESS_TYPE, PK_AWARDS, ASSESS_TARGET,
IS_EXAMINE, ASSESS_STATUS, PK_COUNTRY, PK_CREATOR)
values (b.PK_MEMBER, b.period, b.SETTLE_MONTH, b.ASSESS_TYPE, b.PK_AWARDS, b.ASSESS_TARGET,
b.IS_EXAMINE, b.ASSESS_STATUS, b.PK_COUNTRY, b.PK_CREATOR)
</insert>
<insert id="insertRepCuMemberRangeAssess">
merge into ${tableName} a
using(
select pk_member,#{period} period,#{month} settle_month,0 assess_type,pk_range_awards pk_awards,nvl(b.purchase_check,0) ASSESS_TARGET,
1 IS_EXAMINE,2 assess_status,ct.pk_settle_country PK_COUNTRY,1 pk_creator
using (
select pk_member,
#{period} period,
#{month} settle_month,
0 assess_type,
pk_range_awards pk_awards,
nvl(b.purchase_check, 0) ASSESS_TARGET,
1 IS_EXAMINE,
2 assess_status,
ct.pk_settle_country PK_COUNTRY,
1 pk_creator
from ${sourceTableName} ct
left join bd_range_awards b
on ct.pk_range_awards=b.pk_id
where category=0
on ct.pk_range_awards = b.pk_id
where category = 0
) b
on (a.pk_member=b.pk_member and a.period=b.period and a.assess_type=b.assess_type)
on (a.pk_member = b.pk_member and a.period = b.period and a.assess_type = b.assess_type)
WHEN MATCHED THEN
update set a.SETTLE_MONTH=b.SETTLE_MONTH,a.PK_AWARDS=b.PK_AWARDS,a.ASSESS_TARGET=b.ASSESS_TARGET,
a.IS_EXAMINE=b.IS_EXAMINE,a.ASSESS_STATUS=b.ASSESS_STATUS
update set a.SETTLE_MONTH = b.SETTLE_MONTH,a.PK_AWARDS = b.PK_AWARDS,a.ASSESS_TARGET = b.ASSESS_TARGET,
a.IS_EXAMINE = b.IS_EXAMINE,a.ASSESS_STATUS = b.ASSESS_STATUS
when not matched then
insert (PK_MEMBER,period,SETTLE_MONTH,ASSESS_TYPE,PK_AWARDS,ASSESS_TARGET,
IS_EXAMINE,ASSESS_STATUS,PK_COUNTRY,PK_CREATOR)
values(b.PK_MEMBER,b.period,b.SETTLE_MONTH,b.ASSESS_TYPE,b.PK_AWARDS,b.ASSESS_TARGET,
b.IS_EXAMINE,b.ASSESS_STATUS,b.PK_COUNTRY,b.PK_CREATOR)
insert (PK_MEMBER, period, SETTLE_MONTH, ASSESS_TYPE, PK_AWARDS, ASSESS_TARGET,
IS_EXAMINE, ASSESS_STATUS, PK_COUNTRY, PK_CREATOR)
values (b.PK_MEMBER, b.period, b.SETTLE_MONTH, b.ASSESS_TYPE, b.PK_AWARDS, b.ASSESS_TARGET,
b.IS_EXAMINE, b.ASSESS_STATUS, b.PK_COUNTRY, b.PK_CREATOR)
</insert>
<update id="createCuMemberAssessTable">
create table ${tableName}
(
<include refid="CuMemberAssessColumn"></include>
)
</update>
<update id="createCuMemberTableUniqueIndex">
create unique index ${tableName}_PK_M on ${tableName}(PK_MEMBER,period, assess_type)
</update>
<update id="updateAssessPeriodBeginByBeforeMonth">
merge into ${tableName} a
using (select pk_member,assess_type,month_surplus from ${beforeTableName} cs
inner join cu_member cm
on cs.pk_member=cm.pk_id and cm.del_flag=0
where period = #{sourcePeriod} and assess_type = #{assessType} and cm.system_type=0) b
on (a.pk_member = b.pk_member and a.assess_type = b.assess_type)
when matched then
update set a.month_balance = b.month_surplus where a.del_flag= 0 and a.period= #{period}
using (select pk_member, assess_type, month_surplus
from ${beforeTableName} cs
inner join cu_member cm
on cs.pk_member = cm.pk_id and cm.del_flag = 0
where period = #{sourcePeriod}
and assess_type = #{assessType}
and cm.system_type = 0) b
on (a.pk_member = b.pk_member and a.assess_type = b.assess_type)
when matched then
update set a.month_balance = b.month_surplus where a.del_flag= 0 and a.period= #{period}
</update>
<update id="updateAssessPeriodAddBySaOrder">
merge into ${tableName} a
@ -124,12 +149,12 @@
#{item}
</foreach>
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
<!-- <if test="assessType == 0">
union all
select pk_member,order_achieve order_achieve from sa_t_order
where del_flag = 0 and order_status = 1 and order_type =21
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
</if>-->
<!-- <if test="assessType == 0">
union all
select pk_member,order_achieve order_achieve from sa_t_order
where del_flag = 0 and order_status = 1 and order_type =21
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
</if>-->
)
group by pk_member
) b
@ -139,54 +164,75 @@
</update>
<update id="updateAssessPeriodExemptBalanceByUsed">
update ${tableName} set month_surplus = month_balance+month_add
where del_flag= 0 and period = #{period}
update ${tableName}
set month_surplus = month_balance + month_add
where del_flag = 0
and period = #{period}
</update>
<update id="updateAssessPeriodCheckBalanceByUsed">
update ${tableName} set assess_status = 0, month_used = assess_target, month_surplus = month_balance+month_add-assess_target
where del_flag= 0 and assess_status=2 and period = #{period} and assess_target &lt;= month_balance+month_add
update ${tableName}
set assess_status = 0,
month_used = assess_target,
month_surplus = month_balance + month_add - assess_target
where del_flag = 0
and assess_status = 2
and period = #{period}
and assess_target &lt;= month_balance + month_add
</update>
<update id="updateAssessCuMemberToRepExempt">
merge into ${tableName} a
using (
select distinct pk_member,#{period} period,0 assess_type from(
select pk_id pk_member from cu_member where del_flag =0 and category =0
and pay_status = 1
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
union
select pk_member from cu_member_awards
where del_flag=0 and purchase_status= 0 and
period >= #{startPeriod} and period &lt; #{endPeriod}
union
select pk_member from ${settleTableName} ct
inner join bd_awards ba
on ct.pk_awards = ba.pk_id
where ct.purchase_status=0 and ba.purchase_check >0)
) b
on (a.pk_member = b.pk_member and a.period=b.period and a.assess_type=b.assess_type)
when matched then
update set a.is_examine=0
using (
select distinct pk_member, #{period} period, 0 assess_type
from (
select pk_id pk_member
from cu_member
where del_flag = 0
and category = 0
and pay_status = 1
and pay_time >= #{startDate, jdbcType=DATE}
and pay_time &lt; #{endDate, jdbcType=DATE}
union
select pk_member
from cu_member_awards
where del_flag = 0
and purchase_status = 0
and period >= #{startPeriod}
and period &lt; #{endPeriod}
union
select pk_member
from ${settleTableName} ct
inner join bd_awards ba
on ct.pk_awards = ba.pk_id
where ct.purchase_status = 0
and ba.purchase_check > 0)
) b
on (a.pk_member = b.pk_member and a.period = b.period and a.assess_type = b.assess_type)
when matched then
update set a.is_examine = 0
</update>
<update id="updateCuMemberSettleToRepExempt">
merge into ${settleTableName} a
using ( select distinct pk_id pk_member from cu_member where del_flag =0 and category =0
and pay_status = 1
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
<!--union
select distinct pk_member from cu_member_awards
where del_flag=0 and purchase_status= 0 and
period >= #{startPeriod} and period &lt; #{endPeriod}-->
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.purchase_status=0
using ( select distinct pk_id pk_member from cu_member where del_flag =0 and category =0
and pay_status = 1
and pay_time >= #{startDate, jdbcType=DATE} and pay_time &lt; #{endDate, jdbcType=DATE}
<!--union
select distinct pk_member from cu_member_awards
where del_flag=0 and purchase_status= 0 and
period >= #{startPeriod} and period &lt; #{endPeriod}-->
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.purchase_status=0
</update>
<delete id="deleteCuMemberAssessByPeriod">
delete from ${tableName} where period = #{period} and del_flag=0
delete
from ${tableName}
where period = #{period}
and del_flag = 0
</delete>
<select id="queryAssessPeriodByRevokeOrder" resultMap="CuMemberAssess">
@ -212,13 +258,22 @@
</select>
<select id="queryCuMemberShareAssess" resultType="com.hzs.common.domain.member.detail.CuMemberAssess">
select pk_member,PERIOD,PK_AWARDS,assess_status,pk_country from ${tableName} where period= #{period} and assess_type=1
and assess_status in(0,1) and pk_country=1
select pk_member, PERIOD, PK_AWARDS, assess_status, pk_country
from ${tableName}
where period = #{period}
and assess_type = 1
and assess_status in (0, 1)
and pk_country = 1
union
select ca.pk_member,ca.PERIOD,ca.PK_AWARDS,ca.assess_status,ca.pk_country from ${tableName} ca
inner join bd_awards ba
on ca.PK_AWARDS=ba.pk_id
where period= #{period} and assess_type=0 and assess_status in(0,1) and ca.pk_country >1 and ba.awards_value>0
select ca.pk_member, ca.PERIOD, ca.PK_AWARDS, ca.assess_status, ca.pk_country
from ${tableName} ca
inner join bd_awards ba
on ca.PK_AWARDS = ba.pk_id
where period = #{period}
and assess_type = 0
and assess_status in (0, 1)
and ca.pk_country > 1
and ba.awards_value > 0
</select>
@ -226,7 +281,7 @@
<select id="selectAssessList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
select * from (
select * from (
SELECT
a.PK_ASSESS pkAssess,
a.PK_MEMBER pkMember,
@ -259,7 +314,7 @@
AND b.ASSESS_STATUS = #{assessStatus}
</if>
<if test="changeType ==null and assessStatus==null ">
<if test="changeType ==null and assessStatus==null ">
UNION ALL
select
null pkAssess,
@ -271,26 +326,26 @@
ORDER_ASS_ACHIEVE orderAssAchieve,
ORDER_ACHIEVE orderAchieve,
ORDER_CODE orderCode
from SA_ORDER
from SA_ORDER
WHERE
DEL_FLAG = 0
<if test="pkMember != null ">
AND PK_MEMBER = #{pkMember}
</if>
<if test="orderTypeList != null ">
and ORDER_TYPE in
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="assessType == 0 ">
AND order_achieve > 0
</if>
<if test="assessType == 1 ">
AND ORDER_ASS_ACHIEVE > 0
</if>
<if test="orderTypeList != null ">
and ORDER_TYPE in
<foreach collection="orderTypeList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="assessType == 0 ">
AND order_achieve > 0
</if>
<if test="assessType == 1 ">
AND ORDER_ASS_ACHIEVE > 0
</if>
<if test="pkCountry != null ">
<if test="pkCountry != null ">
AND PK_COUNTRY = #{pkCountry}
</if>
@ -300,15 +355,12 @@
<if test="endDate != null">
and PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
</if>
</if>
)
order by tradeTime desc
</select>
<!--查询会员月度考核-->
<!--查询会员月度考核-->
<select id="getMemberAssessMonthList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
SELECT
@ -322,7 +374,7 @@
WHERE
a.DEL_FLAG = 0
<if test="period != null ">
AND a.period=#{period}
AND a.period=#{period}
</if>
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
@ -333,20 +385,18 @@
<if test="assessType != null ">
AND a.ASSESS_TYPE = #{assessType}
</if>
</select>
<!--根据考核类型查询会员订单信息-->
<select id="getOrderByAssessList"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
select PK_MEMBER pkMember,
select PK_MEMBER pkMember,
PAY_TIME tradeTime,
ORDER_ASS_ACHIEVE orderAssAchieve,
ORDER_ACHIEVE orderAchieve,
ORDER_TYPE orderType,
ORDER_CODE orderCode
from SA_ORDER
from SA_ORDER
WHERE
DEL_FLAG = 0
<if test="pkMember != null ">
@ -367,7 +417,6 @@
order by PAY_TIME desc
</select>
<!--查询会员订单考核积分-->
<select id="getOrderAssessList" parameterType="com.hzs.bonus.detail.vo.CuMemberAssessVO"
resultType="com.hzs.bonus.detail.vo.CuMemberAssessVO">
@ -384,7 +433,6 @@
#{item}
</foreach>
</if>
<if test="pkMember != null ">
AND a.PK_MEMBER = #{pkMember}
</if>
@ -397,16 +445,84 @@
<if test="endDate != null">
and a.PAY_TIME &lt; #{endDate, jdbcType=DATE}
</if>
</select>
<select id="queryCuMemberAssTotal" resultType="com.hzs.common.domain.member.detail.CuMemberAssess">
select cm.pk_awards pkAwards,count(cm.pk_id) assessStatus from ${settleTable} cm
inner join bd_awards ba
on cm.pk_awards = ba.pk_id
where period= #{period} and cm.pk_country= #{pkCountry} and ASSESS_TYPE=1 and ASSESS_STATUS in(0,1)
and ba.awards_value >0
select cm.pk_awards pkAwards, count(cm.pk_id) assessStatus
from ${settleTable} cm
inner join bd_awards ba
on cm.pk_awards = ba.pk_id
where period = #{period}
and cm.pk_country = #{pkCountry}
and ASSESS_TYPE = 1
and ASSESS_STATUS in (0, 1)
and ba.awards_value > 0
group by cm.pk_awards
order by pk_awards
</select>
<!-- 创建免考会员数据 -->
<update id="createPassMemberAssess">
merge into #{accessTableName} cma
using (
select cm.pk_id
from cu_member cm
where cm.del_flag = 0
and cm.pay_status = 1
and cm.pay_time >= #{startDate}
and #{endDate} >= cm.pay_time
) tmp
on (cma.pk_member = tmp.pk_id and assess_type = 0 and cma.del_flag = 0)
when not matched then
insert
(pk_member,
assess_type,
is_examine,
assess_status,
pk_creator,
start_date,
end_date)
values (tmp.pk_id,
0,
0,
1,
tmp.pk_id,
#{startDate},
#{endDate})
</update>
<!-- 处理考试通过会员 -->
<update id="updatePassMemberAssess">
merge into #{accessTableName} cma
using (select tmp.pk_member, tmp.pay_time
from (select so.pk_member, min(so.pay_time) pay_time
from sa_order so
where so.del_flag = 0
and so.order_type = 3
and so.order_status = 1
and so.order_achieve > 0
and so.pay_time >= #{startDate}
and #{endDate} >= so.pay_time
group by so.pk_member) tmp
left join #{accessTableName} cma
on cma.pk_member = tmp.pk_member
and cma.assess_type = 0
and cma.del_flag = 0
where cma.start_date is null
or tmp.pay_time > cma.start_date) tmp
on (cma.pk_member = tmp.pk_member and assess_type = 0 and cma.del_flag = 0 and cma.is_examine = 1)
when matched then
update set cma.start_date = tmp.pay_time
when not matched then
insert
(pk_member,
assess_type,
is_examine,
assess_status,
pk_creator,
start_date,
end_date)
values (tmp.pk_member, 0, 1, 0, tmp.pk_member, tmp.pay_time, #{endDate})
</update>
</mapper>

View File

@ -28,13 +28,6 @@ import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* @Description:
* @Author: zhangjing
* @Time: 2022/11/8 13:50
* @Classname: CuMemberAssessController
* @PackageName: com.hzs.member.detail.controller.manage
*/
@RestController
@RequestMapping("/api/assess")
public class ApiCuMemberAssessController extends BaseController {
@ -209,11 +202,7 @@ public class ApiCuMemberAssessController extends BaseController {
/**
* @description: 查询考核积分
* @author: zhang jing
* @date: 2023/3/14 17:14
* @param: [cuMemberAssessVO]
* @return: com.hzs.common.core.web.domain.AjaxResult
* 查询考核积分
**/
@GetMapping("/assAchieve")
public AjaxResult assAchieve(CuMemberAssessVO cuMemberAssessVO) {

View File

@ -9,56 +9,41 @@ import java.util.Date;
import java.util.List;
/**
* <p>
* 考核业绩变化明细表 服务类
* </p>
*
* @author hzs
* @since 2022-10-28
*/
public interface ICuMemberAssessDetailService extends IService<CuMemberAssessDetail> {
/*
* @description: 根据期间删除会员考核记录
* @author: sui q
* @date: 2023/5/25 10:52
* @param: null null
* 根据期间删除会员考核记录
**/
void deleteCuMemberAssessDetailByPeriod(String tableName, Integer period);
/*
* @description: 每月考试将订单插入会员考核明细
* @author: sui q
* @date: 2023/5/25 11:36
* @param: null null
* 每月考试将订单插入会员考核明细
**/
void insertCuMemberAssesDetailByOrder(String tableName, Integer period, Date startDate, Date endDate);
/**
* 插入考核记录
* @param tableName 表名
* @param period 期间
*
* @param tableName 表名
* @param period 期间
* @param newCuMemberSettleExtList 会员列表
* @return: void
* @Author: sui q
* @Date: 2022/11/9 15:56
*/
void insertCuMemberAssessDetailByPeriod(String tableName, Integer period, List<CuMemberSettleExt> newCuMemberSettleExtList);
/**
* 新增或修改会员考核明细表根据期间重算就是修改
*
* @param tableName 来源表
* @param period 期间
* @Author: sui q
* @Date: 2022/11/8 11:21
* @param period 期间
*/
void updateCuMemberAssessDetailByPeriod(String tableName, Integer period);
/**
* 删除可能会发生变动的会员的考核明细
* 删除可能会发生变动的会员的考核明细
*
* @param revokeDetailList 变动的记录
* @Author: sui q
* @Date: 2022/11/9 15:31
*/
*/
void deleteCuMemberAssessDetailByList(List<CuMemberAssessDetail> revokeDetailList);
}

View File

@ -16,12 +16,7 @@ import java.util.Date;
import java.util.List;
/**
* <p>
* 考核业绩变化明细表 服务实现类
* </p>
*
* @author hzs
* @since 2022-10-28
*/
@Service
public class CuMemberAssessDetailServiceImpl extends ServiceImpl<CuMemberAssessDetailMapper, CuMemberAssessDetail> implements ICuMemberAssessDetailService {
@ -54,7 +49,7 @@ public class CuMemberAssessDetailServiceImpl extends ServiceImpl<CuMemberAssessD
if (purchaseMemberList.size() > 0) {
List<List<?>> purchaseHandleCutList = cuMemberBonusSettle.handleCutList(purchaseMemberList);
purchaseHandleCutList.forEach(cuMemberBonusSettleList ->
baseMapper.insertCuMemberAssessDetailByPeriod(tableName, period, cuMemberBonusSettleList, EAssessmentType.REPURCHASE_ASSESS.getValue()) );
baseMapper.insertCuMemberAssessDetailByPeriod(tableName, period, cuMemberBonusSettleList, EAssessmentType.REPURCHASE_ASSESS.getValue()));
}
if (shareMemberList.size() > 0) {
List<List<?>> shareHandleCutList = cuMemberBonusSettle.handleCutList(shareMemberList);

View File

@ -119,7 +119,7 @@ public class EnumsController extends BaseController {
public AjaxResult AssessmentType() {
List<EnumEntity> enumEntityList = new ArrayList<>();
for (EAssessmentType value : EAssessmentType.values()) {
enumEntityList.add(new EnumEntity(value.getValue(), value.getLabel(), EnumsPrefixConstants.ASSESSMENT_TYPE));
enumEntityList.add(new EnumEntity(value.getValue(), value.getLabel()));
}
return AjaxResult.success(enumEntityList);
}
@ -411,7 +411,7 @@ public class EnumsController extends BaseController {
public AjaxResult algebra() {
List<EnumEntity> enumEntityList = new ArrayList<>();
for (EAlgebra value : EAlgebra.values()) {
enumEntityList.add(new EnumEntity(value.getValue(), value.getLabel(), EnumsPrefixConstants.ALGEBRA));
enumEntityList.add(new EnumEntity(value.getValue(), value.getLabel()));
}
return AjaxResult.success(enumEntityList);
}
@ -462,7 +462,7 @@ public class EnumsController extends BaseController {
List<EnumEntity> enumEntityList = new ArrayList<>();
for (EAreaType value : EAreaType.values()) {
if (value.getEnable() == EnableStatus.ENABLE.getValue()) {
enumEntityList.add(new EnumEntity(value.getValue(), value.getLabel(), EnumsPrefixConstants.EAREA_TYPE));
enumEntityList.add(new EnumEntity(value.getValue(), value.getLabel()));
}
}
return AjaxResult.success(enumEntityList);

View File

@ -43,10 +43,6 @@ public class EnumsInitController {
for (EUpgradeType value : EUpgradeType.values()) {
initList.add(this.createData(value.getKey(), value.getLabel()));
}
// 地区类型枚举
for (EAreaType value : EAreaType.values()) {
initList.add(this.createData(value.getKey(), value.getLabel()));
}
// 结算方式枚举
for (ESettleType value : ESettleType.values()) {
initList.add(this.createData(value.getKey(), value.getLabel()));
@ -81,11 +77,6 @@ public class EnumsInitController {
initList.add(this.createData(value.getKey(), value.getLabel()));
}
// 代数枚举
for (EAlgebra value : EAlgebra.values()) {
initList.add(this.createData(value.getKey(), value.getLabel()));
}
// 奖衔枚举枚举
for (EAwards value : EAwards.values()) {
initList.add(this.createData(value.getKey(), value.getLabel()));
@ -318,13 +309,6 @@ public class EnumsInitController {
initList.add(this.createData(value.getKey(), value.getLabel()));
}
/**
* 考核类型
*/
for (EAssessmentType value : EAssessmentType.values()) {
initList.add(this.createData(value.getKey(), value.getLabel()));
}
/**
* 免考类型
*/

View File

@ -311,18 +311,11 @@ public class EnumsPrefixConstants {
*/
public static final String MEMBER_ASSESS_STATUS = "ENU_MEMBER_ASSESS_S_";
/**
* 订单类型枚举类
*/
public static final String ORDER_TYPE = "ENU_ORDER_T_";
/**
* 盘点类型
*/
public static final String INVENTORY_TYPE = "ENU_INV_T_";
/**
* 客商类型
*/
@ -430,11 +423,6 @@ public class EnumsPrefixConstants {
* 性别
*/
public static final String SEX = "ENU_SEX_U_";
/**
* 代数
*/
public static final String ALGEBRA = "ENU_ALGEBRA_A_";
/**
* 所属专区枚举类
@ -730,11 +718,6 @@ public class EnumsPrefixConstants {
* 区域类型
*/
public static final String EREGION_TYPE = "ENU_EREGION_TYPE_";
/**
* 地区类型
*/
public static final String EAREA_TYPE = "ENU_EAREA_TYPE_";
/**
* 登录状态
@ -758,7 +741,6 @@ public class EnumsPrefixConstants {
*/
public static final String NOTICE_TYPE = "ENU_NOTICE_TYPE_";
/**
* 公告功能类型
*/

View File

@ -6,7 +6,6 @@ public class TableNameConstants {
* 业绩表
*/
public static final String CU_MEMBER_ACHIEVE = "cu_member_achieve";
/**
* 业绩表序列
*/
@ -16,7 +15,6 @@ public class TableNameConstants {
* 会员网体记录
*/
public static final String CU_MEMBER_TREE = "cu_member_tree";
/**
* 会员网体记录序列
*/
@ -36,22 +34,20 @@ public class TableNameConstants {
* 会员结算秒结表
*/
public static final String CU_MEMBER_SECOND = "cu_member_second";
/**
* 会员极差秒结表
*/
public static final String CU_MEMBER_RANGE_S = "cu_member_second_s";
/**
* 会员考核记录表
*/
public static final String CU_MEMBER_ASSESS = "cu_member_assess";
/**
* 用于报表月表数据
*/
public static final String CU_MEMBER_MONTH = "cu_member_month";
/**
* 会员考核记录表
*/
public static final String CU_MEMBER_ASSESS = "cu_member_assess";
/**
* 会员考核记录表序列
*/

View File

@ -1,13 +1,10 @@
package com.hzs.common.core.enums;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代数枚举复购直推
*
* @author: hzs
*/
@AllArgsConstructor
@Getter
@ -16,45 +13,45 @@ public enum EAlgebra {
/**
* 一代
*/
ONE_ALGEBRA(1, "一代", 0, EnumsPrefixConstants.ALGEBRA + "1"),
ONE_ALGEBRA(1, "一代", 0),
/**
* 二代
*/
TWO_ALGEBRA(2, "二代", 0, EnumsPrefixConstants.ALGEBRA + "2"),
TWO_ALGEBRA(2, "二代", 0),
/**
* 三代
*/
THREE_ALGEBRA(3, "三代", 0, EnumsPrefixConstants.ALGEBRA + "3"),
THREE_ALGEBRA(3, "三代", 0),
/**
* 四代
*/
FOUR_ALGEBRA(4, "四代", 0, EnumsPrefixConstants.ALGEBRA + "4"),
FOUR_ALGEBRA(4, "四代", 0),
/**
* 五代
*/
FIVE_ALGEBRA(5, "五代", 0, EnumsPrefixConstants.ALGEBRA + "5"),
FIVE_ALGEBRA(5, "五代", 0),
/**
* 六代
*/
SIX_ALGEBRA(6, "六代", 0, EnumsPrefixConstants.ALGEBRA + "6"),
SIX_ALGEBRA(6, "六代", 0),
/**
* 七代
*/
SEVEN_ALGEBRA(7, "七代", 0, EnumsPrefixConstants.ALGEBRA + "7"),
SEVEN_ALGEBRA(7, "七代", 0),
/**
* 八代
*/
EIGHT_ALGEBRA(8, "八代", 0, EnumsPrefixConstants.ALGEBRA + "8"),
EIGHT_ALGEBRA(8, "八代", 0),
/**
* 九代
*/
NINE_ALGEBRA(9, "九代", 0, EnumsPrefixConstants.ALGEBRA + "9"),
NINE_ALGEBRA(9, "九代", 0),
/**
* 十代
*/
TEN_ALGEBRA(10, "十代", 0, EnumsPrefixConstants.ALGEBRA + "10"),
TEN_ALGEBRA(10, "十代", 0),
;
@ -70,18 +67,5 @@ public enum EAlgebra {
* 是否启用0=,1= -- 来源EYesNo
*/
private final int enable;
/**
* 国际化翻译key值
*/
private final String key;
public static String getALGEBRA(int value){
for (EAlgebra ALGEBRA : EAlgebra.values()) {
if (ALGEBRA.getValue() == value){
return ALGEBRA.getLabel();
}
}
return null;
}
}

View File

@ -1,6 +1,5 @@
package com.hzs.common.core.enums;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -14,17 +13,17 @@ public enum EAreaType {
/**
* 1=
*/
PROVINCE(1, "", 0, EnumsPrefixConstants.EAREA_TYPE + "1"),
PROVINCE(1, "", 0),
/**
* 2=国家
*/
CITY(2, "", 0, EnumsPrefixConstants.EAREA_TYPE + "2"),
CITY(2, "", 0),
/**
* 3=/
*/
COUNTY(3, "区/县", 0, EnumsPrefixConstants.EAREA_TYPE + "3"),
COUNTY(3, "区/县", 0),
;
@ -40,10 +39,6 @@ public enum EAreaType {
* 是否启用0=,1= -- 来源EYesNo
*/
private final int enable;
/**
* 国际化翻译key值
*/
private final String key;
/**

View File

@ -5,11 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Description: 考核状态
* @Author: sui q
* @Time: 2022/11/9 13:33
* @Classname: EAssessStatus
* @PackageName: com.hzs.common.core.enums
* 考核状态
*/
@AllArgsConstructor
@Getter

View File

@ -1,6 +1,5 @@
package com.hzs.common.core.enums;
import com.hzs.common.core.constant.EnumsPrefixConstants;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -10,18 +9,21 @@ import lombok.Getter;
@AllArgsConstructor
@Getter
public enum EAssessmentType {
/**
* 0=复购考核
* 0=复购考核见点考核
*/
REPURCHASE_ASSESS(0, "复购考核", 0, EnumsPrefixConstants.ASSESSMENT_TYPE + 0),
REPURCHASE_ASSESS(0, "复购考核", 0),
/**
* 1=分红考核
*/
SHARE_ASSESS(1, "分红考核", 0, EnumsPrefixConstants.ASSESSMENT_TYPE + 1),
SHARE_ASSESS(1, "分红考核", 0),
/**
* 2=不考核
*/
NO_ASSESSMENT(2, "不考核", 0, EnumsPrefixConstants.ASSESSMENT_TYPE + 2),
NO_ASSESSMENT(2, "不考核", 0),
;
@ -37,9 +39,5 @@ public enum EAssessmentType {
* 是否启用0=,1= -- 来源EYesNo
*/
private final int enable;
/**
* 国际化翻译key值
*/
private final String key;
}

View File

@ -5,7 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Description: 奖金收益状态 奖金明细表cu_member_bonus_XX
* 奖金收益状态 奖金明细表cu_member_bonus_XX
*/
@AllArgsConstructor
@Getter

View File

@ -89,7 +89,6 @@ public enum EBonusItems {
* 车奖积分
*/
// CAR_BONUS_POINTS(19, "车奖积分", 0, EnumsPrefixConstants.BONUS_ITEMS + 19),
/**
* 海粉收益 禁用
*/

View File

@ -12,14 +12,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author hzs
* @since 2024-10-15
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)

View File

@ -4,15 +4,8 @@ import com.hzs.common.domain.member.achieve.CuMemberRange;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* @description: 极差扩展
* @author: sui q
* @time: 2024/10/15 15:32
* @classname: CuMemberRangeExt
* @package_name: com.hzs.common.domain.member.achieve.ext
* version 1.0.0
* 极差扩展
*/
@EqualsAndHashCode(callSuper = true)
@Data

View File

@ -11,17 +11,11 @@ import lombok.*;
import lombok.experimental.Accessors;
/**
* <p>
* 会员信息-会员考核记录
* </p>
*
* @author hzs
* @since 2022-08-31
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@KeySequence("CU_MEMBER_ASSESS_SEQ")
@TableName("CU_MEMBER_ASSESS")
@Builder
@AllArgsConstructor
@ -30,12 +24,6 @@ public class CuMemberAssess extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId("PK_ID")
private Long pkId;
/**
* 会员编号
*/
@ -55,7 +43,7 @@ public class CuMemberAssess extends BaseEntity {
private String settleMonth;
/**
* 考核类型( 0=复购考核,1=分红考核)
* 考核类型 0=复购考核 1=分红考核 5=见点考核
*/
@TableField("ASSESS_TYPE")
private Integer assessType;

View File

@ -170,4 +170,10 @@ public class BdGrade extends BaseEntity {
@TableField("BOX_SMALL_TOTAL")
private Integer boxSmallTotal;
/**
* 见点代数
*/
@TableField("ALGEBRA")
private Integer algebra;
}

View File

@ -12,12 +12,7 @@ import lombok.experimental.Accessors;
import java.math.BigDecimal;
/**
* <p>
* 复购直推配置
* </p>
*
* @author zhangjing
* @since 2023-06-29
*/
@Data
@EqualsAndHashCode(callSuper = true)