Compare commits

...

14 Commits

Author SHA1 Message Date
cabbage 8eebb3fdfa ## 奖金明细、奖金汇总接口调整; 2025-06-13 14:22:05 +08:00
cabbage e064d87223 ## 使用BigDecimalFormat注解,默认不用四舍五入改为去尾; 2025-06-13 14:22:03 +08:00
sangelxiu1 dc70bc6db7 ## Opt - 我的->盒数
业绩除万,四位小数
2025-06-13 14:22:01 +08:00
cabbage c589c2461c ## 计算平级时,保留6位小数; 2025-06-13 14:22:00 +08:00
cabbage 99317636cc ## 查询昨日奖金汇总接口; 2025-06-13 14:21:58 +08:00
sangelxiu1 fea41d6ccd ## Opt - 我的->盒数
增加激活时间判断 & 计算达小区时包含注水,返回前台数据时剔出注水
2025-06-13 14:21:56 +08:00
sangelxiu1 3873adb2cd ## Fix - 新用户后台改等级 没有日结造成npe 2025-06-13 14:21:54 +08:00
cabbage d2188ab2b0 ## 后台办理业务手动激活推送秒结状态MQ; 2025-06-13 14:18:04 +08:00
sangelxiu1 1f8d4a2b50 ## Feat - 新增秒结补偿MQ逻辑
查当前ID伞下秒结表的sum(NEW_BOX_NUM)更新至当前用户的TEAM_NEW_BOX_NUM
2025-06-13 14:17:06 +08:00
cabbage dcead29539 ## 后台办理业务手动激活推送秒结状态MQ; 2025-06-13 14:17:04 +08:00
cabbage 44e36f5abe ## 升级订单添加激活MQ推送; 2025-06-13 14:17:02 +08:00
sangelxiu1 ccb3e91a54 ## Feat - 新增秒结补偿MQ定义 2025-06-13 14:16:59 +08:00
cabbage 896597ac53 ## get-info返回是否激活; 2025-06-13 14:16:58 +08:00
woody 3b87d98457 feat(MemberEmptyService): 空单注册不校验手机号 2025-06-13 14:16:56 +08:00
33 changed files with 472 additions and 472 deletions

View File

