Browse Source

更新后台产品列表导出数量限制

hejq 7 years ago
parent
commit
395f51a064

+ 1 - 1
src/main/java/com/uas/platform/b2c/core/support/view/JxlsExcelView.java

@@ -36,7 +36,7 @@ public class JxlsExcelView extends AbstractExcelView {
     /**
      * 管理后台goods最大导出行
      */
-	public final static int GOODS_MAX_SIZE = 1200;
+	public final static int GOODS_MAX_SIZE = 5000;
 
     /**
      * 文件名

+ 6 - 9
src/main/java/com/uas/platform/b2c/prod/commodity/controller/GoodsController.java

@@ -1,7 +1,6 @@
 package com.uas.platform.b2c.prod.commodity.controller;
 
 import com.uas.platform.b2c.common.base.model.FileUpload;
-import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.core.support.view.JxlsExcelView;
 import com.uas.platform.b2c.core.utils.FastjsonUtils;
@@ -50,6 +49,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.text.SimpleDateFormat;
@@ -80,9 +80,6 @@ public class GoodsController {
 	@Autowired
 	private GoodsDao goodsDao;
 
-	@Autowired
-	private SearchService searchService;
-
     /**
      * 发布(上架)产品
      *
@@ -851,7 +848,7 @@ public class GoodsController {
      * @return ModelAndView
      */
 	@RequestMapping(value = "/background/download", method = RequestMethod.GET)
-    public ModelAndView exportProductsStandard(GoodsFilter goodsFilter, HttpServletRequest request, PageParams params,
+    public ModelAndView exportProductsStandard(GoodsFilter goodsFilter, HttpServletRequest request, PageParams params, HttpServletResponse response,
                                            @RequestParam(required = false, value = "isAjax", defaultValue = "false") Boolean isAjax) {
         HttpSession session = request.getSession();
         ModelAndView modelAndView = AjaxUtil.checkIsAjax(session, isAjax);
@@ -859,15 +856,15 @@ public class GoodsController {
             return modelAndView;
         }
         PageInfo info = new PageInfo(1, JxlsExcelView.GOODS_MAX_SIZE);
-        Page<Goods> productsGoods = goodsService.getPageDataOfBackground(info, goodsFilter);
-        if (CollectionUtils.isNotEmpty(productsGoods.getContent())) {
-            logger.info("产品导出结果 products: " + productsGoods.getContent().size());
+        List<Goods> goodsList = goodsService.multiSearch(info, goodsFilter);
+        if (CollectionUtils.isNotEmpty(goodsList)) {
+            logger.info("产品导出结果 products: " + goodsList.size());
         } else {
             logger.info("产品导出结果 products为空");
         }
         FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy年MM月dd日 HH:mm");
         modelAndView.addObject("dateFormat", dateFormat);
-        modelAndView.addObject("data", productsGoods.getContent());
+        modelAndView.addObject("data", goodsList);
         modelAndView.addObject("goodsService", goodsService);
         modelAndView.addObject("title", "优软商城--产品库列表");
         modelAndView.setView(new JxlsExcelView("classpath:jxls-tpl/trade/background", "优软商城--产品库列表"));

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

@@ -578,6 +578,18 @@ public class Goods implements Serializable {
 	@Transient
 	private Double saleQty;
 
+	/**
+	 * 价格分段
+	 */
+	@Transient
+	private String priceGradeStr = "";
+
+    /**
+     * 价格
+     */
+	@Transient
+    private String priceStr = "";
+
 	public Double getSaleQty() {
 		return saleQty;
 	}
@@ -1583,7 +1595,23 @@ public class Goods implements Serializable {
 		return this;
 	}
 
-	/**
+    public String getPriceGradeStr() {
+        return priceGradeStr;
+    }
+
+    public void setPriceGradeStr(String priceGradeStr) {
+        this.priceGradeStr = priceGradeStr;
+    }
+
+    public String getPriceStr() {
+        return priceStr;
+    }
+
+    public void setPriceStr(String priceStr) {
+        this.priceStr = priceStr;
+    }
+
+    /**
 	 * 获取最大交期
 	 * @return
 	 */

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

@@ -834,4 +834,13 @@ public interface GoodsService {
      * @return Page<KindHierarchicalCount>
      */
     com.uas.sso.support.Page<KindHierarchicalCount> getKindProductsCount(Pageable pageable, Date startTime, Date endTime);
+
+    /**
+     * 批量导出数据
+     * TODO 后续提成公共方法,暂时没写好
+     * @param info 分页信息
+     * @param goodsFilter 过滤条件
+     * @return List<Goods>
+     */
+    List<Goods> multiSearch(PageInfo info, GoodsFilter goodsFilter);
 }

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

@@ -147,6 +147,7 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -164,8 +165,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -3526,7 +3530,25 @@ public class GoodsServiceImpl implements GoodsService {
                 goods.setSelfSale(StringConstant.SALE_SELF);
             }
             goods.setFrozen(getFrozenCount(goods.getBatchCode()));
-            goods.setMaxPriceIndex(goods.getPrices().size() - 1);
+            List<GoodsQtyPrice> prices = goods.getPrices();
+            if (CollectionUtils.isNotEmpty(prices)) {
+                int size = prices.size();
+                StringBuffer gradeBuffer = new StringBuffer();
+                StringBuffer priceBuffer = new StringBuffer();
+                for (int i = 0; i < size; i++) {
+                    if (gradeBuffer.length() > 0) {
+                        gradeBuffer.append("\n");
+                        priceBuffer.append("\n");
+                    }
+                    String priceEnd = i + 1 == size ? "以上" : prices.get(i).getEnd().toString();
+                    gradeBuffer.append(prices.get(i).getStart()).append("-").append(priceEnd);
+                    String currencyName = StringConstant.RMB.equals(goods.getCurrencyName()) ? "¥" : "$";
+                    Double price = StringConstant.RMB.equals(goods.getCurrencyName()) ? prices.get(i).getRMBPrice() : prices.get(i).getUSDPrice();
+                    priceBuffer.append(currencyName).append(price);
+                }
+                goods.setPriceGradeStr(gradeBuffer.toString());
+                goods.setPriceStr(priceBuffer.toString());
+            }
         }
         return page;
     }
@@ -4127,4 +4149,81 @@ public class GoodsServiceImpl implements GoodsService {
         }
         return new com.uas.sso.support.Page<>(pageable.getPageNumber(), pageable.getPageSize(), kindList, count);
     }
+
+    /**
+     * 批量导出数据
+     * TODO 后续提成公共方法,暂时没写好
+     *
+     * @param info        分页信息
+     * @param goodsFilter 过滤条件
+     * @return List<Goods>
+     */
+    @Override
+    public List<Goods> multiSearch(PageInfo info, GoodsFilter goodsFilter) {
+        List<Goods> goodsList = new ArrayList<>();
+        List<Future<List<Goods>>> futureList = new ArrayList<>();
+        BigDecimal pageSize = new BigDecimal(info.getPageSize());
+        BigDecimal pageCount = new BigDecimal(com.uas.platform.b2c.core.constant.IntegerConstant.PAGE_COUNT);
+        int maxPoolSize = (int) Math.ceil(pageSize.divide(pageCount).doubleValue());
+        ExecutorService exs =  Executors.newFixedThreadPool(maxPoolSize);
+        for (int i = 0; i < maxPoolSize; i++) {
+            futureList.add(exs.submit(new CallableTask(i + 1, goodsFilter, info.getPageSize())));
+        }
+        for (Future<List<Goods>> future : futureList) {
+            while (true) {
+                if (future.isDone() && !future.isCancelled()) {
+                    List<Goods> goods = null;
+                    try {
+                        goods = future.get();
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    } catch (ExecutionException e) {
+                        e.printStackTrace();
+                    }
+                    goodsList.addAll(goods);
+                    break;
+                }
+            }
+        }
+        return goodsList;
+    }
+
+    private class CallableTask implements Callable<List<Goods>> {
+
+        /**
+         * 线程序号
+         */
+        Integer i;
+        /**
+         * 过滤条件
+         */
+        GoodsFilter goodsFilter;
+        /**
+         * 分页大小
+         */
+        Integer pageSize;
+
+        public CallableTask(int i, GoodsFilter goodsFilter, int pageSize) {
+            super();
+            this.i = i;
+            this.goodsFilter = goodsFilter;
+            this.pageSize = pageSize;
+        }
+
+        /**
+         * Computes a result, or throws an exception if unable to do so.
+         *
+         * @return computed result
+         * @throws Exception if unable to compute a result
+         */
+        @Override
+        public List<Goods> call() throws Exception {
+            int count = pageSize > com.uas.platform.b2c.core.constant.IntegerConstant.PAGE_COUNT ?
+                    com.uas.platform.b2c.core.constant.IntegerConstant.PAGE_COUNT : pageSize;
+            PageInfo info = new PageInfo(i, count);
+            List<Goods> goods = getPageDataOfBackground(info, goodsFilter).getContent();
+            return goods;
+        }
+    }
+
 }

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