浏览代码

Merge remote-tracking branch 'origin/release-201845-wangcz' into release-201845-wangcz

wangcz 7 年之前
父节点
当前提交
9f0e592f50

+ 8 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/ProductPrivateService.java

@@ -48,4 +48,12 @@ public interface ProductPrivateService {
      * @return
      */
     List<ProductPrivate> newProductPrivateIfNotExist(List<Long> prIds);
+
+    /**
+     * 通过jdbcTemplate 批量存储物料私有信息
+     *
+     * @param privateList 商城私有物料
+     * @return 存储条数
+     */
+    Integer saveByJdbcTemplate(List<ProductPrivate> privateList);
 }

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

@@ -326,8 +326,8 @@ public interface ProductService {
     List<Product> findProductsByProdNums(List<String> prodNums);
 
     /**
-     * 根物料标号,获取物料编号和物料id
      * @param prodNums  物料编号list
+     * 根物料标号,获取物料编号和物料id
      * @return 返回物料信息。
      */
     List<Product> findProductIdAndProdnumsByProdNums(List<String> prodNums);

+ 7 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/service/ReleaseProductByBatchService.java

@@ -191,4 +191,11 @@ public interface ReleaseProductByBatchService {
      * @return Object
      */
     Object readWorkBookCell(Cell cell, int cellType, int r, int n);
+
+    /**
+     * 批量保存临时表信息
+     *
+     * @param releaseProductByBatchArrayList 临时表数据
+     */
+    void saveByJdbcTemplate(List<ReleaseProductByBatch> releaseProductByBatchArrayList);
 }

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

@@ -11,7 +11,11 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 商城私有字段的服务层
@@ -169,4 +173,26 @@ public class ProductPrivateServiceImpl implements ProductPrivateService {
             return productPrivateDao.save(productPrivate);
         }
     }
+
+    /**
+     * 通过jdbcTemplate 批量存储物料私有信息
+     *
+     * @param privateList 商城私有物料
+     * @return 存储条数
+     */
+    @Override
+    public Integer saveByJdbcTemplate(List<ProductPrivate> privateList) {
+        int[][] size = new int[0][];
+        if (CollectionUtils.isNotEmpty(privateList)) {
+            size = jdbcTemplate.batchUpdate("insert IGNORE product$private(pr_b2cenabled, pr_batchcount, pr_id, pr_attach) values (?,?,?,?)",
+                    privateList, privateList.size(), (ps, t) -> {
+                        ps.setObject(1, t.getB2cEnabled());
+                        ps.setObject(2, t.getBatchCount());
+                        ps.setObject(3, t.getPrId());
+                        ps.setObject(4, t.getAttach());
+                    });
+            System.out.println(size);
+        }
+        return size[0][0];
+    }
 }

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

@@ -17,7 +17,6 @@ import com.uas.platform.b2c.prod.commodity.constant.ModifyConstant;
 import com.uas.platform.b2c.prod.commodity.constant.ShortConstant;
 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.ReleaseProductByBatchController;
 import com.uas.platform.b2c.prod.commodity.dao.GoodsDao;
 import com.uas.platform.b2c.prod.commodity.dao.PCBDao;
 import com.uas.platform.b2c.prod.commodity.dao.PcbPropertyvalueDao;
@@ -104,7 +103,17 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.regex.Matcher;
@@ -2242,4 +2251,86 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	public void deleteAllInfo() {
 		releaseProductByBatchDao.deleteAll();
 	}
