KKSU
2023-12-27 ea343888f4ab527f9f912f29642a655a465769db
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java
@@ -338,66 +338,66 @@
    @Override
    public FebsResponse wxCodePay(ApiWxCodePayDto wxCodePayDto) {
        Long orderId = wxCodePayDto.getOrderId();
        String wxPayCode = wxCodePayDto.getWxPayCode();
        /**
         * auth_code 扫码支付付款码 微信付款码规则:18位纯数字,前缀以10、11、12、13、14、15开头
         */
        String regex = "^(10|11|12|13|14|15)\\d{16}$";
        boolean flag = wxPayCode.matches(regex);
        if(!flag){
            throw new FebsException("请打开微信付款码!");
        }
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectById(orderId);
        if(OrderStatusEnum.FINISH.getValue() == (mallOrderInfo.getStatus())){
            throw new FebsException("已支付");
        }
        mallOrderInfo.setTakeCode(wxPayCode);
        List<ApiGetOrderOrderItemVo> appOrderItemByOrderId = mallOrderItemMapper.getAppOrderItemByOrderId(orderId);
        if(CollUtil.isEmpty(appOrderItemByOrderId)){
            mallOrderInfo.setName("商品");
        }else{
            mallOrderInfo.setName(appOrderItemByOrderId.get(0).getGoodsName());
        }
//        mallOrderInfo.setPayResult(2);
        mallOrderInfoMapper.updateById(mallOrderInfo);
        BigDecimal amount = mallOrderInfo.getAmount();
        BigDecimal carriage = mallOrderInfo.getCarriage();
        //减少用户积分和余额
        if(ObjectUtil.isNotEmpty(mallOrderInfo.getMemberId())){
            MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallOrderInfo.getMemberId());
            BigDecimal totalCarriage = mallOrderInfo.getCarriage();
            BigDecimal score = mallMemberWallet.getScore();
            BigDecimal balance = mallMemberWallet.getBalance();
            BigDecimal memberAmount = score.add(balance);
            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){
            BigDecimal avaAmount = carriage;//剩余需要折扣的金额
            if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallOrderInfo.getMemberId());
                BigDecimal score = mallMemberWallet.getScore();
                BigDecimal balance = mallMemberWallet.getBalance();
                BigDecimal memberAmount = score.add(balance);
                if(avaAmount.compareTo(memberAmount) >= 0){
                    //清零用户的积分和余额
                    mallMemberWallet.setBalance(BigDecimal.ZERO);
                    mallMemberWallet.setScore(BigDecimal.ZERO);
                    avaAmount = avaAmount.subtract(score);
                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
                }else{
                    mallMemberWallet.setScore(score.subtract(avaAmount));
                    avaAmount = BigDecimal.ZERO;
                    /**
                     * 先扣积分,再扣余额
                     */
                    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);
                }
                //积分不够
                if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
                    mallMemberWallet.setBalance(balance.subtract(avaAmount));
                }else{
                    mallMemberWallet.setBalance(balance);
                }
                mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
            }
        }
        // 发起付款码支付请求
        BigDecimal amount = mallOrderInfo.getAmount();
        BigDecimal carriage = mallOrderInfo.getCarriage();
        String payResult = "支付成功";
        if(amount.subtract(carriage).compareTo(BigDecimal.ZERO) > 0){
            String wxPayCode = wxCodePayDto.getWxPayCode();
            /**
             * auth_code 扫码支付付款码 微信付款码规则:18位纯数字,前缀以10、11、12、13、14、15开头
             */
            String regex = "^(10|11|12|13|14|15)\\d{16}$";
            boolean flag = wxPayCode.matches(regex);
            if(!flag){
                throw new FebsException("请打开微信付款码!");
            }
            mallOrderInfo.setTakeCode(wxPayCode);
            List<ApiGetOrderOrderItemVo> appOrderItemByOrderId = mallOrderItemMapper.getAppOrderItemByOrderId(orderId);
            if(CollUtil.isEmpty(appOrderItemByOrderId)){
                mallOrderInfo.setName("商品");
            }else{
                mallOrderInfo.setName(appOrderItemByOrderId.get(0).getGoodsName());
            }
            mallOrderInfoMapper.updateById(mallOrderInfo);
            payResult = xcxCodePayService.pay(mallOrderInfo);
        }
        return new FebsResponse().success().message(payResult);