@ -32,49 +32,10 @@ import java.util.List;
public class ApiCuMemberBonusController extends BaseController {
@Autowired
private ICuMemberBonusService cuMemberBonusService;
private ICuMemberBonusService iCuMemberBonusService;
/**
* 查询会员某个时间段内的奖金默认查询15天内,查询直推
*/
@PostMapping("/query-bonus-first")
public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = cuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
List<MemberBonusFirstPurchaseVO> firstPurchaseVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
MemberBonusFirstPurchaseVO memberBonusFirstPurchaseVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusFirstPurchaseVO.class, "settleDate");
packageSettleDate(cuMemberBonus, memberBonusFirstPurchaseVO);
// BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getDirectIncome(), memberBonusFirstPurchaseVO.getExpandIncome(),
// memberBonusFirstPurchaseVO.getCoachIncome(), memberBonusFirstPurchaseVO.getServiceIncome(), memberBonusFirstPurchaseVO.getShareIncome()),
// memberBonusFirstPurchaseVO.getPurRealSubtotal());
// memberBonusFirstPurchaseVO.setBackPoints(ComputeUtil.computeMultiplyHalf(serviceSpend));
// memberBonusFirstPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend));
// if(DateUtils.compareDate(cuMemberBonus.getSettleDate(), DateUtils.parseStringToDate("2024-09-09"))>0) {
BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getDirectIncome(), memberBonusFirstPurchaseVO.getExpandIncome(),
memberBonusFirstPurchaseVO.getCoachIncome(), memberBonusFirstPurchaseVO.getServiceIncome(), memberBonusFirstPurchaseVO.getShareIncome(),
memberBonusFirstPurchaseVO.getRepurExpandIncome(), memberBonusFirstPurchaseVO.getRepurRangeIncome(), memberBonusFirstPurchaseVO.getRepurPushIncome()),
ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getRepurRealSubtotal()));
memberBonusFirstPurchaseVO.setBackPoints(ComputeUtil.computeMultiplyHalf(serviceSpend));
memberBonusFirstPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend));
memberBonusFirstPurchaseVO.setExpandIncome(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getExpandIncome(), memberBonusFirstPurchaseVO.getRepurExpandIncome(), memberBonusFirstPurchaseVO.getRepurPushIncome()));
memberBonusFirstPurchaseVO.setPurRealSubtotal(ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getRepurRealSubtotal()));
// }else{
// BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(memberBonusFirstPurchaseVO.getDirectIncome(), memberBonusFirstPurchaseVO.getExpandIncome(),
// memberBonusFirstPurchaseVO.getCoachIncome(), memberBonusFirstPurchaseVO.getServiceIncome(), memberBonusFirstPurchaseVO.getShareIncome(),
// memberBonusFirstPurchaseVO.getRepurExpandIncome(), memberBonusFirstPurchaseVO.getRepurExpandIncome()),
// ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getRepurRealSubtotal()));
// memberBonusFirstPurchaseVO.setBackPoints(ComputeUtil.computeMultiplyHalf(serviceSpend));
// memberBonusFirstPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend));
// }
memberBonusFirstPurchaseVO.setPurRealSubtotal(ComputeUtil.computeAdd(memberBonusFirstPurchaseVO.getPurRealSubtotal(), memberBonusFirstPurchaseVO.getGlobalPoints()));
firstPurchaseVOList.add(memberBonusFirstPurchaseVO);
});
return getDataTable(firstPurchaseVOList);
}
/**
* 查询会员实时奖金当日的奖金
* 新零售实时奖金查询会员实时奖金当日的奖金
*/
@PostMapping("/query-current-bonus")
public TableDataInfo listCurrentBonus(@RequestBody BonusParam bonusParam) {
@ -84,7 +45,7 @@ public class ApiCuMemberBonusController extends BaseController {
bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.currentDate()));
bonusParam.setGrantStatus(EGrantStatus.SETTLED.getValue());
List<CuMemberBonusExt> cuMemberBonusList = cuMemberBonusService.queryMemberSecondBonusVoByCondition(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberSecondBonusVoByCondition(bonusParam);
List<MemberBonusVO> memberBonusVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
if (ComputeUtil.compareValue(cuMemberBonus.getRealIncomeTotal())) {
@ -102,23 +63,41 @@ public class ApiCuMemberBonusController extends BaseController {
}
/**
* 查询会员昨天奖金的值
* 新零售实时奖金查询会员奖金列表
*/
@PostMapping("/query-bonus-first")
public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
startPage();
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
List<MemberBonusFirstPurchaseVO> firstPurchaseVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
MemberBonusFirstPurchaseVO memberBonusFirstPurchaseVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusFirstPurchaseVO.class, "settleDate");
packageSettleDate(cuMemberBonus, memberBonusFirstPurchaseVO);
firstPurchaseVOList.add(memberBonusFirstPurchaseVO);
});
return getDataTable(firstPurchaseVOList);
}
/**
* 新零售实时奖金查询会员昨日奖金汇总
*/
@PostMapping("/query-bonus-total")
public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam) {
bonusParam.setPkCountry(SecurityUtils.getPkCountry());
bonusParam.setPkMember(SecurityUtils.getUserId());
// bonusParam.setStartDate(DateUtils.beforeDate(1, ChronoUnit.DAYS));
// bonusParam.setEndDate(DateUtils.currentDate());
bonusParam.setStartDate(DateUtils.currentDate());
bonusParam.setGrantStatus(EGrantStatus.SETTLED.getValue());
bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS));
List<CuMemberBonusExt> cuMemberBonusList = cuMemberBonusService.queryMemberBonusTotalByCondition(bonusParam);
bonusParam.setEndDate(DateUtils.currentDate());
bonusParam.setStartDate(DateUtils.beforeDate(1, ChronoUnit.DAYS, bonusParam.getEndDate()));
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusTotalByCondition(bonusParam);
MemberRealIncomeVO memberRealIncomeVO = new MemberRealIncomeVO();
if (CollectionUtil.isEmpty(cuMemberBonusList)) {
memberRealIncomeVO.setRealIncomeTotal(BigDecimal.ZERO);
} else {
memberRealIncomeVO.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonusList.get(0).getRealIncomeTotal(), cuMemberBonusList.get(0).getBackPoints()));
// memberRealIncomeVO.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonusList.get(0).getRealIncomeTotal(), cuMemberBonusList.get(0).getBackPoints()));
memberRealIncomeVO.setRealIncomeTotal(cuMemberBonusList.get(0).getRealIncomeTotal());
}
return getDataTable(Collections.singletonList(memberRealIncomeVO));
}
@ -129,7 +108,7 @@ public class ApiCuMemberBonusController extends BaseController {
@PostMapping("/query-bonus-repurchase")
public TableDataInfo listRepurchaseBonus(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = cuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
List<MemberBonusPurchaseVO> memberBonusPurchaseVoList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
MemberBonusPurchaseVO memberBonusPurchaseVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusPurchaseVO.class, "settleDate");
@ -141,7 +120,6 @@ public class ApiCuMemberBonusController extends BaseController {
memberBonusPurchaseVO.getRetailRealSubtotal());
memberBonusPurchaseVO.setBackPoints(serviceSpend);
memberBonusPurchaseVO.setRetailBenefitIncome(ComputeUtil.computeAdd(memberBonusPurchaseVO.getRetailBenefitIncome(), memberBonusPurchaseVO.getRetailBenefitAvgIncome()));
// memberBonusPurchaseVO.setServiceSpend(ComputeUtil.computeMultiplyHalf(serviceSpend));
memberBonusPurchaseVoList.add(memberBonusPurchaseVO);
});
return getDataTable(memberBonusPurchaseVoList);
@ -153,7 +131,7 @@ public class ApiCuMemberBonusController extends BaseController {
@PostMapping("/query-bonus-hi-fun")
public TableDataInfo listHiFunBonus(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = cuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
List<MemberBonusHiFunVO> bonusHiFunVoList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
MemberBonusHiFunVO memberBonusHiFunVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusHiFunVO.class, "settleDate");
@ -177,6 +155,7 @@ public class ApiCuMemberBonusController extends BaseController {
private void setBonusParam(@RequestBody BonusParam bonusParam) {
bonusParam.setPkCountry(SecurityUtils.getPkCountry());
bonusParam.setPkMember(SecurityUtils.getUserId());
Date startDate = DateUtils.beforeDate(15, ChronoUnit.DAYS, DateUtils.currentDate());
if (bonusParam.getStartDate() == null) {
bonusParam.setStartDate(startDate);
@ -197,14 +176,7 @@ public class ApiCuMemberBonusController extends BaseController {
public TableDataInfo listBonusSource(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
startPage();
// List<MemberBonusVO> memberBonusVoList = new ArrayList<>();
TableDataInfo tableDataInfo = cuMemberBonusService.queryMemberBonusDetailVoByCondition(bonusParam);
// cuMemberBonusList.forEach(cuMemberBonus -> {
// MemberBonusVO memberBonusVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusVO.class);
// memberBonusVoList.add(memberBonusVO);
// });
// TableDataInfo dataTable = getDataTable(cuMemberBonusList);
// dataTable.setRows(memberBonusVoList);
TableDataInfo tableDataInfo = iCuMemberBonusService.queryMemberBonusDetailVoByCondition(bonusParam);
return tableDataInfo;
}

View File

@ -9,12 +9,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 会员奖金-会员奖金汇总表 Mapper 接口
* </p>
*
* @author hzs
* @since 2022-11-11
*/
public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
@ -22,9 +17,6 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
* 批量获取cuMemberBonus主键
*
* @param rowNum 数量
* @return: List<Integer>
* @Author: sui q
* @Date: 2022/12/13 13:47
*/
List<Long> batchQueryCuMemberBonusSeq(Integer rowNum);
@ -32,9 +24,6 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
* 根据查询条件查询会员奖金
*
* @param bonusParam 查询条件
* @return: List<MemberBonusVO>
* @Author: sui q
* @Date: 2023/1/13 11:27
*/
List<CuMemberBonus> queryMemberBonusTotalByCondition(BonusParam bonusParam);
@ -42,9 +31,6 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
* 根据查询条件查询会员奖金
*
* @param bonusParam 查询条件
* @return: List<MemberBonusVO>
* @Author: sui q
* @Date: 2023/1/13 11:27
*/
List<CuMemberBonusExt> queryMemberBonusByCondition(BonusParam bonusParam);
@ -52,30 +38,19 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
* 根据查询条件查询会员奖金
*
* @param bonusParam 查询条件
* @return: List<MemberBonusVO>
* @Author: sui q
* @Date: 2023/1/13 11:27
*/
List<CuMemberBonusExt> queryMemberBonusByConditionForServer(@Param("bonusParam") BonusParam bonusParam);
/**
* @description: 查询奖金明细合计最后一行
* @author: zhang jing
* @date: 2024/10/12 14:06
* @param: [bonusParam]
* @return: com.hzs.common.domain.member.ext.CuMemberBonusExt
* 查询奖金明细合计最后一行
**/
CuMemberBonusExt queryMemberBonusByConditionForServerSum(@Param("bonusParam") BonusParam bonusParam);
/**
* 根据查询条件查询会员奖金
*
* @param bonusParam 查询条件
* @return: List<MemberBonusVO>
* @Author: sui q
* @Date: 2023/1/13 11:27
*/
List<CuMemberBonusExt> queryBonusTotalVoByConditionForServer(@Param("bonusParam") BonusParam bonusParam);
@ -83,9 +58,6 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
* 删除会员奖金汇总表
*
* @param period 结算期间
* @return: void
* @Author: sui q
* @Date: 2022/12/13 11:54
*/
void deleteCuMemberBonus(Integer period);
@ -93,9 +65,6 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
* 批量插入会员奖金主表
*
* @param cuMemberBonusList 会员奖金
* @return: void
* @Author: sui q
* @Date: 2022/12/13 13:56
*/
void batchInsertCuMemberBonus(@Param("cuMemberBonusList") List<?> cuMemberBonusList);
@ -103,9 +72,6 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
* 批量插入会员奖金主表
*
* @param cuMemberBonusList 会员奖金
* @return: void
* @Author: sui q
* @Date: 2022/12/13 13:56
*/
void insertOrUpdateCuMemberBonus(@Param("cuMemberBonusList") List<CuMemberBonus> cuMemberBonusList);
@ -114,27 +80,20 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
*
* @param grantStatus 发放状态
* @param oldGrantStatus 原来的发放状态
* @return: Boolean
* @Author: sui q
* @Date: 2023/3/20 17:21
*/
Integer updateCuMemberBonusStatus(@Param("pkCountry") Integer pkCountry, @Param("grantStatus") Integer grantStatus,
@Param("oldGrantStatus") Integer oldGrantStatus, @Param("startPeriod") Integer startPeriod,
@Param("endPeriod") Integer endPeriod);
/*
* @description: 回退极差奖金
* @author: sui q
* @date: 2024/12/25 17:06
* @param: null null
**/
/**
* 回退极差奖金
*/
void mergeBackRangeBonusIncome(@Param("pkOrder") Long pkOrder, @Param("bonusValue") Integer bonusValue);
/*
* @description: 查询会员一周周期的拓展累计复购拓展累计
* @author: sui q
* @date: 2023/7/15 14:26
* @param: null null
**/
/**
* 查询会员一周周期的拓展累计复购拓展累计
*/
List<CuMemberBonus> queryWeekMemberBonus(@Param("startPeriod") int startPeriod, @Param("endPeriod") int endPeriod);
void recalculateTeamNewBoxNum(@Param("pkId") Long pkId, @Param("retailsTableName") String retailsTableName);
}

View File

@ -2,17 +2,12 @@ package com.hzs.bonus.bonus.param;
import com.hzs.common.core.web.domain.BaseAuthorityEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
/**
* @Description:
* @Author: sui q
* @Time: 2023/1/13 9:44
* @Classname: BonusParam
* @PackageName: com.hzs.member.bonus.param
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class BonusParam extends BaseAuthorityEntity {

View File

@ -1,11 +1,11 @@
package com.hzs.bonus.bonus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.bonus.bonus.param.BonusParam;
import com.hzs.bonus.bonus.vo.MemberBonusVO;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.ext.CuMemberBonusExt;
import com.hzs.bonus.bonus.param.BonusParam;
import com.hzs.bonus.bonus.vo.MemberBonusVO;
import java.util.Date;
import java.util.List;
@ -165,4 +165,12 @@ public interface ICuMemberBonusService extends IService<CuMemberBonus> {
void calculateBonusTotal(CuMemberBonusExt cuMemberBonusExt, CuMemberBonusExt memberBonusExt);
CuMemberBonusExt initCuMemberBonus();
/**
* 用户激活后会抛出MQ
* 在此需要补偿该用户的当日秒结的团队新增
*
* @param pkIdList
*/
void recalculateTeamNewBoxNum(List<Long> pkIdList);
}

View File

@ -1355,8 +1355,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
continue;
}
// 平级收益商品价格 * 千分之五 -- 2位小数四舍五入
sameBonusIncome = waresPrice.multiply(RetailConstants.SAME_RATIO).setScale(2, BigDecimal.ROUND_HALF_UP);
// 平级收益商品价格 * 千分之五 -- 6位小数四舍五入
sameBonusIncome = waresPrice.multiply(RetailConstants.SAME_RATIO).setScale(6, BigDecimal.ROUND_HALF_UP);
// 平级收益累计
beforeSameBonus = beforeSameBonus.add(sameBonusIncome);
// 平级等级代数等级
@ -1601,7 +1601,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 计算业绩此处作为比例
BigDecimal calAchieve = BigDecimal.ZERO;
for (SaOrderWaresExt saOrderWaresExt : saOrder.getOrderWaresExtList()) {
benefitIncome = benefitIncome.add(saOrderWaresExt.getWaresPrice().multiply(RetailConstants.SAME_RATIO)).setScale(2, BigDecimal.ROUND_HALF_UP);
benefitIncome = benefitIncome.add(saOrderWaresExt.getWaresPrice().multiply(RetailConstants.SAME_RATIO)).setScale(6, BigDecimal.ROUND_HALF_UP);
calAchieve = calAchieve.add(saOrderWaresExt.getWaresPrice());
}
CuMemberBonusDetail cuMemberBonusDetail = packageBenefitIncome(bonusConfigDTO, period, cuMemberBonusMap, null, RetailConstants.SAME_RATIO, benefitIncome,

View File

@ -1,10 +1,12 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageInfo;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
import com.hzs.bonus.achieve.service.impl.CuMemberBonusSettle;
import com.hzs.bonus.bonus.mapper.*;
@ -14,15 +16,11 @@ import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.vo.MemberBonusDetailSerVO;
import com.hzs.bonus.bonus.vo.MemberBonusDetailVO;
import com.hzs.bonus.bonus.vo.MemberBonusVO;
import com.hzs.common.core.constant.HttpStatus;
import com.hzs.common.core.constant.MemberBonusFieldConstants;
import com.hzs.common.core.constant.MemberFieldConstants;
import com.hzs.common.core.constant.SystemFieldConstants;
import com.hzs.common.core.constant.*;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.member.bonus.CuMemberBonus;
import com.hzs.common.domain.member.ext.*;
@ -38,6 +36,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@ -56,6 +56,9 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
@DubboReference
IBonusItemsServiceApi iBonusItemsServiceApi;
@Autowired
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
private CuMemberBonusDetailMapper cuMemberBonusDetailMapper;
private CuMemberBonusPushMapper cuMemberBonusPushMapper;
@ -131,27 +134,28 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
@Override
public List<CuMemberBonusExt> queryMemberBonusVoByCondition(BonusParam bonusParam) {
String value = iSystemConfigServiceApi.getBonusSystemConfig(bonusParam.getPkCountry(), ESystemConfig.EXPAND_CAP_METHOD.getKey()).getData();
if (StringUtils.isNotEmpty(value) && Objects.equals(Integer.toString(EExpandCapMethod.WEEK_SETTLE.getValue()), value)) {
// 周结的话不能查询当前周的数据只能查询上周的数据
bonusParam.setEndDate(DateUtils.parseStringToDate(DateUtils.getRecentlyTuesday(bonusParam.getEndDate())));
}
return handleMemberBonusPurchase(getCuMemberBonusExtList(bonusParam, value), bonusParam, value);
// String value = iSystemConfigServiceApi.getBonusSystemConfig(bonusParam.getPkCountry(), ESystemConfig.EXPAND_CAP_METHOD.getKey()).getData();
// if (StringUtils.isNotEmpty(value) && Objects.equals(Integer.toString(EExpandCapMethod.WEEK_SETTLE.getValue()), value)) {
// // 周结的话不能查询当前周的数据只能查询上周的数据
// bonusParam.setEndDate(DateUtils.parseStringToDate(DateUtils.getRecentlyTuesday(bonusParam.getEndDate())));
// }
return handleMemberBonusPurchase(getCuMemberBonusExtList(bonusParam), bonusParam);
}
private List<CuMemberBonusExt> handleMemberBonusPurchase(List<CuMemberBonusExt> cuMemberBonusExtList, BonusParam bonusParam, String value) {
if (StringUtils.isNotEmpty(value) && Objects.equals(Integer.toString(EExpandCapMethod.WEEK_SETTLE.getValue()), value)) {
Collections.reverse(cuMemberBonusExtList);
return cuMemberBonusExtList;
}
private List<CuMemberBonusExt> handleMemberBonusPurchase(List<CuMemberBonusExt> cuMemberBonusExtList, BonusParam bonusParam) {
// if (StringUtils.isNotEmpty(value) && Objects.equals(Integer.toString(EExpandCapMethod.WEEK_SETTLE.getValue()), value)) {
// Collections.reverse(cuMemberBonusExtList);
// return cuMemberBonusExtList;
// }
List<CuMemberBonusExt> memberBonusExtList = new ArrayList<>();
Map<String, CuMemberBonusExt> cuMemberBonusExtMap = new HashMap<>();
cuMemberBonusExtList.forEach(cuMemberBonusExt ->
cuMemberBonusExtMap.put(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, cuMemberBonusExt.getSettleDate()), cuMemberBonusExt));
cuMemberBonusExtList.forEach(cuMemberBonusExt -> cuMemberBonusExtMap.put(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, cuMemberBonusExt.getSettleDate()), cuMemberBonusExt));
Date endDate = DateUtils.beforeDate(1, ChronoUnit.DAYS, bonusParam.getEndDate());
Date compareDate = DateUtils.parseStringToDateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.currentDate()) + " 13:00:00");
while (DateUtils.compareDateAfter(endDate, bonusParam.getStartDate()) ||
DateUtils.compareDateEqual(endDate, bonusParam.getStartDate())) {
while (DateUtils.compareDateAfter(endDate, bonusParam.getStartDate())
|| DateUtils.compareDateEqual(endDate, bonusParam.getStartDate())) {
String date = DateUtils.parseDateToFormat(DateUtils.YYYY_MM_DD, endDate);
if (cuMemberBonusExtMap.containsKey(date)) {
memberBonusExtList.add(cuMemberBonusExtMap.get(date));
@ -174,22 +178,14 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setRepurRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurExpandIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setCloudDirectIncome(BigDecimal.ZERO);
cuMemberBonusExt.setCloudPurIncome(BigDecimal.ZERO);
cuMemberBonusExt.setCloudRepurIncome(BigDecimal.ZERO);
cuMemberBonusExt.setCloudRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCoupon(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCouponShare(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCouponSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setMakerDirectIncome(BigDecimal.ZERO);
cuMemberBonusExt.setMakerShareIncome(BigDecimal.ZERO);
cuMemberBonusExt.setMakerRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setGlobalPoints(BigDecimal.ZERO);
cuMemberBonusExt.setCarAwardPoints(BigDecimal.ZERO);
cuMemberBonusExt.setHiFunIncome(BigDecimal.ZERO);
cuMemberBonusExt.setHaiFunIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRealIncomeTotal(BigDecimal.ZERO);
cuMemberBonusExt.setStoreIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailSameLevelIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailAreaIncome(BigDecimal.ZERO);
@ -207,16 +203,10 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
@Override
public List<CuMemberBonusExt> queryMemberSecondBonusVoByCondition(BonusParam bonusParam) {
String value = iSystemConfigServiceApi.getBonusSystemConfig(bonusParam.getPkCountry(), ESystemConfig.EXPAND_CAP_METHOD.getKey()).getData();
// if (StringUtils.isNotEmpty(value) && Objects.equals(Integer.toString(EExpandCapMethod.WEEK_SETTLE.getValue()), value)) {
// // 周结的话不能查询当前周的数据只能查询上周的数据
// bonusParam.setStartDate(DateUtils.parseStringToDate(DateUtils.getRecentlyTuesday(bonusParam.getStartDate())));
// bonusParam.setEndDate(DateUtils.parseStringToDate(DateUtils.getRecentlyMonday(bonusParam.getStartDate())));
// }
return getCuMemberBonusExtList(bonusParam, value);
return getCuMemberBonusExtList(bonusParam);
}
private List<CuMemberBonusExt> getCuMemberBonusExtList(BonusParam bonusParam, String value) {
private List<CuMemberBonusExt> getCuMemberBonusExtList(BonusParam bonusParam) {
if (bonusParam.getGrantStatus() == null) {
bonusParam.setGrantStatus(EGrantStatus.PUBLISHED.getValue());
}
@ -237,20 +227,11 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setRepurRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurRangeIncome(), inExchangeRate));
cuMemberBonusExt.setRepurExpandIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurExpandIncome(), inExchangeRate));
cuMemberBonusExt.setRepurRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurRealSubtotal(), inExchangeRate));
cuMemberBonusExt.setCloudDirectIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getCloudDirectIncome(), inExchangeRate));
cuMemberBonusExt.setCloudPurIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getCloudPurIncome(), inExchangeRate));
cuMemberBonusExt.setCloudRepurIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getCloudRepurIncome(), inExchangeRate));
cuMemberBonusExt.setCloudRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getCloudRealSubtotal(), inExchangeRate));
cuMemberBonusExt.setRepurCoupon(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurCoupon(), inExchangeRate));
cuMemberBonusExt.setRepurCouponShare(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurCouponShare(), inExchangeRate));
cuMemberBonusExt.setRepurCouponSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurCouponSubtotal(), inExchangeRate));
cuMemberBonusExt.setMakerDirectIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getMakerDirectIncome(), inExchangeRate));
cuMemberBonusExt.setMakerShareIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getMakerShareIncome(), inExchangeRate));
cuMemberBonusExt.setMakerRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getMakerRealSubtotal(), inExchangeRate));
cuMemberBonusExt.setGlobalPoints(ComputeUtil.computeMultiply(cuMemberBonusExt.getGlobalPoints(), inExchangeRate));
cuMemberBonusExt.setCarAwardPoints(ComputeUtil.computeMultiply(cuMemberBonusExt.getCarAwardPoints(), inExchangeRate));
cuMemberBonusExt.setHiFunIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getHiFunIncome(), inExchangeRate));
cuMemberBonusExt.setHaiFunIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getHaiFunIncome(), inExchangeRate));
cuMemberBonusExt.setRealIncomeTotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRealIncomeTotal(), inExchangeRate));
cuMemberBonusExt.setStoreIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getStoreIncome(), inExchangeRate));
cuMemberBonusExt.setRetailRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailRangeIncome(), inExchangeRate));
@ -261,31 +242,6 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusExt.setRetailBenefitIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailBenefitIncome(), inExchangeRate));
cuMemberBonusExt.setRetailRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailRealSubtotal(), inExchangeRate));
}
// if (StringUtils.isNotEmpty(value) && Objects.equals(Integer.toString(EExpandCapMethod.WEEK_SETTLE.getValue()), value)) {
// Map<String, List<CuMemberBonusExt>> weekDateMap = new TreeMap<>();
// // 计算周开始和结束
// for (CuMemberBonusExt cuMemberBonusExt : cuMemberBonusExtList) {
// String startDateStr = DateUtils.getRecentlyTuesday(cuMemberBonusExt.getSettleDate());
// if (weekDateMap.containsKey(startDateStr)) {
// weekDateMap.get(startDateStr).add(cuMemberBonusExt);
// } else {
// List<CuMemberBonusExt> cuMemberBonusExtList1 = new ArrayList<>();
// cuMemberBonusExtList1.add(cuMemberBonusExt);
// weekDateMap.put(startDateStr, cuMemberBonusExtList1);
// }
// }
// List<CuMemberBonusExt> cuMemberBonusExtList1 = new ArrayList<>();
// for (String key : weekDateMap.keySet()) {
// CuMemberBonusExt cuMemberBonusExt = initCuMemberBonus();
// cuMemberBonusExt.setSettleDate(DateUtils.parseStringToDate(key));
// cuMemberBonusExt.setEndSettleDate(DateUtils.afterDate(6, ChronoUnit.DAYS, cuMemberBonusExt.getSettleDate()));
// for (CuMemberBonusExt memberBonusExt : weekDateMap.get(key)) {
// calculateBonusTotal(cuMemberBonusExt, memberBonusExt);
// }
// cuMemberBonusExtList1.add(cuMemberBonusExt);
// }
// return cuMemberBonusExtList1;
// }
return cuMemberBonusExtList;
}
@ -323,13 +279,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
@Override
public List<CuMemberBonusExt> queryMemberBonusTotalByCondition(BonusParam bonusParam) {
String value = iSystemConfigServiceApi.getBonusSystemConfig(bonusParam.getPkCountry(), ESystemConfig.EXPAND_CAP_METHOD.getKey()).getData();
if (StringUtils.isNotEmpty(value) && Objects.equals(Integer.toString(EExpandCapMethod.WEEK_SETTLE.getValue()), value)) {
// 周结的话不能查询当前周
bonusParam.setEndDate(DateUtils.parseStringToDate(DateUtils.getRecentlyTuesday(bonusParam.getEndDate())));
bonusParam.setStartDate(DateUtils.beforeDate(7, ChronoUnit.DAYS, bonusParam.getEndDate()));
}
return getCuMemberBonusExtList(bonusParam, value);
return getCuMemberBonusExtList(bonusParam);
}
@Override
@ -693,4 +643,19 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
cuMemberBonusList.forEach(cuMemberBonus -> cuMemberBonusMap.put(cuMemberBonus.getPkMember(), cuMemberBonus));
return cuMemberBonusMap;
}
@Override
public void recalculateTeamNewBoxNum(List<Long> pkIdList) {
String retailsTableName = getDayTableName();
log.info("recalculateTeamNewBoxNum: pkIdList: {}, tableName: {}", JSONUtil.toJsonStr(pkIdList), retailsTableName);
for (Long pkId : pkIdList) {
baseMapper.recalculateTeamNewBoxNum(pkId, retailsTableName);
}
}
private String getDayTableName() {
String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_S + period;
}
}

