Browse Source

feat(管理后台批量导入):调整管理员批量导入功能

yuj 7 years ago
parent
commit
67f3349fe1

+ 20 - 0
src/main/java/com/uas/platform/b2c/core/constant/ExcelConstant.java

@@ -23,6 +23,26 @@ public class ExcelConstant {
      */
     public static final Integer PER_SHEET_WRITE_COUNT = 100;
 
+    /**
+     * 客户最大上传量
+     */
+    public static final Integer CUSTOMER_MAX_UPLOAD = 2000;
+
+    /**
+     * 管理员最大上传量
+     */
+    public static final Integer ADMIN_MAX_UPLOAD = 20000;
+
+
+    /**
+     *  xls 表格
+     */
+    public static final String EXCEL_XLS = "xls";
+
+    /**
+     * xlsx 表格
+     */
+    public static final String EXCEL_XLSX = "xlsx";
 
 }
 

+ 5 - 0
src/main/java/com/uas/platform/b2c/core/constant/SplitChar.java

@@ -16,6 +16,11 @@ public class SplitChar {
 	 */
 	public static final String COMMA = ",";
 
+	/**
+	 * 点 . 字符串
+	 */
+	public static final String DOT = ".";
+
 	/**
 	 * 与字符  & 字符串
 	 */

+ 32 - 1
src/main/java/com/uas/platform/b2c/core/utils/PoiUtil.java

@@ -1,16 +1,23 @@
 package com.uas.platform.b2c.core.utils;
 
+import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.core.constant.ExcelConstant;
+import com.uas.platform.b2c.core.constant.SplitChar;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Date;
 
@@ -133,6 +140,30 @@ public class PoiUtil {
     }
 
 
-
+    /**
+     * 解析文件,生成Excel
+     *
+     * @param uploadItem
+     * @return
+     */
+    public static Workbook resolveExcel(FileUpload uploadItem) {
+        String fileName = uploadItem.getFile().getOriginalFilename();
+        String suffix = fileName.substring(fileName.lastIndexOf(SplitChar.DOT) + 1);
+        InputStream is = null;
+        Workbook workbook = null;
+        try {
+            is = uploadItem.getFile().getInputStream();
+            if (ExcelConstant.EXCEL_XLS.equals(suffix)) {
+                workbook = new HSSFWorkbook(is);
+            } else if (ExcelConstant.EXCEL_XLSX.equals(suffix)) {
+                workbook = new XSSFWorkbook(is);
+            } else {
+                throw new IllegalOperatorException("文件格式不正确!请上传.xls或.xlsx格式的文件");
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return workbook;
+    }
 
 }

+ 17 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ReleaseProductByBatchController.java

@@ -1,9 +1,11 @@
 package com.uas.platform.b2c.prod.commodity.controller;
 
 import com.uas.platform.b2c.common.base.model.FileUpload;
+import com.uas.platform.b2c.core.constant.ExcelConstant;
 import com.uas.platform.b2c.core.constant.IntegerConstant;
 import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
+import com.uas.platform.b2c.core.utils.PoiUtil;
 import com.uas.platform.b2c.prod.commodity.dao.ReleaseProductByBatchDao;
 import com.uas.platform.b2c.prod.commodity.model.GoodsQtyPrice;
 import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
@@ -237,7 +239,7 @@ public class ReleaseProductByBatchController {
             } else {
                 throw new IllegalOperatorException("文件格式不正确!请上传.xls或.xlsx格式的文件");
             }
-            map = releaseProductByBatchService.releaseByWorkbook(workbook, selfSale, currency, isPerson, ignoreImport, false);
+            map = releaseProductByBatchService.releaseByWorkbook(workbook, selfSale, currency, isPerson, ignoreImport, false, ExcelConstant.CUSTOMER_MAX_UPLOAD);
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -245,6 +247,19 @@ public class ReleaseProductByBatchController {
         return map;
     }
 
+    /**
+     * 通过excel批量导入PCB商品发布(大量)
+     * @param uploadItem 上传内容
+     * @return
+     */
+    @RequestMapping(value = "/release/excel/admin", method = RequestMethod.POST)
+    public ModelMap adminReleaseExcel(FileUpload uploadItem) {
+        Workbook workbook = PoiUtil.resolveExcel(uploadItem);
+        ModelMap map = releaseProductByBatchService.adminReleaseExcel(workbook);
+        logger.info("批量上架模块", "导入Excel批量上传商品");
+        return map;
+    }
+
     /**
      * 通过excel批量导入PCB商品发布(大量)
      * @param uploadItem 上传内容
@@ -269,7 +284,7 @@ public class ReleaseProductByBatchController {
                 throw new IllegalOperatorException("文件格式不正确!请上传.xls或.xlsx格式的文件");
             }
             // pcb都为店铺自营、非个人上传、属于PCB模块上传
-            map = releaseProductByBatchService.releaseByWorkbook(workbook, true, currency, IntegerConstant.NO_SHORT.intValue(), ignoreImport, true);
+            map = releaseProductByBatchService.releaseByWorkbook(workbook, true, currency, IntegerConstant.NO_SHORT.intValue(), ignoreImport, true, ExcelConstant.CUSTOMER_MAX_UPLOAD);
         } catch (IOException e) {
             e.printStackTrace();
         }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/model/Product.java

@@ -238,7 +238,7 @@ public class Product {
 	/**
 	 * 匹配结果
 	 */
-	@OneToMany(mappedBy = "product", cascade = { CascadeType.REFRESH }, fetch = FetchType.EAGER)
+	@OneToMany(mappedBy = "product", cascade = { CascadeType.REFRESH }, fetch = FetchType.LAZY)
 	private Set<ProductMatchResult> matchresults;
 
 	/**

+ 11 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/ReleaseProductByBatchService.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
+import com.uas.platform.b2c.common.base.model.FileUpload;
 import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.core.model.PageInfo;
@@ -34,9 +35,18 @@ public interface ReleaseProductByBatchService {
      * @param selfSale 是否自售
      * @param currency
      * @param isPcb 是否PCB模块上传
+     * @param maxUploadNum 最大上传量
      * @return model map
      */
-    public ModelMap releaseByWorkbook(Workbook workbook, Boolean selfSale, String currency, Integer isPerson, Integer repeatImport, boolean isPcb);
+    public ModelMap releaseByWorkbook(Workbook workbook, Boolean selfSale, String currency, Integer isPerson, Integer repeatImport, boolean isPcb, Integer maxUploadNum);
+
+    /**
+     * 管理员批量导入信息
+     *
+     * @param workbook
+     * @return
+     */
+    ModelMap adminReleaseExcel(Workbook workbook);
 
     /**
      * 通过Excel上传资料修改商品

+ 22 - 8
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java

@@ -3,10 +3,7 @@ package com.uas.platform.b2c.prod.commodity.service.impl;
 import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.core.config.SysConf;
-import com.uas.platform.b2c.core.constant.IntegerConstant;
-import com.uas.platform.b2c.core.constant.ReleaseStatus;
-import com.uas.platform.b2c.core.constant.SplitChar;
-import com.uas.platform.b2c.core.constant.Status;
+import com.uas.platform.b2c.core.constant.*;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.utils.NumberUtil;
 import com.uas.platform.b2c.core.utils.RegexConstant;
@@ -232,10 +229,11 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	 * @param currency  当前选中的币别  (RMB/USD)
 	 * @param isPerson 是否是个人上传产品
 	 * @param ignoreImport 1是忽略导入,0是覆盖导入
+	 * @param maxUploadNum 最大上传量
 	 * @author hejq
 	 */
 	@Override
-	public ModelMap releaseByWorkbook(Workbook workbook, Boolean selfSale, String currency, Integer isPerson, Integer ignoreImport, boolean isPcb) {
+	public ModelMap releaseByWorkbook(Workbook workbook, Boolean selfSale, String currency, Integer isPerson, Integer ignoreImport, boolean isPcb, Integer maxUploadNum) {
 		// 是否上传个人物料
 		boolean isAPerson = false;
 		if (null != isPerson && isPerson.intValue() == IntegerConstant.YES_SHORT.intValue()) {
@@ -258,8 +256,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				throw new IllegalOperatorException("表格模板不正确!请重新下载最新模板");
 		}
 		int rowNum = SheetUtil.getSheetLastNum(sheet, isPcb ? UploadConstant.MAX_TOTAL_COLUMN_PCB : UploadConstant.MAX_TOTAL_COLUMN);
-		if (rowNum > 2002) {
-			throw new IllegalOperatorException("您上传的信息超过2000条,请拆分成2000以下再上传");
+		if (rowNum > (maxUploadNum + 2)) {
+			throw new IllegalOperatorException("您上传的信息超过"+ maxUploadNum + "条,请拆分成" + maxUploadNum + "以下再上传");
 		}
 		if (rowNum < 2) {
 			throw new IllegalOperatorException("请填写上传信息");
@@ -341,7 +339,23 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		return modelMap;
 	}
 
-    /**
+	/**
+	 * 管理员批量导入信息
+	 *
+	 * @param workbook
+	 * @return
+	 */
+	@Override
+	public ModelMap adminReleaseExcel(Workbook workbook) {
+		StoreIn storeIn = storeInService.findByEnUU(SystemSession.getUser().getEnterprise().getUu());
+		Boolean selfSale = (storeIn == null || storeIn.getStatus() != StoreStatus.OPENED) ? false : true;
+		ResultMap resultMap = enterpriseService.getCurrencyByRegisterAddress();
+		String currency = (resultMap.getCode() == CodeType.OK.code()) ? (String) resultMap.getData() : Currency.RMB;
+		ModelMap map = releaseByWorkbook(workbook, selfSale, currency, IntegerConstant.NO_SHORT.intValue(), IntegerConstant.YES_SHORT, false, ExcelConstant.ADMIN_MAX_UPLOAD);
+		return map;
+	}
+
+	/**
      * 统计批量上传数据相关
      *
      * @param modelMap ModelMap