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