+
+	/**
+	 * 批量保存临时表信息
+	 *
+	 * @param releaseProductByBatchArrayList 临时表数据
+	 */
+	@Override
+	public void saveByJdbcTemplate(List<ReleaseProductByBatch> releaseProductByBatchArrayList) {
+        if (CollectionUtils.isNotEmpty(releaseProductByBatchArrayList)) {
+            jdbcTemplate.batchUpdate("insert INTO trade$releasebybatch(" +
+                            "rel_brandid,rel_brandcn,rel_branden,rel_breakup,rel_breakupstr,rel_code,rel_createdate,rel_currency,rel_encapsulation,rel_errmsg," +
+                            "rel_img,rel_maxpricermb,rel_maxpriceusd,rel_minbuyqty,rel_minbuyqtystr,rel_minpackpricestr,rel_minpackage,rel_minpackagestr,rel_minpricermb,rel_minpriceusd," +
+                            "rel_original,rel_packaging,rel_publishername,rel_publishertel,rel_publisheruu,rel_batchid,rel_releasecode,rel_releasestatus,rel_remark,rel_publishreserve," +
+                            "rel_publishreservestr,rel_returninweek,rel_rmbprice,rel_rmb_tax_rate,rel_sampleqty,rel_selfmaxdelivery,rel_selfmaxdeliverystr,rel_selfmindelivery,rel_selfmindeliverystr,rel_shiparea," +
+                            "rel_storename,rel_storeid,rel_unit,rel_usdprice,rel_usd_tax_rate,rel_b2cbrandcn,rel_b2cbranden,rel_b2ccode,rel_b2cuuid,rel_b2cbrandid," +
+                            "rel_b2cbranduuid,rel_b2ckindname,rel_b2ckindid,rel_tag,rel_tag_str,rel_spec) " +
+                            "values (?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?)",
+                    releaseProductByBatchArrayList, releaseProductByBatchArrayList.size(), (ps, t) -> {
+                        ps.setObject(1, t.getBrandId());
+                        ps.setObject(2, t.getB2cBrandcn());
+                        ps.setObject(3, t.getB2cBranden());
+                        ps.setObject(4, t.getBreakUp());
+                        ps.setObject(5, t.getBreakUpStr());
+                        ps.setObject(6, t.getCode());
+                        ps.setObject(7, t.getCreateDate());
+                        ps.setObject(8, t.getCurrency());
+                        ps.setObject(9, t.getEncapsulation());
+                        ps.setObject(10, t.getErrmsg());
+
+                        ps.setObject(11, t.getImg());
+                        ps.setObject(12, t.getMaxPriceRMB());
+                        ps.setObject(13, t.getMaxPriceUSD());
+                        ps.setObject(14, t.getMinBuyQty());
+                        ps.setObject(15, t.getMinBuyQtyStr());
+                        ps.setObject(16, t.getMinPackPriceStr());
+                        ps.setObject(17, t.getMinPackage());
+                        ps.setObject(18, t.getMinPackageStr());
+                        ps.setObject(19, t.getMinPriceRMB());
+                        ps.setObject(20, t.getMinPriceUSD());
+
+                        ps.setObject(21, t.getOriginal());
+                        ps.setObject(22, t.getPackaging());
+                        ps.setObject(23, t.getPublisherName());
+                        ps.setObject(24, t.getPublisherTel());
+                        ps.setObject(25, t.getPublisherUu());
+                        ps.setObject(26, t.getRelbatchid());
+                        ps.setObject(27, t.getReleaseCode());
+                        ps.setObject(28, t.getReleaseStatus());
+                        ps.setObject(29, t.getRemark());
+                        ps.setObject(30, t.getReserve());
+
+                        ps.setObject(31, t.getReserveStr());
+                        ps.setObject(32, t.getReturnInWeek());
+                        ps.setObject(33, t.getRmbMinPackPrice());
+                        ps.setObject(34, t.getRmbTaxRate());
+                        ps.setObject(35, t.getSampleqty());
+                        ps.setObject(36, t.getSelfMaxDelivery());
+                        ps.setObject(37, t.getSelfMaxDeliveryStr());
+                        ps.setObject(38, t.getSelfMinDelivery());
+                        ps.setObject(39, t.getSelfMinDeliveryStr());
+                        ps.setObject(40, t.getShipArea());
+
+                        ps.setObject(41, t.getStoreName());
+                        ps.setObject(42, t.getStoreid());
+                        ps.setObject(43, t.getUnit());
+                        ps.setObject(44, t.getUsdMinPackPrice());
+                        ps.setObject(45, t.getUsdTaxRate());
+                        ps.setObject(46, t.getB2cBrandcn());
+                        ps.setObject(47, t.getB2cBranden());
+                        ps.setObject(48, t.getB2cCode());
+                        ps.setObject(49, t.getComponentUuId());
+                        ps.setObject(50, t.getBrandId());
+
+                        ps.setObject(51, t.getBranduuid());
+                        ps.setObject(52, t.getKindName());
+                        ps.setObject(53, t.getKindUuid());
+                        ps.setObject(54, t.getTag());
+                        ps.setObject(55, t.getTagstr());
+                        ps.setObject(56, t.getSpec());
+                    });
+        }
+	}
 }

