From baa1c7ecdc47c5da14790b422007ce21e0547ffa Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Fri, 18 Mar 2022 00:50:23 +0800
Subject: [PATCH] 重构:订单创建和修改方法

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java |  395 ++------------------------------------------------------
 1 files changed, 15 insertions(+), 380 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 ed9cb4b..72f57c1 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
@@ -37,12 +37,9 @@
 import com.matrix.system.hive.pojo.ShoppingCarItem;
 import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
 import com.matrix.system.hive.service.*;
-import com.matrix.system.score.constant.ScoreSettingConstant;
-import com.matrix.system.score.entity.ScoreVipDetail;
 import com.matrix.system.score.service.ScoreVipDetailService;
 import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
 import com.matrix.system.wechart.templateMsg.UniformMsgParam;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -145,10 +142,6 @@
     @Autowired
     private SysOrderServiceHelper sysOrderServiceHelper;
 
-    @Autowired
-    private SysProjServicesService projServicesService;
-
-
 
     @Autowired
     MoneyCardUseService moneyCardUseService;
@@ -160,91 +153,15 @@
     @Transactional(rollbackFor = Exception.class)
     public SysOrder checkAndSaveOrder(SysOrder sysOrder) {
 
-        // 计算订单折扣金额,收款情况下 计算订单总额
-        double zkTotal = 0.0;
-
-        // 判断是否为退款
-        String orderStatus = Dictionary.ORDER_STATU_DFK;
-        if (Dictionary.ORDER_STATU_TK.equals(sysOrder.getStatu())) {
-            orderStatus = Dictionary.ORDER_STATU_TK;
-        }
-
-        // 页面的pageOrder 参数只包含支付金额信息,不带有购买商品
-        for (SysOrderItem item : sysOrder.getItems()) {
-            // 若为退款,则先更新原有数量
-            if (orderStatus.equals(Dictionary.ORDER_STATU_TK)) {
-                SysOrderItem sysOrderItem = new SysOrderItem();
-                sysOrderItem.setId(item.getId());
-                sysOrderItem.setCount(item.getPreCount() - item.getCount());
-                orderItemDao.update(sysOrderItem);
-            }
-            item.setId(null);
-
-            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(item.getGoodsId());
-            item.setType(shoppingGoods.getGoodType());
-            if (item.getZkPrice() == 0) {
-                item.setIsFree(Dictionary.FLAG_YES);
-            }
-
-            // 订单欠款减去支付金额 设置实际欠款
-            Double itemZkTotal = MoneyUtil.mul(item.getZkPrice(), Double.valueOf(item.getCount()));
-            zkTotal = MoneyUtil.add(zkTotal, itemZkTotal);
-            item.setStatus(orderStatus);
-        }
-
-        SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
-        sysOrder.setZkTotal(zkTotal);
-        sysOrder.setStatu(orderStatus);
-        SysOrder source = null;
-        if (sysOrder.getId() != null) {
-            source = sysOrderDao.selectById(sysOrder.getId());
-        }
-        sysOrder.setStaffId(source != null ? source.getStaffId() : user.getSuId());
-        sysOrder.setCompanyId(source != null ? source.getCompanyId() : user.getCompanyId());
-
-
-        if (sysOrder.getId() == null) {
-            //新增订单
-            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());
-
+        if (Objects.isNull(sysOrder.getId())) {
+            LogUtil.info("新增正向订单");
+            return sysOrderServiceHelper.saveOrder(sysOrder);
         } 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(),
-                    "修改订单内容");
+            LogUtil.info("修改订单");
+            return sysOrderServiceHelper.modifyOrder(sysOrder);
         }
 
