From b6e7b81fd914cb08eb49d6cea916139e594020ac Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 08 Jan 2021 18:09:31 +0800
Subject: [PATCH] modify

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java |  186 +++++++++++++++------------------------------
 1 files changed, 63 insertions(+), 123 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
index 00031d1..e76196b 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java
@@ -154,21 +154,10 @@
 
     @Override
     public SysOrder checkAndSaveOrder(SysOrder sysOrder) {
-
         // 收款改变订单状态
-        /**
-         * 判断订单条目的一个付款情况
-         */
-        // 计算现金支付金额
-        double xjMoney = 0.0;
-        // 计算卡支付总额
-        double cardMoney = 0.0;
+
         // 计算订单折扣金额,收款情况下 计算订单总额
         double zkTotal = 0.0;
-        /**
-         * 记录本次消费的卡,防止扣除多次消费记录
-         */
-        ArrayList<Long> userCard = new ArrayList<Long>();
 
         // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品
         for (SysOrderItem item : sysOrder.getItems()) {
@@ -179,43 +168,14 @@
                 item.setIsFree(Dictionary.FLAG_YES);
             }
 
-
-            // 如果支付方式是非现金则记录现金支付金额
-            if (!item.getPayMethod().equals(PayMethodEnum.VIP_CARD.getCode())) {
-                xjMoney = MoneyUtil.add(xjMoney, item.getPayMoney());
-//                item.setCashPay(item.getPayMoney());
-            } else {
-                cardMoney = MoneyUtil.add(cardMoney, item.getPayMoney());
-//                item.setCardPay(item.getPayMoney());
-
-            }
-
-
             // 订单欠款减去支付金额 设置实际欠款
             Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
             zkTotal=MoneyUtil.add(zkTotal, itemZkTotal);
-//            item.setArrears(MoneyUtil.sub(itemZkTotal, item.getPayMoney()));
-
-
-            // 如果存在欠款,将条目状态设置为欠款
-//            if (item.getArrears() > 0) {
-//                item.setStatus(Dictionary.ORDER_STATU_QK);
-//            } else if (item.getArrears() < 0) {
-//                item.setPayMoney(item.getZkPrice());
-//                item.setStatus(Dictionary.ORDER_STATU_DFK);
-//            } else {
-//                item.setStatus(Dictionary.ORDER_STATU_DFK);
-//            }
             item.setStatus(Dictionary.ORDER_STATU_DFK);
         }
-        double arrears;
+
         SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
-        // 如果是收款,收款可以改变订单价格,所以需要求和出 订单折后价来计算本次欠款
-        arrears = MoneyUtil.sub(zkTotal, MoneyUtil.add(cardMoney, xjMoney));
         sysOrder.setZkTotal(zkTotal);
-//        sysOrder.setArrears(arrears);
-//        sysOrder.setCardPay(cardMoney);
-//        sysOrder.setCashPay(xjMoney);
         sysOrder.setStatu(Dictionary.ORDER_STATU_DFK);
         sysOrder.setStaffId(user.getSuId());
         sysOrder.setCompanyId(user.getCompanyId());
@@ -502,47 +462,36 @@
      * @author:姜友瑶
      */
     private void changeOrderStatu(SysOrder sourceOrder) {
-
+        int i = 1;
+        String orderStatus = Dictionary.ORDER_STATU_YFK;
         for (SysOrderFlow flow : sourceOrder.getFlows()) {
+            flow.setFlowNo(codeService.getFlowCode() + "-" + i);
+            Long goodsId = sourceOrder.getItems().get(0).getGoodsId();
+            ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
+            flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
+
+            flow.setOrderId(sourceOrder.getId());
+            flow.setVipId(sourceOrder.getVipId());
+            flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY);
             // 若使用储值卡付款
             if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
-
+                if (flow.getCardId() != null) {
+                    MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(flow.getCardId());
+                    cardPaySk(moneyCardUse, sourceOrder, flow);
+                }
             }
-        }
-//      boolean haQk=false;
-//
-//        for(SysOrderItem sysOrderItem:sourceOrder.getItems()){
-//
-//            if(!sysOrderItem.getStatus().equals(Dictionary.ORDER_STATU_QK)){
-//                SysOrderItem updateItem=new SysOrderItem();
-//                updateItem.setId(sysOrderItem.getId());
-//                updateItem.setStatus(Dictionary.ORDER_STATU_YFK);
-//
-//                if (sysOrderItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY_CARD )  ) {
-//
-//                    if(sysOrderItem.getPayMethodDetail()!=null){
-//                        // 查询要支付的充值卡
-//                        MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(Long.parseLong(sysOrderItem.getPayMethodDetail()));
-//                        // 扣除付款卡金额并添加流水
-//                        cardPaySk(moneyCardUse, sourceOrder,  sysOrderItem);
-//                    }else{
-//                        throw  new GlobleException("请选择支付的会员卡");
-//                    }
-//
-//
-//                }
-//                orderItemDao.update(updateItem);
-//            }else {
-//                haQk=true;
-//            }
-//        }
 