+ 32 - 20
src/main/java/com/uas/platform/b2c/trade/order/service/impl/PurchaseProductServiceImpl.java

@@ -10,21 +10,18 @@ import com.uas.platform.b2c.core.utils.StringUtilB2C;
 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.UploadConstant;
-import com.uas.platform.b2c.prod.commodity.dao.ProductDao;
-import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
 import com.uas.platform.b2c.prod.commodity.dao.ReleaseProductByBatchDao;
 import com.uas.platform.b2c.prod.commodity.dao.V_ProductPrivateDao;
 import com.uas.platform.b2c.prod.commodity.model.Product;
 import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
 import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
 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.ProductPrivateService;
 import com.uas.platform.b2c.prod.commodity.service.ProductService;
 import com.uas.platform.b2c.prod.commodity.service.ReleaseProductByBatchService;
 import com.uas.platform.b2c.prod.commodity.type.ProductConstant;
 import com.uas.platform.b2c.prod.commodity.util.SheetUtil;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
-import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.order.service.PurchaseProductService;
 import com.uas.platform.b2c.trade.support.CodeType;
 import com.uas.platform.b2c.trade.support.ResultMap;
@@ -75,20 +72,11 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
     @Autowired
     private ProductService productService;
 
-    @Autowired
-    private ProductPrivateDao productPrivateDao;
-
-    @Autowired
-    private ProductDao productDao;
-
     @Autowired
     private V_ProductPrivateDao v_productPrivateDao;
 
     @Autowired
