直推奖励,冻结的用户,则直推奖励销毁,用户未冻结才能领取成功
10 files modified
127 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/utils/AppContants.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberAmountMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAgentService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IMallMoneyFlowService.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java 87 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/MallMoneyFlowServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMemberAmountMapper.xml 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,6 +5,9 @@
@Getter
public enum DataDictionaryEnum {
    //直推补贴
    BASIC_PERK_DIRECT_FROZEN("BASIC_PERK_DIRECT_FROZEN","BASIC_PERK_DIRECT_FROZEN"),
    BASIC_PERK_DIRECT("BASIC_PERK_DIRECT","BASIC_PERK_DIRECT"),
    /**
     * 预约开始时间
     * 预约结束时间
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
@@ -10,6 +10,9 @@
 **/
@Getter
public enum MoneyFlowTypeNewEnum {
    BASIC_PERK_DIRECT_DONE(18,"直推奖励"),
    BASIC_PERK_DIRECT_WRONG(17,"账户冻结,遗憾错失直推奖励"),
    BASIC_PERK_DIRECT(16,"即将获得直推奖励"),
    SYSTEM_PEY(15,"系统拨付"),
    NFT_OUT_FEE_FCM(14,"NFT提现GFA手续费"),
    TOKEN_BUY_FROZEN_RETURN(13,"预约门票"),
src/main/java/cc/mrbird/febs/common/utils/AppContants.java
@@ -76,4 +76,10 @@
    public static final String MEMBER_WITHDRAW_VOUCHER = "凭证提现";
    public static final String MEMBER_WITHDRAW_VOUCHER_AMOUNT = "凭证现金提现";
    public static final int MEMBER_FLOW_ING = 1;
    public static final int MEMBER_FLOW_DONE = 2;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallMemberAmountMapper.java
@@ -19,4 +19,6 @@
    void updateTrendsNftById(@Param("record")MallMemberAmount mallMemberAmount);
    void updateFrozenNftById(@Param("record")MallMemberAmount mallMemberAmount);
    void updateTrendsNftAndFrozenNftById(@Param("record")MallMemberAmount mallMemberAmount);
}
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -143,6 +143,16 @@
        agentService.timeGetOrderBuyCancel();
    }
    /**
     * 直推奖励
     * 从冻结到可用
     */
    @Scheduled(cron = "0 0 0/2 * * ? ")
    public void basicMemberPerk() {
        agentService.basicMemberPerk();
    }
//    /**
//     * 卖单
//     * 看是否是开始显示订单的时间段,超出结束时间的卖单,全部超时失败
src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -47,4 +47,6 @@
    void timeGetOrderSell();
    void timeGetOrderBuyCancel();
    void basicMemberPerk();
}
src/main/java/cc/mrbird/febs/mall/service/IMallMoneyFlowService.java
@@ -16,5 +16,6 @@
    void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, Long rtMemberId, Integer flowType);
    void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, Long rtMemberId, Integer flowType, String description);
    void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, Long rtMemberId, Integer flowType, String description,Integer isReturn);
}
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -871,8 +871,39 @@
                    MallMember mallMember = memberMapper.selectById(memberId);
                    if(ObjectUtil.isNotEmpty(mallMember)){
                        //直推
                        String referrerId = mallMember.getReferrerId();
                        MallMember directMember = memberMapper.selectInfoByInviteId(referrerId);
                        if(ObjectUtil.isNotEmpty(directMember)){
                            BigDecimal basicPerkDirectPercent = new BigDecimal(dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                    DataDictionaryEnum.BASIC_PERK_DIRECT.getType(),
                                    DataDictionaryEnum.BASIC_PERK_DIRECT.getCode()
                            ).getValue()).multiply(new BigDecimal("0.01"));
                            BigDecimal basicPerkDirect = profit.multiply(basicPerkDirectPercent).setScale(2, BigDecimal.ROUND_DOWN);
                            /**
                             * 先插入流水记录,然后定时器每小时,循环一次找寻对应的数据执行
                             */
                            String frozenDays = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                                    DataDictionaryEnum.BASIC_PERK_DIRECT_FROZEN.getType(),
                                    DataDictionaryEnum.BASIC_PERK_DIRECT_FROZEN.getCode()
                            ).getValue();
                            String orderNo = MallUtils.getOrderNum("FNFT");
                            mallMoneyFlowService.addMoneyFlow(
                                    directMember.getId(),
                                    basicPerkDirect,
                                    MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getValue(),
                                    orderNo,
                                    null,
                                    FlowTypeNewEnum.NFT.getValue(),
                                    MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getDescrition(),
                                    AppContants.MEMBER_FLOW_ING);
                            MallMemberAmount mallMemberAmountDirect = mallMemberAmountMapper.selectByMemberId(directMember.getId());
                            mallMemberAmountDirect.setFrozenNft(mallMemberAmountDirect.getFrozenNft().add(basicPerkDirect));
                            mallMemberAmountMapper.updateFrozenNftById(mallMemberAmountDirect);
                    }
                    }
                }
            }
        }