View File

@ -1,84 +1,111 @@
package com.hzs.bonus.bonus.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.hzs.common.core.annotation.BigDecimalFormat;
import lombok.*;
import java.math.BigDecimal;
/**
* @description: 查询首购奖金
* @author: sui q
* @time: 2023/4/28 10:33
* @classname: MemberBonusDirectVO
* @package_name: com.hzs.member.bonus.vo
* version 1.0.0
* 查询首购奖金
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MemberBonusFirstPurchaseVO extends PubMemberBonusVO {
/**
* 直推收益
*/
private BigDecimal directIncome;
/**
* 拓展收益
*/
private BigDecimal expandIncome;
/**
* 辅导收益
*/
private BigDecimal coachIncome;
/**
* 分红收益
*/
private BigDecimal shareIncome;
/**
* 报单收益
*/
private BigDecimal serviceIncome;
// /**
// * 直推收益
// */
// private BigDecimal directIncome;
//
// /**
// * 拓展收益
// */
// private BigDecimal expandIncome;
//
// /**
// * 辅导收益
// */
// private BigDecimal coachIncome;
//
// /**
// * 分红收益
// */
// private BigDecimal shareIncome;
//
// /**
// * 报单收益
// */
// private BigDecimal serviceIncome;
/**
* 商城重消
*/
@BigDecimalFormat
private BigDecimal backPoints;
//
// /**
// * 首购实发小计
// */
// private BigDecimal purRealSubtotal;
//
// /**
// * 复购推荐收益
// */
// private BigDecimal repurPushIncome;
//
// /**
// * 复购拓展收益
// */
// private BigDecimal repurExpandIncome;
//
// /**
// * 复购级差收益
// */
// private BigDecimal repurRangeIncome;
//
// /**
// * 复购实发小计
// */
// private BigDecimal repurRealSubtotal;
//
// /**
// * 乐学直推收益
// */
// private BigDecimal globalPoints;
/**
* 首购实发小计
* 新零售直推收益
*/
private BigDecimal purRealSubtotal;
@BigDecimalFormat
private BigDecimal retailRangeIncome;
/**
* 复购推荐收益
* 新零售平级收益
*/
private BigDecimal repurPushIncome;
@BigDecimalFormat
private BigDecimal retailSameLevelIncome;
/**
* 复购拓展收益
* 新零售区域分红
*/
private BigDecimal repurExpandIncome;
@BigDecimalFormat
private BigDecimal retailAreaIncome;
/**
* 复购级差收益
* 新零售收益小计
*/
private BigDecimal repurRangeIncome;
@BigDecimalFormat
private BigDecimal retailRealSubtotal;
/**
* 复购实发小计
* 实发收益总
*/
private BigDecimal repurRealSubtotal;
/**
* 乐学直推收益
*/
private BigDecimal globalPoints;
@BigDecimalFormat
private BigDecimal realIncomeTotal;
}

