3
0
Fork 0

## 奖金发放处理;

This commit is contained in:
cabbage 2025-07-14 16:05:30 +08:00
parent 721b297cbd
commit 90ed09631f
18 changed files with 307 additions and 345 deletions

View File

@ -25,5 +25,4 @@ public interface CuMemberTradeMapper extends BaseMapper<CuMemberTrade> {
*/ */
void batchInsertCuMemberTrade(@Param("cuMemberTradeList") List<?> cuMemberTradeList); void batchInsertCuMemberTrade(@Param("cuMemberTradeList") List<?> cuMemberTradeList);
} }

View File

@ -19,7 +19,6 @@ public class CuMemberTradeServiceImpl extends ServiceImpl<CuMemberTradeMapper, C
@Autowired @Autowired
private CuMemberBonusSettle cuMemberBonusSettle; private CuMemberBonusSettle cuMemberBonusSettle;
@Override @Override
public List<Long> batchQueryCuMemberTradeSeq(Integer rowNum) { public List<Long> batchQueryCuMemberTradeSeq(Integer rowNum) {
return baseMapper.batchQueryCuMemberTradeSeq(rowNum); return baseMapper.batchQueryCuMemberTradeSeq(rowNum);

View File

@ -5,7 +5,6 @@ import com.hzs.bonus.achieve.param.MemberPeriodParam;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService; import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.achieve.service.ICuMemberTreeService; import com.hzs.bonus.achieve.service.ICuMemberTreeService;
import com.hzs.bonus.bonus.service.IBonusGrantService; 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.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.vo.MemberSettlePeriodVO; import com.hzs.bonus.bonus.vo.MemberSettlePeriodVO;
import com.hzs.common.core.annotation.AccessPermissions; import com.hzs.common.core.annotation.AccessPermissions;
@ -15,7 +14,6 @@ import com.hzs.common.core.enums.EOperationBusiness;
import com.hzs.common.core.enums.EOperationMethod; import com.hzs.common.core.enums.EOperationMethod;
import com.hzs.common.core.enums.EOperationModule; import com.hzs.common.core.enums.EOperationModule;
import com.hzs.common.core.utils.DateUtils; 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.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo; import com.hzs.common.core.web.page.TableDataInfo;
@ -37,8 +35,6 @@ public class CuMemberSettleController extends BaseController {
@Autowired @Autowired
private ICuMemberBonusService iCuMemberBonusService; private ICuMemberBonusService iCuMemberBonusService;
@Autowired @Autowired
private IBonusSettleService iBonusSettleService;
@Autowired
private ICuMemberTreeService iCuMemberTreeService; private ICuMemberTreeService iCuMemberTreeService;
@Autowired @Autowired
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService; private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@ -75,7 +71,6 @@ public class CuMemberSettleController extends BaseController {
@GetMapping("/settle-bonus") @GetMapping("/settle-bonus")
@Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.INSERT) @Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.INSERT)
public AjaxResult settleBonus(String settleDate) { public AjaxResult settleBonus(String settleDate) {
// initTable(settleDate);
Date startDate = DateUtils.parseStringToDate(settleDate); Date startDate = DateUtils.parseStringToDate(settleDate);
if (DateUtils.compareDateAfter(DateUtils.beforeDate(6, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) { if (DateUtils.compareDateAfter(DateUtils.beforeDate(6, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) {
return AjaxResult.error(TransactionUtils.getContent(BonusMsgConstants.SETTLE_VALIDATE_DATE)); return AjaxResult.error(TransactionUtils.getContent(BonusMsgConstants.SETTLE_VALIDATE_DATE));
@ -85,9 +80,7 @@ public class CuMemberSettleController extends BaseController {
} }
/** /**
* 公布奖金 * 公布奖金 -- 页面使用
*
* @return AjaxResult
*/ */
@GetMapping("/publish-bonus") @GetMapping("/publish-bonus")
@Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.PUBLISH) @Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.PUBLISH)
@ -101,9 +94,7 @@ public class CuMemberSettleController extends BaseController {
} }
/** /**
* 不公布奖金 * 不公布奖金 -- 页面使用
*
* @return AjaxResult
*/ */
@GetMapping("/no-publish-bonus") @GetMapping("/no-publish-bonus")
@Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.NO_PUBLISH) @Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.NO_PUBLISH)
@ -117,25 +108,44 @@ public class CuMemberSettleController extends BaseController {
} }
/** /**
* 发放奖金 * 发放奖金 -- 页面使用
*
* @return AjaxResult
*/ */
@GetMapping("/grant-bonus") @GetMapping("/grant-bonus")
@Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.GRANT) @Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.GRANT)
public AjaxResult grantBonus(String settleDate) { public AjaxResult grantBonus(String settleDate) {
Date startDate = DateUtils.parseStringToDate(settleDate); Date startDate = DateUtils.parseStringToDate(settleDate);
if (DateUtils.compareDateBefore(DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) { if (DateUtils.compareDateBefore(DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) {
// 只能发放7天以外的奖金
return AjaxResult.error(TransactionUtils.getContent(BonusMsgConstants.GRANT_VALIDATE_DATE)); return AjaxResult.error(TransactionUtils.getContent(BonusMsgConstants.GRANT_VALIDATE_DATE));
} }
iBonusGrantService.grantBonusByPeriod(SecurityUtils.getPkCountry(), settleDate);
// 发放开始时间
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.grantBonusByPeriod(SecurityUtils.getPkCountry(), startSettleDate, endSettleDate);
return AjaxResult.success(); return AjaxResult.success();
} }
/** /**
* 发放奖金 * 发放奖金指定期数 -- 页面未使用
*
* @return AjaxResult
*/ */
@GetMapping("/grant-temp-bonus") @GetMapping("/grant-temp-bonus")
public AjaxResult grantTempBonus(Integer pkCountry, String settleDate) { public AjaxResult grantTempBonus(Integer pkCountry, String settleDate) {
@ -144,9 +154,7 @@ public class CuMemberSettleController extends BaseController {
} }
/** /**
* 发放奖金 * 发放奖金定时任务 -- 页面未使用
*
* @return AjaxResult
*/ */
@GetMapping("/grant-bonus_all") @GetMapping("/grant-bonus_all")
public AjaxResult grantBonusAll() { public AjaxResult grantBonusAll() {
@ -155,18 +163,39 @@ public class CuMemberSettleController extends BaseController {
} }
/** /**
* 奖金提现 * 奖金提现 -- 页面使用
*
* @return AjaxResult
*/ */
@GetMapping("/withdrawal-bonus") @GetMapping("/withdrawal-bonus")
@Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.WITHDRAWAL) @Log(module = EOperationModule.BONUS_SETTLE, business = EOperationBusiness.BONUS_SETTLE, method = EOperationMethod.WITHDRAWAL)
public AjaxResult withdrawalBonus(String settleDate) { public AjaxResult withdrawalBonus(String settleDate) {
Date startDate = DateUtils.parseStringToDate(settleDate); Date startDate = DateUtils.parseStringToDate(settleDate);
if (DateUtils.compareDateBefore(DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) { if (DateUtils.compareDateBefore(DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate()), startDate)) {
// 只能提现7天以外的奖金
return AjaxResult.error(TransactionUtils.getContent(BonusMsgConstants.WITHDRAW_VALIDATE_DATE)); return AjaxResult.error(TransactionUtils.getContent(BonusMsgConstants.WITHDRAW_VALIDATE_DATE));
} }
iBonusGrantService.withdrawalBonusByPeriod(SecurityUtils.getPkCountry(), settleDate);
// 发放开始时间
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);
return AjaxResult.success(); return AjaxResult.success();
} }

View File

@ -17,7 +17,15 @@ public interface CuMemberSettlePeriodMapper extends BaseMapper<CuMemberSettlePer
/** /**
* 根据日期查询会员结算期间 * 根据日期查询会员结算期间
*/ */
CuMemberSettlePeriodExt queryMemberSettlePeriod(@Param("pkCountry") Integer pkCountry, @Param("settleDate") Date settleDate); 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,6 +29,16 @@ public interface ICuMemberSettlePeriodService extends IService<CuMemberSettlePer
*/ */
CuMemberSettlePeriodExt getCuMemberSettlePeriod(Integer pkCountry, Date date); 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,6 +204,11 @@ public class CuMemberSettlePeriodServiceImpl extends ServiceImpl<CuMemberSettleP
return baseMapper.queryMemberSettlePeriod(pkCountry, date); 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) { private CuMemberSettlePeriod getCuMemberSettlePeriod(String date) {
LambdaQueryWrapper<CuMemberSettlePeriod> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<CuMemberSettlePeriod> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberSettlePeriod::getSettleDate, DateUtils.parseStringToDate(date)); queryWrapper.eq(CuMemberSettlePeriod::getSettleDate, DateUtils.parseStringToDate(date));

View File

@ -5,8 +5,6 @@ import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.bonus.param.BonusParam; import com.hzs.bonus.bonus.param.BonusParam;
import com.hzs.bonus.bonus.service.ICuMemberBonusService; import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.vo.*; import com.hzs.bonus.bonus.vo.*;
import com.hzs.common.core.enums.EGrantStatus;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils; import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.web.controller.BaseController; import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.page.TableDataInfo; import com.hzs.common.core.web.page.TableDataInfo;
@ -34,34 +32,6 @@ public class ApiCuMemberBonusController extends BaseController {
@Autowired @Autowired
private ICuMemberBonusService iCuMemberBonusService; private ICuMemberBonusService iCuMemberBonusService;
/**
* 新零售实时奖金查询会员实时奖金当日的奖金
*/
@PostMapping("/query-current-bonus")
public TableDataInfo listCurrentBonus(@RequestBody BonusParam bonusParam) {
bonusParam.setPkCountry(SecurityUtils.getPkCountry());
bonusParam.setPkMember(SecurityUtils.getUserId());
bonusParam.setStartDate(DateUtils.currentDate());
bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.currentDate()));
bonusParam.setGrantStatus(EGrantStatus.SETTLED.getValue());
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberSecondBonusVoByCondition(bonusParam);
List<MemberBonusVO> memberBonusVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
if (ComputeUtil.compareValue(cuMemberBonus.getRealIncomeTotal())) {
MemberBonusVO memberBonusVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusVO.class, "settleDate");
memberBonusVO.setServiceSpend(BigDecimal.ZERO);
memberBonusVO.setSettleDate(DateUtils.currentDate());
BigDecimal serviceSpend = ComputeUtil.computeSubtract(ComputeUtil.computeAddNum(cuMemberBonus.getRetailRangeIncome(), cuMemberBonus.getRetailSameLevelIncome(),
cuMemberBonus.getRetailAreaIncome()),
cuMemberBonus.getRetailRealSubtotal());
memberBonusVO.setBackPoints(serviceSpend);
memberBonusVOList.add(memberBonusVO);
}
});
return getDataTable(memberBonusVOList);
}
/** /**
* 新零售实时奖金查询会员奖金列表 * 新零售实时奖金查询会员奖金列表
*/ */
@ -69,7 +39,18 @@ public class ApiCuMemberBonusController extends BaseController {
public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam) { public TableDataInfo listFirstRepurchaseBonus(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam); setBonusParam(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusVoByCondition(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<MemberBonusFirstPurchaseVO> firstPurchaseVOList = new ArrayList<>(); List<MemberBonusFirstPurchaseVO> firstPurchaseVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> { cuMemberBonusList.forEach(cuMemberBonus -> {
@ -85,17 +66,15 @@ public class ApiCuMemberBonusController extends BaseController {
*/ */
@PostMapping("/query-bonus-total") @PostMapping("/query-bonus-total")
public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam) { public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam) {
bonusParam.setPkCountry(SecurityUtils.getPkCountry()); setBonusParam(bonusParam);
bonusParam.setPkMember(SecurityUtils.getUserId());
bonusParam.setEndDate(DateUtils.currentDate()); // 新查询奖金明细
bonusParam.setStartDate(DateUtils.beforeDate(1, ChronoUnit.DAYS, bonusParam.getEndDate())); List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.listMemberBonus(bonusParam);
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusTotalByCondition(bonusParam);
MemberRealIncomeVO memberRealIncomeVO = new MemberRealIncomeVO(); MemberRealIncomeVO memberRealIncomeVO = new MemberRealIncomeVO();
if (CollectionUtil.isEmpty(cuMemberBonusList)) { if (CollectionUtil.isEmpty(cuMemberBonusList)) {
memberRealIncomeVO.setRealIncomeTotal(BigDecimal.ZERO); memberRealIncomeVO.setRealIncomeTotal(BigDecimal.ZERO);
} else { } else {
// memberRealIncomeVO.setRealIncomeTotal(ComputeUtil.computeAdd(cuMemberBonusList.get(0).getRealIncomeTotal(), cuMemberBonusList.get(0).getBackPoints()));
memberRealIncomeVO.setRealIncomeTotal(cuMemberBonusList.get(0).getRealIncomeTotal()); memberRealIncomeVO.setRealIncomeTotal(cuMemberBonusList.get(0).getRealIncomeTotal());
} }
return getDataTable(Collections.singletonList(memberRealIncomeVO)); return getDataTable(Collections.singletonList(memberRealIncomeVO));
@ -116,7 +95,8 @@ public class ApiCuMemberBonusController extends BaseController {
bonusParam.setPkCountry(SecurityUtils.getPkCountry()); bonusParam.setPkCountry(SecurityUtils.getPkCountry());
bonusParam.setPkMember(SecurityUtils.getUserId()); bonusParam.setPkMember(SecurityUtils.getUserId());
Date startDate = DateUtils.beforeDate(15, ChronoUnit.DAYS, DateUtils.currentDate()); // 默认查询90天之内的
Date startDate = DateUtils.beforeDate(60, ChronoUnit.DAYS, DateUtils.currentDate());
if (bonusParam.getStartDate() == null) { if (bonusParam.getStartDate() == null) {
bonusParam.setStartDate(startDate); bonusParam.setStartDate(startDate);
} else if (DateUtils.compareDateBefore(bonusParam.getStartDate(), startDate)) { } else if (DateUtils.compareDateBefore(bonusParam.getStartDate(), startDate)) {
@ -136,8 +116,7 @@ public class ApiCuMemberBonusController extends BaseController {
public TableDataInfo listBonusSource(@RequestBody BonusParam bonusParam) { public TableDataInfo listBonusSource(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam); setBonusParam(bonusParam);
startPage(); startPage();
TableDataInfo tableDataInfo = iCuMemberBonusService.queryMemberBonusDetailVoByCondition(bonusParam); return iCuMemberBonusService.queryMemberBonusDetailVoByCondition(bonusParam);
return tableDataInfo;
} }
} }

View File

@ -27,6 +27,14 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
*/ */
List<CuMemberBonusExt> queryMemberBonusByCondition(BonusParam bonusParam); List<CuMemberBonusExt> queryMemberBonusByCondition(BonusParam bonusParam);
/**
* 查询会员奖金明细
*
* @param bonusParam
* @return
*/
List<CuMemberBonusExt> listMemberBonus(BonusParam bonusParam);
/** /**
* 根据查询条件查询会员奖金 * 根据查询条件查询会员奖金
* *

View File

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

View File

@ -30,11 +30,12 @@ public interface ICuMemberBonusService extends IService<CuMemberBonus> {
List<CuMemberBonusExt> queryMemberBonusVoByCondition(BonusParam bonusParam); List<CuMemberBonusExt> queryMemberBonusVoByCondition(BonusParam bonusParam);
/** /**
* 根据查询条件查询会员秒接奖金 * 查询会员奖金明细
* *
* @param bonusParam 查询条件 * @param bonusParam
* @return
*/ */
List<CuMemberBonusExt> queryMemberSecondBonusVoByCondition(BonusParam bonusParam); List<CuMemberBonusExt> listMemberBonus(BonusParam bonusParam);
/** /**
* 根据查询条件查询会员奖金 * 根据查询条件查询会员奖金

View File

@ -28,7 +28,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
@ -47,13 +46,13 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
@Autowired @Autowired
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService; private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@Autowired @Autowired
private MemberToolsHandler memberToolsHandler;
@Autowired
private ICuMemberTradeService iCuMemberTradeService; private ICuMemberTradeService iCuMemberTradeService;
@Autowired @Autowired
private ICuMemberTradeDetailService iCuMemberTradeDetailService; private ICuMemberTradeDetailService iCuMemberTradeDetailService;
@Autowired @Autowired
private ICuMemberAccountService iCuMemberAccountService; private ICuMemberAccountService iCuMemberAccountService;
@Autowired
private MemberToolsHandler memberToolsHandler;
@DubboReference @DubboReference
ICountryServiceApi iCountryServiceApi; ICountryServiceApi iCountryServiceApi;
@ -82,23 +81,41 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void grantWithdrawBonusByPeriodEveryDay() { 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(); Map<Integer, BdCountry> integerBdCountryMap = iCountryServiceApi.getAllCountryMap().getData();
if (integerBdCountryMap.size() > 0) { if (integerBdCountryMap.size() > 0) {
for (Integer pkCountry : integerBdCountryMap.keySet()) { for (Integer pkCountry : integerBdCountryMap.keySet()) {
// 先发放奖金验证是否是周结周结发放上周的直接变为可提现 if (dateDD == 15) {
Date grantDay = DateUtils.beforeDate(7, ChronoUnit.DAYS, DateUtils.currentDate()); // 15号 上月24号 本月7号
String settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, grantDay); settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(DateUtils.addMonths(nowDate, -1), 24));
grantBonusByPeriod(pkCountry, settleDate); endSettleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.setDays(nowDate, 24));
// 设置奖金可以提现 } else if (dateDD == monthLast) {
withdrawalBonusByPeriod(pkCountry, settleDate); // 当月最后一天 本月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) {
// CuMemberSettlePeriodExt cuMemberSettlePeriod = getCuMemberSettlePeriod(pkCountry, settleDate); // 开始结束时间都有值才进行发放
// Date withdrawDay = DateUtils.beforeDate(7, ChronoUnit.DAYS, grantDay); // 发放奖金
// if (EExpandCapMethod.WEEK_SETTLE.getValue() == cuMemberSettlePeriod.getSettleCycle() || grantBonusByPeriod(pkCountry, settleDate, endSettleDate);
// !CountryConstants.CHINA_COUNTRY.equals(pkCountry)) { // 奖金可以提现
// withdrawDay = grantDay; withdrawalBonusByPeriod(pkCountry, settleDate, endSettleDate);
// } }
} }
} }
} }
@ -135,81 +152,76 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
return cuMemberSettlePeriodByDate; 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 @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean grantBonusByPeriod(Integer pkCountry, String settleDate) { public Boolean grantBonusByPeriod(Integer pkCountry, String settleDate, String endSettleDate) {
// 奖金发放 // 奖金发放范围期间
CuMemberSettlePeriodExt cuMemberSettlePeriod = getCuMemberSettlePeriod(pkCountry, settleDate); List<CuMemberSettlePeriodExt> cuMemberSettlePeriodList = getCuMemberSettlePeriod(pkCountry, settleDate, endSettleDate);
if (EYesNo.YES.getIntValue() == cuMemberSettlePeriod.getIsGrant()) {
return Boolean.FALSE;
}
// 验证是否周奖周奖只能周三发放
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();
// 查询奖金表查询未发放的奖金明细 Date currentDateTime = DateUtils.currentDateTime();
List<CuMemberBonus> cuMemberBonusList = iCuMemberBonusService.queryCuMemberBonusByCondition(pkCountry, EGrantStatus.PUBLISHED.getValue(), cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod()); Map<Integer, BdAccount> bdAccountValueMap = iAccountServiceApi.getAccountMapByCountry(pkCountry).getData();
if (cuMemberBonusList.size() > 0) {
// 新增交易流水 for (CuMemberSettlePeriodExt cuMemberSettlePeriod : cuMemberSettlePeriodList) {
List<CuMemberTrade> cuMemberTradeList = new ArrayList<>(); if (EYesNo.YES.getIntValue() == cuMemberSettlePeriod.getIsGrant()) {
cuMemberBonusList.forEach(cuMemberBonus -> { // 已经发放则跳过
CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(cuMemberBonus.getPkCountry()).getData(); continue;
// 奖金币首购+复购+云代+海粉+嗨粉+店铺
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());
// 新增流水明细,记录奖金明细的发放状态消费明细
List<CuMemberTradeDetail> cuMemberTradeDetailList = new ArrayList<>();
Map<Integer, BdAccount> bdAccountMap = iAccountServiceApi.getAccountListByCountry(pkCountry).getData();
for (int i = 0; i < cuMemberTradeList.size(); i++) {
CuMemberTrade cuMemberTrade = cuMemberTradeList.get(i);
cuMemberTrade.setPkId(seqList.get(i));
if (bdAccountMap.containsKey(cuMemberTrade.getPkAccount()) && EAccount.BONUS.getValue() == bdAccountMap.get(cuMemberTrade.getPkAccount()).getFieldValue()) {
// 验证有奖金币的记录发放记录
CuMemberTradeDetail cuMemberTradeDetail = CuMemberTradeDetail.builder()
.period(cuMemberSettlePeriod.getPkId())
.pkMemberTrade(cuMemberTrade.getPkId())
.grantMoney(cuMemberTrade.getTradeAmount())
.consumeMoney(cuMemberTrade.getTradeAmount())
.build();
cuMemberTradeDetail.setPkCountry(cuMemberTrade.getPkCountry());
cuMemberTradeDetail.setPkCreator(cuMemberTrade.getPkCreator());
cuMemberTradeDetail.setCreationTime(cuMemberTrade.getCreationTime());
cuMemberTradeDetailList.add(cuMemberTradeDetail);
}
} }
// 批量保存交易流水交易流水明细 String settleDateStr = DateUtils.parseDateTimeToStr(DateUtils.YYYY_MM_DD, cuMemberSettlePeriod.getSettleDate());
iCuMemberTradeService.batchInsertCuMemberTrade(cuMemberTradeList);
iCuMemberTradeDetailService.batchInsertCuMemberTradeDetail(cuMemberTradeDetailList); // 查询奖金表查询未发放的奖金明细
// 批量更新会员账户更新余额 List<CuMemberBonus> cuMemberBonusList = iCuMemberBonusService.queryCuMemberBonusByCondition(pkCountry, EGrantStatus.PUBLISHED.getValue(), cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod());
iCuMemberAccountService.updateMemberAccountGrantByPeriod(pkCountry, cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod()); if (cuMemberBonusList.size() > 0) {
// 更新奖金表发放状态 // 新增交易流水
iCuMemberBonusService.updateCuMemberBonusStatus(pkCountry, EGrantStatus.GRANT.getValue(), EGrantStatus.PUBLISHED.getValue(), List<CuMemberTrade> cuMemberTradeList = new ArrayList<>();
cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod()); cuMemberBonusList.forEach(cuMemberBonus -> {
// 奖金币首购+复购+云代+海粉+嗨粉+店铺
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, cuMemberBonus.getRealIncomeTotal(), settleDateStr);
});
List<Long> seqList = iCuMemberTradeService.batchQueryCuMemberTradeSeq(cuMemberTradeList.size());
// 新增流水明细,记录奖金明细的发放状态消费明细
List<CuMemberTradeDetail> cuMemberTradeDetailList = new ArrayList<>();
Map<Integer, BdAccount> bdAccountMap = iAccountServiceApi.getAccountListByCountry(pkCountry).getData();
for (int i = 0; i < cuMemberTradeList.size(); i++) {
CuMemberTrade cuMemberTrade = cuMemberTradeList.get(i);
cuMemberTrade.setPkId(seqList.get(i));
if (bdAccountMap.containsKey(cuMemberTrade.getPkAccount()) && EAccount.BONUS.getValue() == bdAccountMap.get(cuMemberTrade.getPkAccount()).getFieldValue()) {
// 验证有奖金币的记录发放记录
CuMemberTradeDetail cuMemberTradeDetail = CuMemberTradeDetail.builder()
.period(cuMemberSettlePeriod.getPkId())
.pkMemberTrade(cuMemberTrade.getPkId())
.grantMoney(cuMemberTrade.getTradeAmount())
.consumeMoney(cuMemberTrade.getTradeAmount())
.build();
cuMemberTradeDetail.setPkCountry(cuMemberTrade.getPkCountry());
cuMemberTradeDetail.setPkCreator(cuMemberTrade.getPkCreator());
cuMemberTradeDetail.setCreationTime(cuMemberTrade.getCreationTime());
cuMemberTradeDetailList.add(cuMemberTradeDetail);
}
}
// 批量保存交易流水交易流水明细
iCuMemberTradeService.batchInsertCuMemberTrade(cuMemberTradeList);
iCuMemberTradeDetailService.batchInsertCuMemberTradeDetail(cuMemberTradeDetailList);
// 批量更新会员账户更新余额
iCuMemberAccountService.updateMemberAccountGrantByPeriod(pkCountry, cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod());
// 更新奖金表发放状态
iCuMemberBonusService.updateCuMemberBonusStatus(pkCountry, EGrantStatus.GRANT.getValue(), EGrantStatus.PUBLISHED.getValue(),
cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod());
}
// 更新期间表状态
cuMemberSettlePeriod.setIsGrant(EYesNo.YES.getIntValue());
cuMemberSettlePeriod.setGrantDate(DateUtils.currentDateTime());
iCuMemberSettlePeriodService.updateCuMemberSettlePeriodByDate(cuMemberSettlePeriod);
} }
// 更新期间表状态
cuMemberSettlePeriod.setIsGrant(EYesNo.YES.getIntValue());
cuMemberSettlePeriod.setGrantDate(DateUtils.currentDateTime());
iCuMemberSettlePeriodService.updateCuMemberSettlePeriodByDate(cuMemberSettlePeriod);
return Boolean.TRUE; return Boolean.TRUE;
} }
@ -219,20 +231,16 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
CuMemberSettlePeriodExt cuMemberSettlePeriod = getCuMemberSettlePeriod(pkCountry, settleDate); CuMemberSettlePeriodExt cuMemberSettlePeriod = getCuMemberSettlePeriod(pkCountry, settleDate);
// 查询奖金表查询未发放的奖金明细 // 查询奖金表查询未发放的奖金明细
List<CuMemberBonus> cuMemberBonusList = iCuMemberBonusService.queryCuMemberBonusByCondition(pkCountry, EGrantStatus.PUBLISHED.getValue(), cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod()); List<CuMemberBonus> cuMemberBonusList = iCuMemberBonusService.queryCuMemberBonusByCondition(pkCountry, EGrantStatus.PUBLISHED.getValue(), cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod());
Map<Integer, BdAccount> bdAccountValueMap = iAccountServiceApi.getAccountMapByCountry(pkCountry).getData(); Map<Integer, BdAccount> bdAccountValueMap = iAccountServiceApi.getAccountMapByCountry(pkCountry).getData();
Date currentDateTime = DateUtils.currentDateTime(); Date currentDateTime = DateUtils.currentDateTime();
CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(pkCountry).getData();
if (cuMemberBonusList.size() > 0) { if (cuMemberBonusList.size() > 0) {
// 新增交易流水 // 新增交易流水
List<CuMemberTrade> cuMemberTradeList = new ArrayList<>(); List<CuMemberTrade> cuMemberTradeList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> { cuMemberBonusList.forEach(cuMemberBonus -> {
CurrencyDTO currencyDTO = iCurrencyServiceApi.getCurrency(cuMemberBonus.getPkCountry()).getData();
// 奖金币首购+复购+云代+海粉+嗨粉+店铺 // 奖金币首购+复购+云代+海粉+嗨粉+店铺
packAccountTrade(cuMemberTradeList, bdAccountValueMap, EAccount.BONUS.getValue(), currentDateTime, cuMemberBonus, ComputeUtil.computeMultiply(cuMemberBonus.getRealIncomeTotal(), currencyDTO.getOutExchangeRate()), settleDate); 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);
}); });
List<Long> seqList = iCuMemberTradeService.batchQueryCuMemberTradeSeq(cuMemberTradeList.size()); List<Long> seqList = iCuMemberTradeService.batchQueryCuMemberTradeSeq(cuMemberTradeList.size());
// 新增流水明细,记录奖金明细的发放状态消费明细 // 新增流水明细,记录奖金明细的发放状态消费明细
@ -266,8 +274,8 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
} }
} }
private void packAccountTrade(List<CuMemberTrade> cuMemberTradeList, Map<Integer, BdAccount> bdAccountMap, int accountValue, Date currentDateTime, CuMemberBonus cuMemberBonus, BigDecimal grantValue, private void packAccountTrade(List<CuMemberTrade> cuMemberTradeList, Map<Integer, BdAccount> bdAccountMap, int accountValue, Date currentDateTime,
String settleDate) { CuMemberBonus cuMemberBonus, BigDecimal grantValue, String settleDate) {
if (ComputeUtil.compareValue(grantValue) && bdAccountMap.containsKey(accountValue)) { if (ComputeUtil.compareValue(grantValue) && bdAccountMap.containsKey(accountValue)) {
cuMemberTradeList.add(packageMemberTrade(cuMemberBonus, bdAccountMap.get(accountValue).getPkId(), grantValue, currentDateTime, settleDate)); cuMemberTradeList.add(packageMemberTrade(cuMemberBonus, bdAccountMap.get(accountValue).getPkId(), grantValue, currentDateTime, settleDate));
} }
@ -275,28 +283,27 @@ public class BonusGrantServiceImpl implements IBonusGrantService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void withdrawalBonusByPeriod(Integer pkCountry, String settleDate) { public void withdrawalBonusByPeriod(Integer pkCountry, String settleDate, String endSettleDate) {
// 奖金可提现 // 奖金可提现
CuMemberSettlePeriodExt cuMemberSettlePeriod = getCuMemberSettlePeriod(pkCountry, settleDate); List<CuMemberSettlePeriodExt> cuMemberSettlePeriodList = getCuMemberSettlePeriod(pkCountry, settleDate, endSettleDate);
if (EYesNo.YES.getIntValue() == cuMemberSettlePeriod.getIsWithdrawal()) {
return; for (CuMemberSettlePeriodExt cuMemberSettlePeriod : cuMemberSettlePeriodList) {
} if (EYesNo.YES.getIntValue() == cuMemberSettlePeriod.getIsWithdrawal()) {
// 验证是否周奖周奖只能周四提现 // 已经提现则跳过
if (EExpandCapMethod.WEEK_SETTLE.getValue() == cuMemberSettlePeriod.getSettleCycle()) { continue;
if (DateUtils.getRecentlyDay(DateUtils.parseStringToDate(settleDate)) != DayOfWeek.THURSDAY.getValue()) {
return;
} }
// 批量更新会员账户更新余额cu_member_account)
iCuMemberAccountService.updateMemberAccountWithdrawalByPeriod(cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod(), pkCountry);
// 更新交易明细表状态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);
} }
// 批量更新会员账户更新余额
iCuMemberAccountService.updateMemberAccountWithdrawalByPeriod(cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod(), pkCountry);
// 更新交易明细表状态 cu_member_trade_detail
iCuMemberTradeDetailService.updateCuMemberTradeDetailByPeriod(cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod(), pkCountry);
// 更新奖金表发放状态
iCuMemberBonusService.updateCuMemberBonusStatus(pkCountry, EGrantStatus.WITHDRAWAL.getValue(), EGrantStatus.GRANT.getValue(), cuMemberSettlePeriod.getStartPeriod(), cuMemberSettlePeriod.getEndPeriod());
// 更新期间表状态
cuMemberSettlePeriod.setIsWithdrawal(EYesNo.YES.getIntValue());
cuMemberSettlePeriod.setWithdrawalDate(DateUtils.currentDateTime());
iCuMemberSettlePeriodService.updateCuMemberSettlePeriodByDate(cuMemberSettlePeriod);
} }
/** /**

View File

@ -14,7 +14,6 @@ import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.vo.MemberBonusDetailSerVO; import com.hzs.bonus.bonus.vo.MemberBonusDetailSerVO;
import com.hzs.bonus.bonus.vo.MemberBonusDetailVO; import com.hzs.bonus.bonus.vo.MemberBonusDetailVO;
import com.hzs.common.core.constant.*; import com.hzs.common.core.constant.*;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.*; import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.ComputeUtil; import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils; import com.hzs.common.core.utils.DateUtils;
@ -70,6 +69,11 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
return handleMemberBonusPurchase(getCuMemberBonusExtList(bonusParam), bonusParam); return handleMemberBonusPurchase(getCuMemberBonusExtList(bonusParam), bonusParam);
} }
@Override
public List<CuMemberBonusExt> listMemberBonus(BonusParam bonusParam) {
return baseMapper.listMemberBonus(bonusParam);
}
private List<CuMemberBonusExt> handleMemberBonusPurchase(List<CuMemberBonusExt> cuMemberBonusExtList, BonusParam bonusParam) { private List<CuMemberBonusExt> handleMemberBonusPurchase(List<CuMemberBonusExt> cuMemberBonusExtList, BonusParam bonusParam) {
List<CuMemberBonusExt> memberBonusExtList = new ArrayList<>(); List<CuMemberBonusExt> memberBonusExtList = new ArrayList<>();
Map<String, CuMemberBonusExt> cuMemberBonusExtMap = new HashMap<>(); Map<String, CuMemberBonusExt> cuMemberBonusExtMap = new HashMap<>();
@ -86,36 +90,10 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
if (!DateUtils.compareDateEqual(endDate, DateUtils.beforeDate(1, ChronoUnit.DAYS, DateUtils.currentDate())) if (!DateUtils.compareDateEqual(endDate, DateUtils.beforeDate(1, ChronoUnit.DAYS, DateUtils.currentDate()))
|| DateUtils.compareDateTimeAfter(DateUtils.currentDateTime(), compareDate)) { || DateUtils.compareDateTimeAfter(DateUtils.currentDateTime(), compareDate)) {
CuMemberBonusExt cuMemberBonusExt = new CuMemberBonusExt(); CuMemberBonusExt cuMemberBonusExt = new CuMemberBonusExt();
cuMemberBonusExt.setSettleDate(endDate);
cuMemberBonusExt.setServiceSpend(BigDecimal.ZERO);
cuMemberBonusExt.setBackPoints(BigDecimal.ZERO);
cuMemberBonusExt.setDirectIncome(BigDecimal.ZERO);
cuMemberBonusExt.setExpandIncome(BigDecimal.ZERO);
cuMemberBonusExt.setCoachIncome(BigDecimal.ZERO);
cuMemberBonusExt.setShareIncome(BigDecimal.ZERO);
cuMemberBonusExt.setServiceIncome(BigDecimal.ZERO);
cuMemberBonusExt.setBackPoints(BigDecimal.ZERO);
cuMemberBonusExt.setServiceSpend(BigDecimal.ZERO);
cuMemberBonusExt.setPurRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurPushIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRangeIncome(BigDecimal.ZERO); cuMemberBonusExt.setRepurRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurExpandIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRepurRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCoupon(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCouponShare(BigDecimal.ZERO);
cuMemberBonusExt.setRepurCouponSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setGlobalPoints(BigDecimal.ZERO);
cuMemberBonusExt.setCarAwardPoints(BigDecimal.ZERO);
cuMemberBonusExt.setRealIncomeTotal(BigDecimal.ZERO);
cuMemberBonusExt.setStoreIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailRangeIncome(BigDecimal.ZERO); cuMemberBonusExt.setRetailRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailSameLevelIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailAreaIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailBenefitRangeIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailBenefitAvgIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailBenefitIncome(BigDecimal.ZERO);
cuMemberBonusExt.setRetailRealSubtotal(BigDecimal.ZERO); cuMemberBonusExt.setRetailRealSubtotal(BigDecimal.ZERO);
cuMemberBonusExt.setRealIncomeTotal(BigDecimal.ZERO);
memberBonusExtList.add(cuMemberBonusExt); memberBonusExtList.add(cuMemberBonusExt);
} }
} }
@ -124,48 +102,11 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
return memberBonusExtList; return memberBonusExtList;
} }
@Override
public List<CuMemberBonusExt> queryMemberSecondBonusVoByCondition(BonusParam bonusParam) {
return getCuMemberBonusExtList(bonusParam);
}
private List<CuMemberBonusExt> getCuMemberBonusExtList(BonusParam bonusParam) { private List<CuMemberBonusExt> getCuMemberBonusExtList(BonusParam bonusParam) {
if (bonusParam.getGrantStatus() == null) { if (bonusParam.getGrantStatus() == null) {
bonusParam.setGrantStatus(EGrantStatus.PUBLISHED.getValue()); bonusParam.setGrantStatus(EGrantStatus.PUBLISHED.getValue());
} }
List<CuMemberBonusExt> cuMemberBonusExtList = baseMapper.queryMemberBonusByCondition(bonusParam); return baseMapper.queryMemberBonusByCondition(bonusParam);
R<CurrencyDTO> currency = iCurrencyServiceApi.getCurrency(bonusParam.getPkCountry());
// 汇率比例
BigDecimal inExchangeRate = currency.getData().getInExchangeRate();
for (CuMemberBonusExt cuMemberBonusExt : cuMemberBonusExtList) {
cuMemberBonusExt.setDirectIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getDirectIncome(), inExchangeRate));
cuMemberBonusExt.setExpandIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getExpandIncome(), inExchangeRate));
cuMemberBonusExt.setCoachIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getCoachIncome(), inExchangeRate));
cuMemberBonusExt.setShareIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getShareIncome(), inExchangeRate));
cuMemberBonusExt.setServiceIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getServiceIncome(), inExchangeRate));
cuMemberBonusExt.setBackPoints(ComputeUtil.computeMultiply(cuMemberBonusExt.getBackPoints(), inExchangeRate));
cuMemberBonusExt.setServiceSpend(ComputeUtil.computeMultiply(cuMemberBonusExt.getServiceSpend(), inExchangeRate));
cuMemberBonusExt.setPurRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getPurRealSubtotal(), inExchangeRate));
cuMemberBonusExt.setRepurPushIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurPushIncome(), inExchangeRate));
cuMemberBonusExt.setRepurRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurRangeIncome(), inExchangeRate));
cuMemberBonusExt.setRepurExpandIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurExpandIncome(), inExchangeRate));
cuMemberBonusExt.setRepurRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurRealSubtotal(), inExchangeRate));
cuMemberBonusExt.setRepurCoupon(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurCoupon(), inExchangeRate));
cuMemberBonusExt.setRepurCouponShare(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurCouponShare(), inExchangeRate));
cuMemberBonusExt.setRepurCouponSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRepurCouponSubtotal(), inExchangeRate));
cuMemberBonusExt.setGlobalPoints(ComputeUtil.computeMultiply(cuMemberBonusExt.getGlobalPoints(), inExchangeRate));
cuMemberBonusExt.setCarAwardPoints(ComputeUtil.computeMultiply(cuMemberBonusExt.getCarAwardPoints(), inExchangeRate));
cuMemberBonusExt.setRealIncomeTotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRealIncomeTotal(), inExchangeRate));
cuMemberBonusExt.setStoreIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getStoreIncome(), inExchangeRate));
cuMemberBonusExt.setRetailRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailRangeIncome(), inExchangeRate));
cuMemberBonusExt.setRetailSameLevelIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailSameLevelIncome(), inExchangeRate));
cuMemberBonusExt.setRetailAreaIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailAreaIncome(), inExchangeRate));
cuMemberBonusExt.setRetailBenefitRangeIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailBenefitRangeIncome(), inExchangeRate));
cuMemberBonusExt.setRetailBenefitAvgIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailBenefitAvgIncome(), inExchangeRate));
cuMemberBonusExt.setRetailBenefitIncome(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailBenefitIncome(), inExchangeRate));
cuMemberBonusExt.setRetailRealSubtotal(ComputeUtil.computeMultiply(cuMemberBonusExt.getRetailRealSubtotal(), inExchangeRate));
}
return cuMemberBonusExtList;
} }
@Override @Override
@ -424,15 +365,7 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
@Override @Override
public List<CuMemberBonus> queryCuMemberBonusByCondition(Integer pkCountry, Integer grantStatus, Integer startPeriod, Integer endPeriod) { public List<CuMemberBonus> queryCuMemberBonusByCondition(Integer pkCountry, Integer grantStatus, Integer startPeriod, Integer endPeriod) {
QueryWrapper<CuMemberBonus> queryWrapper = new QueryWrapper<>(); QueryWrapper<CuMemberBonus> queryWrapper = new QueryWrapper<>();
queryWrapper.select("pk_member,pk_rate,pk_country,sum(direct_income) direct_income,sum(expand_income) expand_income,sum(expand_no_capping) expand_no_capping," + queryWrapper.select("pk_member,pk_rate,pk_country,sum(real_income_total) real_income_total");
"sum(expand_capping) expand_capping,sum(coach_income) coach_income,sum(share_income) share_income," +
"sum(service_income) service_income,sum(back_points) back_points,sum(service_spend) service_spend," +
"sum(pur_real_subtotal) pur_real_subtotal,sum(repur_range_income) repur_range_income,sum(repur_expand_income) repur_expand_income," +
"sum(repur_real_subtotal) repur_real_subtotal,sum(cloud_direct_income) cloud_direct_income,sum(cloud_pur_income) cloud_pur_income," +
"sum(cloud_repur_income) cloud_repur_income,sum(cloud_real_subtotal) cloud_real_subtotal,sum(repur_coupon) repur_coupon," +
"sum(REPUR_COUPON_SHARE) REPUR_COUPON_SHARE,sum(REPUR_COUPON_SUBTOTAL) REPUR_COUPON_SUBTOTAL," +
"sum(global_points) global_points,sum(car_award_points) car_award_points,sum(hi_fun_income) hi_fun_income," +
"sum(real_income_total) real_income_total");
queryWrapper.eq(SystemFieldConstants.PK_COUNTRY, pkCountry); queryWrapper.eq(SystemFieldConstants.PK_COUNTRY, pkCountry);
queryWrapper.eq(MemberBonusFieldConstants.GRANT_STATUS, grantStatus); queryWrapper.eq(MemberBonusFieldConstants.GRANT_STATUS, grantStatus);
queryWrapper.eq(MemberBonusFieldConstants.INCOME_STATUS, ENormalDisable.NORMAL.getValue()); queryWrapper.eq(MemberBonusFieldConstants.INCOME_STATUS, ENormalDisable.NORMAL.getValue());

View File

@ -73,7 +73,7 @@ public class MemberBonusFirstPurchaseVO extends PubMemberBonusVO {
// private BigDecimal repurRealSubtotal; // private BigDecimal repurRealSubtotal;
/** /**
* 新零售直推收益 * 直推级差收益
*/ */
@BigDecimalFormat @BigDecimalFormat
private BigDecimal retailRangeIncome; private BigDecimal retailRangeIncome;

View File

@ -2,85 +2,6 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.account.mapper.CuMemberTradeMapper"> <mapper namespace="com.hzs.bonus.account.mapper.CuMemberTradeMapper">
<!-- 通用查询映射结果 -->
<resultMap id="CuMemberTrade" type="com.hzs.common.domain.member.account.CuMemberTrade">
<id column="PK_ID" property="pkId"/>
<result column="DEL_FLAG" property="delFlag"/>
<result column="PK_COUNTRY" property="pkCountry"/>
<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_MEMBER" property="pkMember"/>
<result column="TRADE_CODE" property="tradeCode"/>
<result column="PK_ACCOUNT" property="pkAccount"/>
<result column="TRADE_TYPE" property="tradeType"/>
<result column="TRADE_CLASSIFY" property="tradeClassify"/>
<result column="PK_RATE" property="pkRate"/>
<result column="TRADE_AMOUNT" property="tradeAmount"/>
<result column="TRADE_BALANCE" property="tradeBalance"/>
<result column="TRADE_BEFORE_BALANCE" property="tradeBeforeBalance"/>
<result column="SOURCE_CODE" property="sourceCode"/>
<result column="TRADE_STATUE" property="tradeStatue"/>
<result column="REMARKS" property="remarks"/>
</resultMap>
<sql id="select_base">
select t.*, m.member_code as memberCode, m.member_name as memberName
from cu_member_trade t
left join cu_member m
on t.pk_member = m.pk_id
</sql>
<sql id="ids_where">
<where>
t.del_flag='0'
and t.pk_id in
<foreach collection="pkIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</where>
</sql>
<sql id="list_where">
<where>
t.del_flag='0'
<if test="memberName != null and memberName != ''">
and m.member_name like #{memberName} || '%'
</if>
<if test="memberCode != null and memberCode != ''">
and m.member_code like #{memberCode} || '%'
</if>
<if test="tradeAmount != null">
and t.TRADE_AMOUNT = #{tradeAmount}
</if>
<if test="remarks != null and remarks != ''">
and m.REMARKS like #{remarks} || '%'
</if>
<if test="pkAccount != null">
and t.PK_ACCOUNT = #{pkAccount}
</if>
<if test="tradeType != null">
and t.TRADE_TYPE = #{tradeType}
</if>
<if test="sourceCode != null and sourceCode != ''">
and t.SOURCE_CODE = #{sourceCode}
</if>
<if test="pkCountry != null">
and t.pk_country = #{pkCountry}
</if>
<if test="tradeClassify != null">
and t.TRADE_CLASSIFY = #{tradeClassify}
</if>
<if test="startDate != null and startDate != ''">
and t.CREATION_TIME >= to_date(#{startDate}, 'yyyy-mm-dd')
</if>
<if test="endDate != null and endDate != ''">
and t.CREATION_TIME &lt;= to_date(#{endDate} || ' 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
</if>
</where>
</sql>
<update id="batchInsertCuMemberTrade"> <update id="batchInsertCuMemberTrade">
merge into cu_member_trade a merge into cu_member_trade a
using ( using (

View File

@ -51,6 +51,20 @@
and cp.settle_date = #{settleDate, jdbcType=DATE} and cp.settle_date = #{settleDate, jdbcType=DATE}
</select> </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"> <select id="queryMemberSettlePeriodByCondition" resultMap="CuMemberSettlePeriodExt">
<include refid="memberPeriod"></include> <include refid="memberPeriod"></include>
and cd.pk_country=#{pkCountry} and cd.pk_country=#{pkCountry}

View File

@ -185,6 +185,45 @@
order by cp.settle_date desc order by cp.settle_date desc
</select> </select>
<!-- 查询会员奖金明细 -->
<select id="listMemberBonus" resultMap="CuMemberBonus">
select tmp.settle_date,
sum(tmp.repur_range_income) repur_range_income,
sum(tmp.retail_range_income) retail_range_income,
sum(tmp.retail_real_subtotal) retail_real_subtotal,
sum(tmp.real_income_total) real_income_total
from (select case
when EXTRACT(DAY FROM cp.settle_date) >= 24 or
EXTRACT(DAY FROM cp.settle_date) &lt; 7 then
to_date(to_char(cp.settle_date, 'yyyy-mm') || '-' || 15,
'yyyy-mm-dd')
else
LAST_DAY(cp.settle_date)
end settle_date,
cb.repur_range_income,
cb.retail_range_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 cb.pk_member = #{pkMember}
and cp.del_flag = 0
<if test="grantStatus != null">
and cb.grant_status >= #{grantStatus}
</if>
<if test="startDate != null">
and cp.settle_date >= #{startDate, jdbcType=DATE}
</if>
<if test="endDate != null">
and cp.settle_date &lt; #{endDate, jdbcType=DATE}
</if>
) tmp
group by tmp.settle_date
order by tmp.settle_date desc
</select>
<select id="queryMemberBonusByConditionForServer" resultMap="CuMemberBonus"> <select id="queryMemberBonusByConditionForServer" resultMap="CuMemberBonus">
select cm.member_code, cm.member_name, select cm.member_code, cm.member_name,
cm.pk_settle_grade, cm.pk_awards, cm.pk_settle_grade, cm.pk_awards,

View File

@ -40,7 +40,7 @@ public class BonusMsgConstants {
public static final String GRANT_VALIDATE_DATE = "只能发放7天以外的奖金"; public static final String GRANT_VALIDATE_DATE = "只能发放7天以外的奖金";
/** /**
* 奖金发放 -- 只能提现14天以外的奖金 * 奖金发放 -- 只能提现7天以外的奖金
*/ */
public static final String WITHDRAW_VALIDATE_DATE = "只能提现14天以外的奖金!"; public static final String WITHDRAW_VALIDATE_DATE = "只能提现7天以外的奖金!";
} }

View File

@ -19,8 +19,8 @@ import java.util.Date;
public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static final String YYYY = "yyyy"; public static final String YYYY = "yyyy";
public static final String MM = "MM"; public static final String MM = "MM";
public static final String DD = "dd";
public static final String YYYYMM = "yyyyMM"; public static final String YYYYMM = "yyyyMM";
public static final String YYYY_MM = "yyyy-MM"; public static final String YYYY_MM = "yyyy-MM";