Browse Source

Merge branch 'test-yuj-1107' into dev

# Conflicts:
#	src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
#	src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java
#	src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
#	src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
yuj 7 years ago
parent
commit
e3c9729b4d
20 changed files with 882 additions and 64 deletions
  1. 10 10
      pom.xml
  2. 1 1
      src/main/java/com/uas/platform/b2c/common/weixin/util/HttpReqUtil.java
  3. 28 0
      src/main/java/com/uas/platform/b2c/core/constant/ExcelConstant.java
  4. 189 0
      src/main/java/com/uas/platform/b2c/core/support/view/JxlsxExcelView.java
  5. 29 0
      src/main/java/com/uas/platform/b2c/core/utils/DateUtil.java
  6. 195 0
      src/main/java/com/uas/platform/b2c/core/utils/PoiUtil.java
  7. 24 0
      src/main/java/com/uas/platform/b2c/core/utils/WriteExcelDataDelegated.java
  8. 8 23
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java
  9. 52 0
      src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java
  10. 8 0
      src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java
  11. 11 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java
  12. 23 0
      src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java
  13. 102 7
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java
  14. 174 21
      src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java
  15. 26 0
      src/main/java/com/uas/platform/b2c/prod/store/model/KindHierarchicalCount.java
  16. BIN
      src/main/resources/jxls-tpl/trade/goods.xls
  17. BIN
      src/main/resources/jxls-tpl/trade/test.xls
  18. BIN
      src/main/resources/jxls-tpl/trade/test.xlsx
  19. 1 1
      src/main/resources/pre/account.properties
  20. 1 1
      src/main/resources/pre/sys.properties

+ 10 - 10
pom.xml

@@ -61,6 +61,9 @@
 			</properties>
 		</profile>
 	</profiles>
+	<properties>
+		<spring.version>4.2.8.RELEASE</spring.version>
+	</properties>
 	<dependencies>
 		<dependency>
 			<groupId>javax.servlet</groupId>
@@ -338,19 +341,14 @@
 		<dependency>
 			<groupId>org.apache.poi</groupId>
 			<artifactId>poi</artifactId>
-			<version>3.17</version>
+			<version>3.9</version>
 		</dependency>
 		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi-ooxml</artifactId>
-			<version>3.17</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.apache.poi</groupId>
-					<artifactId>poi</artifactId>
-				</exclusion>
-			</exclusions>
+		<groupId>org.apache.poi</groupId>
+		<artifactId>poi-ooxml</artifactId>
+			<version>3.9</version>
 		</dependency>
+
 		<!-- BeeCloud支付集成SDK -->
 		<dependency>
 			<groupId>cn.beecloud</groupId>
@@ -535,6 +533,7 @@
 				<filtering>true</filtering>
 				<excludes>
 					<exclude>**/*.xls</exclude>
+					<exclude>**/*.xlsx</exclude>
 				</excludes>
 			</resource>
 			<!-- xls文件不能filter处理,需区分出来 -->
@@ -543,6 +542,7 @@
 				<filtering>false</filtering>
 				<includes>
 					<include>**/*.xls</include>
+					<include>**/*.xlsx</include>
 				</includes>
 			</resource>
 		</resources>

+ 1 - 1
src/main/java/com/uas/platform/b2c/common/weixin/util/HttpReqUtil.java

@@ -1,7 +1,7 @@
 package com.uas.platform.b2c.common.weixin.util;
 
 import com.uas.sso.common.util.HttpUtil;
-import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.io.UnsupportedEncodingException;

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

@@ -0,0 +1,28 @@
+package com.uas.platform.b2c.core.constant;
+
+/**
+ * @author yuj
+ * @date 2018/10/16
+ * @description EXCEL常量类
+ */
+public class ExcelConstant {
+
+    /**
+     * 每个sheet存储的记录数 100W
+     */
+    public static final Integer PER_SHEET_ROW_COUNT = 1000000;
+
+    /**
+     * 每次向EXCEL写入的记录数(查询每页数据大小) 20W
+     */
+    public static final Integer PER_WRITE_ROW_COUNT = 10000;
+
+
+    /**
+     * 每个sheet的写入次数 5
+     */
+    public static final Integer PER_SHEET_WRITE_COUNT = PER_SHEET_ROW_COUNT / PER_WRITE_ROW_COUNT;
+
+
+}
+

+ 189 - 0
src/main/java/com/uas/platform/b2c/core/support/view/JxlsxExcelView.java

