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)
@@ -100,6 +101,9 @@
        //订单范围内才允许下单
        MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
        if(ObjectUtil.isEmpty(address)){
            throw new FebsException("请重新选择提货人信息");
        }
//        MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode());
//        if(ObjectUtil.isNotEmpty(mallElectronicFence)){
//            String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(),
@@ -223,19 +227,19 @@
            orderInfo.setCarriage(delivaryAmount);
        }
        orderInfo.setAmount(total);
        orderInfo.setAddressId(address.getId());
        orderInfo.setName(address.getName());
        orderInfo.setPhone(address.getPhone());
        orderInfo.setIsHome(addOrderDto.getIsHome());
        //订单金额大于50,且选择送货上门,订单需要选择地址信息
        if(1 == addOrderDto.getIsHome()){
//        if(1 == addOrderDto.getIsHome()){
            if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) {
                throw new FebsException("请添加地址");
            }
            orderInfo.setAddress(address.getArea() + address.getAddress());
            orderInfo.setLatitude(address.getLatitude());
            orderInfo.setLongitude(address.getLongitude());
        }
//        }
        this.baseMapper.updateById(orderInfo);
        agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L);
@@ -341,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()) {
@@ -370,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.setPayResult(1);
                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
//                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
//                boolean hasTc = false;
//                // 静态倍数
@@ -427,7 +485,7 @@
                orderInfo.setPayMethod("积分支付");
                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                orderInfo.setPayTime(new Date());
                orderInfo.setPayResult("1");
                orderInfo.setPayResult(1);
                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
                break;
@@ -709,9 +767,9 @@
                        throw new FebsException("购买商品或sku不存在");
                    }
                    if (sku.getStock() < mallOrderItem.getCnt()) {
                        throw new FebsException(sku.getSkuName() + "库存不足");
                    }
//                    if (sku.getStock() < mallOrderItem.getCnt()) {
//                        throw new FebsException(sku.getSkuName() + "库存不足");
//                    }
                    MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
                    Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());