From 9c791d431038fe79a111805762ee2f42c96b51c5 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 08 Nov 2021 17:03:15 +0800
Subject: [PATCH] fix

---
 zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopOrderAction.java |  243 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 211 insertions(+), 32 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopOrderAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopOrderAction.java
index 49d6d78..c318168 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/action/ShopOrderAction.java
@@ -1,7 +1,10 @@
 package com.matrix.system.shopXcx.action;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.google.gson.Gson;
+import com.matrix.component.asyncmessage.AsyncMessageManager;
 import com.matrix.core.anotations.RemoveRequestToken;
 import com.matrix.core.anotations.SaveRequestToken;
 import com.matrix.core.constance.MatrixConstance;
@@ -16,25 +19,32 @@
 import com.matrix.core.tools.excl.ExcelVersion;
 import com.matrix.system.common.bean.SysUsers;
 import com.matrix.system.common.constance.AppConstance;
-import com.matrix.system.constance.Dictionary;
 import com.matrix.system.hive.action.BaseController;
 import com.matrix.system.hive.action.util.QueryUtil;
 import com.matrix.system.hive.bean.SysShopInfo;
+import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.hive.dao.SysShopInfoDao;
+import com.matrix.system.hive.service.SysVipInfoService;
 import com.matrix.system.shopXcx.bean.*;
 import com.matrix.system.shopXcx.dao.*;
 import com.matrix.system.shopXcx.dto.DiscountExplain;
+import com.matrix.system.shopXcx.mqTask.AsyncMessageRouting;
 import com.matrix.system.shopXcx.pojo.ShopOrderQueryPOJO;
 import com.matrix.system.shopXcx.shopEnum.OrderStatusEnum;
+import com.matrix.system.shopXcx.vo.LogisticsImportVo;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.ModelAndView;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.math.BigDecimal;
@@ -62,10 +72,195 @@
     private WxApplyOrderRelateDao wxApplyOrderRelateDao;
     @Autowired
     private SysShopInfoDao sysShopInfoDao;
+    @Autowired
+    private SysVipInfoService vipInfoService;
 
     //记录编辑前的值Before_Edit_Value
     public static final String BEV = "ShopOrder_BEV";
 