@@ -0,0 +1,189 @@
+package com.uas.platform.b2c.core.support.view;
+
+import com.uas.platform.b2c.core.utils.ContextUtils;
+import com.uas.platform.b2c.core.utils.StringUtilB2C;
+import com.uas.platform.core.exception.IllegalOperatorException;
+import javassist.runtime.Desc;
+import net.sf.jxls.transformer.XLSTransformer;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.LocalizedResourceHelper;
+import org.springframework.web.servlet.support.RequestContextUtils;
+import org.springframework.web.servlet.view.document.AbstractXlsxView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * 利用jxlsx模板生成excel
+ * 
+ * @author yuj
+ * 
+ */
+public class JxlsxExcelView extends AbstractXlsxView {
+
+	/**
+	 * 导入.xls格式文件
+	 */
+	private static final String EXTENSION = ".xlsx";
+
+	/**
+	 *  .xls 表格
+	 */
+	public static final String EXCEL_XLS = "xls";
+
+	/**
+	 * .xlsx 表格
+	 */
+	public static final String EXCEL_XLSX = "xlsx";
+
+	/**
+	 * url生成模板的路径
+	 */
+	private String url = "C:\\Users\\yuj\\Downloads\\xls\\template\\";
+
+	/**
+	 * 模板路径
+	 */
+	private String templateUrl;
+
+
+	/**
+	 * 文件名
+	 */
+	private String fileName;
+
+	public JxlsxExcelView() {
+	}
+
+	public JxlsxExcelView(String fileName, String templateUrl) {
+		this.fileName = fileName;
+		this.templateUrl = templateUrl;
+	}
+
+	@Override
+	protected void buildExcelDocument(Map<String, Object> map, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
+		if (map == null) {
+			map = new HashMap<>();
+		}
+		XLSTransformer transformer = new XLSTransformer();
+		transformer.transformWorkbook(workbook, map);
+		response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + EXTENSION);
+	}
+
+	@Override
+	protected Workbook createWorkbook(Map<String, Object> model, HttpServletRequest request) {
+//		File file = null;
+//		try {
+//			file = copyFile(request);
+//		} catch (IOException e) {
+//			e.printStackTrace();
+//		}
+		LocalizedResourceHelper helper = new LocalizedResourceHelper(ContextUtils.getApplicationContext());
+		Locale userLocale = RequestContextUtils.getLocale(request);
+		Resource inputFile = helper.findLocalizedResource(templateUrl, EXTENSION, userLocale);
+		Workbook workbook = null;
+		try {
+			workbook = getWorkbook(inputFile.getFile());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return workbook;
+	}
+
+	/**
+	 * 复制模板文件
+	 */
+	private File copyFile(HttpServletRequest request) throws IOException {
+		if (StringUtilB2C.isEmpty(fileName)) {
+			throw new IllegalOperatorException("文件名称不存在");
+		}
+		if (StringUtilB2C.isEmpty(templateUrl)) {
+			throw new IllegalOperatorException("模板文件不存在");
+		}
+		LocalizedResourceHelper helper = new LocalizedResourceHelper(ContextUtils.getApplicationContext());
+		Locale userLocale = RequestContextUtils.getLocale(request);
+		Resource inputFile = helper.findLocalizedResource(templateUrl, EXTENSION, userLocale);
+		inputFile.isOpen();
+		inputFile.isReadable();
+		inputFile.getFile();
+		if (inputFile == null || !inputFile.exists()) {
+			throw new IllegalOperatorException("模板文件不存在");
+		}
+		File destFile = new File(this.url + fileName + System.currentTimeMillis() + EXTENSION);
+		if (!destFile.exists()) {
+			destFile.createNewFile();
+		}
+		FileInputStream ins = new FileInputStream(new File(inputFile.getURL().getFile()));
+		FileOutputStream out = new FileOutputStream(destFile);
+		byte[] b = new byte[1024];
+		int n = 0;
+		while ((n = ins.read(b)) != -1) {
+			out.write(b, 0, n);
+		}
+		ins.close();
+		out.close();
+		return destFile;
+	}
+
+	/***
+	 * 根据文件获取workbook
+	 * @param file 文件
+	 * @return 返回值
+	 */
+	private Workbook getWorkbook(File file) {
+		if (file == null || !file.exists()) {
+			throw new IllegalOperatorException("模板文件不存在");
+		}
+		Workbook workbook = null;
+		try {
+			workbook = WorkbookFactory.create(file);
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (InvalidFormatException e) {
+			e.printStackTrace();
+		}
+		return workbook;
+	}
+
+
+
+	//
+//	public JxlsxExcelView(String tplPath, String fileName) {
+//		super();
+//		setUrl(tplPath);
+//		this.fileName = fileName;
+//	}
+
+	//	@Override
+//	protected HSSFWorkbook getTemplateSource(String url, HttpServletRequest request) throws Exception {
+//		LocalizedResourceHelper helper = new LocalizedResourceHelper(ContextUtils.getApplicationContext());
+//		Locale userLocale = RequestContextUtils.getLocale(request);
+//		Resource inputFile = helper.findLocalizedResource(url, EXTENSION, userLocale);
+//		if (this.logger.isDebugEnabled()) {
+//			this.logger.debug("Loading Excel workbook from " + inputFile);
+//		}
+//		POIFSFileSystem fs = new POIFSFileSystem(inputFile.getInputStream());
+//		return new HSSFWorkbook(fs);
+//	}
+//
+//	@Override
+//	protected void buildExcelDocument(Map<String, Object> map, HSSFWorkbook workbook, HttpServletRequest request,
+//			HttpServletResponse response) throws Exception {
+//		if (map == null)
+//			map = new HashMap<String, Object>();
+//		map.put("export", new Export());
+//		XLSTransformer transformer = new XLSTransformer();
+//		transformer.transformWorkbook(workbook, map);
+//		response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + EXTENSION);
+//	}
+}

+ 29 - 0
src/main/java/com/uas/platform/b2c/core/utils/DateUtil.java

@@ -0,0 +1,29 @@
+package com.uas.platform.b2c.core.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author yuj
+ * @date 2018/10/16
+ * @description 日期工具类
+ */
+public class DateUtil {
+
+    public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+
+
+    /**
+     * 将日期转换为字符串
+     *
+     * @param date   DATE日期
+     * @param format 转换格式
+     * @return 字符串日期
+     */
+    public static String formatDate(Date date, String format) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
+        return simpleDateFormat.format(date);
+    }
+
+
+}

+ 195 - 0
src/main/java/com/uas/platform/b2c/core/utils/PoiUtil.java