View File

@ -1,17 +1,13 @@
package com.hzs.bonus.bonus.vo;
import com.hzs.common.core.annotation.BigDecimalFormat;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @description: 会员实发收益
* @author: sui q
* @time: 2023/7/6 14:25
* @classname: MemberRealIncomeVO
* @package_name: com.hzs.member.bonus.vo
* version 1.0.0
* 会员实发收益
*/
@Data
public class MemberRealIncomeVO implements Serializable {
@ -19,5 +15,6 @@ public class MemberRealIncomeVO implements Serializable {
/**
* 实发收益总计
*/
@BigDecimalFormat
private BigDecimal realIncomeTotal;
}

View File

@ -6,15 +6,11 @@ import java.io.Serializable;
import java.math.BigDecimal;
/**
* @description: 会员端奖金明细查询vo
* @author: sui q
* @time: 2023/7/17 14:58
* @classname: PubMemberBonusVO
* @package_name: com.hzs.member.bonus.vo
* version 1.0.0
* 会员端奖金明细查询vo
*/
@Data
public class PubMemberBonusVO implements Serializable {
/**
* 结算日期
*/
@ -24,4 +20,5 @@ public class PubMemberBonusVO implements Serializable {
* 平台服务费
*/
private BigDecimal serviceSpend;
}

View File

@ -1,46 +1,28 @@
package com.hzs.bonus.detail.controller.manage;
import cn.hutool.core.bean.BeanUtil;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.bonus.param.BonusParam;
import com.hzs.bonus.bonus.vo.BonusTotalVO;
import com.hzs.bonus.detail.service.ICuRegionAssessService;
import com.hzs.bonus.detail.vo.CuRegionAssessDetailVO;
import com.hzs.bonus.detail.vo.CuRegionAssessExcelVO;
import com.hzs.bonus.detail.vo.CuRegionAssessVO;
import com.hzs.bonus.param.CuRegionAssessParam;
import com.hzs.common.core.annotation.Log;
import com.hzs.common.core.constant.TableNameConstants;
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.StringUtils;
import com.hzs.common.core.utils.poi.ExcelUtil;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.member.detail.CuRegionAssessDetail;
import com.hzs.common.domain.member.detail.ext.CuRegionAssessExt;
import com.hzs.common.domain.member.ext.CuMemberBonusExt;
import com.hzs.common.security.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 新零售会员区域考核 前端控制器
* </p>
*
* @author hzs
* @since 2025-01-13
*/
@RestController
@RequestMapping("/manage/region")
@ -58,6 +40,7 @@ public class CuRegionAssessController extends BaseController {
/**
* 考核
* 考核默认考核当月
*
* @return AjaxResult
*/
@GetMapping("/examine")
@ -72,7 +55,7 @@ public class CuRegionAssessController extends BaseController {
* 查询会员昨天奖金的值
*/
@PostMapping("/query")
public TableDataInfo listRegionAssess(@RequestBody CuRegionAssessParam cuRegionAssessParam){
public TableDataInfo listRegionAssess(@RequestBody CuRegionAssessParam cuRegionAssessParam) {
startPage();
cuRegionAssessParam.setPkCountry(SecurityUtils.getPkCountry());
List<CuRegionAssessExt> cuRegionAssessExtList = regionAssessService.queryRegionAssessByCondition(cuRegionAssessParam);
@ -86,7 +69,7 @@ public class CuRegionAssessController extends BaseController {
* 分页查询会员某个时间段内的奖金汇总
*/
@PostMapping("/export")
public void exportRegionAssess(HttpServletResponse response, CuRegionAssessParam cuRegionAssessParam){
public void exportRegionAssess(HttpServletResponse response, CuRegionAssessParam cuRegionAssessParam) {
List<CuRegionAssessExt> cuRegionAssessExtList = regionAssessService.queryRegionAssessByCondition(cuRegionAssessParam);
List<CuRegionAssessExcelVO> cuRegionAssessVoList = new ArrayList<>();
for (CuRegionAssessExt cuRegionAssessExt : cuRegionAssessExtList) {

View File

@ -0,0 +1,46 @@
package com.hzs.bonus.listener;
import cn.hutool.json.JSONUtil;
import com.hzs.bonus.bonus.service.IBonusSettleService;
import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.service.ICuMemberRetailLogService;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.RabbitMqConstants;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 订单秒接
*/
@Slf4j
@Component
public class SaOrderSecondActivateCompensationListener {
@Autowired
private ICuMemberBonusService memberBonusService;
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange(value = RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_EXCHANGE, type = "topic"),
value = @Queue(value = RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_QUEUE, durable = "true", autoDelete = "false"),
key = RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_KEY))
@RabbitHandler
public void onMessage(Message<List<Long>> message, Channel channel) throws Exception {
List<Long> activateCompensationIdList = message.getPayload();
log.info("秒结开始消费,接收到的参数:{}", JSONUtil.toJsonStr(activateCompensationIdList));
Long deliveryTag = (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG);
channel.basicAck(deliveryTag, false);
memberBonusService.recalculateTeamNewBoxNum(activateCompensationIdList);
}
}

View File

@ -272,21 +272,40 @@
</select>
<select id="queryMemberBonusByCondition" resultMap="CuMemberBonus">
select cp.settle_date,cb.direct_income,cb.expand_income,cb.expand_no_capping,
cb.expand_capping,cb.coach_income,cb.share_income,cb.service_income,cb.back_points,cb.service_spend,
cb.pur_real_subtotal,cb.repur_push_income,cb.repur_range_income,cb.repur_expand_income,cb.repur_real_subtotal,
cb.cloud_direct_income,cb.cloud_pur_income,cb.cloud_repur_income,cb.cloud_real_subtotal,
cb.repur_coupon,cb.repur_coupon_share,cb.repur_coupon_subtotal,cb.store_income,
cb.maker_direct_income,cb.maker_share_income,cb.maker_real_subtotal,
cb.global_points,cb.car_award_points,cb.hi_fun_income,cb.hai_fun_income,
cb.retail_range_income,cb.retail_same_level_income,cb.retail_area_income,
cb.retail_benefit_range_income,cb.retail_benefit_avg_income,
cb.retail_benefit_income,cb.retail_real_subtotal,
cb.real_income_total from cu_member_bonus cb
select cp.settle_date,
cb.direct_income,
cb.expand_income,
cb.expand_no_capping,
cb.expand_capping,
cb.coach_income,
cb.share_income,
cb.service_income,
cb.back_points,
cb.service_spend,
cb.pur_real_subtotal,
cb.repur_push_income,
cb.repur_range_income,
cb.repur_expand_income,
cb.repur_real_subtotal,
cb.repur_coupon,
cb.repur_coupon_share,
cb.repur_coupon_subtotal,
cb.store_income,
cb.global_points,
cb.car_award_points,
cb.retail_range_income,
cb.retail_same_level_income,
cb.retail_area_income,
cb.retail_benefit_range_income,
cb.retail_benefit_avg_income,
cb.retail_benefit_income,
cb.retail_real_subtotal,
cb.real_income_total
from cu_member_bonus cb
inner join cu_member_settle_period cp
on cb.period = cp.pk_id
where cb.del_flag=0 and cp.del_flag=0
and cb.pk_member=#{pkMember}
where cb.del_flag = 0 and cp.del_flag = 0
and cb.pk_member = #{pkMember}
<if test="grantStatus != null">
and cb.grant_status >= #{grantStatus}
</if>
@ -574,4 +593,23 @@
group by cb.pk_member
</select>
<update id="recalculateTeamNewBoxNum">
UPDATE ${retailsTableName}
SET ENABLE_STATUS = 0, TEAM_NEW_BOX_NUM = (
SELECT SUM(boxNum)
FROM (
SELECT b.PK_ID, NVL(s.NEW_BOX_NUM, 0) AS boxNum
FROM ${retailsTableName} s
RIGHT JOIN (
SELECT cm.PK_ID
FROM cu_member cm
WHERE cm.PK_ID != #{pkId}
START WITH cm.PK_ID = #{pkId}
CONNECT BY PRIOR cm.pk_id = cm.pk_parent
ORDER BY LEVEL
) b ON s.PK_MEMBER = b.PK_ID
) c
)
WHERE PK_MEMBER = #{pkId}
</update>
</mapper>

View File

@ -53,6 +53,7 @@ import com.hzs.system.config.IAwardsServiceApi;
import com.hzs.system.config.dto.AreaCurrencyDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -85,6 +86,8 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
private ICuMemberAchieveService cuMemberAchieveService;
@Autowired
private RedisService redisService;
@Autowired
private RabbitTemplate rabbitTemplate;
private ICuMemberService cuMemberService;
@ -1516,6 +1519,9 @@ public class CuMemberBusinessServiceImpl implements ICuMemberBusinessService {
}
this.handleRetailMemberAccount(saOrder, cuMemberAccountExt);
// 推送会员激活处理
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_EXCHANGE, RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_KEY, Collections.singletonList(cuMember.getPkId()));
}
@Transactional(rollbackFor = Exception.class)

View File

@ -134,8 +134,8 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
save = true;
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
log.error("saveMember error: {}", e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
return save;
}

View File

@ -116,12 +116,10 @@ public class MemberEmptyServiceImpl implements IMemberEmptyService {
public void importTemplate(List<MemberEmptyDetailDTO> resultList) {
// 会员编号列表导入会员编号去重
List<String> checkMemberList = new ArrayList<>();
// 会员联系方式列表需要查库校验
List<String> checkPhoneList = new ArrayList<>();
// 遍历导入数据提取各种校验所需要的数据
for (MemberEmptyDetailDTO detail : resultList) {
this.checkBase(detail, checkMemberList, checkPhoneList);
this.checkBase(detail, checkMemberList);
}
}
@ -255,7 +253,7 @@ public class MemberEmptyServiceImpl implements IMemberEmptyService {
// 遍历导入数据提取各种校验所需要的数据
for (MemberEmptyDetailDTO detail : resultList) {
if (this.checkBase(detail, checkMemberList, checkPhoneList)) {
if (this.checkBase(detail, checkMemberList)) {
// 已经存在异常直接返回
return false;
}
@ -270,8 +268,8 @@ public class MemberEmptyServiceImpl implements IMemberEmptyService {
// 查询会员编号是否存在
Map<String, Integer> checkCodeMap = iCuMemberService.checkMemberCodeExist(checkMemberList, true, pkMemberEmpty);
// 查询联系方式是否存在
Map<String, Integer> checkPhoneMap = iCuMemberService.checkMemberPhoneExist(checkPhoneList, true, pkMemberEmpty, systemType);
// // 查询联系方式是否存在
// Map<String, Integer> checkPhoneMap = iCuMemberService.checkMemberPhoneExist(checkPhoneList, true, pkMemberEmpty, systemType);
// 查询推荐编号是否存在在本次推荐数据中的直接排除掉
final Map<String, Integer> checkParentCodeMap = new HashMap<>();
@ -290,15 +288,6 @@ public class MemberEmptyServiceImpl implements IMemberEmptyService {
bool[0] = false;
}
}
if (checkPhoneMap.size() > 0) {
if (null != checkPhoneMap.get(detail.getPhone()) && checkPhoneMap.get(detail.getPhone()) >= 1) {
// 导入的会员联系方式已经存在数据库中异常状态
detail.setPointStatus(EPointStatus.ABNORMAL.getValue());
// 会员联系方式存在重复
detail.setContentAbstract(detail.getContentAbstract().replace(TransactionUtils.getContent(MemberMsgConstants.EMPTY_PHONE_NOT), "") + TransactionUtils.getContent(MemberMsgConstants.EMPTY_PHONE_NOT) + ";");
bool[0] = false;
}
}
// 处理校验推荐编号是否存在
if (!checkMemberList.contains(detail.getParentCode()) && checkParentCodeMap.get(detail.getParentCode()) == null) {
// 推荐编号不在本次导入的会员中也不在数据库中异常状态
@ -568,9 +557,8 @@ public class MemberEmptyServiceImpl implements IMemberEmptyService {
*
* @param detail 校验数据
* @param checkMemberList 会员编号列表
* @param checkPhoneList 会员联系方式列表
*/
private boolean checkBase(MemberEmptyDetailDTO detail, List<String> checkMemberList, List<String> checkPhoneList) {
private boolean checkBase(MemberEmptyDetailDTO detail, List<String> checkMemberList) {
// 校验之前先为空
detail.setPointStatus(EPointStatus.NORMAL.getValue());
detail.setContentAbstract("");
@ -601,16 +589,7 @@ public class MemberEmptyServiceImpl implements IMemberEmptyService {
// 导入数据中不重复的会员编号需要查库校验是否重复
checkMemberList.add(detail.getMemberCode());
}
if (checkPhoneList.contains(detail.getPhone())) {
// 导入的数据存在重复联系方式异常状态
detail.setPointStatus(EPointStatus.ABNORMAL.getValue());
// 联系方式存在重复
detail.setContentAbstract(detail.getContentAbstract() + TransactionUtils.getContent(MemberMsgConstants.EMPTY_PHONE_NOT) + ";");
hasError = true;
} else {
// 导入数据中不重复的联系方式需要查库校验是否重复
checkPhoneList.add(detail.getPhone());
}
return hasError;
}

View File

@ -62,9 +62,6 @@ import java.util.stream.Collectors;
/**
* 业务办理表 前端控制器
*
* @author zhangjing
* @since 2023-01-11
*/
@RestController
@RequestMapping("/manage/handle-business")
@ -102,11 +99,7 @@ public class CuHandleBusinessController extends BaseController {
/**
* @description: 查询办理业务列表
* @author: zhang jing
* @date: 2023/1/12 14:58
* @param: [handleBusinessVO]
* @return: com.hzs.common.core.web.page.TableDataInfo
* 查询办理业务列表
**/
@AccessPermissions("BasicBusiness")
@Log(module = EOperationModule.HANDLE_BUSINESS, business = EOperationBusiness.BASE_BUSINESS, method = EOperationMethod.SELECT)
@ -154,11 +147,7 @@ public class CuHandleBusinessController extends BaseController {
}
/**
* @description: 校验同姓名同手机号是否满足规则
* @author: zhang jing
* @date: 2024/12/19 14:27
* @param: [handleBusinessList]
* @return: java.lang.String
* 校验同姓名同手机号是否满足规则
**/
public List<BusinessErrorVO> checkNamePhone(List<BusinessMemberVO> businessMemberList) {
//如果只有修改姓名业务或者修改手机业务
@ -238,27 +227,8 @@ public class CuHandleBusinessController extends BaseController {
return errorList;
}
/**
* @param CuHandleBusinessVO
* @return
*/
@Log(module = EOperationModule.HANDLE_BUSINESS, method = EOperationMethod.SELECT)
@PostMapping("/confirm")
public AjaxResult confirmHandleBusiness(@RequestBody HandleBusinessVO CuHandleBusinessVO) {
Integer pkCountry = SecurityUtils.getPkCountry();
return null;
}
/**
* @description: 业务办理导入数据
* @author: zhang jing
* @date: 2023/1/21 9:26
* @param: [file, updateSupport]
* @return: com.hzs.common.core.web.domain.AjaxResult
* 业务办理导入数据
**/
@PostMapping("/importData")
@Log(module = EOperationModule.HANDLE_BUSINESS, business = EOperationBusiness.BASE_BUSINESS, method = EOperationMethod.IMPORT)
@ -303,11 +273,7 @@ public class CuHandleBusinessController extends BaseController {
}
/**
* @description: 办理业务-基础业务校验
* @author: zhang jing
* @date: 2023/1/21 10:31
* @param: [businessSingleVO]
* @return: com.hzs.common.core.web.domain.AjaxResult
* 办理业务-基础业务校验
**/
@Log(module = EOperationModule.HANDLE_BUSINESS, business = EOperationBusiness.BASE_BUSINESS, method = EOperationMethod.SELECT)
@PostMapping("/businessCheck")
@ -432,7 +398,7 @@ public class CuHandleBusinessController extends BaseController {
nuc.setMemberCode(cov.getMemberCode());
nuc.setMemberName(cov.getMemberName());
nuc.setPhone(cov.getPhone());
if(StringUtils.isNotNull(uc.getEndValidityDate())){
if (StringUtils.isNotNull(uc.getEndValidityDate())) {
LocalDateTime localDateTime = uc.getEndValidityDate().toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
@ -938,11 +904,7 @@ public class CuHandleBusinessController extends BaseController {
/**
* @description: 校验用户余额是否充足
* @author: zhang jing
* @date: 2023/6/7 11:33
* @param: [businessSingleVO]
* @return: com.hzs.common.core.web.domain.AjaxResult
* 校验用户余额是否充足
**/
@Log(module = EOperationModule.HANDLE_BUSINESS, business = EOperationBusiness.BASE_BUSINESS, method = EOperationMethod.SELECT)
@PostMapping("/balanceCheck")
@ -974,11 +936,7 @@ public class CuHandleBusinessController extends BaseController {
}
/**
* @description: 更新新值
* @author: zhang jing
* @date: 2023/3/20 12:11
* @param: []
* @return: java.lang.String
* 更新新值
**/
private String newValue(List<Integer> businessValueList) {
//更新会员新值
@ -999,11 +957,7 @@ public class CuHandleBusinessController extends BaseController {
/**
* @description: 重新申请办理业务
* @author: zhang jing
* @date: 2023/2/1 21:47
* @param: [businessMemberVO]
* @return: com.hzs.common.core.web.domain.AjaxResult
* 重新申请办理业务
**/
@Log(module = EOperationModule.HANDLE_BUSINESS, business = EOperationBusiness.BASE_BUSINESS, method = EOperationMethod.SUBMIT)
@PostMapping("/againBusiness")
@ -1025,13 +979,12 @@ public class CuHandleBusinessController extends BaseController {
}
/**
* yh
* 在线签呈(发起人)
*
* @return
*/
@Log(module = EOperationModule.HANDLE_BUSINESS, business = EOperationBusiness.BASE_BUSINESS, method = EOperationMethod.SUBMIT)
@PostMapping("online-petition")
@PostMapping("/online-petition")
public AjaxResult signOnline(@RequestBody OnlinePetitionVo linePetitionVo) {
SysUser loginUser = userTokenService.getLoginUser().getLoginSysUser();

View File

@ -20,7 +20,6 @@ public interface ICuHandleBusinessService extends IService<CuHandleBusiness> {
**/
List<HandleBusinessShowVO> queryHandleBusinessList(HandleBusinessShowVO handleBusinessVO);
/**
* 保存业务办理信息
*

View File

@ -127,6 +127,7 @@ public class CuHandleBusinessServiceImpl extends ServiceImpl<CuHandleBusinessMap
//流程类型1 免签呈 2免付费 3免签呈+免付费 4 需要签呈需要付费
//更新业务办理
if (processType.equals(EProcessType.AVOIDSIGNING.getValue()) || processType.equals(EProcessType.DOUBLEAVOID.getValue())) {
// 免签或全免
result = updateBusinessMember(handleBusinessVO, loginUser);
}
//扣手续费
@ -522,11 +523,7 @@ public class CuHandleBusinessServiceImpl extends ServiceImpl<CuHandleBusinessMap
}
/**
* @description: 校验 handleBusinessesList的getBusinessNo是否存在重复
* @author: zhang jing
* @date: 2024/7/10 14:37
* @param: [list]
* @return: boolean
* 校验 handleBusinessesList的getBusinessNo是否存在重复
**/
public static boolean checkRepeat(List<CuHandleBusiness> list) {
Map<String, Long> counts = list.stream()
@ -688,6 +685,23 @@ public class CuHandleBusinessServiceImpl extends ServiceImpl<CuHandleBusinessMap
saveMemberAwards(handleBusinessVO, loginUser);
result = row > 0;
}
if (result) {
// 修改是否激活旧值为未激活新值为激活的会员需要推MQ处理秒结状态
List<Long> pkMemberList = handleBusinessVO.getBusinessMemberList().stream()
.filter(
tmpData -> EApprovalBusiness.IS_ACTIVATE.getValue() == tmpData.getBusinessType()
&& tmpData.getOldValue().equals(EYesNo.NO.getIntValue() + "")
&& tmpData.getNewValue().equals(EYesNo.YES.getIntValue() + "")
)
.map(BusinessMemberVO::getPkMember)
.collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(pkMemberList)) {
// 推送会员激活处理
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_EXCHANGE, RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_KEY, pkMemberList);
}
}
return result;
}

View File

@ -6,24 +6,18 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
* 业务办理表Vo办理基础业务实体VO
* </p>
*
* @author zhangjing
* @since 2023-01-11
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class HandleBusinessVO implements Serializable{
public class HandleBusinessVO implements Serializable {
private long serialVersionUID = -7461122780634685808L;
private long serialVersionUID = -7461122780634685808L;
/**
* 会员信息集合
@ -101,6 +95,4 @@ public class HandleBusinessVO implements Serializable{
private BusinessTableVO btvo;
}

View File

@ -5,13 +5,15 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hzs.bonus.settle.IMemberSettleBonusApi;
import com.hzs.common.core.annotation.RepeatSubmitSimple;
import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.constant.SysConstants;
import com.hzs.common.core.constant.msg.AreaConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.enums.EGrade;
import com.hzs.common.core.enums.ENoticeWebsiteType;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.core.utils.PageUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
@ -37,7 +39,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@ -60,11 +61,6 @@ public class RetailMemberController extends BaseController {
@DubboReference
IAreaServiceApi iAreaServiceApi;
@DubboReference
IMemberSettleBonusApi iMemberSettleBonusApi;
// 2025年6月11日 判断可选择收益区域的伞下+自身业绩阈值 (30万)
private static final BigDecimal REGIONAL_PERFORMANCE_THRESHOLD = new BigDecimal("300000");
/**
* 获取登录会员信息
*
@ -117,7 +113,8 @@ public class RetailMemberController extends BaseController {
if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
log.info("retailAchieve : {}", JSONUtil.toJsonStr(retailAchieve));
if(retailAchieve.getArealPv().compareTo(REGIONAL_PERFORMANCE_THRESHOLD) >= 0){
if(ObjectUtil.isNotEmpty(retailAchieve.getArealPv())
&& retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
return AjaxResult.success(RetailMemberRegionVO.builder()
.regionStatus(EYesNo.YES.getIntValue())
.build());
@ -175,7 +172,7 @@ public class RetailMemberController extends BaseController {
}
if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
if(retailAchieve.getArealPv().compareTo(REGIONAL_PERFORMANCE_THRESHOLD) >= 0){
if(retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
canSet = true;
}
}

View File

@ -570,7 +570,8 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
.memberRetailSTable(memberSecondTable)
.pkMemberList(pkMemberList).systemType(systemType).build();
List<CuMemberRetailDataStatisticsDetailVO> statisticsDetailVOList = baseMapper.getRetailDataStatisticsDetail(memberAchieveVO);
CuMemberRetailDataStatisticsResultVO result = DataStatisticsUtil.getCalcMap(statisticsDetailVOList, userId);
CuMember cuMember = iCuMemberService.queryMember(userId);
CuMemberRetailDataStatisticsResultVO result = DataStatisticsUtil.getCalcMap(statisticsDetailVOList, cuMember);
log.info("statisticsDetailVOList: {}", JSONUtil.toJsonStr(statisticsDetailVOList));
log.info("calcMap -> {}", JSONUtil.toJsonStr(result));
return result;

View File

@ -87,6 +87,7 @@ public class MemberRetailServiceImpl implements IMemberRetailService {
.systemType(cuMember.getSystemType())
.pkCountry(cuMember.getPkCountry())
.pkSettleCountry(cuMember.getPkSettleCountry())
.isActivate(cuMember.getIsActivate())
.build();
}
return null;

View File

@ -1,11 +1,17 @@
package com.hzs.retail.member.utils;
import cn.hutool.core.util.ObjectUtil;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
import java.math.BigDecimal;
import java.util.*;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
/**
* 用户统计数据工具
@ -21,46 +27,104 @@ public class DataStatisticsUtil {
private static final String BIG_RANGE_VIRTUAL_NAME = "注水大区虚拟分支";
private static final String SMALL_RANGE_VIRTUAL_NAME = "注水小区虚拟分支";
public static CuMemberRetailDataStatisticsResultVO getCalcMap(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
calcDetailVOTotalField(detailVOList);
public static CuMemberRetailDataStatisticsResultVO getCalcMap(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, CuMember cuMember){
Long pkId = cuMember.getPkId();
// 非激活直接返0
// 激活判断上一天的ENABLE_STATUS 0为正常 1为当天激活 不计算日结数据
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
return CuMemberRetailDataStatisticsResultVO.builder()
.totalBoxNum(0)
.totalPv(BigDecimal.ZERO)
.bigRangeTotalBoxNum(0)
.bigRangeTotalPv(BigDecimal.ZERO)
.smallRangeTotalBoxNum(0)
.smallRangeTotalPv(BigDecimal.ZERO)
.build();
}
calcDetailVOTotalField(detailVOList, pkId);
addVirtualBranch(detailVOList, pkId);
CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(detailVOList, pkId);
CuMemberRetailDataStatisticsDetailVO bigRange = getBigRangeDetailVO(detailVOList, pkId);
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
// 昨日非激活 排除昨日日结表数据
excludeDailySettlementData(detailVOList);
}else{
// 排除注水数据
excludeWaterInjectionData(detailVOList);
}
Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRange.getTotalBoxNum();
if(smallRangeTotalBoxNum < 0){
smallRangeTotalBoxNum = 0;
}
BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRange.getTotalPv());
if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){
smallRangeTotalPv = BigDecimal.ZERO;
}
return CuMemberRetailDataStatisticsResultVO.builder()
.totalBoxNum(total.getTotalBoxNum())
.totalPv(total.getTotalPv())
.totalPv(formatPV(total.getTotalPv()))
.bigRangeTotalBoxNum(bigRange.getTotalBoxNum())
.bigRangeTotalPv(bigRange.getTotalPv())
.smallRangeTotalBoxNum(total.getTotalBoxNum() - bigRange.getTotalBoxNum())
.smallRangeTotalPv(total.getTotalPv().subtract(bigRange.getTotalPv()))
.bigRangeTotalPv(formatPV(bigRange.getTotalPv()))
.smallRangeTotalBoxNum(smallRangeTotalBoxNum)
.smallRangeTotalPv(formatPV(smallRangeTotalPv))
.build();
}
/**
* 计算集合内数据总数
* @param detailVOList
*/
public static void calcDetailVOTotalField(List<CuMemberRetailDataStatisticsDetailVO> detailVOList){
public static void calcDetailVOTotalField(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
detailVOList.parallelStream().forEach(detailVO -> {
detailVO.setTotalBoxNum(
detailVO.getConsumeBoxNum() // 个人累计消费盒数(日结)
+ detailVO.getNewBoxNum() // 个人新增盒数(日结)
// + detailVO.getNewBoxNum() // 个人新增盒数(日结)
+ detailVO.getTeamBoxNum() // 团队累计消费盒数(日结)
+ detailVO.getTeamNewBoxNum() // 团队新增盒数(日结)
// + detailVO.getTeamNewBoxNum() // 团队新增盒数(日结)
+ detailVO.getSNewBoxNum() // 个人新增消费盒数(秒结)
+ detailVO.getSTeamNewBoxNum() // 团队新增盒数(秒结)
// - detailVO.getBigBoxNum() // 个人注水大区盒数(日结)
// - detailVO.getSmallBoxNum() // 个人注水小区盒数(日结)
);
detailVO.setTotalPv(detailVO.getConsumePv()
.add(detailVO.getNewConsumePv())
detailVO.setTotalPv(
detailVO.getConsumePv()
// .add(detailVO.getNewConsumePv())
.add(detailVO.getTeamConsumePv())
.add(detailVO.getTeamNewPv())
// .add(detailVO.getTeamNewPv())
.add(detailVO.getSNewConsumePv())
.add(detailVO.getSTeamNewPv())
);
});
}
/**
* 排除昨日日结数据
* @param detailVOList
*/
public static void excludeDailySettlementData(List<CuMemberRetailDataStatisticsDetailVO> detailVOList){
detailVOList.parallelStream().forEach(detailVO -> {
detailVO.setTotalBoxNum(
detailVO.getTotalBoxNum()
- detailVO.getTeamBoxNum() // 团队累计消费盒数(日结)
);
detailVO.setTotalPv(
detailVO.getTotalPv().subtract(detailVO.getTeamConsumePv())
);
});
}
/**
* 排除昨日日结注水数据
* @param detailVOList
*/
public static void excludeWaterInjectionData(List<CuMemberRetailDataStatisticsDetailVO> detailVOList){
detailVOList.parallelStream().forEach(detailVO -> {
detailVO.setTotalBoxNum(
detailVO.getTotalBoxNum()
- detailVO.getBigBoxNum() // 注水大区
- detailVO.getSmallBoxNum() // 注水小区
);
});
}
/**
* 增加虚拟分支 主要为
* 1.自己的消费总数
@ -79,12 +143,16 @@ public class DataStatisticsUtil {
.memberCode(BIG_RANGE_VIRTUAL_NAME)
.totalBoxNum(detailVO.getBigBoxNum())
.totalPv(BigDecimal.ZERO)
.bigBoxNum(0)
.smallBoxNum(0)
.build();
CuMemberRetailDataStatisticsDetailVO smallRangeVirtualDetailVO = CuMemberRetailDataStatisticsDetailVO.builder()
.pkId(SMALL_RANGE_VIRTUAL_ID)
.memberCode(SMALL_RANGE_VIRTUAL_NAME)
.totalBoxNum(detailVO.getBigBoxNum())
.totalPv(BigDecimal.ZERO)
.bigBoxNum(0)
.smallBoxNum(0)
.build();
detailVOList.add(bigRangeVirtualDetailVO);
detailVOList.add(smallRangeVirtualDetailVO);
@ -107,6 +175,8 @@ public class DataStatisticsUtil {
.add(detailVO.getNewConsumePv())
.add(detailVO.getSNewConsumePv())
)
.bigBoxNum(0)
.smallBoxNum(0)
.build();
}
@ -137,20 +207,27 @@ public class DataStatisticsUtil {
* @return
*/
public static CuMemberRetailDataStatisticsDetailVO getDetailVOByPKID(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
return detailVOList.stream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null);
return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null);
}
private static Integer getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
return detailVOList.stream()
return detailVOList.parallelStream()
.map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)
.filter(Objects::nonNull)
.max(Integer::compare)
.orElse(null);
}
private static CuMemberRetailDataStatisticsDetailVO getBigRangeDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
return detailVOList.stream()
return detailVOList.parallelStream()
.filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
.max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
.orElse(null);
}
public static BigDecimal formatPV(BigDecimal pv){
return pv.divide(
new BigDecimal("10000"),
4,
RoundingMode.FLOOR
);
}
}

View File

@ -1,7 +1,6 @@
package com.hzs.retail.member.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hzs.common.core.annotation.BigDecimalFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -17,12 +16,6 @@ import java.util.List;
/**
* 会员业绩
*
* @Description:
* @Author: ljc
* @Time: 2023/5/5 20:08
* @Classname: CuMemberAwardsUnderVO
* @Package_name: com.hzs.member.achieve.vo
*/
@Data
@Builder

View File

@ -29,6 +29,11 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable {
*/
private String memberCode;
/**
* 激活状态
*/
private Integer enableStatus;
/**
* 日结表-个人累计消费pv
*/

View File

@ -1,5 +1,6 @@
package com.hzs.retail.member.vo;
import com.hzs.common.core.annotation.BigDecimalFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -45,14 +46,17 @@ public class CuMemberRetailDataStatisticsResultVO implements Serializable {
/**
* 总业绩
*/
@BigDecimalFormat
private BigDecimal totalPv;
/**
* 大区业绩
*/
@BigDecimalFormat
private BigDecimal bigRangeTotalPv;
/**
* 小区业绩
*/
@BigDecimalFormat
private BigDecimal smallRangeTotalPv;
}

View File

@ -127,4 +127,9 @@ public class RetailMemberInfoVO implements Serializable {
*/
private Integer systemType;
/**
* 是否激活0=1=
*/
private Integer isActivate;
}

View File

@ -841,6 +841,7 @@
SELECT
cu.pk_id,
cu.MEMBER_CODE,
mr.ENABLE_STATUS,
NVL( mr.CONSUME_PV, 0 ) consumePv,
NVL( mr.NEW_CONSUME_PV, 0 ) newConsumePv,
NVL( mr.TEAM_CONSUME_PV, 0 ) teamConsumePv,

View File

@ -1,6 +1,5 @@
package com.hzs.common.core.config;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
@ -8,14 +7,11 @@ import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.hzs.common.core.annotation.BigDecimalFormat;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.context.SecurityContextHolder;
import com.hzs.common.core.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.jackson.JsonComponent;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.Objects;
@ -28,15 +24,6 @@ public class BigDecimalSerializer extends JsonSerializer<BigDecimal> implements
// 默认保留2位小数
private String format = "#0.00";
private String zeroFormat = "#0";
private RedisService redisService;
@Autowired
public void setRedisService(RedisService redisService) {
this.redisService = redisService;
}
/**
* 序列化处理方式
*
@ -47,12 +34,10 @@ public class BigDecimalSerializer extends JsonSerializer<BigDecimal> implements
*/
@Override
public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
// if(ComputeUtil.compareEqual(ComputeUtil.computeSubtract(bigDecimal, bigDecimal.setScale(0, RoundingMode.DOWN)), BigDecimal.ZERO)){
// jsonGenerator.writeString(new DecimalFormat(zeroFormat).format(bigDecimal));
// }else{
// jsonGenerator.writeString(bigDecimal.setScale(6, RoundingMode.HALF_UP).stripTrailingZeros().toString());
jsonGenerator.writeString(new DecimalFormat(format).format(bigDecimal));
// }
DecimalFormat decimalFormat = new DecimalFormat(format);
// 改为使用去尾方式显示
decimalFormat.setRoundingMode(RoundingMode.DOWN);
jsonGenerator.writeString(decimalFormat.format(bigDecimal));
}
/**
@ -66,15 +51,13 @@ public class BigDecimalSerializer extends JsonSerializer<BigDecimal> implements
@Override
public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException {
if (beanProperty != null) {
Object bdCountry = redisService.getCacheObject(CacheConstants.BD_COUNTRY + SecurityContextHolder.getUserCountry());
if (Objects.equals(beanProperty.getType().getRawClass(), BigDecimal.class)) {
BigDecimalFormat bigDecimalFormat = beanProperty.getAnnotation((BigDecimalFormat.class));
if (bigDecimalFormat == null) {
bigDecimalFormat = beanProperty.getContextAnnotation(BigDecimalFormat.class);
}
BigDecimalSerializer bigDecimalSerializer = new BigDecimalSerializer();
int numberPlaces = Integer.parseInt(JSONUtil.parseObj(bdCountry).get("numberPlaces").toString());
bigDecimalSerializer.format = replaceNumber(numberPlaces);
bigDecimalSerializer.format = replaceNumber();
if (bigDecimalFormat != null) {
bigDecimalSerializer.format = bigDecimalFormat.value();
}
@ -85,11 +68,12 @@ public class BigDecimalSerializer extends JsonSerializer<BigDecimal> implements
return new BigDecimalSerializer();
}
private String replaceNumber(int numberPlaces) {
private String replaceNumber() {
StringBuilder number = new StringBuilder("#0.");
for (int i = 0; i < numberPlaces; i++) {
for (int i = 0; i < 6; i++) {
number.append("0");
}
return number.toString();
}
}

View File

@ -37,6 +37,21 @@ public class RabbitMqConstants {
*/
public static final String ORDER_SECOND_KEY = PREFIX + "order.second.key";
/**
* 奖金秒接-激活补偿 exchange
*/
public static final String ORDER_SECOND_ACTIVATE_COMPENSATION_EXCHANGE = PREFIX + "order.second_activate_compensation.exchange";
/**
* 奖金秒接-激活补偿 queue
*/
public static final String ORDER_SECOND_ACTIVATE_COMPENSATION_QUEUE = PREFIX + "order.second_activate_compensation.queue";
/**
* 奖金秒接-激活补偿 key
*/
public static final String ORDER_SECOND_ACTIVATE_COMPENSATION_KEY = PREFIX + "order.second_activate_compensation.key";
/**
* 活动 exchange
*/

View File

@ -4,12 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description: 封顶方式
* @author: sui q
* @time: 2023/7/15 15:08
* @classname: ExpandCapMethod
* @package_name: com.hzs.common.core.enums
* version 1.0.0
* 封顶方式
*/
@AllArgsConstructor
@Getter

View File

@ -5,11 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @Description: 签呈流程类型
* @Author: jiang chao
* @Time: 2022/11/10 17:35
* @Classname: ESignType
* @PackageName: com.hzs.common.core.enums
* 签呈流程类型
*/
@AllArgsConstructor
@Getter

View File

@ -5,11 +5,7 @@ import lombok.Data;
import java.util.List;
/**
* @Description: 基础权限基数
* @Author: jiang chao
* @Time: 2023/5/22 15:48
* @Classname: BaseAuthorityEntity
* @PackageName: com.hzs.common.core.web.domain
* 基础权限基数
*/
@Data
public class BaseAuthorityEntity {