package cc.mrbird.febs.mall.quartz;
|
|
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
|
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
|
import cc.mrbird.febs.common.utils.MallUtils;
|
import cc.mrbird.febs.mall.entity.MallMember;
|
import cc.mrbird.febs.mall.entity.MallMoneyFlow;
|
import cc.mrbird.febs.mall.mapper.MallMemberMapper;
|
import cc.mrbird.febs.mall.mapper.MallMoneyFlowMapper;
|
import cc.mrbird.febs.mall.service.IApiMallMemberService;
|
import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
|
import cc.mrbird.febs.mall.service.impl.CommonService;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @author wzy
|
* @date 2021-09-28
|
**/
|
@Slf4j
|
@Component
|
public class ProfitJob {
|
|
@Autowired
|
private MallMoneyFlowMapper moneyFlowMapper;
|
|
@Autowired
|
private MallMemberMapper memberMapper;
|
|
@Autowired
|
private IApiMallMemberWalletService memberWalletService;
|
|
@Autowired
|
private IApiMallMemberService memberService;
|
|
@Scheduled(cron = "0 1 0 * * ?")
|
@Transactional(rollbackFor = Exception.class)
|
public void profitJob() {
|
log.info("推荐人返利执行");
|
DateTime yesterday = DateUtil.yesterday();
|
List<MallMoneyFlow> flows = moneyFlowMapper.selectMoneyFlowProfitByDate(yesterday);
|
|
if (CollUtil.isEmpty(flows)) {
|
return;
|
}
|
|
for (MallMoneyFlow flow : flows) {
|
MallMember member = memberMapper.selectById(flow.getMemberId());
|
|
List<MallMember> child = memberMapper.selectByIdAndNoLevel(member.getInviteId(), AgentLevelEnum.ZERO_LEVEL.name());
|
if (CollUtil.isEmpty(child)) {
|
continue;
|
}
|
int size = child.size();
|
BigDecimal needReturn = flow.getAmount().multiply(BigDecimal.valueOf(0.1));
|
|
String orderNo = MallUtils.getOrderNum("R");
|
String remarkFormat = "{}, 用户:{}, 利润分红: {}";
|
|
BigDecimal returnMoney = needReturn.divide(BigDecimal.valueOf(size), 2, RoundingMode.DOWN);
|
for (MallMember mallMember : child) {
|
memberWalletService.addBalance(returnMoney, mallMember.getId());
|
|
String remark = StrUtil.format(remarkFormat, DateUtil.format(yesterday, "yyyy-MM-dd"), member.getName(), returnMoney);
|
memberService.addMoneyFlow(mallMember.getId(), returnMoney, MoneyFlowTypeEnum.PARENT_BONUS.getValue(), orderNo, null, remark, member.getId(), null);
|
}
|
|
String remark = StrUtil.format(remarkFormat, DateUtil.format(yesterday, "yyyy-MM-dd"), member.getName(), needReturn);
|
memberService.addMoneyFlow(member.getId(), needReturn.negate(), MoneyFlowTypeEnum.PARENT_BONUS.getValue(), orderNo, null, remark, null, null);
|
memberWalletService.reduceBalance(needReturn, member.getId());
|
|
moneyFlowMapper.updateIsReturnByMemberId(MallMoneyFlow.IS_RETURN_Y, flow.getMemberId());
|
}
|
}
|
}
|