-        sysOrder.getItems().forEach(sysOrderItem -> {
-            sysOrderItem.setOrderId(sysOrder.getId());
-            if (sysOrder.getStatu().equals(Dictionary.ORDER_STATU_TK)) {
-                // 取负数
-                sysOrderItem.setCount(-sysOrderItem.getCount());
-                orderItemDao.insert(sysOrderItem);
-                // 调整回来
-                sysOrderItem.setCount(-sysOrderItem.getCount());
-            } else {
-                orderItemDao.insert(sysOrderItem);
-            }
 
-        });
-
-        return sysOrder;
     }
 
     /**
@@ -489,7 +406,7 @@
         sysVipInfoService.updateDealStatus(pageOrder.getVipId(), BooleanEnum.TRUE.getValue());
 
         //添加支付流水
-        sysOrderServiceHelper.addOrderFlow(pageOrder,false);
+        sysOrderServiceHelper.addOrderFlow(pageOrder, false);
 
         //扣除储值卡余额
         sysOrderServiceHelper.cardPaySk(pageOrder);
@@ -501,14 +418,13 @@
         sysOrderServiceHelper.addTaocanProj(pageOrder);
 
         // 新增出库单
-        addOutStore(pageOrder);
+        sysOrderServiceHelper.addOutStore(pageOrder);
 
         // 设置业绩
         achieveNewService.addAchaeveByOrder(pageOrder);
 
-
         //设置会员积分
-        addVipScore(pageOrder);
+        sysOrderServiceHelper.addVipScore(pageOrder);
 
         //保存订单收款日志
         saveOrderSkLog(pageOrder);
@@ -538,7 +454,7 @@
      * @param pageOrder
      */
     private void updateOrderInfo(SysOrder pageOrder) {
-        LogUtil.info("付款更新订单信息 id={}",pageOrder.getId());
+        LogUtil.info("付款更新订单信息 id={}", pageOrder.getId());
         SysUsers user = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
         pageOrder.setCashierId(user.getSuId());
 
@@ -599,7 +515,7 @@
         //检查业绩设置
         checkOrderAchieve(pageOrder);
 
-        LogUtil.info("订单满足支付条件 id={}",pageOrder.getId());
+        LogUtil.info("订单满足支付条件 id={}", pageOrder.getId());
 
     }
 