+            if (SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod())) {
+                orderStatus = Dictionary.ORDER_STATU_QK;
+                sourceOrder.setArrears(flow.getAmount().doubleValue());
+            }
+            sysOrderFlowDao.insert(flow);
+            i++;
+        }
 
         // 更新收款状态
-        sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
+        sourceOrder.setStatu(orderStatus);
         sysOrderDao.update(sourceOrder);
-
-
 
     }
 
@@ -581,59 +530,50 @@
      * 使用充值卡付款操作
      *
      * @param sourceOrder
-     * @param userCard
-     * @param orderItem
-     * @param temp        设置是否扣除使用次数 true 扣除
+     * @param moneyCardUse
+     * @param flow
      */
-    private void cardPaySk(MoneyCardUse moneyCardUse, SysOrder sourceOrder,
-                           SysOrderItem orderItem) {
+    private void cardPaySk(MoneyCardUse moneyCardUse, SysOrder sourceOrder, SysOrderFlow flow) {
         // 判断商品是否在充值卡的限制购买,判断分类
-        if (!isInBangding(moneyCardUse, orderItem.getGoodsId())) {
-            throw new GlobleException(shoppingGoodsDao.selectById(orderItem.getGoodsId()).getName() + "不在"
-                    + moneyCardUse.getCardName() + "优惠中");
-        }
-        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
-        Double balance = moneyCardUse.getRealMoney();
-        if (moneyCardUse.getGiftMoney() != null) {
-            balance = MoneyUtil.add(balance, moneyCardUse.getGiftMoney());
-        }
-        // 判断金额是否足够支付
-        if (balance >= orderItem.getPayMoney()) {
-
-            MoneyCardUseFlow moneyCardUseFlow=new MoneyCardUseFlow();
-
-            // 余额充足先从本金中扣除
-            if (moneyCardUse.getRealMoney() >= orderItem.getPayMoney()) {
-                double surplus = MoneyUtil.sub(moneyCardUse.getRealMoney(), orderItem.getPayMoney());
-                moneyCardUse.setRealMoney(surplus);
-                moneyCardUseFlow.setTotal(0-orderItem.getPayMoney());
-
-            } else {
-                // 本金不够
-                double surplus = MoneyUtil.sub(orderItem.getPayMoney(), moneyCardUse.getRealMoney());
-                moneyCardUseFlow.setTotal(0- moneyCardUse.getRealMoney());
-                // 扣除所有本金
-                moneyCardUse.setRealMoney(0D);
-                moneyCardUse.setGiftMoney(MoneyUtil.sub(moneyCardUse.getGiftMoney(), surplus));
-                // 只要是用了赠送金额购买的就视为赠送套餐 18-12-01 jyy
-                orderItem.setIsFree(Dictionary.FLAG_YES);
-                moneyCardUseFlow.setGiftMoney(0-surplus);
+        sourceOrder.getItems().forEach(item -> {
+            if (!isInBangding(moneyCardUse, item.getGoodsId())) {
+                throw new GlobleException(shoppingGoodsDao.selectById(item.getGoodsId()).getName() + "不在" + moneyCardUse.getCardName() + "优惠中");
             }
+        });
 
-            //设置卡项使用流水
-            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);
+        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 {
-            throw new GlobleException(moneyCardUse.getCardName() + "余额不足");
+            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() + "余额不足");
+            }
         }
+
+        //设置卡项使用流水
+        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);
 
         // 达到使用次数后自动清空余额
         if (!moneyCardUse.getIsVipCar().equals(Dictionary.FLAG_YES_Y)
@@ -810,8 +750,8 @@
            if (!pageItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY)) {
                 // 查询要支付的充值卡
                 MoneyCardUse moneyCardUse = moneyCardUseDao.selectById(Long.parseLong(pageItem.getPayMethod()));
-                // 扣除付款卡金额并添加流水
-                cardPaySk(moneyCardUse, sourceOrder,  pageItem);
+                // 扣除付款卡金额并添加流水 TODO 补交卡支付
+//                cardPaySk(moneyCardUse, sourceOrder,  pageItem);
                sourceItem.setCardPay((sourceItem.getCardPay()==null?0:sourceItem.getCardPay())+pageItem.getPayMoney());
                cardPayTotal+=pageItem.getPayMoney();
             }else{

--
Gitblit v1.9.1