## 结算失败补偿处理日结明细;

This commit is contained in:
cabbage 2025-10-24 10:55:36 +08:00
parent 6bf2125a18
commit c68c8de0f5
4 changed files with 38 additions and 11 deletions

View File

@ -25,7 +25,7 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
/**
* 将昨天的结算明细迁移到今天
*/
void mergeMemberRetailRangeDetailByYesterday(String detailTableName, String yesterdayDetailTableName);
void mergeMemberRetailRangeDetailByYesterday(String detailTableName, String yesterdayDetailTableName, Boolean isClear);
/**
* 根据会员查询会员上的所有网体, 按照pkParent作为key

View File

@ -44,9 +44,11 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
}
@Override
public void mergeMemberRetailRangeDetailByYesterday(String detailTableName, String yesterdayDetailTableName) {
public void mergeMemberRetailRangeDetailByYesterday(String detailTableName, String yesterdayDetailTableName, Boolean isClear) {
if (isClear) {
// 清空当前明细表
iCuMemberTreeService.truncateCuMemberTreeTable(detailTableName);
}
// 用昨天的数据初始化当前明细表
baseMapper.mergeMemberRetailRangeDetailByYesterday(detailTableName, yesterdayDetailTableName);
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.achieve.param.MemberAchieveParam;
import com.hzs.bonus.achieve.service.ICuMemberRetailDetailService;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.dto.BonusStageData;
import com.hzs.bonus.bonus.service.ICuMemberBonusStageService;
@ -55,6 +56,8 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
private ICuMemberService iCuMemberService;
@Autowired
private IBonusOrderService iBonusOrderService;
@Autowired
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
/**
* 秒结
@ -251,6 +254,26 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
/**
* 补偿日结明细
*/
void compensationRetailDetail(Integer period, Integer yesterdayPeriod, String settleDate) {
if (period == null || yesterdayPeriod == null) {
// 结算期间
period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
String yesterday = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, settleDate);
// 结算期间前一天期间
yesterdayPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(yesterday).getPkId();
}
// 结算明细表
String rangeDetailTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE_DETAIL + period;
// 结算明细前一天表
String yesterdayRangeDetailTableName = TableNameConstants.CU_MEMBER_RETAIL_RANGE_DETAIL + yesterdayPeriod;
// 初始化结算明细数据昨天数据更新到今天数据
iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName, false);
}
/**
* 日结
* 计算奖金直推阶段级差平级收益
@ -279,7 +302,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 初始化结算网体数据昨天数据更新到今天数据
iCuMemberRetailRangeService.mergeMemberRetailRangeByYesterday(rangeTableName, yesterdayRangeTableName, isSameMonth);
// 初始化结算明细数据昨天数据更新到今天数据
iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName);
iCuMemberRetailRangeService.mergeMemberRetailRangeDetailByYesterday(rangeDetailTableName, yesterdayRangeDetailTableName, true);
// 升阶段点位列表
List<CuMemberRetailDetail> stageList = new ArrayList<>();

View File

@ -3,7 +3,6 @@ package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.base.service.ICuMemberService;
@ -29,7 +28,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
* 奖金结算服务类
@ -64,7 +62,6 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
@Autowired
private ICuMemberService iCuMemberService;
/**
* 保存会员奖金
*
@ -84,12 +81,14 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
@Override
@Transactional(rollbackFor = Exception.class)
public void calculateCuMemberBonus(String settleDate) {
Integer period = null;
Integer yesterdayPeriod = null;
try {
// 结算期间
Integer period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
String yesterday = DateUtils.beforeDateStr(1, ChronoUnit.DAYS, DateUtils.YYYY_MM_DD, settleDate);
// 结算期间前一天期间
Integer yesterdayPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(yesterday).getPkId();
yesterdayPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(yesterday).getPkId();
// 获取所有国家的奖金项 key = 国家 + 奖金项的值
BonusConfigDTO bonusConfigDTO = iBonusItemsServiceApi.queryBonusConfigDTO().getData();
@ -107,6 +106,9 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
// 保存当日计算的奖金
insertCuMemberBonus(settleDate, period, cuMemberBonusMap, recordDetailVO);
} catch (Exception e) {
// 因为日结明细用的是直接清表所以如果执行失败先拿昨天的去填充防止前台没数据
bonusSettleRangeHandle.compensationRetailDetail(period, yesterdayPeriod, settleDate);
log.error("奖金结算异常", e);
throw new RuntimeException(e);
}