@@ -637,164 +553,8 @@
 
 
     /**
-     * 设置会员消费积分
-     * @param pageOrder
-     */
-    private void addVipScore(SysOrder pageOrder) {
-
-        SysVipInfo vipInfo = sysVipInfoDao.selectById(pageOrder.getVipId());
-
-        List<SysOrderFlow> flows = pageOrder.getFlows();
-        int[] cashScore = {0, 0, 0};
-        //现金支付金额
-        BigDecimal cashPayAmount = flows.stream()
-                .filter(item -> (!item.getPayMethod().equals("储值卡")) && (!item.getPayMethod().equals("欠款")))
-                .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        BusParameterSettings cashConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.CASH_CONSUMPTION, vipInfo.getCompanyId());
-        if (cashPayAmount != null
-                && cashPayAmount.compareTo(BigDecimal.ZERO) > 0
-                && StringUtils.isNotBlank(cashConsumption.getParamValue())) {
-
-            BigDecimal scoreSetting0 = new BigDecimal(cashConsumption.getParamValue());
-            if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
-                cashScore[0] = cashPayAmount.divide(scoreSetting0).intValue();
-            }
-
-            if (StringUtils.isNotBlank(cashConsumption.getParamValue1())) {
-                BigDecimal scoreSetting1 = new BigDecimal(cashConsumption.getParamValue1());
-                if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
-                    cashScore[1] = cashPayAmount.divide(scoreSetting1).intValue();
-                }
-
-            }
-
-            if (StringUtils.isNotBlank(cashConsumption.getParamValue2())) {
-                BigDecimal scoreSetting2 = new BigDecimal(cashConsumption.getParamValue2());
-                if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
-                    cashScore[2] = cashPayAmount.divide(scoreSetting2).intValue();
-                }
-
-            }
-        }
-
-        int[] cardScore = {0, 0, 0};
-        //储值卡本金支付金额
-        BigDecimal cardPayAmount = flows.stream()
-                .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("N"))
-                .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-
-        BusParameterSettings principalBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.PRINCIPAL_BALANCE_CONSUMPTION, vipInfo.getCompanyId());
-        if (cardPayAmount != null
-                && cardPayAmount.compareTo(BigDecimal.ZERO) > 0
-                && StringUtils.isNotBlank(principalBalanceConsumption.getParamValue())) {
-
-            BigDecimal scoreSetting0 = new BigDecimal(principalBalanceConsumption.getParamValue());
-            if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
-                cardScore[0] = cardPayAmount.divide(scoreSetting0).intValue();
-            }
-
-            if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue1())) {
-                BigDecimal scoreSetting1 = new BigDecimal(principalBalanceConsumption.getParamValue1());
-                if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
-                    cardScore[1] = cardPayAmount.divide(scoreSetting1).intValue();
-                }
-            }
-
-            if (StringUtils.isNotBlank(principalBalanceConsumption.getParamValue2())) {
-                BigDecimal scoreSetting2 = new BigDecimal(principalBalanceConsumption.getParamValue2());
-                if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
-                    cardScore[2] = cardPayAmount.divide(scoreSetting2).intValue();
-                }
-            }
-        }
-
-        int[] giftScore = {0, 0, 0};
-        //储值卡本赠送付金额
-        BigDecimal giftPayAmount = flows.stream()
-                .filter(item -> item.getPayMethod().equals("储值卡") && item.getIsGift().equals("Y"))
-                .map(SysOrderFlow::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-        BusParameterSettings bonusBalanceConsumption = busParameterSettingsDao.selectCompanyParamByCode(ScoreSettingConstant.BONUS_BALANCE_CONSUMPTION, vipInfo.getCompanyId());
-        if (giftPayAmount != null
-                && giftPayAmount.compareTo(BigDecimal.ZERO) > 0
-                && StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue())) {
-
-            BigDecimal scoreSetting0 = new BigDecimal(bonusBalanceConsumption.getParamValue());
-            if (scoreSetting0.compareTo(BigDecimal.ZERO) > 0) {
-                giftScore[0] = giftPayAmount.divide(scoreSetting0).intValue();
-            }
-
-            if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue1())) {
-                BigDecimal scoreSetting1 = new BigDecimal(bonusBalanceConsumption.getParamValue1());
-                if (scoreSetting1.compareTo(BigDecimal.ZERO) > 0) {
-                    giftScore[1] = giftPayAmount.divide(scoreSetting1).intValue();
-                }
-            }
-
-            if (StringUtils.isNotBlank(bonusBalanceConsumption.getParamValue2())) {
-                BigDecimal scoreSetting2 = new BigDecimal(bonusBalanceConsumption.getParamValue2());
-                if (scoreSetting2.compareTo(BigDecimal.ZERO) > 0) {
-                    giftScore[2] = giftPayAmount.divide(scoreSetting2).intValue();
-                }
-            }
-        }
-
-        int selfScore = cashScore[0] + cardScore[0] + giftScore[0];
-        int parentScore = cashScore[1] + cardScore[1] + giftScore[1];
-        int topParentScore = cashScore[2] + cardScore[2] + giftScore[2];
-
-
-        //添加自己的积分
-        if (selfScore > 0) {
-            scoreVipDetailService.addScore(
-                    vipInfo.getId(),
-                    pageOrder.getStaffId(),
-                    pageOrder.getShopId(),
-                    selfScore,
-                    pageOrder.getId(),
-                    ScoreVipDetail.SCORE_VIP_TYPE_CASH,
-                    "消费奖励"
-            );
-        }
-
-        if (vipInfo.getRecommendId() != null) {
-            //推荐注册老带新积分奖励
-            SysVipInfo referrerVip = sysVipInfoDao.selectById(vipInfo.getRecommendId());
-            if (parentScore > 0) {
-                scoreVipDetailService.addScore(
-                        referrerVip.getId(),
-                        pageOrder.getStaffId(),
-                        pageOrder.getShopId(),
-                        parentScore,
-                        pageOrder.getId(),
-                        ScoreVipDetail.SCORE_VIP_TYPE_CASH,
-                        "推荐消费奖励"
-                );
-            }
-            //推荐注册二级带新积分奖励
-            if (referrerVip.getRecommendId() != null) {
-                SysVipInfo topVipInfo = sysVipInfoDao.selectById(referrerVip.getRecommendId());
-                if (topParentScore > 0) {
-                    scoreVipDetailService.addScore(
-                            topVipInfo.getId(),
-                            pageOrder.getStaffId(),
-                            pageOrder.getShopId(),
-                            topParentScore,
-                            pageOrder.getId(),
-                            ScoreVipDetail.SCORE_VIP_TYPE_CASH,
-                            "推荐消费奖励"
-                    );
-                }
-            }
-        }
-    }
-
-
-
-
-
-
-    /**
      * 补交
+     *
      * @author:姜友瑶
      * @date 2016年9月19日
      */
