KKSU
2023-11-27 83b56237a9e0b379b46d31ab77def13226f33548
src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -60,6 +60,10 @@
    private final MallScoreAchieveReleaseMapper mallScoreAchieveReleaseMapper;
    private final MallScoreVoucherMapper mallScoreVoucherMapper;
    private final CommonService commonService;
    private final MallProductBuyRecordMapper mallProductBuyRecordMapper;
    private final MallProductBuyMapper mallProductBuyMapper;
    private final MallProductSellMapper mallProductSellMapper;
    private final MallProductSellRecordMapper mallProductSellRecordMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -1163,6 +1167,92 @@
        }
    }
    @Override
    public void fcmOrderSellInsureMsg(Long sellRecordId) {
        /**
         * 买单确认
         * 判断买单是否存在、是否已支付
         * 判断买单是否存在、是否已支付
         * 更新卖单状态
         * 更新买单状态
         */
        MallProductSellRecord mallProductSellRecord = mallProductSellRecordMapper.selectById(sellRecordId);
        if(ObjectUtil.isEmpty(mallProductSellRecord)){
            return;
        }
        Integer state = mallProductSellRecord.getState();
        if(ProductEnum.PRODUCT_MATE_STATE_CONFIRM.getValue() != state){
            return;
        }
        MallProductBuyRecord mallProductBuyRecord = mallProductBuyRecordMapper.selectById(mallProductSellRecord.getBuyRecordId());
        if(ObjectUtil.isEmpty(mallProductBuyRecord)){
            return;
        }
        Integer stateBuy = mallProductBuyRecord.getState();
        if(ProductEnum.PRODUCT_MATE_STATE_CONFIRM.getValue() != stateBuy){
            return;
        }
        mallProductSellRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FINISH.getValue());
        mallProductSellRecordMapper.updateById(mallProductSellRecord);
        mallProductBuyRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FINISH.getValue());
        mallProductBuyRecordMapper.updateById(mallProductBuyRecord);
        Long sellId = mallProductSellRecord.getSellId();
        //已完成的买单
        List<MallProductSellRecord> mallProductSellRecords = mallProductSellRecordMapper.selectListBySellId(sellId,ProductEnum.PRODUCT_MATE_STATE_FINISH.getValue());
        if(CollUtil.isEmpty(mallProductSellRecords)){
            return;
        }
        //实际支付总数
        BigDecimal nftCntTotal = mallProductSellRecords.stream().map(MallProductSellRecord::getNftCnt).reduce(BigDecimal.ZERO, BigDecimal::add);
        MallProductSell mallProductSell = mallProductSellMapper.selectById(sellId);
        if(nftCntTotal.compareTo(mallProductSell.getNftCnt()) < 0){
            return;
        }
        mallProductSell.setState(ProductEnum.PRODUCT_SELL_SUCCESS.getValue());
        mallProductSellMapper.updateById(mallProductSell);
        Long buyId = mallProductBuyRecord.getBuyId();
        List<MallProductBuyRecord> mallProductBuyRecords = mallProductBuyRecordMapper.selectListByBuyId(buyId,ProductEnum.PRODUCT_MATE_STATE_FINISH.getValue());
        if(CollUtil.isEmpty(mallProductBuyRecords)){
            return;
        }
        //实际支付总数
        BigDecimal nftCntTotalBuy = mallProductBuyRecords.stream().map(MallProductBuyRecord::getPickNftCnt).reduce(BigDecimal.ZERO, BigDecimal::add);
        MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(buyId);
        if(nftCntTotalBuy.compareTo(mallProductBuy.getNftTotal()) < 0){
            return;
        }
        mallProductBuy.setState(ProductEnum.PRODUCT_BUY_SUCCESS.getValue());
        mallProductBuy.setPayTime(DateUtil.date());
        mallProductBuyMapper.updateById(mallProductBuy);
    }
    @Override
    public void fcmOrderBuyCancelMsg(Long buyRecordId) {
        MallProductBuyRecord mallProductBuyRecord = mallProductBuyRecordMapper.selectById(buyRecordId);
        if(ProductEnum.PRODUCT_MATE_STATE_WAIT_PAY.getValue() != mallProductBuyRecord.getState()){
            return;
        }
        Long sellRecordId = mallProductBuyRecord.getSellRecordId();
        //更新买单子表的数据
        mallProductBuyRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FAIL.getValue());
        mallProductBuyRecordMapper.updateById(mallProductBuyRecord);
        //更新买单主表
        MallProductBuy mallProductBuy = mallProductBuyMapper.selectById(mallProductBuyRecord.getBuyId());
        mallProductBuy.setNftAva(mallProductBuy.getNftAva().add(mallProductBuyRecord.getPickNftCnt()));
        mallProductBuyMapper.updateById(mallProductBuy);
        //更新卖单子表的数据
        MallProductSellRecord mallProductSellRecord = mallProductSellRecordMapper.selectById(sellRecordId);
        mallProductSellRecord.setState(ProductEnum.PRODUCT_MATE_STATE_FAIL.getValue());
        mallProductSellRecordMapper.updateById(mallProductSellRecord);
        //更新卖单主表
        Long sellId = mallProductSellRecord.getSellId();
        MallProductSell mallProductSell = mallProductSellMapper.selectById(sellId);
        mallProductSell.setNftCntAva(mallProductSell.getNftCntAva().add(mallProductSellRecord.getNftCnt()));
        mallProductSellMapper.updateById(mallProductSell);
    }
    public static void main(String[] args) {
        BigDecimal divide = new BigDecimal(12000).divide(new BigDecimal(10000), 0, BigDecimal.ROUND_DOWN);
        System.out.println(divide);