+    public static final List<LogisticsImportVo> logisticsImportVoLists = new ArrayList<>();
+    @Autowired
+    private AsyncMessageManager asyncMessageManager;
+
+
+    /**
+     * 导入快递单
+     */
+    @RequestMapping(value = "/logisticsImport")
+    @ResponseBody
+    public AjaxResult logisticsImport(HttpServletResponse response, HttpServletRequest request,
+    	@RequestParam(value = "file", required = false) MultipartFile file) throws IOException {
+
+        String fileName = file.getOriginalFilename();
+        String dirPath = PropertiesUtil.getString(AppConstance.FILES_TORAGE_PATH);
+//        String dirPath = "E:/xcshop";
+        File fileDir = new File(dirPath);
+        LogUtil.info("#----->{}#", fileDir.exists());
+        if (!fileDir.exists()) {
+            fileDir.mkdirs();
+        }
+        File saveFile = new File(dirPath + "/" + fileName);
+        file.transferTo(saveFile);
+
+        String infoRemind = "提示:";
+        AjaxResult ajaxResult = new AjaxResult();
+        List<LogisticsImportVo> logisticsImportVos = logisticsImportFile(saveFile);
+        if(CollUtil.isNotEmpty(logisticsImportVos)){
+            ajaxResult = AjaxResult.buildSuccessInstance("部分数据导入失败");
+            ajaxResult.setStatus(AjaxResult.STATUS_FAIL);
+        }else{
+            ajaxResult = AjaxResult.buildSuccessInstance("导入成功");
+            ajaxResult.setStatus(AjaxResult.STATUS_SUCCESS);
+        }
+        return ajaxResult;
+    }
+
+    @RequestMapping(value = "/exportLogisticsImportExcel")
+    public void exportLogisticsImportExcel(HttpServletResponse res) {
+        OutputStream os = null;
+        try {
+            res.setCharacterEncoding("UTF-8");
+            res.setHeader("content-type", "application/octet-stream;charset=UTF-8");
+            res.setContentType("application/octet-stream;charset=UTF-8");
+            Date date = new Date();
+            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss");
+            res.setHeader("Content-Disposition", "attachment;filename=" +
+                    java.net.URLEncoder.encode("快递单导入列表" + dateFormat.format(date) + ".xls".trim(), "UTF-8"));
+
+            os = res.getOutputStream();
+            ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, disPoseLogisticsImportExcel(logisticsImportVoLists), os, true);
+            logisticsImportVoLists.clear();
+        } catch (Exception e) {
+            LogUtil.error("快递单导入异常", e);
+        } finally {
+            if (os != null) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    LogUtil.error("关闭资源异常", e);
+                }
+            }
+        }
+    }
+    private List<ExcelSheetPO> disPoseLogisticsImportExcel(List<LogisticsImportVo> logisticsImportVos) {
+        List<ExcelSheetPO> res = new ArrayList<>();
+        ExcelSheetPO orderSheet = new ExcelSheetPO();
+        orderSheet.setSheetName("快递单导入");
+        orderSheet.setTitle("快递单导入失败列表");
+        String[] header = new String[]{"订单编号", "物流公司编码", "物流公司名称", "快递单号", "失败原因"};
+        orderSheet.setHeaders(header);
+        List<List<Object>> body = new ArrayList<>();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+        if(CollUtil.isNotEmpty(logisticsImportVos)){
+            for (LogisticsImportVo logisticsImportVo : logisticsImportVos) {
+                List<Object> bodyItem = new ArrayList<>();
+                bodyItem.add(logisticsImportVo.getOrderNo());
+                bodyItem.add(logisticsImportVo.getLogisticsCompanyCode());
+                bodyItem.add(logisticsImportVo.getLogisticsCompany());
+                bodyItem.add(logisticsImportVo.getWaybillNo());
+                bodyItem.add(logisticsImportVo.getFailReason());
+                body.add(bodyItem);
+            }
+        }
+        orderSheet.setDataList(body);
+        res.add(orderSheet);
+        return res;
+    }
+    
+    public List<LogisticsImportVo> logisticsImportFile(File file) throws IOException {
+		SysUsers sysUsers = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+		List<ExcelSheetPO> excelList = ExcelUtil.readExcel(file, null,null);
+        ArrayList<LogisticsImportVo> logisticsImportVos = new ArrayList<>();
+		for (int i = 0; i < excelList.size(); i++) {
+			List<List<Object>> dataList = excelList.get(i).getDataList();
+			List<SysVipInfo> vipInfos = new ArrayList<>();
+			if (CollectionUtils.isNotEmpty(dataList)) {
+				for (int j = 1; j < dataList.size(); j++) {
+                    /**
+                     * 订单处于【待付款】【待配送】【待收货】都可以导入
+                     * 其他状态生成一个提示
+                     */
+
+                    LogisticsImportVo logisticsImportVo = new LogisticsImportVo();
+					List<Object> objects = dataList.get(j);
+					//订单编号
+					String orderNo = objects.get(0).toString();
+                    ShopOrder shopOrder = shopOrderDao.selectShopOrderByOrderNo(orderNo);
+                    if(ObjectUtil.isNotEmpty(shopOrder) &&
+                            (shopOrder.getOrderStatus() == ShopOrder.ORDER_STATUS_WAIT_SEND ||
+                                    shopOrder.getOrderStatus() == ShopOrder.ORDER_STATUS_WAIT_RECEIVE )){
+                        //物流公司编码
+                        String logisticsCompanyCode = objects.get(1).toString();
+                        //物流公司名称
+                        String logisticsCompany = objects.get(2).toString();
+                        //快递单号
+                        String waybillNo = objects.get(3).toString();
+
+                        ShopDeliveryInfo shopDeliveryInfo = new ShopDeliveryInfo();
+                        shopDeliveryInfo.setOrderId(shopOrder.getId());
+                        List<ShopDeliveryInfo> infoList = shopDeliveryInfoDao.selectByModel(shopDeliveryInfo);
+                        if (CollectionUtils.isEmpty(infoList)) {
+                            logisticsImportVo.setOrderNo(objects.get(0).toString());
+                            logisticsImportVo.setLogisticsCompanyCode(objects.get(1).toString());
+                            logisticsImportVo.setLogisticsCompany(objects.get(2).toString());
+                            logisticsImportVo.setWaybillNo(objects.get(3).toString());
+                            logisticsImportVo.setFailReason("未找到发货信息");
+                            logisticsImportVos.add(logisticsImportVo);
+                            logisticsImportVoLists.add(logisticsImportVo);
+                        }else{
+                            shopDeliveryInfo = infoList.get(0);
+                            shopDeliveryInfo.setOrderNo(orderNo);
+                            shopDeliveryInfo.setLogisticsCompanyCode(logisticsCompanyCode);
+                            shopDeliveryInfo.setLogisticsCompany(logisticsCompany);
+                            shopDeliveryInfo.setWaybillNo(waybillNo);
+                            shopDeliveryInfo.setUpdateBy(sysUsers.getSuName());
+                            shopDeliveryInfo.setLogisticsStatus(AppConstance.LOGISTICS_STATUS_OF_RECEIVE);
+                            shopDeliveryInfo.setDeliveryTime(new Date());
+                            shopDeliveryInfoDao.updateByModel(shopDeliveryInfo);
+
+                            //构建需要修改订单信息Map
+                            Map<String, Object> modifyMap = new HashMap<>();
+                            modifyMap.put("id", shopOrder.getId());
+                            modifyMap.put("orderStatus", ShopOrder.ORDER_STATUS_WAIT_RECEIVE);
+                            shopOrderDao.updateByMap(modifyMap);
+
+                            //发送创建订单的消息
+                            asyncMessageManager.sendMsg(AsyncMessageRouting.ORDER_OUT_SOTORE ,"orderNo=%s");
+
+                        }
+                    }else{
+                        if(ObjectUtil.isEmpty(shopOrder)){
+                            logisticsImportVo.setOrderNo(objects.get(0).toString());
+                            logisticsImportVo.setLogisticsCompanyCode(objects.get(1).toString());
+                            logisticsImportVo.setLogisticsCompany(objects.get(2).toString());
+                            logisticsImportVo.setWaybillNo(objects.get(3).toString());
+                            logisticsImportVo.setFailReason("未找到订单信息");
+                            logisticsImportVos.add(logisticsImportVo);
+                            logisticsImportVoLists.add(logisticsImportVo);
+                        }else if(shopOrder.getOrderStatus() != ShopOrder.ORDER_STATUS_WAIT_SEND ||
+                                shopOrder.getOrderStatus() != ShopOrder.ORDER_STATUS_WAIT_RECEIVE ){
+                            logisticsImportVo.setOrderNo(objects.get(0).toString());
+                            logisticsImportVo.setLogisticsCompanyCode(objects.get(1).toString());
+                            logisticsImportVo.setLogisticsCompany(objects.get(2).toString());
+                            logisticsImportVo.setWaybillNo(objects.get(3).toString());
+                            logisticsImportVo.setFailReason("订单状态不允许发货");
+                            logisticsImportVos.add(logisticsImportVo);
+                            logisticsImportVoLists.add(logisticsImportVo);
+                        }else{
+                            logisticsImportVo.setOrderNo(objects.get(0).toString());
+                            logisticsImportVo.setLogisticsCompanyCode(objects.get(1).toString());
+                            logisticsImportVo.setLogisticsCompany(objects.get(2).toString());
+                            logisticsImportVo.setWaybillNo(objects.get(3).toString());
+                            logisticsImportVo.setFailReason("导入失败");
+                            logisticsImportVos.add(logisticsImportVo);
+                            logisticsImportVoLists.add(logisticsImportVo);
+                        }
+                    }
+				}
+			}
+		}
+		return logisticsImportVos;
+	}
 
     /**
      * 导出Excel
@@ -108,8 +303,8 @@
         ExcelSheetPO orderSheet = new ExcelSheetPO();
         orderSheet.setSheetName("订单列表");
         orderSheet.setTitle("订单列表");
-        String[] header = new String[]{"订单编号", "客户姓名", "客户电话", "收货地址", "下单时间", "订单金额",
-                "优惠总金额", "优惠说明", "订单状态", "配送方式", "门店名称", "商品名称", "规格", "生产企业", "单价", "购买数量"};
+        String[] header = new String[]{"订单编号", "客户姓名", "客户电话", "收货地址", "店铺名称","订单状态","下单时间",  "购买商品","订单金额",
+                "优惠总金额",  "配送方式"};
         orderSheet.setHeaders(header);
         List<List<Object>> body = new ArrayList<>();
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
@@ -133,42 +328,26 @@
                 } else {
                     bodyItem.add("");
                 }
-                //下单时间
-                bodyItem.add(dateFormat.format(shopOrder.getOrderTime()));
-                //购买数量
-//				bodyItem.add(shopOrder.getPurchaseQuantity());
-                //订单金额
-                bodyItem.add(shopOrder.getOrderMoney());
-                //优惠总金额
-                bodyItem.add(shopOrder.getDiscountAmount());
-                //优惠说明
-                bodyItem.add(shopOrder.getDiscountExplain());
+                //店铺名称
+                bodyItem.add(shopOrder.getStoreName());
                 //订单状态
                 bodyItem.add(OrderStatusEnum.getNameByCode(shopOrder.getOrderStatus()));
-                //配送方式 门店
-                bodyItem.add("物流");
-                bodyItem.add("");
-
-                //商品名称
+                //下单时间
+                bodyItem.add(dateFormat.format(shopOrder.getOrderTime()));
+                //购买商品
+                ShopSku shopSku = shopOrderDetails.getShopSku();
                 ShopProduct shopProduct = shopOrderDetails.getShopProduct();
                 if (shopProduct == null) {
                     bodyItem.add("");
                 } else {
-                    bodyItem.add(shopProduct.getTitle());
+                    bodyItem.add(shopProduct.getTitle()+ "(" +shopSku.getName()+ ")*" + shopOrderDetails.getCount());
                 }
-                //规格名称、生产企业、单价
-                ShopSku shopSku = shopOrderDetails.getShopSku();
-                if (shopSku == null) {
-                    bodyItem.add("");
-                    bodyItem.add(shopOrderDetails.getProductionEnterprise());
-                    bodyItem.add("");
-                } else {
-                    bodyItem.add(shopSku.getName());
-                    bodyItem.add(shopOrderDetails.getProductionEnterprise());
-                    bodyItem.add(shopSku.getPrice());
-                }
-                //购买数量
-                bodyItem.add(shopOrderDetails.getCount());
+                //订单金额
+                bodyItem.add(shopOrder.getOrderMoney());
+                //优惠总金额
+                bodyItem.add(shopOrder.getDiscountAmount());
+                //配送方式 门店
+                bodyItem.add("物流");
                 body.add(bodyItem);
             }
         }

--
Gitblit v1.9.1