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