@@ -0,0 +1,195 @@
+package com.uas.platform.b2c.core.utils;
+
+import com.uas.platform.b2c.core.constant.ExcelConstant;
+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.xssf.streaming.SXSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Date;
+
+/**
+ * @author yuj
+ * @date 2018/10/16
+ * @description POI导出工具类
+ */
+public class PoiUtil {
+
+    private final static Logger logger = LoggerFactory.getLogger(PoiUtil.class);
+
+    /**
+     * 初始化EXCEL(sheet个数和标题)
+     *
+     * @param totalRowCount 总记录数
+     * @param titles        标题集合
+     * @return XSSFWorkbook对象
+     */
+    public static SXSSFWorkbook initExcel(Integer totalRowCount, String[] titles) {
+
+        // 在内存当中保持 200 行 , 超过的数据放到硬盘中在内存当中保持 200 行 , 超过的数据放到硬盘中
+        SXSSFWorkbook wb = new SXSSFWorkbook(200);
+
+        Integer sheetCount = ((totalRowCount % ExcelConstant.PER_SHEET_ROW_COUNT == 0) ?
+                (totalRowCount / ExcelConstant.PER_SHEET_ROW_COUNT) : (totalRowCount / ExcelConstant.PER_SHEET_ROW_COUNT + 1));
+
+        // 根据总记录数创建sheet并分配标题
+        for (int i = 0; i < sheetCount; i++) {
+            Sheet sheet = wb.createSheet("sheet" + (i + 1));
+            Row headRow = sheet.createRow(0);
+
+            for (int j = 0; j < titles.length; j++) {
+                Cell headRowCell = headRow.createCell(j);
+                headRowCell.setCellValue(titles[j]);
+            }
+        }
+
+        return wb;
+    }
+
+
+    /**
+     * 下载EXCEL到本地指定的文件夹
+     *
+     * @param wb         EXCEL对象SXSSFWorkbook
+     * @param exportPath 导出路径
+     */
+    public static void downLoadExcelToLocalPath(SXSSFWorkbook wb, String exportPath) {
+        FileOutputStream fops = null;
+        try {
+            fops = new FileOutputStream(exportPath);
+            wb.write(fops);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (null != wb) {
+                try {
+                    wb.dispose();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != fops) {
+                try {
+                    fops.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 下载EXCEL到浏览器
+     *
+     * @param wb       EXCEL对象XSSFWorkbook
+     * @param response
+     * @param fileName 文件名称
+     * @throws IOException
+     */
+    public static void downLoadExcelToWebsite(SXSSFWorkbook wb, HttpServletResponse response, String fileName) throws IOException {
+        //设置下载的文件名
+        response.setHeader("Content-disposition", "attachment; filename="
+                + new String((fileName + ".xlsx").getBytes("utf-8"), "ISO8859-1"));
+
+        OutputStream outputStream = null;
+        try {
+            outputStream = response.getOutputStream();
+            wb.write(outputStream);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (null != wb) {
+                try {
+                    wb.dispose();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            if (null != outputStream) {
+                try {
+                    outputStream.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 导出Excel到本地指定路径
+     *
+     * @param totalRowCount           总记录数
+     * @param titles                  标题
+     * @param exportPath              导出路径
+     * @param writeExcelDataDelegated 向EXCEL写数据/处理格式的委托类 自行实现
+     * @throws Exception
+     */
+    public static final void exportExcelToLocalPath(Integer totalRowCount, String[] titles, String exportPath, WriteExcelDataDelegated writeExcelDataDelegated) throws Exception {
+        logger.info("开始导出:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
+
+        // 初始化EXCEL
+        SXSSFWorkbook wb = PoiUtil.initExcel(totalRowCount, titles);
+
+        // 调用委托类分批写数据
+        int sheetCount = wb.getNumberOfSheets();
+        for (int i = 0; i < sheetCount; i++) {
+            Sheet eachSheet = wb.getSheetAt(i);
+
+            for (int j = 1; j <= ExcelConstant.PER_SHEET_WRITE_COUNT; j++) {
+                writeExcelDataDelegated.writeExcelData(eachSheet, ((j - 1) * ExcelConstant.PER_WRITE_ROW_COUNT + 1), (j * ExcelConstant.PER_WRITE_ROW_COUNT),
+                        (i * ExcelConstant.PER_SHEET_WRITE_COUNT + j), ExcelConstant.PER_WRITE_ROW_COUNT);
+            }
+        }
+
+        // 下载EXCEL
+        PoiUtil.downLoadExcelToLocalPath(wb, exportPath);
+
+        logger.info("导出完成:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
+    }
+
+
+    /**
+     * 导出Excel到浏览器
+     *
+     * @param response
+     * @param totalRowCount           总记录数
+     * @param fileName                文件名称
+     * @param titles                  标题
+     * @param writeExcelDataDelegated 向EXCEL写数据/处理格式的委托类 自行实现
+     * @throws Exception
+     */
+    public static final void exportExcelToWebsite(HttpServletResponse response, Integer totalRowCount, String fileName, String[] titles, WriteExcelDataDelegated writeExcelDataDelegated) throws Exception {
+        logger.info("开始导出:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
+
+        // 初始化EXCEL
+        SXSSFWorkbook wb = PoiUtil.initExcel(totalRowCount, titles);
+
+        // 调用委托类分批写数据
+        int sheetCount = wb.getNumberOfSheets();
+        for (int i = 0; i < sheetCount; i++) {
+            Sheet eachSheet = wb.getSheetAt(i);
+
+            for (int j = 1; j <= ExcelConstant.PER_SHEET_WRITE_COUNT; j++) {
+                writeExcelDataDelegated.writeExcelData(eachSheet, ((j - 1) * ExcelConstant.PER_WRITE_ROW_COUNT + 1), (j * ExcelConstant.PER_WRITE_ROW_COUNT),
+                        (i * ExcelConstant.PER_SHEET_WRITE_COUNT + j), ExcelConstant.PER_WRITE_ROW_COUNT);
+            }
+        }
+
+        // 下载EXCEL
+        PoiUtil.downLoadExcelToWebsite(wb, response, fileName);
+
+        logger.info("导出完成:" + DateUtil.formatDate(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS));
+    }
+
+
+
+
+}

+ 24 - 0
src/main/java/com/uas/platform/b2c/core/utils/WriteExcelDataDelegated.java

@@ -0,0 +1,24 @@
+package com.uas.platform.b2c.core.utils;
+
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
+
+/**
+ * @author qjwyss
+ * @date 2018/9/20
+ * @description EXCEL写数据委托类
+ */
+public interface WriteExcelDataDelegated {
+
+    /**
+     * EXCEL写数据委托类  针对不同的情况自行实现
+     *
+     * @param eachSheet     指定SHEET
+     * @param startRowCount 开始行
+     * @param endRowCount   结束行
+     * @param currentPage   分批查询开始页
+     * @param pageSize      分批查询数据量
+     * @throws Exception
+     */
+    public abstract void writeExcelData(Sheet eachSheet, Integer startRowCount, Integer endRowCount, Integer currentPage, Integer pageSize) throws Exception;
+}

+ 8 - 23
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -985,27 +985,12 @@ public class GoodsController {
      * @return ModelAndView
      */
     @RequestMapping(value = "/kindProductsCount/export", method = RequestMethod.GET)
-    public ModelAndView exportKindProductsCount(@DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, HttpServletRequest request,
-                                               @RequestParam(required = false, value = "isAjax", defaultValue = "false") Boolean isAjax) {
-        HttpSession session = request.getSession();
-        ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
-        if (!modelAndView.isEmpty()) {
-            return modelAndView;
-        }
-        PageInfo info = new PageInfo(1, JxlsExcelView.MAX_SIZE);
-        com.uas.sso.support.Page<KindHierarchicalCount> kindProductsCount = goodsService.getKindProductsCount(info, startTime, endTime);
-        if (CollectionUtils.isNotEmpty(kindProductsCount.getContent())) {
-            logger.info("品类产品数导出结果 size: " + kindProductsCount.getContent().size());
-        } else {
-            logger.info("品类产品数导出结果 size: 0");
-        }
-        FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy年MM月dd日 HH:mm");
-        modelAndView.addObject("dateFormat", dateFormat);
-        modelAndView.addObject("data", kindProductsCount.getContent());
-        modelAndView.addObject("goodsService", goodsService);
-        modelAndView.addObject("title", "品类产品数列表");
-        modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/kindHierarchical", "优软商城--品类产品数列表"));
-        session.setAttribute("loading", false);
-        return modelAndView;
-    }
+    public void exportKindProductsCount(@DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, HttpServletRequest request,
+                                               @RequestParam(required = false, value = "isAjax", defaultValue = "false") Boolean isAjax, HttpServletResponse response) {
+		try {
+			goodsService.exportKindProductsCount(startTime, endTime, response);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
 }

+ 52 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -6,6 +6,9 @@ import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.log.UsageBufferedLogger;
 import com.uas.platform.b2c.core.support.view.JxlsExcelView;
+import com.uas.platform.b2c.core.support.view.JxlsxExcelView;
+import com.uas.platform.b2c.core.utils.PoiUtil;
+import com.uas.platform.b2c.core.utils.WriteExcelDataDelegated;
 import com.uas.platform.b2c.core.utils.DateFormatUtils;
 import com.uas.platform.b2c.prod.commodity.facade.ProductFacade;
 import com.uas.platform.b2c.prod.commodity.model.Goods;
@@ -18,6 +21,7 @@ import com.uas.platform.b2c.prod.commodity.model.V_ProductPrivate;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
+import com.uas.platform.b2c.prod.product.component.modal.ComponentInfo;
 import com.uas.platform.b2c.trade.order.support.AjaxUtil;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -42,6 +46,7 @@ import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.io.*;
 import java.util.ArrayList;
@@ -499,6 +504,53 @@ public class ProductController {
 	    return productService.editOne(jsonObject);
     }
 
+	/**
+	 * 批量导出的测试接口
+	 * @return
+	 */
+	@RequestMapping(value = "/test/xls", method = RequestMethod.GET)
+    public ModelAndView testDownLoad() {
+		long l = System.currentTimeMillis();
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.addObject("data", productService.getProductByEnuuByCommonDao());
+		modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/test", "测试xls"));
+		logger.info("商品批次", "下载批量上架商品的Excel模板");
+		long l1 = System.currentTimeMillis();
+		System.out.println("装换成Excel" + (l1 - l));
+		return modelAndView;
+	}
+
+
+	/**
+	 * 批量导出的测试接口
+	 * @return
+	 */
+	@RequestMapping(value = "/test/xlsx", method = RequestMethod.GET)
+	public ModelAndView testDownLoadxlsx() {
+		long l = System.currentTimeMillis();
+		ModelAndView modelAndView = new ModelAndView();
+		modelAndView.addObject("data", productService.getProductByEnuuByCommonDao());
+		modelAndView.setView(new JxlsxExcelView("测试xlsx", "classpath:jxls-tpl/trade/test"));
+		logger.info("商品批次", "下载批量上架商品的Excel模板");
+		long l1 = System.currentTimeMillis();
+		System.out.println("装换成Excel" + (l1 - l));
+		return modelAndView;
+	}
+
+	/**
+	 * 导出的测试数据
+	 * @param response
+	 */
+	@RequestMapping(value = "/test/export", method = RequestMethod.GET)
+	public void exportToWebSite(HttpServletResponse response) {
+        try {
+            productService.exportToWebSite(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
 	/**
 	 * 根据分页参数和过滤对象分页获取数据
 	 *

+ 8 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ProductDao.java

@@ -141,6 +141,14 @@ public interface ProductDao extends JpaSpecificationExecutor<Product>, JpaReposi
      */
     List<Product> findByEnUUAndCmpUuId(Long enuu, String uuid);
 
+
+    /**
+     * 通过企业uu、标准器件uuid获取标准物料信息
+     * @param enuu 企业的enuu
+     * @return List<Product>
+     */
+    List<Product> findByEnUU(Long enuu);
+
     /**
      * 通过企业uu、标准器件uuid获取标准物料信息
      * @param uuid 器件的uuid

+ 11 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/GoodsService.java

@@ -21,9 +21,11 @@ import com.uas.platform.core.model.PageParams;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -844,6 +846,15 @@ public interface GoodsService {
      */
     List<Goods> multiSearch(PageInfo info, GoodsFilter goodsFilter);
 
+    /**
+     * 通过传入参数导出品类产品数
+     *
+     * @param startTime 开始时间
+     * @param endTime 截止时间
+     * @param response 响应头
+     */
+    void exportKindProductsCount(Date startTime, Date endTime, HttpServletResponse response) throws Exception;
+
     /**
      * 通过batchCode查询冻结数量
      *

+ 23 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -16,6 +16,7 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import org.springframework.data.domain.Page;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -405,6 +406,28 @@ public interface ProductService {
      */
     ResultMap checkCriterion(Product product);
 
+
+    /**
+     * 企业的enuu
+     *
+     * @return List<Product>
+     */
+    List<Product> getProductByEnuu();
+
+
+    /**
+     * 测试通过jdbctemplate 获取制定对象
+     * @return
+     */
+    List<Product> getProductByEnuuByCommonDao();
+
+    /**
+     * 通过poi的形式导出数据到浏览器
+     * @param response 返回值
+     * @throws Exception 异常
+     */
+    void exportToWebSite(HttpServletResponse response) throws Exception;
+
     /**
      * 根据分页参数和过滤对象分页获取数据
      *

+ 102 - 7
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/GoodsServiceImpl.java

@@ -15,20 +15,18 @@ import com.uas.platform.b2c.common.account.service.EnterpriseService;
 import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.config.SysConf;
+import com.uas.platform.b2c.core.constant.ExcelConstant;
 import com.uas.platform.b2c.core.constant.ShortConstant;
 import com.uas.platform.b2c.core.constant.SplitChar;
 import com.uas.platform.b2c.core.constant.Status;
 import com.uas.platform.b2c.core.support.SystemSession;
-import com.uas.platform.b2c.core.utils.DoubleArith;
-import com.uas.platform.b2c.core.utils.FastjsonUtils;
-import com.uas.platform.b2c.core.utils.NumberUtil;
-import com.uas.platform.b2c.core.utils.RegexConstant;
-import com.uas.platform.b2c.core.utils.StringUtilB2C;
+import com.uas.platform.b2c.core.utils.*;
 import com.uas.platform.b2c.external.erp.commodity.util.ModelConverter;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.IntegerConstant;
 import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
 import com.uas.platform.b2c.prod.commodity.constant.UploadConstant;
+import com.uas.platform.b2c.prod.commodity.controller.GoodsController;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsModifyInfoDao;
@@ -131,6 +129,7 @@ import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowCallbackHandler;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@@ -147,6 +146,7 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.sql.ResultSet;
@@ -183,6 +183,8 @@ import static com.uas.platform.core.persistence.criteria.PredicateUtils.like;
 @Service
 public class GoodsServiceImpl implements GoodsService {
 
+    private final Logger logger = LoggerFactory.getLogger(GoodsController.class);
+
     private final KindService kindService;
     private final StoreInDao storeInDao;
 
@@ -307,8 +309,6 @@ public class GoodsServiceImpl implements GoodsService {
     @Autowired
     private CommonDao commonDao;
 
-    private final Logger logger = LoggerFactory.getLogger(GoodsServiceImpl.class);
-
     @Autowired
     public GoodsServiceImpl(KindService kindService, StoreInDao storeInDao, StoreInService storeInService, ProductDao productDao, BrowsingHistoryService browsingHistoryService, RecommendProductService recommendProductService, BrandDao brandDao, KindInfoDao kindInfoDao) {
         this.kindService = kindService;
@@ -4188,6 +4188,101 @@ public class GoodsServiceImpl implements GoodsService {
         return new com.uas.sso.support.Page<>(pageable.getPageNumber(), pageable.getPageSize(), kindList, count);
     }
 
+    /**
+     * 通过传入参数导出品类产品数
+     *
+     * @param startTime 开始时间
+     * @param endTime   截止时间
+     * @param response  响应头
+     */
+    @Override
+    public void exportKindProductsCount(Date startTime, Date endTime, HttpServletResponse response) throws Exception {
+        logger.info("批量导出类目", System.currentTimeMillis() + "开始时间");
+        StringBuffer where = new StringBuffer(" from products where pr_kind is not null");
+        if (null != startTime) {
+            where.append(" and pr_create_time >= '").append(new java.sql.Date(startTime.getTime())).append("' ");
+        }
+        if (null != endTime) {
+            where.append(" and pr_create_time < '").append(new java.sql.Date(endTime.getTime() + IntegerConstant.ONE_DAY_MILLISECONDS)).append("' ");
+        }
+        StringBuffer group = new StringBuffer("group by pr_kind, pr_kindid");
+        StringBuffer countSql = new StringBuffer("select count(pr_id) ").append(where);
+        Integer totalRowCount = commonDao.queryForObject(countSql.toString(), Integer.class);
+
+        StringBuffer sql = new StringBuffer("select pr_kind as thirdKind, pr_kindid as kindId, count(1) as count").append(where).append(group).append(" order by count desc limit %d, %d");
+
+        String[] titles = {"一级类目", "二级类目", "三级类目", "产品数(条)"};
+
+        //导出到Excel
+        PoiUtil.exportExcelToWebsite(response, totalRowCount, "优软商城--品类产品数列表", titles, new WriteExcelDataDelegated() {
+
+            @Override
+            public void writeExcelData(Sheet eachSheet, Integer startRowCount, Integer endRowCount, Integer currentPage, Integer pageSize) throws Exception {
+                Integer startNumber = (currentPage - 1) * ExcelConstant.PER_WRITE_ROW_COUNT;
+                List<KindHierarchicalCount> kindHierarchicals = jdbcTemplate.query(String.format(sql.toString(), startNumber, pageSize), new BeanPropertyRowMapper<>(KindHierarchicalCount.class));
+                List<Long> ids = new ArrayList<>();
+                for (KindHierarchicalCount kindHierarchical : kindHierarchicals) {
+                    if (kindHierarchical.getKindId() != null) {
+                        ids.add(kindHierarchical.getKindId());
+                    }
+                }
+                Map<String, List<Long>> map = null;
+                for (int i = 0; (i < 3) && CollectionUtils.isNotEmpty(ids); i++) {
+                    // i = 0 时表示 获取本级, = 1 时代表获取第二层,= 2 时代表获取顶层
+                    map = new HashMap<>();
+                    map.put("ids", ids);
+                    List<Map<String, Object>> mapQuery = namedParameterJdbcTemplate.queryForList("select c.ki_id as id, c.ki_name as name, c.ki_parentid as pid " +
+                            "from product$kind c where c.ki_id in (:ids)", map);
+                    ids = new ArrayList<>();
+                    for (Map<String, Object> mapRest : mapQuery) {
+                        Object id = mapRest.get("id");
+
+                        Object pid = mapRest.get("pid");
+                        if (pid != null) {
+                            ids.add(Long.valueOf(pid.toString()));
+                        }
+                        for (KindHierarchicalCount hierarchical : kindHierarchicals) {
+                            if (i == 0) {
+                                if (id.equals(hierarchical.getKindId())) {
+                                    if (pid != null) {
+                                        hierarchical.setSecondId(Long.valueOf(pid.toString()));
+                                    }
+                                }
+                            } else if (i == 1) {
+                                if (id.equals(hierarchical.getSecondId())) {
+                                    hierarchical.setSecondKind(StringUtilB2C.getStr(mapRest.get("name")));
+                                    if (pid != null) {
+                                        hierarchical.setFirstId(Long.valueOf(pid.toString()));
+                                    }
+                                }
+                            } else if (i == 2) {
+                                if (id.equals(hierarchical.getFirstId())) {
+                                    hierarchical.setFirstKind(StringUtilB2C.getStr(mapRest.get("name")));
+                                }
+                            }
+                        }
+
+                    }
+                }
+
+                if (!CollectionUtils.isEmpty(kindHierarchicals)) {
+                    for (int i = startRowCount; i <= endRowCount; i++) {
+                        Row eachDataRow = eachSheet.createRow(i);
+                        if ((i - startRowCount) < kindHierarchicals.size()) {
+                            KindHierarchicalCount hierar = kindHierarchicals.get(i - startRowCount);
+                            eachDataRow.createCell(0).setCellValue(hierar.getFirstKind());
+                            eachDataRow.createCell(1).setCellValue(hierar.getSecondKind());
+                            eachDataRow.createCell(2).setCellValue(hierar.getThirdKind());
+                            eachDataRow.createCell(3).setCellValue(hierar.getCount());
+                        }
+                    }
+                }
+            }
+        });
+
+        logger.info("批量导出类目", System.currentTimeMillis() + "结束时间");
+    }
+
     /**
      * 批量导出数据
      * TODO 后续提成公共方法,暂时没写好

+ 174 - 21
src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ProductServiceImpl.java

@@ -12,22 +12,16 @@ import com.uas.platform.b2c.common.base.dao.CommonDao;
 import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.common.search.util.SPage;
 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.ShortConstant;
-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.support.log.UsageBufferedLogger;
-import com.uas.platform.b2c.core.utils.FastjsonUtils;
-import com.uas.platform.b2c.core.utils.NumberUtil;
-import com.uas.platform.b2c.core.utils.RegexConstant;
-import com.uas.platform.b2c.core.utils.StringUtilB2C;
+import com.uas.platform.b2c.core.utils.*;
 import com.uas.platform.b2c.prod.commodity.constant.DoubleConstant;
 import com.uas.platform.b2c.prod.commodity.constant.ErrorInfoConstant;
 import com.uas.platform.b2c.prod.commodity.constant.PublicProductUrl;
 import com.uas.platform.b2c.prod.commodity.constant.StringConstant;
 import com.uas.platform.b2c.prod.commodity.constant.UploadConstant;
+import com.uas.platform.b2c.prod.commodity.controller.GoodsController;
 import com.uas.platform.b2c.prod.commodity.dao.CommodityInOutboundDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsHistoryDao;
@@ -112,6 +106,10 @@ import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.map.HashedMap;
 import org.apache.log4j.Logger;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -120,6 +118,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter;
 import org.springframework.jdbc.core.StatementCallback;
@@ -134,6 +133,7 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -167,7 +167,7 @@ public class ProductServiceImpl implements ProductService {
     /**
      * 系统操作日志
      */
-    private static final UsageBufferedLogger LOGGER = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+    private final Logger logger = LoggerFactory.getLogger(ProductServiceImpl.class);
 
     /**
      * 程序运行日志
@@ -2257,9 +2257,9 @@ public class ProductServiceImpl implements ProductService {
         if (fromDate == null || toDate == null) {
             //统计所有的未审核的品牌信息
             Map<String, Integer> map = new HashedMap();
-            Integer productAmout = jdbcTemplate.queryForInt("select count(1) from products p join product$private pp on p.pr_id = pp.pr_id  where pp.pr_b2cenabled = 1;");
+            Integer productAmout = jdbcTemplate.queryForObject("select count(1) from products p join product$private pp on p.pr_id = pp.pr_id  where pp.pr_b2cenabled = 1;", Integer.class);
             map.put("productAmout", productAmout);
-            Integer productUserAmout = jdbcTemplate.queryForInt("select count(DISTINCT pr_enuu) from products p join product$private pp on p.pr_id = pp.pr_id  where pp.pr_b2cenabled = 1;");
+            Integer productUserAmout = jdbcTemplate.queryForObject("select count(DISTINCT pr_enuu) from products p join product$private pp on p.pr_id = pp.pr_id  where pp.pr_b2cenabled = 1;", Integer.class);
             map.put("productUserAmout", productUserAmout);
             return ResultMap.success(map);
         } else {
@@ -2267,9 +2267,9 @@ public class ProductServiceImpl implements ProductService {
             Date toT = new Date(toDate);
             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             Map<String, Integer> map = new HashedMap();
-            Integer productAmout = jdbcTemplate.queryForInt("select count(1) from products p join product$private pp on p.pr_id = pp.pr_id  where pr_create_time < '" + dateFormat.format(toT) + "' and pr_create_time > '" + dateFormat.format(fromT) + "' and pp.pr_b2cenabled = 1;");
+            Integer productAmout = jdbcTemplate.queryForObject("select count(1) from products p join product$private pp on p.pr_id = pp.pr_id  where pr_create_time < '" + dateFormat.format(toT) + "' and pr_create_time > '" + dateFormat.format(fromT) + "' and pp.pr_b2cenabled = 1;", Integer.class);
             map.put("productAmout", productAmout);
-            Integer productUserAmout = jdbcTemplate.queryForInt("select count(DISTINCT pr_enuu) from products p join product$private pp on p.pr_id = pp.pr_id  where pr_create_time < '" + dateFormat.format(toT) + "' and pr_create_time > '" + dateFormat.format(fromT) + "' and pp.pr_b2cenabled = 1;");
+            Integer productUserAmout = jdbcTemplate.queryForObject("select count(DISTINCT pr_enuu) from products p join product$private pp on p.pr_id = pp.pr_id  where pr_create_time < '" + dateFormat.format(toT) + "' and pr_create_time > '" + dateFormat.format(fromT) + "' and pp.pr_b2cenabled = 1;", Integer.class);
             map.put("productUserAmout", productUserAmout);
             return ResultMap.success(map);
         }
@@ -2579,7 +2579,7 @@ public class ProductServiceImpl implements ProductService {
                 detail.setCommodityInOutbound(inOutbound);
             }
             inOutbound = commodityInOutboundDao.save(inOutbound);
-            LOGGER.log("出入库历史", "卖家中心单个物料上传进行入库操作", inOutbound.getType(), "", inOutbound.getId());
+            logger.info("出入库历史", "卖家中心单个物料上传进行入库操作", inOutbound.getType(), "", inOutbound.getId());
         }
         // 添加到个人物料库
         bindToPerson(productInfo, userUU, enUU);
@@ -2643,7 +2643,7 @@ public class ProductServiceImpl implements ProductService {
         goods.setReserve(productInfo.getErpReserve());
         goodsService.setGoodsDefault(goods);
         goods = goodsDao.save(goods);
-        LOGGER.log("上架商品库存操作", "卖家中心单个物料上传进行入库操作", "增加库存: " + productInfo.getErpReserve(), goods.getCode(), goods.getId());
+        logger.info("上架商品库存操作", "卖家中心单个物料上传进行入库操作", "增加库存: " + productInfo.getErpReserve(), goods.getCode(), goods.getId());
         CommodityInOutbound inOutbound = new CommodityInOutbound(InOutBoundType.OTHER_INBOUND);
         String inOutboundId = createNumberService.generateOrderNumber(com.uas.platform.b2c.core.constant.EncodingRulesConstant.INOUTBOUND_NUM, "trade$commodity_in_outbound", 8);
         inOutbound.setInOutId(inOutboundId);
@@ -2803,7 +2803,7 @@ public class ProductServiceImpl implements ProductService {
                 Double reserve = goods.getReserve() != null ? goods.getReserve() : 0D + addQty;
                 goods.setReserve(reserve);
                 goods = goodsDao.save(goods);
-                LOGGER.log("上架商品库存操作", "卖家中心单个物料上传进行入库操作", "增加库存: " + addQty, goods.getCode(), goods.getId());
+                logger.info("上架商品库存操作", "卖家中心单个物料上传进行入库操作", "增加库存: " + addQty, goods.getCode(), goods.getId());
             } else if (InOutBoundType.OTHER_OUTBOUND.equals(type)) {
                 // 出库
                 int index = goodsList.size() - 1;
@@ -2820,7 +2820,7 @@ public class ProductServiceImpl implements ProductService {
                     Double reserve = subQty >= 0 ? 0 : subQty;
                     goods.setReserve(Math.abs(reserve));
                     goods = goodsDao.save(goods);
-                    LOGGER.log("上架商品库存操作", "卖家中心单个物料上传进行出库操作", existQty + "->" + goods.getReserve(), goods.getCode(), goods.getId());
+                    logger.info("上架商品库存操作", "卖家中心单个物料上传进行出库操作", existQty + "->" + goods.getReserve(), goods.getCode(), goods.getId());
                     if (reserve <= 0) {
                         break;
                     }
@@ -2863,7 +2863,7 @@ public class ProductServiceImpl implements ProductService {
         if (CollectionUtils.isEmpty(productPersonList)) {
             ProductPerson productPerson = new ProductPerson(enUU, userUU, productInfo.getId());
             productPerson = productPersonDao.save(productPerson);
-            LOGGER.log("个人物料", "新增个人物料", "通过卖家中心单个物料上传绑定个人物料", productInfo.getProdNum(), productPerson.getId());
+            logger.info("个人物料", "新增个人物料", "通过卖家中心单个物料上传绑定个人物料", productInfo.getProdNum(), productPerson.getId());
         }
     }
 
@@ -2939,9 +2939,162 @@ public class ProductServiceImpl implements ProductService {
             goodsHistory = goodsHistoryService.converTGoodsHist(goods, type, false);
         }
         goodsHistory = goodsHistoryService.save(goodsHistory);
-        LOGGER.log("库存操作", "单个物料上传更新库存操作", "操作方式-> " + type, goodsHistory.getCode(), goodsHistory.getId());
+        logger.info("库存操作", "单个物料上传更新库存操作", "操作方式-> " + type, goodsHistory.getCode(), goodsHistory.getId());
         goods = goodsDao.save(goods);
-        LOGGER.log("上架商品", "新增上架商品", "通过卖家中心单个物料上传新增上架商品", goods.getCode(), goods.getId());
+        logger.info("上架商品", "新增上架商品", "通过卖家中心单个物料上传新增上架商品", goods.getCode(), goods.getId());
+    }
+
+    /**
+     * 企业的enuu
+     *
+     * @return
+     */
+    @Override
+    public List<Product> getProductByEnuu() {
+        long l = System.currentTimeMillis();
+        List<Product> products = productDao.findByEnUU(10049056L);//数量是10002条
+        long l1 = System.currentTimeMillis();
+        System.out.println("获取数据库数据的时间是:" + (l1 - l));
+        return products;
+    }
+
+    /**
+     * 测试通过jdbctemplate 获取制定对象
+     *
+     * @return
+     */
+    @Override
+    public List<Product> getProductByEnuuByCommonDao() {
+        String sql = "select pr_code,pr_pcmpcode,pr_title,pr_cmpuuid,pr_pbranden,pr_packaging,pr_create_time,pr_reserve,pr_cmpimg,pr_enuu,pr_encapsulation,pr_kinden,pr_spec from products where pr_enuu = %d";
+        List<Map<String, Object>> queryForList = jdbcTemplate.queryForList(String.format(sql, 10041559L)); // 68136条数据
+        List<Product> list = new ArrayList<>();
+        Product p = null;
+        for (Map<String, Object> objectMap : queryForList) {
+            p = new Product();
+            Object pr_code = objectMap.get("pr_code");
+            p.setProdNum(StringUtilB2C.getStr(pr_code));
+            Object prPcmpcode = objectMap.get("pr_pcmpcode");
+            p.setPcmpcode(StringUtilB2C.getStr(prPcmpcode));
+            Object pr_title = objectMap.get("pr_title");
+            p.setProdName(StringUtilB2C.getStr(pr_title));
+
+            Object pr_cmpuuid = objectMap.get("pr_cmpuuid");
+            p.setCmpUuId(StringUtilB2C.getStr(pr_cmpuuid));
+
+            Object pr_pbranden = objectMap.get("pr_pbranden");
+            p.setPbranden(StringUtilB2C.getStr(pr_pbranden));
+
+            Object pr_packaging = objectMap.get("pr_packaging");
+            p.setPackaging(StringUtilB2C.getStr(pr_packaging));
+
+            Object pr_create_time = objectMap.get("pr_create_time");
+//            if (!StringUtilB2C.isEmpty(pr_create_time)) {
+//                System.out.println(pr_create_time + "---" + pr_code);
+//                p.setCreateTime(new Date(StringUtilB2C.getStr(pr_create_time).toString()));
+//            }
+
+            Object pr_reserve = objectMap.get("pr_reserve");
+            String doul = StringUtilB2C.getStr(pr_reserve).equals("") ? "0" : StringUtilB2C.getStr(pr_reserve);
+            p.setErpReserve(Double.valueOf(doul));
+
+            Object pr_cmpimg = objectMap.get("pr_cmpimg");
+            p.setCmpImg(StringUtilB2C.getStr(pr_cmpimg));
+
+            Object pr_enuu = objectMap.get("pr_enuu");
+            p.setEnUU(Long.valueOf(StringUtilB2C.getStr(pr_enuu)));
+
+            Object pr_encapsulation = objectMap.get("pr_encapsulation");
+            p.setEncapsulation(StringUtilB2C.getStr(pr_encapsulation));
+
+            Object pr_kinden = objectMap.get("pr_kinden");
+            p.setKinden(StringUtilB2C.getStr(pr_kinden));
+
+            Object pr_spec = objectMap.get("pr_spec");
+            p.setSpec(StringUtilB2C.getStr(pr_spec));
+
+            list.add(p);
+        }
+        return list;
+    }
+
+    @Override
+    public void exportToWebSite(HttpServletResponse response) throws Exception {
+        logger.info("批量导出", System.currentTimeMillis() + "开始时间");
+        String[] titles = {"物料编号", "型号", "物料名称", "uuid", "英文品牌", "包装方式", "创建时间", "库存", "图片地址", "enuu", "封装", "类目", "规格"};
+        String sql = "select count(pr_id) from products where pr_enuu = %d";
+        Integer totalRowCount = jdbcTemplate.queryForObject(String.format(sql, 10041559L), Integer.class);
+
+        String paramsSql = "select pr_code,pr_pcmpcode,pr_title,pr_cmpuuid,pr_pbranden,pr_packaging,pr_create_time,pr_reserve,pr_cmpimg,pr_enuu,pr_encapsulation,pr_kinden,pr_spec " +
+                "from products where pr_enuu = %d order by pr_id desc limit %d, %d";
+        PoiUtil.exportExcelToWebsite(response, totalRowCount, "测试export", titles, new WriteExcelDataDelegated() {
+            /**
+             * EXCEL写数据委托类  针对不同的情况自行实现
+             *
+             * @param eachSheet     指定SHEET
+             * @param startRowCount 开始行
+             * @param endRowCount   结束行
+             * @param currentPage   分批查询开始页
+             * @param pageSize      分批查询数据量
+             * @throws Exception
+             */
+            @Override
+            public void writeExcelData(Sheet eachSheet, Integer startRowCount, Integer endRowCount, Integer currentPage, Integer pageSize) throws Exception {
+                Integer startNumber = (currentPage - 1) * ExcelConstant.PER_WRITE_ROW_COUNT;
+                // 68136条数据
+                List<Map<String, Object>> queryForList = jdbcTemplate.queryForList(String.format(paramsSql, 10041559L, startNumber, pageSize));
+
+                if (!CollectionUtils.isEmpty(queryForList)) {
+
+                    // --------------   这一块变量照着抄就行  强迫症 后期也封装起来     ----------------------
+                    for (int i = startRowCount; i <= endRowCount; i++) {
+                        Row eachDataRow = eachSheet.createRow(i);
+                        if ((i - startRowCount) < queryForList.size()) {
+                            Map<String, Object> map = queryForList.get(i - startRowCount);
+
+
+                            Object pr_code = map.get("pr_code");
+                            eachDataRow.createCell(0).setCellValue(StringUtilB2C.getStr(pr_code));
+
+                            Object prPcmpcode = map.get("pr_pcmpcode");
+                            eachDataRow.createCell(1).setCellValue(StringUtilB2C.getStr(prPcmpcode));
+                            Object pr_title = map.get("pr_title");
+                            eachDataRow.createCell(2).setCellValue(StringUtilB2C.getStr(pr_title));
+
+                            Object pr_cmpuuid = map.get("pr_cmpuuid");
+                            eachDataRow.createCell(3).setCellValue(StringUtilB2C.getStr(pr_cmpuuid));
+
+                            Object pr_pbranden = map.get("pr_pbranden");
+                            eachDataRow.createCell(4).setCellValue(StringUtilB2C.getStr(pr_pbranden));
+
+                            Object pr_packaging = map.get("pr_packaging");
+                            eachDataRow.createCell(5).setCellValue(StringUtilB2C.getStr(pr_packaging));
+
+                            //createTime
+
+                            Object pr_reserve = map.get("pr_reserve");
+                            String doul = StringUtilB2C.getStr(pr_reserve).equals("") ? "0" : StringUtilB2C.getStr(pr_reserve);
+                            eachDataRow.createCell(7).setCellValue(Double.valueOf(doul));
+
+                            Object pr_cmpimg = map.get("pr_cmpimg");
+                            eachDataRow.createCell(8).setCellValue(StringUtilB2C.getStr(pr_cmpimg));
+
+                            Object pr_enuu = map.get("pr_enuu");
+                            eachDataRow.createCell(9).setCellValue(Long.valueOf(StringUtilB2C.getStr(pr_enuu)));
+
+                            Object pr_encapsulation = map.get("pr_encapsulation");
+                            eachDataRow.createCell(10).setCellValue(StringUtilB2C.getStr(pr_encapsulation));
+
+                            Object pr_kinden = map.get("pr_kinden");
+                            eachDataRow.createCell(11).setCellValue(StringUtilB2C.getStr(pr_kinden));
+
+                            Object pr_spec = map.get("pr_spec");
+                            eachDataRow.createCell(12).setCellValue(StringUtilB2C.getStr(pr_spec));
+                        }
+                    }
+                }
+            }
+        });
+        logger.info("批量导出", System.currentTimeMillis() + "结束时间");
     }
 
     /**

+ 26 - 0
src/main/java/com/uas/platform/b2c/prod/store/model/KindHierarchicalCount.java

@@ -38,6 +38,16 @@ public class KindHierarchicalCount {
      */
     private Long kindId;
 
+    /**
+     * 第二级类目id
+     */
+    private Long secondId;
+
+    /**
+     * 頂級id
+     */
+    private Long firstId;
+
     public String getFirstKind() {
         return firstKind;
     }
@@ -85,4 +95,20 @@ public class KindHierarchicalCount {
     public void setKindId(Long kindId) {
         this.kindId = kindId;
     }
+
+    public Long getSecondId() {
+        return secondId;
+    }
+
+    public void setSecondId(Long secondId) {
+        this.secondId = secondId;
+    }
+
+    public Long getFirstId() {
+        return firstId;
+    }
+
+    public void setFirstId(Long firstId) {
+        this.firstId = firstId;
+    }
 }

BIN
src/main/resources/jxls-tpl/trade/goods.xls


BIN
src/main/resources/jxls-tpl/trade/test.xls


BIN
src/main/resources/jxls-tpl/trade/test.xlsx


+ 1 - 1
src/main/resources/pre/account.properties

@@ -3,7 +3,7 @@ account.us.save.url=https://sso.ubtob.com/api/userspace
 account.user.save.url=https://sso.ubtob.com/api/user
 account.user.getPartners.url=https://sso.ubtob.com/api/partners
 ### sso config
-sso.app=mall
+sso.app=dev
 # token secretkey
 sso.secretkey=0taQcW073Z7G628g5H
 sso.cookie.secure=false

+ 1 - 1
src/main/resources/pre/sys.properties

@@ -1,4 +1,4 @@
-profile=prod
+profile=pre
 rebuildIndexesOnRefresh=false
 listenOnIndexChange=false
 #path