3
0
Fork 0

## 奖金公布、发放改回日处理;

This commit is contained in:
cabbage 2025-09-01 11:28:00 +08:00
parent c515f7e476
commit 7eab829106
8 changed files with 105 additions and 196 deletions

View File

@ -140,7 +140,7 @@ public class CuMemberSettleController extends BaseController {
return AjaxResult.error("每月15号和每月最后一天才能发放");
}
iBonusGrantService.grantBonusByPeriod(SecurityUtils.getPkCountry(), startSettleDate, endSettleDate);
iBonusGrantService.grantBonusByPeriod(SecurityUtils.getPkCountry(), startSettleDate);
return AjaxResult.success();
}
@ -170,32 +170,9 @@ public class CuMemberSettleController extends BaseController {
public AjaxResult withdrawalBonus(String settleDate) {
Date startDate = DateUtils.parseStringToDate(settleDate);
if (DateUtils.compareDateBefore(DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) {
// 只能提现7天以外的奖金
return AjaxResult.error(TransactionUtils.getContent(BonusMsgConstants.WITHDRAW_VALIDATE_DATE));
}
// 发放开始时间
String startSettleDate = null;
// 发放结束时间
String endSettleDate = null;
// 发放日期的天
int dateDD = Integer.parseInt(DateUtils.parseDateTimeToStr(DateUtils.DD, startDate));
// 发放最后一天
int monthLast = Integer.parseInt(DateUtils.parseDateTimeToStr(DateUtils.DD, DateUtils.currentMonthLastDate(startDate)));
if (dateDD == 15) {
// 15号 上月24号 本月7号
startSettleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(DateUtils.addMonths(startDate, -1), 24));
endSettleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(startDate, 24));
} else if (dateDD == monthLast) {
// 最后一天 8号 23号
startSettleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(startDate, 8));
endSettleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(startDate, 23));
}
if (null == startSettleDate) {
return AjaxResult.error("每月15号和每月最后一天才能发放");
}
iBonusGrantService.withdrawalBonusByPeriod(SecurityUtils.getPkCountry(), startSettleDate, endSettleDate);
iBonusGrantService.withdrawalBonusByPeriod(SecurityUtils.getPkCountry(), settleDate);
return AjaxResult.success();
}

View File

@ -20,13 +20,6 @@ public interface CuMemberSettlePeriodMapper extends BaseMapper<CuMemberSettlePer
CuMemberSettlePeriodExt queryMemberSettlePeriod(@Param("pkCountry") Integer pkCountry,
@Param("settleDate") Date settleDate);
/**
* 根据日期查询对应的期间列表
*/
List<CuMemberSettlePeriodExt> listMemberSettlePeriod(@Param("pkCountry") Integer pkCountry,
@Param("settleDate") Date settleDate,
@Param("endSettleDate") Date endSettleDate);
/**
* 查询期间
*/

View File

@ -29,16 +29,6 @@ public interface ICuMemberSettlePeriodService extends IService<CuMemberSettlePer
*/
CuMemberSettlePeriodExt getCuMemberSettlePeriod(Integer pkCountry, Date date);
/**
* 根据日期查询对应的期间列表
*
* @param pkCountry
* @param date
* @param endDate
* @return
*/
List<CuMemberSettlePeriodExt> listCuMemberSettlePeriod(Integer pkCountry, Date date, Date endDate);
/**
* 根据国家查询奖金期数返回到前台
*/

View File

@ -204,11 +204,6 @@ public class CuMemberSettlePeriodServiceImpl extends ServiceImpl<CuMemberSettleP
return baseMapper.queryMemberSettlePeriod(pkCountry, date);
}
@Override
public List<CuMemberSettlePeriodExt> listCuMemberSettlePeriod(Integer pkCountry, Date date, Date endDate) {
return baseMapper.listMemberSettlePeriod(pkCountry, date, endDate);
}
private CuMemberSettlePeriod getCuMemberSettlePeriod(String date) {
LambdaQueryWrapper<CuMemberSettlePeriod> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberSettlePeriod::getSettleDate, DateUtils.parseStringToDate(date));