@@ -803,9 +563,8 @@
     public void updateAfterMoney(SysOrder pageOrder) {
         SysOrder sourceOrder = sysOrderDao.selectById(pageOrder.getId());
 
-
         //添加支付流水
-        sysOrderServiceHelper.addOrderFlow(pageOrder,true);
+        sysOrderServiceHelper.addOrderFlow(pageOrder, true);
 
         //扣除储值卡余额
         sysOrderServiceHelper.cardPaySk(pageOrder);
@@ -826,7 +585,7 @@
 
         if (refundTotal == pageOrder.getArrears()) {
             sourceOrder.setStatu(Dictionary.ORDER_STATU_YFK);
-        }else{
+        } else {
             sourceOrder.setStatu(Dictionary.ORDER_STATU_QK);
         }
         sourceOrder.setArrears(sourceOrder.getArrears() - refundTotal);
@@ -834,130 +593,6 @@
         sourceOrder.setCashPay(sourceOrder.getCashPay() == null ? 0 : sourceOrder.getCashPay() + cashPayTotal);
         sysOrderDao.update(sourceOrder);
     }
-
-
-    /**
-     * @param order 新增出库单并更新本店库存
-     * @author:姜友瑶
-     * @date 2016年9月2日
-     */
-    @Override
-    public void addOutStore(SysOrder order) {
-
-        BusParameterSettings manageStockSetting = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.WAREHOUSE_MANAGE_STOCK, order.getCompanyId());
-        if (AppConstance.IS_Y.equals(manageStockSetting.getParamValue())) {
-
-            List<SysOutStoreItem> storeItemList = new ArrayList<>();
-
-            for (SysOrderItem sysOrderItem : order.getItems()) {
-
-                if (ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP.equals(sysOrderItem.getType())) {
-
-                    SysOutStoreItem storeItem = new SysOutStoreItem();
-                    storeItem.setSkuId(sysOrderItem.getGoodsId());
-                    storeItem.setAmount(Double.valueOf(sysOrderItem.getCount()));
-                    storeItemList.add(storeItem);
-
-                } else if (ShoppingGoods.SHOPPING_GOODS_TYPE_TC.equals(sysOrderItem.getType())
-
-                        || ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
-
-                    List<ShoppingGoodsAssemble> goodsList = new ArrayList<>();
-
-                    goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
-
-                    if (ShoppingGoods.SHOPPING_GOODS_TYPE_ZHK.equals(sysOrderItem.getType())) {
-                        //综合卡处理,中的套餐,中的家居产品
-                        List<ShoppingGoodsAssemble> zhkAssemble = shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(sysOrderItem.getGoodsId(), ShoppingGoods.SHOPPING_GOODS_TYPE_TC);
-                        zhkAssemble.forEach(item -> {
-                            goodsList.addAll(shoppingGoodsAssembleDao.selectGoodsByShoppingGoodsIdAndType(item.getAssembleGoodId(), ShoppingGoods.SHOPPING_GOODS_TYPE_JJCP));
-                        });
-                    }
-
-                    goodsList.forEach(item -> {
-                        SysOutStoreItem storeItem = new SysOutStoreItem();
-                        storeItem.setSkuId(item.getAssembleGoodId());
-                        storeItem.setAmount(Double.valueOf(item.getTotal()));
-                        storeItemList.add(storeItem);
-                    });
-                }
-            }
-
-            if (CollectionUtils.isNotEmpty(storeItemList)) {
-                Long warehouseId = warehouseDao.findShopWarehouse(order.getShopId()).get(0).getId();
-                SysOutStore outStore = new SysOutStore();
-                outStore.setOutStoreNo(codeService.getOutStoreCode());
-                outStore.setOrderId(order.getId());
-                outStore.setShopId(order.getShopId());
-                outStore.setShopId(order.getShopId());
-                outStore.setStaffId(order.getStaffId());
-                outStore.setType(Dictionary.OUT_STORE_JJCPCK);
-                outStore.setServiceNo(order.getOrderNo());
-                outStore.setTime(new Date());
-                outStore.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
-                outStore.setCompanyId(order.getCompanyId());
-                sysOutStoreDao.insert(outStore);
-
-                //出库明细,根据批次维度定义
-                List<SysOutStoreItem> realOutStoreItemList = new ArrayList<>();
-
-                storeItemList.forEach(outStoreItem -> {
-
-                    //设置出库主键
-                    outStoreItem.setOutStoreId(outStore.getId());
-
-                    //计算库存总数是否满足本次扣减的需求
-                    List<SysStoreInfo> stores = storeInfoDao.selectStoInfoBySku(outStoreItem.getSkuId(), warehouseId);
-                    double sum = stores.stream().mapToDouble(item -> item.getStoreTotal()).sum();
-                    if (sum < outStoreItem.getAmount()) {
-                        ShoppingGoods sysGoods = shoppingGoodsDao.selectById(outStoreItem.getSkuId());
-                        if (sysGoods != null) {
-                            throw new GlobleException("出库失败:【" + sysGoods.getName() + "库存不足】");
-
-                        } else {
-                            throw new GlobleException("出库失败没有找到出库产品");
-                        }
-                    }
-
-                    //循环获取所有批次产品,并扣减库存
-                    Double number = outStoreItem.getAmount();
-                    for (SysStoreInfo storeInfo : stores) {
-                        Double oldStoreTotal = storeInfo.getStoreTotal();
-                        Double surplus = storeInfo.getStoreTotal() - number;
-                        //更新库存
-                        storeInfo.setStoreTotal(surplus < 0 ? 0 : surplus);
-
-                        //每次扣减库存都创建一个出库记录
-                        SysOutStoreItem sysOutStoreItem = new SysOutStoreItem();
-                        BeanUtils.copyProperties(outStoreItem, sysOutStoreItem);
-                        sysOutStoreItem.setStoreId(storeInfo.getId());
-                        sysOutStoreItem.setAmount(oldStoreTotal - storeInfo.getStoreTotal());
-                        realOutStoreItemList.add(sysOutStoreItem);
-
-                        storeInfoDao.update(storeInfo);
-                        //扣除后剩余库存大于0则跳出扣除,否则剩余数量的负数的绝对值就是再次扣减的数量
-                        if (surplus > 0) {
-                            break;
-                        } else {
-                            number = Math.abs(surplus);
-                        }
-                    }
-                });
-                sysOutStoreItemDao.batchInsert(realOutStoreItemList);
-            }
-
-        } else {
-            LogUtil.debug("不管理库存");
-        }
-
-
-    }
-
-
-
-
-
-
 
 
     /**
@@ -1048,7 +683,7 @@
 
         order.setFlows(czVo.getFlows());
 
-        sysOrderServiceHelper.addOrderFlow(order,false);
+        sysOrderServiceHelper.addOrderFlow(order, false);
 
         // 添加员工业绩
         achieveNewService.addAchaeveByOrder(order);
@@ -1142,7 +777,7 @@
 
 
         // 添加订单收款流水
-        sysOrderServiceHelper.addOrderFlow(sysOrder,false);
+        sysOrderServiceHelper.addOrderFlow(sysOrder, false);
         //退款退套餐退项目
         refundProjUse(sysOrder);
         //删除积分

--
Gitblit v1.9.1