@@ -1036,6 +1067,62 @@
        }
    }
    @Override
    public void basicMemberPerk() {
        QueryWrapper<MallMoneyFlow> queryMallMoneyFlow = new QueryWrapper<>();
        queryMallMoneyFlow.eq("type",MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT.getValue());
        queryMallMoneyFlow.eq("is_return",AppContants.MEMBER_FLOW_ING);
        queryMallMoneyFlow.eq("flow_type",FlowTypeNewEnum.NFT.getValue());
        List<MallMoneyFlow> mallMoneyFlows = mallMoneyFlowMapper.selectList(queryMallMoneyFlow);
        if(CollUtil.isNotEmpty(mallMoneyFlows)){
            return;
        }
        for(MallMoneyFlow mallMoneyFlow : mallMoneyFlows){
            mallMoneyFlow.setIsReturn(AppContants.MEMBER_FLOW_DONE);
            mallMoneyFlowMapper.updateById(mallMoneyFlow);
            /**
             * 如果用户是冻结,则直接销毁
             */
            Long memberId = mallMoneyFlow.getMemberId();
            MallMember mallMember = memberMapper.selectById(memberId);
            Integer isFrozen = mallMember.getIsFrozen();
            if(ProductEnum.MEMBER_UNFROZEN.getValue() == isFrozen){
                MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                mallMemberAmountMapper.updateFrozenNftById(mallMemberAmount);
                //插入一条流水记录
                String orderNo = MallUtils.getOrderNum("FNFTW");
                mallMoneyFlowService.addMoneyFlow(
                        memberId,
                        mallMoneyFlow.getAmount().negate(),
                        MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_WRONG.getValue(),
                        orderNo,
                        null,
                        FlowTypeNewEnum.NFT.getValue(),
                        MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_WRONG.getDescrition(),
                        AppContants.MEMBER_FLOW_ING);
            }else {
                MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                mallMemberAmount.setFrozenNft(mallMemberAmount.getFrozenNft().subtract(mallMoneyFlow.getAmount()));
                mallMemberAmount.setTrendsNft(mallMemberAmount.getTrendsNft().add(mallMoneyFlow.getAmount()));
                mallMemberAmountMapper.updateTrendsNftAndFrozenNftById(mallMemberAmount);
                //插入一条流水记录
                String orderNo = MallUtils.getOrderNum("NFT");
                mallMoneyFlowService.addMoneyFlow(
                        memberId,
                        mallMoneyFlow.getAmount().negate(),
                        MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_DONE.getValue(),
                        orderNo,
                        null,
                        FlowTypeNewEnum.NFT.getValue(),
                        MoneyFlowTypeNewEnum.BASIC_PERK_DIRECT_DONE.getDescrition(),
                        AppContants.MEMBER_FLOW_DONE);
            }
        }
    }
    public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva,
                           BigDecimal nftFee,BigDecimal fcmFeeCnt){
        String orderNo = MallUtils.getOrderNum("NFT");
src/main/java/cc/mrbird/febs/mall/service/impl/MallMoneyFlowServiceImpl.java
@@ -54,4 +54,9 @@
    public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, Long rtMemberId, Integer flowType, String description) {
        this.addMoneyFlow(memberId, amount, type, orderNo, description, null, rtMemberId, null, flowType, null);
    }
    @Override
    public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, Long rtMemberId, Integer flowType, String description, Integer isReturn) {
        this.addMoneyFlow(memberId, amount, type, orderNo, description, null, rtMemberId, null, flowType, isReturn);
    }
}
src/main/resources/mapper/modules/MallMemberAmountMapper.xml
@@ -42,4 +42,12 @@
        where id = #{record.id} and revision=#{record.revision}
    </update>
    <update id="updateTrendsNftAndFrozenNftById">
        update mall_member_amount
        set revision = revision + 1,
            frozen_nft = #{record.frozenNft},
            trends_nft = #{record.trendsNft}
        where id = #{record.id} and revision=#{record.revision}
    </update>
</mapper>