From c423224dbe37ea69c1a36c696f85490343e68c4c Mon Sep 17 00:00:00 2001
From: 姜友瑶 <935090232@qq.com>
Date: Tue, 09 Aug 2022 09:11:51 +0800
Subject: [PATCH] Merge branch 'developer'

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java |  123 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 110 insertions(+), 13 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 0c14697..4228c40 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
@@ -20,7 +20,10 @@
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
 import com.matrix.system.common.dao.SysUsersDao;
+import com.matrix.system.common.service.OperationLogService;
 import com.matrix.system.constance.Dictionary;
+import com.matrix.system.enums.OperationButtonEnum;
+import com.matrix.system.enums.OperationFunctionEnum;
 import com.matrix.system.hive.bean.*;
 import com.matrix.system.hive.dao.*;
 import com.matrix.system.hive.plugin.util.CollectionUtils;
@@ -126,6 +129,9 @@
     @Autowired
     private AsyncMessageManager asyncMessageManager;
 
+    @Autowired
+    private OperationLogService operationLogService;
+
 
     @Override
     public int add(SysOrder sysOrder) {
@@ -177,13 +183,20 @@
     }
 
     @Override
-    public SysOrder findById(Long id) {
+    public  SysOrder  findById(Long id) {
         return sysOrderDao.selectById(id);
+
+    }
+
+    @Override
+    public List<SysOrder> findByIds(List<Long> ids) {
+        return sysOrderDao.selectByIds(ids);
 
     }
 
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public SysOrder checkAndSaveOrder(SysOrder sysOrder) {
 
         // 计算订单折扣金额,收款情况下 计算订单总额
@@ -233,12 +246,27 @@
             //新增订单
             sysOrder.setOrderNo(codeService.getOrderCode());
             sysOrderDao.insert(sysOrder);
+            //保存单据日志
+            operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
+                    OperationFunctionEnum.ORDER,
+                    OperationButtonEnum.CREATE,
+                    sysOrder.getId(),
+                    sysOrder.getOrderNo(),
+                    sysOrder.getVipId());
 
         } else {
             //更新订单
             sysOrderDao.update(sysOrder);
             //删除原有订单明细
             orderItemDao.deleteByOrderId(sysOrder.getId());
+            //保存单据日志
+            operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
+                    OperationFunctionEnum.ORDER,
+                    OperationButtonEnum.UPDATE,
+                    sysOrder.getId(),
+                    sysOrder.getOrderNo(),
+                    sysOrder.getVipId(),
+                    "修改订单内容");
         }
 
         sysOrder.getItems().forEach(sysOrderItem -> {
@@ -266,9 +294,10 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int cancelOrder(Long id) {
+    public void cancelOrder(Long id) {
 
         SysOrder order = sysOrderDao.selectById(id);
+        SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
         if (order.getStatu().equals(Dictionary.ORDER_STATU_DFK)) {
 
             order.setStatu(Dictionary.ORDER_STATU_YQX);
@@ -277,10 +306,17 @@
             //发送微信公众号提醒
             UniformMsgParam uniformMsgParam = new UniformMsgParam(order.getCompanyId(), UniformMsgParam.GZH_DDQX);
             uniformMsgParam.put("orderId", order.getId());
-            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG ,uniformMsgParam);
+            asyncMessageManager.sendMsg(AsyncMessageRouting.SEND_UNIFORM_TEMPLATE_MSG, uniformMsgParam);
 
-            return sysOrderDao.update(order);
-
+            sysOrderDao.update(order);
+            //保存单据日志
+            operationLogService.saveOperation(order.getCompanyId(), order.getShopId(),sysUsers.getSuId(),
+                    OperationFunctionEnum.ORDER,
+                    OperationButtonEnum.CANCEL,
+                    order.getId(),
+                    order.getOrderNo(),
+                    order.getVipId(),
+                    "未付款取消订单");
         } else {
 
             //一个订单只能被取消一次
@@ -377,8 +413,18 @@
 
             // 取消订单
             order.setStatu(Dictionary.ORDER_STATU_YQX);
-            return sysOrderDao.update(order);
+            sysOrderDao.update(order);
+            //保存单据日志
+            operationLogService.saveOperation(order.getCompanyId(), order.getShopId(),sysUsers.getSuId(),
+                    OperationFunctionEnum.ORDER,
+                    OperationButtonEnum.CANCEL,
+                    order.getId(),
+                    order.getOrderNo(),
+                    order.getVipId(),
+                    "已付款取消订单");
         }
+
+
 
     }
 
@@ -512,14 +558,21 @@
         //设置会员积分
         addVipScore(pageOrder);
 
+
     }
 
     /**
      * 付款后更新订单信息
+     *
      * @param pageOrder
      */
     private void updateOrderInfo(SysOrder pageOrder) {
+
+        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+        pageOrder.setCashierId(user.getSuId());
+
         pageOrder.setPayTime(new Date());
+
         pageOrder.setStatu(Dictionary.ORDER_STATU_YFK);
         List<SysOrderFlow> flows = pageOrder.getFlows();
 
@@ -528,7 +581,7 @@
                 .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 
         BigDecimal cardPayAmount = flows.stream()
-                .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("N"))
+                .filter(item -> item.getPayMethod().equals("储值卡"))
                 .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 
         pageOrder.setCardPay(cardPayAmount.doubleValue());
@@ -537,12 +590,20 @@
 
         double sum = flows.stream().mapToDouble(item -> item.getAmount().doubleValue()).sum();
 
-        if(sum>0 && cardPayAmount.doubleValue()==0 && cashPayAmount.doubleValue()==0 ){
+        if (sum > 0 && cardPayAmount.doubleValue() == 0 && cashPayAmount.doubleValue() == 0) {
             throw new GlobleException("订单更新失败,支付金额计算错误,请联系管理员");
         }
 
 
         sysOrderDao.update(pageOrder);
+
+        //保存单据日志
+        operationLogService.saveOperation(pageOrder.getCompanyId(), pageOrder.getShopId(), user.getSuId(),
+                OperationFunctionEnum.ORDER,
+                OperationButtonEnum.ORDER_SK,
+                pageOrder.getId(),
+                pageOrder.getOrderNo(),
+                pageOrder.getVipId());
     }
 
     private void checkOrder(SysOrder pageOrder) {
@@ -574,7 +635,7 @@
             entries.forEach(entrie -> {
                 double sum = entrie.getValue().stream().mapToDouble(AchieveNew::getGoodsCash).sum();
                 //todo 目前使用js计算金额可能存在精度的误差展示用0.1屏蔽
-                if (Math.abs(sum- (item.getZkPrice()*item.getCount()) )>0.1) {
+                if (Math.abs(sum - (item.getZkPrice() * item.getCount())) > 0.1) {
                     ShoppingGoods shopGoods = shoppingGoodsDao.selectById(item.getGoodsId());
                     throw GlobleException.instance(shopGoods.getName() + "," + entrie.getKey() + "业绩金额与收款金额不一致");
                 }
@@ -870,6 +931,33 @@
             }
         });
 
+        // 充值卡订单欠款检测
+        if (Dictionary.FLAG_NO_N.equals(moneyCardUse.getIsVipCar())) {
+            SysOrderItem item = orderItemDao.selectById(moneyCardUse.getOrderItemId());
+            if (item != null) {
+                SysOrder sysOrder = sysOrderDao.selectById(item.getOrderId());
+                if (sysOrder != null) {
+                    if (Dictionary.ORDER_STATU_QK.equals(sysOrder.getStatu())) {
+                        if (SysOrderFlow.IS_GIFT_Y.equals(flow.getIsGift())) {
+                            throw new GlobleException("充值卡订单存在欠款,无法使用赠送余额支付");
+                        }
+
+                        // 若该笔订单中,有多项明细,则充值卡直接无法支付; 若订单中,仅充值卡一项,则已付款和充值卡使用情况判断是否可使用
+                        List<SysOrderItem> items = orderItemDao.selectByOrderId(sysOrder.getId());
+                        if (items.size() > 1) {
+                            throw new GlobleException("充值卡订单存在欠款,无法支付");
+                        } else {
+                            double totalUse = moneyCardUseFlowDao.selectCardUseAmount(moneyCardUse.getId());
+                            Double hasPay = sysOrder.getZkTotal() - sysOrder.getArrears();
+                            if (hasPay < (totalUse + flow.getAmount().doubleValue())) {
+                                throw new GlobleException("充值卡订单存在欠款,已支付金额不足");
+                            }
+                        }
+                    }
+                }
+            }
+         }
+
         SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
 
         MoneyCardUseFlow moneyCardUseFlow = new MoneyCardUseFlow();
@@ -990,7 +1078,7 @@
      * @date 2016年9月19日
      */
     public void addMoneyCardUse(SysOrder sourceOrder) {
-
+        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
         List<SysOrderItem> orderItemList = sourceOrder.getItems();
         for (SysOrderItem sysOrderItem : orderItemList) {
             // 如果购买的是充值卡
@@ -1029,6 +1117,7 @@
                     moneyCardUse.setFailTime(invalidTime);
 
                     moneyCardUseDao.insert(moneyCardUse);
+
                 }
             }
         }
@@ -1297,7 +1386,7 @@
         //赠送项目是否计算消耗业绩否则 赠送产品按原价计算消耗
         boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
         if (zsConsumeAchieve) {
-            if (sysOrderItem.getPrice() <= 0) {
+            if (sysOrderItem.getZkPrice() <= 0) {
                 //等于0取原价
                 if (taocanId == null) {
                     puse.setPrice(goodsAssemble.getShoppingGoods().getPrice());
@@ -1409,9 +1498,9 @@
             boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
             if (zsConsumeAchieve) {
                 //赠送情况下,如果收款金额大于0,就是赠送金额划扣的情况,金额即为划扣的折扣金额
-                if(sysOrderItem.getZkPrice()>0){
+                if (sysOrderItem.getZkPrice() > 0) {
                     puse.setPrice(sysOrderItem.getZkPrice());
-                }else{
+                } else {
                     puse.setPrice(sysOrderItem.getShoppingGoods().getSealPice());
                 }
             } else {
@@ -1635,6 +1724,14 @@
         // 设置业绩
         achieveNewService.addAchaeveByOrder(sysOrder);
 
+        //保存单据日志
+        operationLogService.saveOperation(sysOrder.getCompanyId(), sysOrder.getShopId(), user.getSuId(),
+                OperationFunctionEnum.ORDER,
+                OperationButtonEnum.ORDER_TK,
+                sysOrder.getId(),
+                sysOrder.getOrderNo(),
+                sysOrder.getVipId());
+
     }
 
     private void addRefundOrderFlow(SysOrder sourceOrder) {

--
Gitblit v1.9.1