Helius
2021-03-12 62bf99d419e470f5556f21682d0d8ee8b9e20412
zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -1316,6 +1316,88 @@
    }
    private void addRefundOrderFlow(SysOrder sourceOrder) {
        //处理支付流水
        int flowCount = 1;
        for (SysOrderFlow flow : sourceOrder.getFlows()) {
            //支付内容摘要设置
            Long goodsId = sourceOrder.getItems().get(0).getGoodsId();
            ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
            flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
            // 退款,则取负数
            flow.setFlowType(SysOrderFlow.FLOW_TYPE_REFUND);
            flow.setAmount(flow.getAmount().negate());
            flow.setOrderId(sourceOrder.getOldOrderId());
            //统计储值卡支付
            if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                if (flow.getCardId() != null) {
                    MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
                    //修改储值卡余额
                    cardPaySk(moneyCardUse, sourceOrder, flow);
                }else{
                    throw new GlobleException("无效的储值卡支付方式");
                }
            }
            flow.setFlowNo(codeService.getFlowCode() + "-" + flowCount);
            flow.setVipId(sourceOrder.getVipId());
            flow.setShopId(sourceOrder.getShopId());
            flow.setCompanyId(sourceOrder.getCompanyId());
            sysOrderFlowDao.insert(flow);
            flowCount++;
        }
    }
    private void refundCard(MoneyCardUse moneyCardUse, SysOrder sourceOrder, SysOrderFlow flow) {
        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
        MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
        if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
            if (moneyCardUse.getGiftMoney() >= flow.getAmount().doubleValue()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getGiftMoney(), flow.getAmount().doubleValue());
                moneyCardUse.setGiftMoney(surplus);
                moneyCardUseFlow.setGiftMoney(0D - flow.getAmount().doubleValue());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        } else {
            if (moneyCardUse.getRealMoney() >= flow.getAmount().doubleValue()) {
                double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), flow.getAmount().doubleValue());
                moneyCardUse.setRealMoney(surplus);
                moneyCardUseFlow.setTotal(0 - flow.getAmount().doubleValue());
            } else {
                throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
            }
        }
        if (moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_NO_N)) {
            //余额为0时充值卡变为无效
            if (moneyCardUse.getRealMoney().equals(0D) && moneyCardUse.getGiftMoney().equals(0D)) {
                moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
                moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
            }
        }
        ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId());
        if (shoppingGoods != null) {
            Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
            moneyCardUse.setFailTime(invalidTime);
        }
        // 更新充值卡信息
        moneyCardUseDao.update(moneyCardUse);
        //设置卡项使用流水
        moneyCardUseFlow.setCarUseId(moneyCardUse.getId());
        moneyCardUseFlow.setOrderNo(sourceOrder.getOrderNo());
        moneyCardUseFlow.setVipId(sourceOrder.getVipId());
        moneyCardUseFlow.setTimes(-1);
        moneyCardUseFlow.setType(MoneyCardUseFlow.USE_TYPE_CONSUMER);
        moneyCardUseFlow.setCreateTime(new Date());
        moneyCardUseFlow.setOperationId(user.getSuId());
        moneyCardUseFlow.setBalance(moneyCardUse.getGiftMoney() + moneyCardUse.getRealMoney());
        moneyCardUseFlowDao.insert(moneyCardUseFlow);
    }
    /**
     * 退款退项目,套餐,卡项
     * @param sysOrder