-    private GoodsService goodsService;
-
-    @Autowired
-    private StoreInService storeInService;
+    private ProductPrivateService productPrivateService;
 
     /**
      * 物料服务访问路径
@@ -154,7 +142,10 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
             // 本次上传总数
             int total = 0;
             // 批号
+            Long start = System.currentTimeMillis();
             String batch = createNumberService.getTimeNumber("product$goods", 8, rowNum);
+            System.out.println("创建批号消耗: " + (System.currentTimeMillis() - start));
+            start = System.currentTimeMillis();
             for (int r = minExcelNumber; r <= rowNum; r++) {
                 Row row = sheet.getRow(r);
                 // 英文品牌名称
@@ -177,20 +168,29 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
                 }
                 // 保存临时表信息
             }
-            releaseProductByBatchDao.save(releaseProductByBatchArrayList);
+            System.out.println("校验表格数据消耗: " + (System.currentTimeMillis() - start));
+            start = System.currentTimeMillis();
+            releaseProductByBatchService.saveByJdbcTemplate(releaseProductByBatchArrayList);
+            System.out.println("保存临时表: " + (System.currentTimeMillis() - start));
             Long enUU = SystemSession.getUser().getEnterprise().getUu();
             // 验证数据信息是否重复
+            start = System.currentTimeMillis();
             releaseProductByBatchDao.callReleaseExistValidProcedure(batch, enUU);
+            System.out.println("批量上架验证数据信息是否重复: " + (System.currentTimeMillis() - start));
             // 验证数是否存在个人物料库
             Long userUU = SystemSession.getUser().getUserUU();
+            start = System.currentTimeMillis();
             releaseProductByBatchDao.callReleasePersonExistValidProcedure(batch, enUU, userUU);
+            System.out.println("批量上架个人物料验证数据信息是否重复: " + (System.currentTimeMillis() - start));
             ModelMap modelMap = new ModelMap();
             // 处理上传数据
             assignmentProductInfo(enUU, modelMap, batch);
             // 验证成功后进行绑定处理
             Integer assignNumber = 0;
             // 去重后的数据
+            start = System.currentTimeMillis();
             List<ReleaseProductByBatch> uniqueBatchList = releaseProductByBatchDao.findByRelbatchidAndReleaseCodeNot(userUU, batch, failCode);
+            System.out.println("查询去重后的数据: " + (System.currentTimeMillis() - start));
             if (!CollectionUtils.isEmpty(uniqueBatchList)) {
                 assignNumber = assignBatch(uniqueBatchList);
             }
@@ -358,6 +358,7 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
             data.put("userUU", SystemSession.getUser().getUserUU());
             params.put("data", data);
             HttpUtil.Response res = null;
+            Long start = System.currentTimeMillis();
             try {
                 res = HttpUtil.sendPostRequest(productServiceIp + "/productuser/coverToUserByIds", params);
                 return Integer.valueOf(res.getResponseText());
@@ -365,6 +366,7 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
                 String resultCode = null != res ? String.valueOf(res.getStatusCode()) : "access error";
                 LOGGER.error("coverToUserProd http response status error: " + resultCode);
             }
+            System.out.println("物料服务保存: " + (System.currentTimeMillis() - start));
         }
         return 0;
     }
@@ -379,7 +381,9 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
         List<String> productCodeList = new ArrayList<>();
         Set<Long> idSet = new HashSet<>();
         List<ReleaseProductByBatch> batchList = new ArrayList<>();
-        uniqueBatchList.forEach(batch -> {
+        System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "100");
+        Long start = System.currentTimeMillis();
+        uniqueBatchList.parallelStream().forEach(batch -> {
             if (null != batch.getProductid()) {
                 idSet.add(batch.getProductid());
             } else {
@@ -391,22 +395,30 @@ public class PurchaseProductServiceImpl implements PurchaseProductService {
                 batchList.add(batch);
             }
         });
+        System.out.println("循环处理物料code: " + (System.currentTimeMillis() - start));
         // 新增到物料库
+        start = System.currentTimeMillis();
         productService.saveByJdbcTemplate(batchList);
+        System.out.println("批量保存物料库: " + (System.currentTimeMillis() - start));
+        start = System.currentTimeMillis();
         List<com.uas.platform.b2c.prod.commodity.model.Product> productList = productService.findProductIdAndProdnumsByProdNums(productCodeList);
+        System.out.println("根物料标号,获取物料编号和物料id: " + (System.currentTimeMillis() - start));
+        start = System.currentTimeMillis();
         List<ProductPrivate> privateList = new ArrayList<>();
-        productList.forEach(product -> {
+        productList.parallelStream().forEach(product -> {
             ProductPrivate productPrivate = new ProductPrivate(product.getId());
             productPrivate.setAttach(product.getAttachment());
             privateList.add(productPrivate);
             idSet.add(product.getId());
         });
-
+        System.out.println("循环添加私有字段: " + (System.currentTimeMillis() - start));
+        start = System.currentTimeMillis();
         // 保存到私有库
         if (CollectionUtils.isNotEmpty(privateList)) {
-            productPrivateDao.save(privateList);
-            LOGGER.info("批量上传个人物料库,同步新增到商城私有库: " + privateList.size());
+            Integer count = productPrivateService.saveByJdbcTemplate(privateList);
+            LOGGER.info("批量上传个人物料库,同步新增到商城私有库: " + count);
         }
+        System.out.println("保存到私有库: " + (System.currentTimeMillis() - start));
         return idSet;
     }