From 80a694af293a21182c14fd357a6eba27d93645a6 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 28 Sep 2021 22:57:32 +0800
Subject: [PATCH] fix return money
---
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java | 6 +
src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java | 2
src/test/java/cc/mrbird/febs/AgentTest.java | 13 +++
src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java | 8 ++
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java | 2
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java | 86 ++++++++++++++++++++++++++++
src/main/resources/mapper/modules/MallMemberMapper.xml | 6 +
src/main/resources/mapper/modules/MallMoneyFlowMapper.xml | 13 ++++
sql/xc_mall.sql | 2
src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java | 7 ++
10 files changed, 139 insertions(+), 6 deletions(-)
diff --git a/sql/xc_mall.sql b/sql/xc_mall.sql
index 6dc6ffd..19039be 100644
--- a/sql/xc_mall.sql
+++ b/sql/xc_mall.sql
@@ -371,3 +371,5 @@
PRIMARY KEY (ID)
) COMMENT = '新闻中心';
+alter table mall_money_flow add is_return int null comment '是否返利';
+
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
index 4c9b233..b4a28d6 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -36,7 +36,11 @@
/**
* 排名奖励
*/
- RANK(7);
+ RANK(7),
+ /**
+ * 利润分红
+ */
+ PARENT_BONUS(8);
private final int value;
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java
index f0c5a05..334f1ef 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java
@@ -19,7 +19,7 @@
private BigDecimal amount;
/**
- * 流水类型 1-直推奖励 2-团队奖励 3-订单支付 4-退款 5-转账 6-提现 7-排名奖励
+ * 流水类型 1-直推奖励 2-团队奖励 3-订单支付 4-退款 5-转账 6-提现 7-排名奖励 8-利润分红
*/
private Integer type;
@@ -35,4 +35,10 @@
* 提现状态 1-提现中2-成功 3-拒绝
*/
private Integer status;
+
+ /**
+ * 是否返利 1-是 2-否
+ */
+ private Integer isReturn;
+ public static final Integer IS_RETURN_Y = 1;
}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
index d884b6a..90d483c 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
@@ -61,4 +61,6 @@
BigDecimal getAgentTeamAmountByInviteId(@Param("inviteId")String inviteId);
IPage<AppVersion> getAppVersionListInPage(Page<AppVersion> page, AppVersion appVersion);
+
+ List<MallMember> selectByIdAndNoLevel(@Param("refererId") String refererId, @Param("level") String level);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
index 5cb4c6c..7af83d1 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
@@ -14,6 +14,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
+import java.util.Date;
+import java.util.List;
+
public interface MallMoneyFlowMapper extends BaseMapper<MallMoneyFlow> {
IPage<AdminMallMoneyFlowVo> selectMoneyFlowInPage(Page<AdminMallMoneyFlowVo> page, @Param("record")MallMember mallMember);
@@ -23,4 +26,8 @@
IPage<AdminMoneyFlowListVo> getMoneyFlowListInPage(Page<AdminMoneyFlowListVo> page, @Param("record")MoneyFlowListDto moneyFlowListDto);
IPage<AdminMoneyChargeListVo> getMoneyChargeListInPage(Page<AdminMoneyChargeListVo> page, @Param("record")MoneyChargeListDto moneyChargeListDto);
+
+ List<MallMoneyFlow> selectMoneyFlowProfitByDate(@Param("date") Date date);
+
+ int updateIsReturnByMemberId(@Param("isReturn") Integer isReturn, @Param("memberId") Long memberId);
}
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
new file mode 100644
index 0000000..4d7a98b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -0,0 +1,86 @@
+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 0 1 * * ?")
+ @Transactional(rollbackFor = Exception.class)
+ public void profitJob() {
+ 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());
+ }
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
index a5035d3..fd287fe 100644
--- a/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
+++ b/src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java
@@ -50,7 +50,7 @@
}
}
-// @RabbitListener(queues = QueueConstants.AGENT_RETURN_MONEY)
+ @RabbitListener(queues = QueueConstants.AGENT_RETURN_MONEY)
public void agentReturnMoney(String orderId) {
log.info("收到返利消息:{}", orderId);
try{
diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml
index f4e1145..c53f2b6 100644
--- a/src/main/resources/mapper/modules/MallMemberMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -159,7 +159,7 @@
<select id="selectMemberParentAgentList" resultType="cc.mrbird.febs.mall.entity.MallMember">
select * from mall_member
- where level not in ('ZERO_LEVEL', 'FIRST_LEVEL') and invteId!=#{refererId} and invite_id IN
+ where level not in ('ZERO_LEVEL', 'FIRST_LEVEL') and invite_id!=#{refererId} and invite_id IN
<foreach collection = "list" item = "item" separator="," open = "(" close = ")" >
#{item}
</foreach >
@@ -208,4 +208,8 @@
<select id="getAppVersionListInPage" resultType="cc.mrbird.febs.mall.entity.AppVersion">
select a.* from app_version a
</select>
+
+ <select id="selectByIdAndNoLevel" resultType="cc.mrbird.febs.mall.entity.MallMember">
+ select * from mall_member where referrer_id=#{refererId} and level != #{level}
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
index e84f635..6b9836e 100644
--- a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
+++ b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
@@ -81,4 +81,17 @@
</where>
order by a.created_time desc
</select>
+
+ <select id="selectMoneyFlowProfitByDate" resultType="cc.mrbird.febs.mall.entity.MallMoneyFlow">
+ select a.member_id, sum(a.amount) amount from mall_money_flow a
+ where a.type in (1, 2) and date_format(now(), '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+ and is_return is null
+ group by a.member_id;
+ </select>
+
+ <update id="updateIsReturnByMemberId">
+ update mall_money_flow
+ set is_return=#{isReturn}
+ where member_id=#{memberId} and type in (1, 2)
+ </update>
</mapper>
\ No newline at end of file
diff --git a/src/test/java/cc/mrbird/febs/AgentTest.java b/src/test/java/cc/mrbird/febs/AgentTest.java
index b9ad05c..3431bfb 100644
--- a/src/test/java/cc/mrbird/febs/AgentTest.java
+++ b/src/test/java/cc/mrbird/febs/AgentTest.java
@@ -5,6 +5,7 @@
import cc.mrbird.febs.mall.entity.AgentInfo;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
+import cc.mrbird.febs.mall.quartz.ProfitJob;
import cc.mrbird.febs.mall.service.IAgentService;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import com.alibaba.fastjson.JSONObject;
@@ -99,9 +100,9 @@
@Test
public void autoLevelUp() {
// agentService.autoUpAgentLevel(3L);
- agentProducer.sendAutoLevelUpMsg(5L);
+// agentProducer.sendAutoLevelUpMsg(5L);
-// agentProducer.sendReturnMoneyMsg(24L);
+ agentProducer.sendReturnMoneyMsg(2L);
}
@Test
@@ -111,4 +112,12 @@
System.out.println(aa.setScale(2, RoundingMode.DOWN));
System.out.println(aa.setScale(2, RoundingMode.UP));
}
+
+ @Autowired
+ private ProfitJob profitJob;
+
+ @Test
+ public void profitJobTest() {
+ profitJob.profitJob();
+ }
}
--
Gitblit v1.9.1