KKSU
2023-12-25 f61293e97bb2cb21c8f49e88b1ae5a3cbadefb6a
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -82,6 +82,7 @@
    private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
    private final IMallElectronicFenceService iMallElectronicFenceService;
    private final MallElectronicFenceMapper mallElectronicFenceMapper;
    private final MallMemberWalletMapper mallMemberWalletMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -344,6 +345,11 @@
            throw new FebsException("订单状态不能支付");
        }
        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
        if (ObjectUtil.isEmpty(mallMemberWallet)) {
            throw new FebsException("用户钱包不存在。");
        }
        String payResultStr = "";
        String wxResultStr = "";
        switch (payOrderDto.getType()) {
@@ -373,14 +379,63 @@
                agentProducer.sendOrderReturn(orderInfo.getId());
                break;
            case "3":
                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
                BigDecimal score = mallMemberWallet.getScore();//积分
                BigDecimal balance = mallMemberWallet.getBalance();//余额
                //这里将运费定义成折扣总金额
                /**
                 * 积分 + 余额 1:1来折扣支付金额
                 */
                BigDecimal total = orderInfo.getAmount();
                BigDecimal totalCarriage = BigDecimal.ZERO;//总折扣金额
                BigDecimal memberAmount = score.add(balance);//用户积分加余额总数
                if(memberAmount.compareTo(BigDecimal.ZERO) > 0){
                    //折扣金额
                    if(total.compareTo(memberAmount) >= 0){
                        totalCarriage = memberAmount;
                    }else{
                        totalCarriage = total;
                    }
                    //减少用户积分和余额
                    BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额
                    if(avaAmount.compareTo(memberAmount) >= 0){
                        //清零用户的积分和余额
                        mallMemberWallet.setBalance(BigDecimal.ZERO);
                        mallMemberWallet.setScore(BigDecimal.ZERO);
                        mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
                    }else{
                        /**
                         * 先扣积分,再扣余额
                         */
                        if(avaAmount.compareTo(score) >= 0){
                            mallMemberWallet.setScore(BigDecimal.ZERO);
                            avaAmount = avaAmount.subtract(score);
                        }else{
                            mallMemberWallet.setScore(score.subtract(avaAmount));
                            avaAmount = BigDecimal.ZERO;
                        }
                        //积分不够
                        if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
                            mallMemberWallet.setBalance(balance.subtract(avaAmount));
                        }else{
                            mallMemberWallet.setBalance(balance);
                        }
                        mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
                    }
                }
                orderInfo.setCarriage(totalCarriage);
                payResultStr = "支付成功";
//                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                orderInfo.setPayMethod("余额支付");
                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
//                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                orderInfo.setPayTime(new Date());
                orderInfo.setPayResult(1);
                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
//                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
//                boolean hasTc = false;
//                // 静态倍数