View File

@ -39,17 +39,6 @@ public class ApiCuMemberBonusController extends BaseController {
public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
// // 当前日期的天
// int dateDD = Integer.parseInt(DateUtils.parseDateTimeToStr(DateUtils.DD, bonusParam.getEndDate()));
// if (dateDD < 15) {
// // 今天日期小于15号查询上月23号之前的
// bonusParam.setEndDate(DateUtils.setDays(DateUtils.addMonths(bonusParam.getEndDate(), -1), 23));
// } else {
// // 今天日期大于等于15号查询本月7号之前的
// bonusParam.setEndDate(DateUtils.setDays(bonusParam.getEndDate(), 7));
// }
// // 新查询奖金明细
// List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.listMemberBonus(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusVoByCondition(bonusParam);
List<MemberBonusFirstPurchaseVO> firstPurchaseVOList = new ArrayList<>();
@ -68,8 +57,7 @@ public class ApiCuMemberBonusController extends BaseController {
public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
// 新查询奖金明细
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.listMemberBonus(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusTotalByCondition(bonusParam);
MemberRealIncomeVO memberRealIncomeVO = new MemberRealIncomeVO();
if (CollectionUtil.isEmpty(cuMemberBonusList)) {

View File

@ -25,10 +25,9 @@ public interface IBonusGrantService {
/**
* 每天发放奖金
*
* @param settleDate 发放开始日期
* @param endSettleDate 发放结束日期
* @param settleDate 发放日期
*/
Boolean grantBonusByPeriod(Integer pkCountry, String settleDate, String endSettleDate);
Boolean grantBonusByPeriod(Integer pkCountry, String settleDate);
/**
* 指定期数发放奖金
@ -43,6 +42,6 @@ public interface IBonusGrantService {
*
* @param settleDate 日期
*/
void withdrawalBonusByPeriod(Integer pkCountry, String settleDate, String endSettleDate);
void withdrawalBonusByPeriod(Integer pkCountry, String settleDate);
}

View File

@ -28,6 +28,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.time.temporal.ChronoUnit;
import java.util.*;
@ -81,41 +82,15 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
@Override
@Transactional(rollbackFor = Exception.class)
public void grantWithdrawBonusByPeriodEveryDay() {
// 会员只1530号发
// 24-7 : 15号发
// 8-23 : 30号发 每月最后一天
// 当前日期
Date nowDate = DateUtils.currentDate();
// 当前日期的天
int dateDD = Integer.parseInt(DateUtils.parseDateTimeToStr(DateUtils.DD, nowDate));
// 当月最后一天
int monthLast = Integer.parseInt(DateUtils.parseDateTimeToStr(DateUtils.DD, DateUtils.currentMonthLastDate(nowDate)));
// 发放开始时间
String settleDate = null;
// 发放结束时间
String endSettleDate = null;
Map<Integer, BdCountry> integerBdCountryMap = iCountryServiceApi.getAllCountryMap().getData();
if (integerBdCountryMap.size() > 0) {
for (Integer pkCountry : integerBdCountryMap.keySet()) {
if (dateDD == 15) {
// 15号 上月24号 本月7号
settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(DateUtils.addMonths(nowDate, -1), 24));
endSettleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(nowDate, 24));
} else if (dateDD == monthLast) {
// 当月最后一天 本月8号 本月23号
settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(nowDate, 8));
endSettleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(nowDate, 23));
}
if (null != settleDate) {
// 开始结束时间都有值才进行发放
// 发放奖金
grantBonusByPeriod(pkCountry, settleDate, endSettleDate);
// 奖金可以提现
withdrawalBonusByPeriod(pkCountry, settleDate, endSettleDate);
}
// 先发放奖金验证是否是周结周结发放上周的直接变为可提现
Date grantDay = DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate());
String settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, grantDay);
grantBonusByPeriod(pkCountry, settleDate);
// 设置奖金可以提现
withdrawalBonusByPeriod(pkCountry, settleDate);
}
}
}
@ -152,31 +127,27 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
return cuMemberSettlePeriodByDate;
}
private List<CuMemberSettlePeriodExt> getCuMemberSettlePeriod(Integer pkCountry, String settleDate, String endSettleDate) {
Date nowDate = DateUtils.currentDateTime();
List<CuMemberSettlePeriodExt> cuMemberSettlePeriodList = iCuMemberSettlePeriodService.listCuMemberSettlePeriod(pkCountry, DateUtils.parseStringToDate(settleDate), DateUtils.parseStringToDate(endSettleDate));
for (CuMemberSettlePeriodExt cuMemberSettlePeriodExt : cuMemberSettlePeriodList) {
cuMemberSettlePeriodExt.setPkModified(MagicNumberConstants.PK_ADMIN);
cuMemberSettlePeriodExt.setModifiedTime(nowDate);
}
return cuMemberSettlePeriodList;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean grantBonusByPeriod(Integer pkCountry, String settleDate, String endSettleDate) {
// 奖金发放范围期间
List<CuMemberSettlePeriodExt> cuMemberSettlePeriodList = getCuMemberSettlePeriod(pkCountry, settleDate, endSettleDate);
Date currentDateTime = DateUtils.currentDateTime();
Map<Integer, BdAccount> bdAccountValueMap = iAccountServiceApi.getAccountMapByCountry(pkCountry).getData();
for (CuMemberSettlePeriodExt cuMemberSettlePeriod : cuMemberSettlePeriodList) {
public Boolean grantBonusByPeriod(Integer pkCountry, String settleDate) {
// 奖金发放
CuMemberSettlePeriodExt cuMemberSettlePeriod = getCuMemberSettlePeriod(pkCountry, settleDate);
if (EYesNo.YES.getIntValue() == cuMemberSettlePeriod.getIsGrant()) {
// 已经发放则跳过
continue;
return Boolean.FALSE;
}
String settleDateStr = DateUtils.parseDateTimeToStr(DateUtils.YYYY_MM_DD, cuMemberSettlePeriod.getSettleDate());
// 验证是否周奖周奖只能周三发放
if (EExpandCapMethod.WEEK_SETTLE.getValue() == cuMemberSettlePeriod.getSettleCycle()) {
if (DateUtils.getRecentlyDay(DateUtils.parseStringToDate(settleDate)) != DayOfWeek.WEDNESDAY.getValue()) {
return Boolean.FALSE;
}
} else {
Date startDate = DateUtils.parseStringToDate(settleDate);
if (DateUtils.compareDateBefore(DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) {
return Boolean.FALSE;
}
}
Map<Integer, BdAccount> bdAccountValueMap = iAccountServiceApi.getAccountMapByCountry(pkCountry).getData();
Date currentDateTime = DateUtils.currentDateTime();
// 查询奖金表查询未发放的奖金明细
List<CuMemberBonus> cuMemberBonusList = iCuMemberBonusService.queryCuMemberBonusByCondition(pkCountry, EGrantStatus.PUBLISHED.getValue(), cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod());
@ -184,8 +155,18 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
// 新增交易流水
List<CuMemberTrade> cuMemberTradeList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(cuMemberBonus.getPkCountry()).getData();
// 奖金币首购+复购+云代+海粉+嗨粉+店铺
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, cuMemberBonus.getRealIncomeTotal(), settleDateStr);
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRealIncomeTotal(), currencyDTO.getOutExchangeRate()), settleDate);
// 重销币商城重消+平台服务费
// BigDecimal repeat = ComputeUtil.computeAdd(cuMemberBonus.getBackPoints(), cuMemberBonus.getServiceSpend());
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPEAT.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getBackPoints(), currencyDTO.getOutExchangeRate()), settleDate);
// 复购券
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.REPURCHASE.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRepurCouponSubtotal(), currencyDTO.getOutExchangeRate()), settleDate);
// 环球积分
// packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.GLOBAL_POINTS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getGlobalPoints(), currencyDTO.getOutExchangeRate()), settleDate);
// 车奖积分
// packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.CAR_AWARD_POINTS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getCarAwardPoints(), currencyDTO.getOutExchangeRate()), settleDate);
});
List<Long> seqList = iCuMemberTradeService.batchQueryCuMemberTradeSeq(cuMemberTradeList.size());
// 新增流水明细,记录奖金明细的发放状态消费明细
@ -221,7 +202,6 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
cuMemberSettlePeriod.setIsGrant(EYesNo.YES.getIntValue());
cuMemberSettlePeriod.setGrantDate(DateUtils.currentDateTime());
iCuMemberSettlePeriodService.updateCuMemberSettlePeriodByDate(cuMemberSettlePeriod);
}
return Boolean.TRUE;
}
@ -283,29 +263,30 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
@Override
@Transactional(rollbackFor = Exception.class)
public void withdrawalBonusByPeriod(Integer pkCountry, String settleDate, String endSettleDate) {
public void withdrawalBonusByPeriod(Integer pkCountry, String settleDate) {
// 奖金可提现
List<CuMemberSettlePeriodExt> cuMemberSettlePeriodList = getCuMemberSettlePeriod(pkCountry, settleDate, endSettleDate);
for (CuMemberSettlePeriodExt cuMemberSettlePeriod : cuMemberSettlePeriodList) {
CuMemberSettlePeriodExt cuMemberSettlePeriod = getCuMemberSettlePeriod(pkCountry, settleDate);
if (EYesNo.YES.getIntValue() == cuMemberSettlePeriod.getIsWithdrawal()) {
// 已经提现则跳过
continue;
return;
}
// 批量更新会员账户更新余额cu_member_account)
// 验证是否周奖周奖只能周四提现
if (EExpandCapMethod.WEEK_SETTLE.getValue() == cuMemberSettlePeriod.getSettleCycle()) {
if (DateUtils.getRecentlyDay(DateUtils.parseStringToDate(settleDate)) != DayOfWeek.THURSDAY.getValue()) {
return;
}
}
// 批量更新会员账户更新余额
iCuMemberAccountService.updateMemberAccountWithdrawalByPeriod(cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod(), pkCountry);
// 更新交易明细表状态cu_member_trade_detail
// 更新交易明细表状态 cu_member_trade_detail
iCuMemberTradeDetailService.updateCuMemberTradeDetailByPeriod(cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod(), pkCountry);
// 更新奖金表发放状态cu_member_bonus
// 更新奖金表发放状态
iCuMemberBonusService.updateCuMemberBonusStatus(pkCountry, EGrantStatus.WITHDRAWAL.getValue(), EGrantStatus.GRANT.getValue(), cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod());
// 更新期间表状态cu_member_settle_period_detail
// 更新期间表状态
cuMemberSettlePeriod.setIsWithdrawal(EYesNo.YES.getIntValue());
cuMemberSettlePeriod.setWithdrawalDate(DateUtils.currentDateTime());
iCuMemberSettlePeriodService.updateCuMemberSettlePeriodByDate(cuMemberSettlePeriod);
}
}
/**
* 封装会员 消费的 交易流水
*

View File

@ -51,20 +51,6 @@
and cp.settle_date = #{settleDate, jdbcType=DATE}
</select>
<select id="listMemberSettlePeriod" resultMap="CuMemberSettlePeriodExt">
<include refid="memberPeriod"></include>
and cd.pk_country = #{pkCountry}
and cp.settle_date >= #{settleDate, jdbcType=DATE}
<if test="null == endSettleDate">
and cp.settle_date &lt;= #{settleDate, jdbcType=DATE}
</if>
<if test="null != endSettleDate">
and cp.settle_date &lt;= #{endSettleDate, jdbcType=DATE}
</if>
order by cp.settle_date
</select>
<select id="queryMemberSettlePeriodByCondition" resultMap="CuMemberSettlePeriodExt">
<include refid="memberPeriod"></include>
and cd.pk_country=#{pkCountry}