From e971ea090aa1f320f3c3f78c3a2a8d50f16dd4d0 Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Fri, 15 Jan 2021 23:38:19 +0800
Subject: [PATCH] 小程序预约接口修改

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java |  267 +++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 208 insertions(+), 59 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 bef07ea..21f8bde 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
@@ -7,6 +7,7 @@
 import com.matrix.core.tools.StringUtils;
 import com.matrix.core.tools.WebUtil;
 import com.matrix.system.app.dto.OrderListDto;
+import com.matrix.system.app.mapper.SysProjUseMapper;
 import com.matrix.system.app.vo.OrderDetailAchieveItemVo;
 import com.matrix.system.app.vo.OrderDetailItemVo;
 import com.matrix.system.app.vo.OrderDetailVo;
@@ -25,16 +26,14 @@
 import com.matrix.system.hive.pojo.CzXkVo;
 import com.matrix.system.hive.pojo.ShoppingCarItem;
 import com.matrix.system.hive.pojo.ShoppingCarItemsVo;
-import com.matrix.system.hive.service.AchieveNewService;
-import com.matrix.system.hive.service.CodeService;
-import com.matrix.system.hive.service.ShoppingGoodsService;
-import com.matrix.system.hive.service.SysOrderService;
+import com.matrix.system.hive.service.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.servlet.http.HttpSession;
+import javax.validation.constraints.NotEmpty;
 import java.util.*;
 
 /**
@@ -95,6 +94,19 @@
 
     @Autowired
     private SysOrderFlowDao sysOrderFlowDao;
+
+    @Autowired
+    private SysSupplierInfoDao sysSupplierInfoDao;
+
+    @Autowired
+    private SysInstoreInfoDao sysInstoreInfoDao;
+
+    @Autowired
+    private SysInstoreDetailDao sysInstoreDetailDao;
+
+    @Autowired
+    private SysInstoreInfoService sysInstoreInfoService;
+
 
     @Override
     public int add(SysOrder sysOrder) {
@@ -209,7 +221,11 @@
 
         sysOrder.getItems().forEach(sysOrderItem -> {
             sysOrderItem.setOrderId(sysOrder.getId());
+            // 取负数
+            sysOrderItem.setCount(-sysOrderItem.getCount());
             orderItemDao.insert(sysOrderItem);
+            // 调整回来
+            sysOrderItem.setCount(-sysOrderItem.getCount());
         });
 
         return sysOrder;
@@ -478,6 +494,7 @@
     private void changeOrderStatu(SysOrder sourceOrder) {
         int i = 1;
         String orderStatus = Dictionary.ORDER_STATU_YFK;
+        String flowType = SysOrderFlow.FLOW_TYPE_BUY;
         double cashPayTotal = 0D;
         double cardPayTotal = 0D;
         for (SysOrderFlow flow : sourceOrder.getFlows()) {
@@ -486,9 +503,17 @@
             ShoppingGoods goods = shoppingGoodsDao.selectById(goodsId);
             flow.setFlowContent(goods.getName() + "等" + sourceOrder.getItems().size() + "件产品");
 
-            flow.setOrderId(sourceOrder.getId());
+            if (Dictionary.ORDER_STATU_TK.equals(sourceOrder.getStatu())) {
+                flowType = SysOrderFlow.FLOW_TYPE_REFUND;
+                // 若是退款,则取负数
+                flow.setAmount(flow.getAmount().negate());
+                flow.setOrderId(sourceOrder.getOldOrderId());
+            } else {
+                flow.setOrderId(sourceOrder.getId());
+            }
+
             flow.setVipId(sourceOrder.getVipId());
-            flow.setFlowType(SysOrderFlow.FLOW_TYPE_BUY);
+            flow.setFlowType(flowType);
             // 若使用储值卡付款
             if (SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                 if (flow.getCardId() != null) {
@@ -506,6 +531,8 @@
             if (!SysOrderFlow.PAY_METHOD_ARREARS.equals(flow.getPayMethod()) && !SysOrderFlow.PAY_METHOD_CARD.equals(flow.getPayMethod())) {
                 cashPayTotal += flow.getAmount().doubleValue();
             }
+            flow.setShopId(sourceOrder.getShopId());
+            flow.setCompanyId(sourceOrder.getCompanyId());
             sysOrderFlowDao.insert(flow);
             i++;
         }
@@ -615,8 +642,10 @@
         }
 
         ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId());
-        Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
-        moneyCardUse.setFailTime(invalidTime);
+        if (shoppingGoods != null) {
+            Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime());
+            moneyCardUse.setFailTime(invalidTime);
+        }
         // 更新充值卡信息
         moneyCardUseDao.update(moneyCardUse);
     }
@@ -691,51 +720,46 @@
             // 如果购买的是充值卡
             if (sysOrderItem.getType().equals(Dictionary.SHOPPING_GOODS_TYPE_CZK)) {
 
-                ShoppingGoods moneyCar = shoppingGoodsDao.selectById(sysOrderItem.getGoodsId());
-                MoneyCardUse moneyCardUse = new MoneyCardUse();
-                moneyCardUse.setVipId(sourceOrder.getVipId());
-                moneyCardUse.setGiftMoney(moneyCar.getReferencePice());
-                moneyCardUse.setRealMoney(moneyCar.getSealPice());
-                moneyCardUse.setGoodsId(moneyCar.getId());
-                moneyCardUse.setIsOver(Dictionary.FLAG_NO_N);
-                moneyCardUse.setOrderItemId(sysOrderItem.getId());
-                moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
-                moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
-                moneyCardUse.setCardName(moneyCar.getName());
-
-                if (Dictionary.FLAG_YES.equals(moneyCar.getCarIsAll())) {
-                    moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y);
-                } else {
-                    // 非会籍卡
-                    moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
-                }
-
-                // 是否为赠送
-                if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) {
-                    moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
-                } else {
+                for(int i = 0; i < sysOrderItem.getCount(); i++) {
+                    ShoppingGoods moneyCar = shoppingGoodsDao.selectById(sysOrderItem.getGoodsId());
+                    MoneyCardUse moneyCardUse = new MoneyCardUse();
+                    moneyCardUse.setVipId(sourceOrder.getVipId());
+                    moneyCardUse.setGiftMoney(moneyCar.getReferencePice());
+                    moneyCardUse.setRealMoney(moneyCar.getSealPice());
+                    moneyCardUse.setGoodsId(moneyCar.getId());
+                    moneyCardUse.setIsOver(Dictionary.FLAG_NO_N);
+                    moneyCardUse.setOrderItemId(sysOrderItem.getId());
                     moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
-                }
-                if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) {
-                    moneyCardUse.setUseTotal(999999999);
-                    moneyCardUse.setLastCount(999999999);
-                } else {
-                    moneyCardUse.setUseTotal(moneyCar.getCarUseCount());
-                    moneyCardUse.setLastCount(moneyCar.getCarUseCount());
-                }
-                moneyCardUse.setVipId(sourceOrder.getVipId());
-//                if (moneyCar.getValidity() == null || moneyCar.getValidity() == 0) {
-//                    // 设置失效时间
-//                    Calendar cal = Calendar.getInstance();
-//                    cal.set(2200, 1, 1);
-//                    moneyCardUse.setFailTime(cal.getTime());
-//                } else {
-//                    moneyCardUse.setFailTime(DateUtil.nextNDate(new Date(), 30 * moneyCar.getValidity()));
-//                }
-                Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
-                moneyCardUse.setFailTime(invalidTime);
+                    moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_YX);
+                    moneyCardUse.setCardName(moneyCar.getName());
 
-                moneyCardUseDao.insert(moneyCardUse);
+                    if (Dictionary.FLAG_YES.equals(moneyCar.getCarIsAll())) {
+                        moneyCardUse.setIsVipCar(Dictionary.FLAG_YES_Y);
+                    } else {
+                        // 非会籍卡
+                        moneyCardUse.setIsVipCar(Dictionary.FLAG_NO_N);
+                    }
+
+                    // 是否为赠送
+                    if (sysOrderItem.getIsFree().equals(Dictionary.FLAG_YES)) {
+                        moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_ZS);
+                    } else {
+                        moneyCardUse.setSource(Dictionary.TAOCAN_SOURCE_GM);
+                    }
+                    if (moneyCar.getCarUseCount() == null || moneyCar.getCarUseCount() == 0) {
+                        moneyCardUse.setUseTotal(999999999);
+                        moneyCardUse.setLastCount(999999999);
+                    } else {
+                        moneyCardUse.setUseTotal(moneyCar.getCarUseCount());
+                        moneyCardUse.setLastCount(moneyCar.getCarUseCount());
+                    }
+                    moneyCardUse.setVipId(sourceOrder.getVipId());
+
+                    Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null);
+                    moneyCardUse.setFailTime(invalidTime);
+
+                    moneyCardUseDao.insert(moneyCardUse);
+                }
             }
         }
     }
@@ -1224,22 +1248,147 @@
         return sysOrderDao.selectStaffSaleAchieveRanking(sysOrder);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void refundOrderMoney(SysOrder pageOrder) {
-
+        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        // 插入订单流水
         changeOrderStatu(pageOrder);
-        // 设置会员充值卡使用情况
-        addMoneyCardUse(pageOrder);
 
-        // 新增出库单
-        addOutStore(pageOrder);
+        List<SysOrderItem> returnItems = new ArrayList<>();
+        for (SysOrderItem item : pageOrder.getItems()) {
 
-        // 改变客户项目套餐使用情况
-        addTaocanProj(pageOrder);
+            SysProjUse queryProjUse = new SysProjUse();
+            queryProjUse.setIsOver(Dictionary.FLAG_NO_N);
+            queryProjUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
+            queryProjUse.setOrderItemId(item.getOldItemId());
+            // 修改项目信息
+            if (Dictionary.SHOPPING_GOODS_TYPE_XM.equals(item.getType()) || Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) {
+
+                if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(item.getType())) {
+                    if (Dictionary.FLAG_YES_Y.equals(item.getIsReturnStore())) {
+                        returnItems.add(item);
+                    }
+                } else {
+                    SysProjUse sysProjUse = sysProjUseDao.selectByModel(queryProjUse).get(0);
+
+                    int sub = sysProjUse.getSurplusCount() - item.getCount();
+                    sysProjUse.setSurplusCount(sub);
+                    if (sub <= 0) {
+                        sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
+                        sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
+                    }
+                    sysProjUseDao.update(sysProjUse);
+
+                    SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
+                    sysProjUseFlow.setOptionType("退款修改");
+                    sysProjUseFlow.setId(null);
+                    sysProjUseFlow.setUpdateBy(user.getSuName());
+                    sysProjUseFlow.setCreateBy(user.getSuName());
+                    sysProjUseDao.insertFlow(sysProjUseFlow);
+                }
+            }
+
+            if (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(item.getType())) {
+                queryProjUse.setTaocanId(-1L);
+                List<SysProjUse> sysProjUses = sysProjUseDao.selectByModel(queryProjUse);
+                if (item.getCount() > sysProjUses.size()) {
+                    throw new GlobleException("数据异常");
+                }
+
+                for(int i = 0; i < item.getCount(); i++) {
+                    SysProjUse sysProjUse = sysProjUses.get(i);
+                    sysProjUse.setIsOver(Dictionary.FLAG_YES_Y);
+                    sysProjUse.setStatus(Dictionary.TAOCAN_STATUS_WX);
+
+                    sysProjUseDao.update(sysProjUse);
+                    SysProjUseFlow sysProjUseFlow = SysProjUseMapper.INSTANCE.projUseToFlow(sysProjUse);
+                    sysProjUseFlow.setOptionType("退款修改");
+                    sysProjUseFlow.setId(null);
+                    sysProjUseFlow.setUpdateBy(user.getSuName());
+                    sysProjUseFlow.setCreateBy(user.getSuName());
+                    sysProjUseDao.insertFlow(sysProjUseFlow);
+                }
+            }
+
+            if (Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(item.getType())) {
+                MoneyCardUse queryCardUse = new MoneyCardUse();
+                queryCardUse.setIsOver(Dictionary.FLAG_NO_N);
+                queryCardUse.setStatus(Dictionary.TAOCAN_STATUS_YX);
+                queryCardUse.setOrderItemId(item.getOldItemId());
+
+                List<MoneyCardUse> moneyCardUses = moneyCardUseDao.selectByModel(queryCardUse);
+                for(int i = 0; i < item.getCount(); i++) {
+                    MoneyCardUse moneyCardUse = moneyCardUses.get(i);
+                    moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y);
+                    moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX);
+                    moneyCardUseDao.update(moneyCardUse);
+                }
+            }
+
+            // TODO 综合卡退款
+            if (Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(item.getType())) {
+
+            }
+
+
+            ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
+            goods.setRealSealCount(goods.getRealSealCount() - item.getCount());
+            shoppingGoodsDao.update(goods);
+        }
+
+        // 家居产品退库存
+        if (CollectionUtils.isNotEmpty(returnItems)) {
+            refundInstore(returnItems);
+        }
 
         // 设置业绩
         achieveNewService.addAchaeveByOrder(pageOrder);
 
-        setShopSelCount(pageOrder);
+    }
+
+    /**
+     * 退款入库
+     */
+    private void refundInstore(@NotEmpty List<SysOrderItem> items) {
+        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+        SysSupplierInfo supplierInfo = new SysSupplierInfo();
+        supplierInfo.setShopId(user.getShopId());
+        supplierInfo = sysSupplierInfoDao.selectByModel(supplierInfo).get(0);
+
+        Warehouse warehouse = warehouseDao.findShopWarehouse(user.getShopId()).get(0);
+        SysInstoreInfo instoreInfo = new SysInstoreInfo();
+        instoreInfo.setInstoreType(SysInstoreInfo.INSTORE_TYPE_RETURN);
+        instoreInfo.setInstoreDate(new Date());
+        instoreInfo.setSupplierId(supplierInfo.getId().toString());
+        instoreInfo.setStoreId(warehouse.getId());
+        instoreInfo.setCheckStatus(Dictionary.CHECK_STATUS_DSH);
+        // 设置入库单编号
+        instoreInfo.setInstoreId(DateUtil.getTimeMark());
+        instoreInfo.setShopId(user.getShopId());
+        instoreInfo.setCompanyId(user.getCompanyId());
+        sysInstoreInfoDao.insert(instoreInfo);
+
+        Double total = 0.0;
+        List<SysInstoreDetail> instoreDetails = new ArrayList<>();
+        for (SysOrderItem item : items) {
+            ShoppingGoods goods = shoppingGoodsDao.selectById(item.getGoodsId());
+            SysInstoreDetail sysInstoreDetail = new SysInstoreDetail();
+            sysInstoreDetail.setAmount(item.getCount().doubleValue());
+            sysInstoreDetail.setPrice(item.getZkPrice());
+            sysInstoreDetail.setSkuId(goods.getId());
+
+            total = MoneyUtil.add(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice()), total);
+            sysInstoreDetail.setInstoreId(instoreInfo.getId());
+            // 设置小计
+            sysInstoreDetail.setPriceTotal(MoneyUtil.mul(Double.parseDouble(sysInstoreDetail.getAmount() + ""), sysInstoreDetail.getPrice()));
+            instoreDetails.add(sysInstoreDetail);
+
+        }
+        instoreInfo.setSumall(total);
+        sysInstoreInfoDao.update(instoreInfo);
+        sysInstoreDetailDao.batchInsert(instoreDetails);
+
+        sysInstoreInfoService.check(instoreInfo);
     }
 }

--
Gitblit v1.9.1