Helius
2021-09-28 80a694af293a21182c14fd357a6eba27d93645a6
fix return money
1 files added
9 files modified
145 ■■■■■ changed files
sql/xc_mall.sql 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java 6 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallMoneyFlow.java 8 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java 86 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/rabbit/consumer/AgentConsumer.java 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMemberMapper.xml 6 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMoneyFlowMapper.xml 13 ●●●●● patch | view | raw | blame | history
src/test/java/cc/mrbird/febs/AgentTest.java 13 ●●●● patch | view | raw | blame | history
sql/xc_mall.sql
@@ -371,3 +371,5 @@
   PRIMARY KEY (ID)
)  COMMENT = '新闻中心';
alter table mall_money_flow add is_return int null comment '是否返利';
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;
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;
}
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);
}
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);
}
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
New file
@@ -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());
        }
    }
}
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{
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>
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>
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();
    }
}