Browse Source

管理后台调整为poi方式导出

yuj 7 years ago
parent
commit
17a01392d9

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

@@ -15,7 +15,7 @@ public class ExcelConstant {
     /**
      * 每次向EXCEL写入的记录数(查询每页数据大小) 20W
      */
-    public static final Integer PER_WRITE_ROW_COUNT = 200000;
+    public static final Integer PER_WRITE_ROW_COUNT = 10000;
 
 
     /**

+ 10 - 25
src/main/java/com/uas/platform/b2c/core/utils/PoiUtil.java

@@ -32,8 +32,8 @@ public class PoiUtil {
      */
     public static SXSSFWorkbook initExcel(Integer totalRowCount, String[] titles) {
 
-        // 在内存当中保持 100 行 , 超过的数据放到硬盘中在内存当中保持 100 行 , 超过的数据放到硬盘中
-        SXSSFWorkbook wb = new SXSSFWorkbook(100);
+        // 在内存当中保持 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));
@@ -94,9 +94,9 @@ public class PoiUtil {
      * @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"));//设置下载的文件名
+                + new String((fileName + ".xlsx").getBytes("utf-8"), "ISO8859-1"));
 
         OutputStream outputStream = null;
         try {
@@ -133,7 +133,6 @@ public class PoiUtil {
      * @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
@@ -145,19 +144,11 @@ public class PoiUtil {
             Sheet eachSheet = wb.getSheetAt(i);
 
             for (int j = 1; j <= ExcelConstant.PER_SHEET_WRITE_COUNT; j++) {
-
-                int currentPage = i * ExcelConstant.PER_SHEET_WRITE_COUNT + j;
-                int pageSize = ExcelConstant.PER_WRITE_ROW_COUNT;
-                int startRowCount = (j - 1) * ExcelConstant.PER_WRITE_ROW_COUNT + 1;
-                int endRowCount = startRowCount + pageSize - 1;
-
-
-                writeExcelDataDelegated.writeExcelData(eachSheet, startRowCount, endRowCount, currentPage, pageSize);
-
+                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);
 
@@ -176,27 +167,19 @@ public class PoiUtil {
      * @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++) {
-
-                int currentPage = i * ExcelConstant.PER_SHEET_WRITE_COUNT + j;
-                int pageSize = ExcelConstant.PER_WRITE_ROW_COUNT;
-                int startRowCount = (j - 1) * ExcelConstant.PER_WRITE_ROW_COUNT + 1;
-                int endRowCount = startRowCount + pageSize - 1;
-
-                writeExcelDataDelegated.writeExcelData(eachSheet, startRowCount, endRowCount, currentPage, pageSize);
-
+                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);
             }
         }
 
@@ -207,4 +190,6 @@ public class PoiUtil {
     }
 
 
+
+
 }

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

@@ -957,27 +957,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();
+		}
+	}
 }

+ 6 - 2
src/main/java/com/uas/platform/b2c/prod/commodity/controller/ProductController.java

@@ -528,7 +528,11 @@ public class ProductController {
 	 */
 	@RequestMapping(value = "/test/export", method = RequestMethod.GET)
 	public void exportToWebSite(HttpServletResponse response) {
-		productService.exportToWebSite(response);
-	}
+        try {
+            productService.exportToWebSite(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
 }

+ 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;
@@ -843,4 +845,13 @@ public interface GoodsService {
      * @return List<Goods>
      */
     List<Goods> multiSearch(PageInfo info, GoodsFilter goodsFilter);
+
+    /**
+     * 通过传入参数导出品类产品数
+     *
+     * @param startTime 开始时间
+     * @param endTime 截止时间
+     * @param response 响应头
+     */
+    void exportKindProductsCount(Date startTime, Date endTime, HttpServletResponse response) throws Exception;
 }

+ 6 - 1
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductService.java

@@ -420,5 +420,10 @@ public interface ProductService {
      */
     List<Product> getProductByEnuuByCommonDao();
 
-    void exportToWebSite(HttpServletResponse response);
+    /**
+     * 通过poi的形式导出数据到浏览器
+     * @param response 返回值
+     * @throws Exception 异常
+     */
+    void exportToWebSite(HttpServletResponse response) throws Exception;
 }

+ 81 - 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;
@@ -4150,6 +4150,80 @@ 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());
+                    }
+                }
+                if (CollectionUtils.isNotEmpty(ids)) {
+                    Map<String, List<Long>> map = new HashMap<>();
+                    map.put("ids", ids);
+                    List<Map<String, Object>> mapQuery = namedParameterJdbcTemplate.queryForList("select c.ki_id as id,p1.ki_name as secondName,p2.ki_name as firstName " +
+                            "from product$kind c left join product$kind p1 on c.ki_parentid = p1.ki_id " +
+                            "left join product$kind p2 on p1.ki_parentid = p2.ki_id where c.ki_id in (:ids)", map);
+                    for (KindHierarchicalCount hierarchical : kindHierarchicals) {
+                        if (hierarchical.getKindId() != null) {
+                            for (Map<String, Object> mapRest : mapQuery) {
+                                if (hierarchical.getKindId().equals(mapRest.get("id"))) {
+                                    hierarchical.setSecondKind(StringUtilB2C.getStr(mapRest.get("secondName")));
+                                    hierarchical.setFirstKind(StringUtilB2C.getStr(mapRest.get("firstName")));
+                                }
+                            }
+                        }
+                    }
+                }
+
+                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 后续提成公共方法,暂时没写好

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

@@ -12,11 +12,7 @@ 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.*;
@@ -25,6 +21,7 @@ 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;
@@ -98,6 +95,10 @@ import javassist.NotFoundException;
 import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.map.HashedMap;
+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;
@@ -155,7 +156,7 @@ public class ProductServiceImpl implements ProductService {
     /**
      * 系统操作日志
      */
-    private static final UsageBufferedLogger LOGGER = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+    private final Logger logger = LoggerFactory.getLogger(ProductServiceImpl.class);
 
     @Autowired
     private ProductDao productDao;
@@ -2550,7 +2551,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);
@@ -2587,7 +2588,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);
@@ -2747,7 +2748,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;
@@ -2764,7 +2765,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;
                     }
@@ -2807,7 +2808,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());
         }
     }
 
@@ -2871,9 +2872,9 @@ 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());
     }
 
     /**
@@ -2950,12 +2951,82 @@ public class ProductServiceImpl implements ProductService {
     }
 
     @Override
-    public void exportToWebSite(HttpServletResponse response) {
+    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";
-        String url = String.format(sql, 10041559L);
-        PoiUtil.exportExcelToWebsite(response, totalRowCount, "测试export", "", new WriteExcelDataDelegated() {
+        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() + "结束时间");
     }
 }