KKSU
2023-11-27 62fcbc4dda69e739f05d547cd0b9a042004186b4
匹配
6 files modified
82 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java 1 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java 9 ●●●●● 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/impl/AgentServiceImpl.java 56 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallMoneyFlowMapper.xml 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeNewEnum.java
@@ -10,6 +10,7 @@
 **/
@Getter
public enum MoneyFlowTypeNewEnum {
    TOKEN_BUY_FROZEN_RETURN(13,"预约令牌"),
    PAY(12,"支付"),
    NFT_OUT_FEE(11,"NFT提现手续费"),
    NFT_OUT(10,"NFT提现"),
src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
@@ -49,4 +49,6 @@
    void updateRemarkAndIsReturnById(@Param("remark")String remarkNum, @Param("id")Long id);
    MallMoneyFlow selectByOrderNoAndMemberId(@Param("orderNo")String orderNo, @Param("memberId")Long memberId, @Param("isReturn")int isReturn);
    MallMoneyFlow selectByOrderAndType(@Param("orderNo")String orderNo, @Param("type")int type, @Param("flowType")int flowType, @Param("memberId")Long memberId);
}
src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -135,6 +135,15 @@
    }
    /**
     * 买单
     * 看是否是开始显示订单的时间段,超出结束时间的买单,全部超时返还令牌
     */
    @Scheduled(cron = "0 0/30 * * * ? ")
    public void timeGetOrderBuyCancel() {
        agentService.timeGetOrderBuyCancel();
    }
    /**
     * 卖单
     * 看是否是开始显示订单的时间段,超出结束时间的卖单,全部超时失败
     */
src/main/java/cc/mrbird/febs/mall/service/IAgentService.java
@@ -45,4 +45,6 @@
    void timeGetOrderBuy();
    void timeGetOrderSell();
    void timeGetOrderBuyCancel();
}
src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -64,6 +64,7 @@
    private final MallProductSellRecordMapper mallProductSellRecordMapper;
    private final MallProductNftMapper mallProductNftMapper;
    private final AgentProducer agentProducer;
    private final MallMemberAmountMapper mallMemberAmountMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -950,6 +951,61 @@
        }
    }
    @Override
    public void timeGetOrderBuyCancel() {
        /**
         * nft产品周期到期的已完成买单变成卖单
         * 计算收益,本金
         */
        List<MallProductNft> mallProductNfts = mallProductNftMapper.selectList(null);
        if(CollUtil.isEmpty(mallProductNfts)){
            return;
        }
        DateTime now = DateUtil.date();
        for(MallProductNft mallProductNft : mallProductNfts){
            Long nftId = mallProductNft.getId();
            List<MallProductBuy> mallProductBuys = mallProductBuyMapper.selectListByStateAndProductNFTId(
                    ProductEnum.PRODUCT_BUY_ON_GOING.getValue(),
                    nftId,
                    ProductEnum.PRODUCT_BUY_MATE_STATE_FAIL.getValue());
            if(CollUtil.isEmpty(mallProductBuys)){
                continue;
            }
            for(MallProductBuy mallProductBuy : mallProductBuys){
                /**
                 * 返回令牌
                 * 预约记录超时
                 */
                String orderNo = mallProductBuy.getOrderNo();
                mallProductBuy.setState(ProductEnum.PRODUCT_BUY_TIMEOUT.getValue());
                mallProductBuyMapper.updateById(mallProductBuy);
                Long memberId = mallProductBuy.getMemberId();
                MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectByOrderAndType(orderNo,
                        MoneyFlowTypeNewEnum.TOKEN_BUY_FROZEN.getValue(),
                        FlowTypeNewEnum.TOKEN.getValue(),
                        memberId);
                if(ObjectUtil.isEmpty(mallMoneyFlow)){
                    continue;
                }
                BigDecimal absAmount = mallMoneyFlow.getAmount().abs();
                MallMemberAmount mallMemberAmount = mallMemberAmountMapper.selectByMemberId(memberId);
                mallMemberAmount.setTokenAva(mallMemberAmount.getTokenAva().add(absAmount));
                mallMemberAmount.setTokenFrozen(mallMemberAmount.getTokenFrozen().subtract(absAmount));
                mallMemberAmountMapper.updateTokenAvaAndTokenFrozenById(mallMemberAmount);
                mallMoneyFlowService.addMoneyFlow(
                        memberId,
                        absAmount,
                        MoneyFlowTypeNewEnum.TOKEN_BUY_FROZEN_RETURN.getValue(),
                        orderNo,
                        null,
                        FlowTypeNewEnum.TOKEN.getValue(),
                        MoneyFlowTypeNewEnum.TOKEN_BUY_FROZEN_RETURN.getDescrition());
            }
        }
    }
    public void insertSell(Long memberId,BigDecimal nftCnt,BigDecimal nftCntAva,
                           BigDecimal nftFee,BigDecimal fcmFeeCnt){
        String orderNo = MallUtils.getOrderNum("NFT");
src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
@@ -249,4 +249,16 @@
        ORDER BY
            a.created_time ASC
    </select>
    <select id="selectByOrderAndType" resultType="cc.mrbird.febs.mall.entity.MallMoneyFlow">
        SELECT
            *
        FROM
            mall_money_flow a
        WHERE
            a.type = #{type}
          AND a.flow_type = #{flowType}
          AND a.member_id = #{memberId}
          AND a.order_no = #{orderNo}
    </select>
</mapper>