From 113f3a5d3b843fba68ce50a3ba3255c66ca1e15f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 17 Jan 2023 20:13:57 +0800
Subject: [PATCH] 20221227 充值归集
---
src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java | 216 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 214 insertions(+), 2 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java
index c9ca6a6..0828c17 100644
--- a/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java
@@ -1,16 +1,25 @@
package cc.mrbird.febs.mall.quartz;
-import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
-import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.common.enumerates.*;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.mall.mapper.MallMemberMapper;
+import cc.mrbird.febs.mall.mapper.MallMemberStarBuyMapper;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
+import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@@ -24,6 +33,21 @@
@Autowired
private MallOrderInfoMapper orderInfoMapper;
+
+ @Autowired
+ private MallMemberMapper mallMemberMapper;
+
+ @Autowired
+ private DataDictionaryCustomMapper dataDictionaryCustomMapper;
+
+ @Autowired
+ private MallMemberStarBuyMapper mallMemberStarBuyMapper;
+
+ @Autowired
+ private IApiMallMemberWalletService memberWalletService;
+
+ @Autowired
+ private IMallMoneyFlowService mallMoneyFlowService;
@Scheduled(cron = "0 0/5 * * * ? ")
public void overtimeJob() {
@@ -42,4 +66,192 @@
}
}
+
+ @Scheduled(cron = "0 0 2 * * ? ")
+ public void returnBuyStarAmount(){
+ log.info("会员星级保证金返还任务执行");
+ /**
+ * 1、生效中的记录
+ * 2、判断剩余返还金额
+ * 3、生成流水记录
+ * 4、增加用户金额
+ */
+ //生效中记录
+ List<MallMemberStarBuy> mallMemberStarBuys = mallMemberStarBuyMapper.selectByStatus(1);
+ if(CollUtil.isEmpty(mallMemberStarBuys)){
+ return;
+ }
+ for(MallMemberStarBuy mallMemberStarBuy : mallMemberStarBuys){
+ Long memberId = mallMemberStarBuy.getMemberId();
+ MallMember mallMember = mallMemberMapper.selectById(memberId);
+ //用户不存在跳出本次循环
+ if(ObjectUtil.isEmpty(mallMember)){
+ continue;
+ }
+ //返还总金额
+ BigDecimal amount = mallMemberStarBuy.getAmount();
+ //剩余返还总金额不足,跳出本次循环
+ BigDecimal avaAmount = mallMemberStarBuy.getAvaAmount();
+ if(avaAmount.compareTo(BigDecimal.ZERO) <= 0){
+ continue;
+ }
+ //每次返还比例
+ DataDictionaryCustom returnPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ DataDictionaryEnum.RETURN_PERCENT.getType(),
+ DataDictionaryEnum.RETURN_PERCENT.getCode()
+ );
+ String returnPercentStr = returnPercentDic.getValue();
+ BigDecimal returnPercent = new BigDecimal(returnPercentStr).multiply(new BigDecimal(0.01)).setScale(2,BigDecimal.ROUND_DOWN);
+ //本次返还金额
+ BigDecimal returnAmount = amount.multiply(returnPercent).setScale(2,BigDecimal.ROUND_DOWN);
+ /**
+ * 如果本次返还金额大于剩余返还总金额
+ */
+ if(returnAmount.compareTo(avaAmount) >= 0){
+ returnAmount = avaAmount;
+ avaAmount = BigDecimal.ZERO;
+ }else{
+ avaAmount = avaAmount.subtract(returnAmount).setScale(2,BigDecimal.ROUND_DOWN);
+ }
+ //增加用户金额
+ memberWalletService.addBalance(returnAmount,mallMember.getId());
+ //生成流水记录
+ Long subsidyAmountFlowId = mallMoneyFlowService.addMoneyFlow(
+ mallMember.getId(),
+ mallMemberStarBuy.getBuyCode(),
+ returnAmount,
+ MallMoneyFlowTypeEnum.RETURN_MARKET_STAR.getCode(),
+ MallMoneyFlow.STATUS_SUCCESS,
+ MallMoneyFlow.IS_RETURN_Y,
+ mallMember.getId(),
+ FlowTypeEnum.BALANCE.getValue(),
+ MallMoneyFlowTypeEnum.RETURN_MARKET_STAR.getName()
+ );
+ //更新记录
+ mallMemberStarBuyMapper.updateAvaAmountById(avaAmount,mallMemberStarBuy.getId());
+ }
+ }
+
+ @Scheduled(cron = "0 30 2 * * ? ")
+ public void updateMemberAccountLevelAndBuyStarRecord(){
+ log.info("会员星级更新任务执行");
+ //生效中的记录
+ List<MallMemberStarBuy> mallMemberStarBuys = mallMemberStarBuyMapper.selectByStatus(1);
+ if(CollUtil.isEmpty(mallMemberStarBuys)){
+ return;
+ }
+ for(MallMemberStarBuy mallMemberStarBuy : mallMemberStarBuys){
+ Long memberId = mallMemberStarBuy.getMemberId();
+ MallMember mallMember = mallMemberMapper.selectById(memberId);
+ //用户不存在跳出本次循环
+ if(ObjectUtil.isEmpty(mallMember)){
+ continue;
+ }
+ BigDecimal avaAmount = mallMemberStarBuy.getAvaAmount();
+ /**
+ * 剩余返还总金额等于零,更新为已结束
+ * 判断用户是否还有其他的购买星级的生效记录
+ */
+ if(BigDecimal.ZERO.compareTo(avaAmount) >= 0){
+ mallMemberStarBuyMapper.updateStatusById(2,mallMemberStarBuy.getId());
+ List<MallMemberStarBuy> mallMemberStarBuysIng = mallMemberStarBuyMapper.selectByStatusAndMemberId(1,memberId);
+ //如果没有其他生效中的记录,则更新用户的星级为普通,更新会员代理等级为代理
+ if(CollUtil.isEmpty(mallMemberStarBuysIng)){
+ mallMemberMapper.updateAccountLevelById(MemberAccountLevelEnum.NORMAL.getName(), memberId);
+
+ //如果代理等级为手动设置,则跳过该会员
+ int levelStatus = ObjectUtil.isEmpty(mallMember.getLevelStatus()) ? 0 : 1;
+ if(1 == levelStatus){
+ continue;
+ }
+ mallMemberMapper.updateLevelById(MemberAgentLevelEnum.AGENT.getName(),mallMember.getId());
+ }
+ }
+ }
+ }
+
+ @Scheduled(cron = "0 0 1 * * ? ")
+ public void updateMemberAgentLevel() {
+ log.info("会员代理等级升级任务执行");
+ /**
+ * 获取会员信息
+ * 1、已经升级成为一星
+ */
+ /**
+ * 区代
+ * 1、自身一星
+ * 2、直推三个星级
+ * 3、团队五个星级
+ */
+ updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_ONE.getType(),DataDictionaryEnum.AGENT_ONE.getCode());
+ /**
+ * 县代
+ * 1、自身2星
+ * 2、直推5个星级
+ * 3、团队50个星级
+ */
+ updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_TWO.getType(),DataDictionaryEnum.AGENT_TWO.getCode());
+ updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_THREE.getType(),DataDictionaryEnum.AGENT_THREE.getCode());
+ updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_FOUR.getType(),DataDictionaryEnum.AGENT_FOUR.getCode());
+ updateMemberAgentLevelByName(DataDictionaryEnum.AGENT_FIVE.getType(),DataDictionaryEnum.AGENT_FIVE.getCode());
+ }
+
+ private void updateMemberAgentLevelByName(String name,String code){
+ DataDictionaryCustom agentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+ name,
+ code
+ );
+ JSONObject jsonObject = JSONUtil.parseObj(agentDic.getValue());
+ //自身星级
+ String levelSelf = jsonObject.get("levelSelf").toString();
+ //直推星级数量
+ String directLevelCnt = jsonObject.get("directLevelCnt").toString();
+ //团队星级数量
+ String teamLevelCnt = jsonObject.get("teamLevelCnt").toString();
+ //两个市场均有上一个代理等级
+ String minTeamLevelCnt = jsonObject.get("minTeamLevelCnt").toString();
+ List<MallMember> agentLevelList = mallMemberMapper.selectByAccountLevel(levelSelf);
+ if(CollUtil.isNotEmpty(agentLevelList)){
+ for(MallMember mallMember : agentLevelList){
+ //如果代理等级为手动设置,则跳过该会员
+ int levelStatus = ObjectUtil.isEmpty(mallMember.getLevelStatus()) ? 0 : 1;
+ if(1 == levelStatus){
+ continue;
+ }
+ //有星级的直推
+ Integer directCnt = mallMemberMapper.selectByRefererIdAndAccountLevel(mallMember.getInviteId(),MemberAccountLevelEnum.NORMAL.getName());
+ //团队中星级会员数量
+ Integer teamCnt = mallMemberMapper.selectByReferersIdAndAccountLevel(mallMember.getInviteId(),MemberAccountLevelEnum.NORMAL.getName());
+ //两个市场均有上一个代理等级
+ Integer minCnt = 0;
+ if(0 < Integer.parseInt(minTeamLevelCnt)){
+ String minLevel = MemberAgentLevelEnum.AGENT_ONE.minLevel(code);
+ //获取所有直推用户
+ List<MallMember> mallMembers = mallMemberMapper.selectByRefererId(mallMember.getInviteId());
+ if(CollUtil.isNotEmpty(mallMembers) && mallMembers.size() > 2){
+ Integer levelCnt = 0;
+ for(MallMember directMember : mallMembers){
+ Integer minlevelCnt = mallMemberMapper.selectByReferersIdAndLevel(directMember.getInviteId(),minLevel);
+ if(0 < minlevelCnt){
+ levelCnt = levelCnt + 1;
+ }
+ if(levelCnt >= Integer.parseInt(minTeamLevelCnt)){
+ minCnt = 1;
+ break;
+ }
+ }
+ }
+ }else{
+ //区代不需要判断这个市场条件
+ minCnt = 1;
+ }
+ if(Integer.parseInt(directLevelCnt) <= directCnt
+ && Integer.parseInt(teamLevelCnt) <= teamCnt
+ && minCnt > 0){
+ //更新会员代理等级
+ mallMemberMapper.updateLevelById(MemberAgentLevelEnum.AGENT_ONE.getNameByCode(code),mallMember.getId());
+ }
+ }
+ }
+ }
}
--
Gitblit v1.9.1