Просмотр исходного кода

Merge branch 'temp-feature' into feature-201819-wangcz

# Conflicts:
#	src/main/java/com/uas/platform/b2c/prod/commodity/service/impl/ReleaseProductByBatchServiceImpl.java
yujia 7 лет назад
Родитель
Сommit
2345200148

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

@@ -27,4 +27,9 @@ public class IntegerConstant {
 
 
     public static final Integer PAGE_COUNT = 500;
+
+    /**
+     * 年月日 合计的长度 20180725
+     */
+    public static final Integer TIME_LENGTH = 8;
 }

+ 9 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/dao/ReleaseProductByBatchDao.java

@@ -82,6 +82,15 @@ public interface ReleaseProductByBatchDao
     @Procedure(procedureName = "PRODUCT_RELEASE_VALID_V4", outputParameterName = "rCount")
 	String callValidProcedure(Long publisherUu, String batchid);
 
+    /**
+     * 发布产品
+     * @param enuu 企业的enuu
+     * @param enName 企业的名称
+     * @param batch 批次号
+     * @return 输出的参数
+     */
+    @Procedure(procedureName = "RELEASE_TO_GOODS_V4", outputParameterName = "v_num")
+    Integer publishReleaseProductToGoods(Long enuu, String enName, String batch);
 
 	/**
 	 * 批量上架验证数据信息是否重复

+ 16 - 0
src/main/java/com/uas/platform/b2c/prod/commodity/model/GoodsHistory.java

@@ -440,6 +440,12 @@ public class GoodsHistory {
 	@Column(name = "go_goid")
 	private Long goid;
 
+	/**
+	 * 批量上传的标志
+	 */
+	@Column(name = "go_batchid")
+	private String batchid;
+
 	@Transient
 	private String enterpriseName;
 
@@ -1075,6 +1081,7 @@ public class GoodsHistory {
 		this.prodNum = goods.getProdNum();
 		this.spec = goods.getSpec();
 		this.goid  = goods.getId();
+		this.batchid = goods.getBatchid();
     }
 
 	public Short getSelfDeliveryDemMinTime() {
@@ -1217,4 +1224,13 @@ public class GoodsHistory {
 		this.goid = goid;
 		return this;
 	}
+
+	public String getBatchid() {
+		return batchid;
+	}
+
+	public GoodsHistory setBatchid(String batchid) {
+		this.batchid = batchid;
+		return this;
+	}
 }

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

@@ -769,4 +769,12 @@ public interface GoodsService {
      * @return Component 根据标准器件更新物料
      */
     void updateGoodsByComponent(Component component);
+
+
+    /**
+     *  根据物料主键统计该物料包含多少个批次
+     * @param prIds 物料的主键信息
+     * @return ap<Long, Integer>
+     */
+    Map<Long, Integer> batchGetCountByProductId(List<Long>  prIds);
 }

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

@@ -0,0 +1,36 @@
+package com.uas.platform.b2c.prod.commodity.service;
+
+import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+
+import java.util.List;
+
+/**
+ * 物料商城私有字段的服务诚
+ *
+ * @author yuj 2018-07-25 10:24
+ */
+public interface ProductPrivateService {
+
+    /**
+     * 单个获取私有物料字段
+     * @param prId 物料主键
+     * @return ProductPrivate
+     */
+    ProductPrivate findByPrId(Long prId);
+
+
+    /**
+     * 批量获取私有的物料字段
+     * @param prIds 需要获取的主键信息
+     * @return List<ProductPrivate>
+     */
+    List<ProductPrivate> findByPrIds(List<Long> prIds);
+
+
+    /**
+     * 批量保存
+     * @param productPrivates 需要保存的信息
+     * @return  List<ProductPrivate>
+     */
+    List<ProductPrivate> saveProductPrivate(List<ProductPrivate> productPrivates);
+}

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

@@ -1,6 +1,5 @@
 package com.uas.platform.b2c.prod.commodity.service;
 
-import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
 import com.uas.platform.b2c.prod.commodity.model.ReleaseProductByBatch;
 import com.uas.platform.core.model.PageInfo;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -104,13 +103,4 @@ public interface ReleaseProductByBatchService {
      * @return list
      */
     public List<ReleaseProductByBatch> findFailureReleaseProductByBatch(String batch);
-
-
-    /**
-     * 查找私有字段根据pr_id
-     * @param prId
-     * @return
-     */
-    public ProductPrivate findByPrId(Long prId);
-
 }

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

@@ -83,12 +83,14 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
 import org.springframework.data.domain.Page;
 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.JdbcTemplate;
+import org.springframework.jdbc.core.ResultSetExtractor;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -103,6 +105,8 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigInteger;
+import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -149,7 +153,7 @@ public class GoodsServiceImpl implements GoodsService {
     private CreateNumberService createNumberService;
 
     @Autowired
-    private ReleaseProductByBatchService releaseProductByBatchService;
+    private ProductPrivateService productPrivateService;
 
     @Autowired
     private ComponentDao componentDao;
@@ -1725,7 +1729,7 @@ public class GoodsServiceImpl implements GoodsService {
         GoodsHistory goodsHistory = goodsHistoryService.converTGoodsHist(goods, OperateType.ADD_GOODS.getPhrase(), false);
         Goods persistGoods = goodsDao.save(goods);
         if(product != null) {
-            ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+            ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
             if (productPrivate == null) {
                 productPrivate = new ProductPrivate();
                 productPrivate.setPrId(product.getId());
@@ -3257,7 +3261,7 @@ public class GoodsServiceImpl implements GoodsService {
             if (goods.getProductid() != null) {
                 Product product = productDao.findOne(goods.getProductid());
                 if (product != null) {
-                    ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                    ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                     if (productPrivate == null) {
                         productPrivate = new ProductPrivate();
                         productPrivate.setPrId(product.getId());
@@ -3554,7 +3558,7 @@ public class GoodsServiceImpl implements GoodsService {
         if (goods.getProductid() != null) {
             Product product = productDao.findOne(goods.getProductid());
             if (product != null) {
-                ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                 if (productPrivate == null) {
                     productPrivate = new ProductPrivate();
                     productPrivate.setPrId(product.getId());
@@ -3645,7 +3649,7 @@ public class GoodsServiceImpl implements GoodsService {
             if (goods.getProductid() != null) {
                 Product product = productDao.findOne(goods.getProductid());
                 if (product != null) {
-                    ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                    ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                     if (productPrivate == null) {
                         productPrivate = new ProductPrivate();
                         productPrivate.setPrId(product.getId());
@@ -3757,7 +3761,7 @@ public class GoodsServiceImpl implements GoodsService {
                 }
                 goodsDao.save(tagEmptyGoods);
                 goodsDao.save(goods);
-                ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                 if (productPrivate == null) {
                     productPrivate = new ProductPrivate();
                     productPrivate.setPrId(product.getId());
@@ -4276,4 +4280,31 @@ public class GoodsServiceImpl implements GoodsService {
             }
         }
     }
+
+
+    /**
+     *  根据物料主键统计该物料包含多少个批次
+     * @param prIds 物料的主键信息
+     * @return ap<Long, Integer>
+     */
+    public Map<Long, Integer> batchGetCountByProductId(List<Long>  prIds) {
+        if (CollectionUtils.isEmpty(prIds)) {
+            return new HashedMap();
+        } else {
+            String sql = "select go_productid, count(go_id) num from trade$goods where go_productid in (:prids) group by go_productid";
+            Map<String,Object> parameters = new HashMap<String,Object>();
+            parameters.put("prids", prIds);
+            Map<Long, Integer> map = namedParameterJdbcTemplate.query(sql, parameters, new ResultSetExtractor<Map<Long, Integer>>() {
+                @Override
+                public Map<Long, Integer> extractData(ResultSet rs) throws SQLException, DataAccessException {
+                    Map<Long, Integer> resultMap = new HashedMap();
+                    long productid = rs.getLong("go_productid");
+                    int num = rs.getInt("num");
+                    resultMap.put(productid, num);
+                    return resultMap;
+                }
+            });
+            return map;
+        }
+    }
 }

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

@@ -0,0 +1,69 @@
+package com.uas.platform.b2c.prod.commodity.service.impl;
+
+import com.uas.platform.b2c.prod.commodity.dao.ProductPrivateDao;
+import com.uas.platform.b2c.prod.commodity.model.ProductPrivate;
+import com.uas.platform.b2c.prod.commodity.service.ProductPrivateService;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * 商城私有字段的服务层
+ *
+ * @author yuj 2018-07-25 10:24
+ */
+@Service
+public class ProductPrivateServiceImpl implements ProductPrivateService {
+
+    private final ProductPrivateDao productPrivateDao;
+
+    @Autowired
+    public ProductPrivateServiceImpl(ProductPrivateDao productPrivateDao) {
+        this.productPrivateDao = productPrivateDao;
+    }
+
+
+    @Override
+    public ProductPrivate findByPrId(Long prId) {
+        List<ProductPrivate> productPrivates = productPrivateDao.findByPrId(prId);
+        if (!CollectionUtils.isEmpty(productPrivates)) {
+            ProductPrivate productPrivate = productPrivates.get(0);
+            return productPrivate;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * 批量获取私有的物料字段
+     *
+     * @param prIds 需要获取的主键信息
+     * @return List<ProductPrivate>
+     */
+    @Override
+    public List<ProductPrivate> findByPrIds(List<Long> prIds) {
+        if (CollectionUtils.isEmpty(prIds)) {
+            return Collections.emptyList();
+        } else {
+            List<ProductPrivate> privates = productPrivateDao.findByPrIds(prIds);
+            return privates;
+        }
+    }
+
+    /**
+     * 批量保存
+     *
+     * @param productPrivates 需要保存的信息
+     * @return List<ProductPrivate>
+     */
+    @Override
+    public List<ProductPrivate> saveProductPrivate(List<ProductPrivate> productPrivates) {
+        if (CollectionUtils.isNotEmpty(productPrivates)) {
+            productPrivateDao.save(productPrivates);
+        }
+        return Collections.emptyList();
+    }
+}

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

@@ -134,9 +134,6 @@ public class ProductServiceImpl implements ProductService {
     @Autowired
     private ProductModifyHistoryDao productModifyHistoryDao;
 
-    @Autowired
-    private ReleaseProductByBatchService releaseProductByBatchService;
-
     @Autowired
     private GoodsHistoryService goodsHistoryService;
 
@@ -224,6 +221,9 @@ public class ProductServiceImpl implements ProductService {
     @Value("#{sys.productServiceIp}")
     private String productServiceIp;
 
+    @Autowired
+    private ProductPrivateService productPrivateService;
+
     private ConcurrentHashMap<String, Field> sortFields = new ConcurrentHashMap<String, Field>();
 
     @Override
@@ -295,7 +295,7 @@ public class ProductServiceImpl implements ProductService {
                 }
             }
             // 拿私有物料信息
-            ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+            ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
             if (null != productPrivate) {
                 product.setB2cEnabled(productPrivate.getB2cEnabled());
                 product.setBatchCount(productPrivate.getBatchCount());
@@ -570,7 +570,7 @@ public class ProductServiceImpl implements ProductService {
                 if (CollectionUtils.isNotEmpty(goodses)) {
                     goodsService.deleteGoods(goodses);
                 }
-                ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                 if (productPrivate == null) {
                     productPrivate = new ProductPrivate();
                     productPrivate.setPrId(product.getId());
@@ -648,7 +648,7 @@ public class ProductServiceImpl implements ProductService {
                     productMatchResultDao.delete(productMatchResultSet);
                     goodsService.deleteGoods(goodses);
                     //productDao.delete(product.getId());
-                    ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                    ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                     if (null == productPrivate) {
                         productPrivate = new ProductPrivate();
                         productPrivate.setPrId(product.getId());
@@ -1132,7 +1132,7 @@ public class ProductServiceImpl implements ProductService {
         if (standardProduct == null) {
             standardProduct = afterProduct;
         } else {
-            ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+            ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
             if (productPrivate == null) {
                 productPrivate = new ProductPrivate();
                 productPrivate.setPrId(product.getId());
@@ -1161,7 +1161,7 @@ public class ProductServiceImpl implements ProductService {
         }
         goodsHistoryDao.save(goodsHistoryList);
         Product beforeProduct = productDao.findOne(beforeId);
-        ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(beforeProduct.getId());
+        ProductPrivate productPrivate = productPrivateService.findByPrId(beforeProduct.getId());
         if (productPrivate == null) {
             productPrivate = new ProductPrivate();
             productPrivate.setPrId(beforeProduct.getId());
@@ -1236,7 +1236,7 @@ public class ProductServiceImpl implements ProductService {
             }
         }
         goodsDao.save(saveList);
-        ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+        ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
         if (productPrivate == null) {
             productPrivate = new ProductPrivate();
             productPrivate.setPrId(product.getId());
@@ -1387,7 +1387,7 @@ public class ProductServiceImpl implements ProductService {
                         product.setKinden(matchResult.getKinden());
                         product.setKindid(matchResult.getKindid());
                         List<Product> products = productDao.findProductByPcmpcodeAndPbrandenAndEnUUAndStandard(product.getPcmpcode(), product.getPbranden(), product.getEnUU(), IntegerConstant.YES_SHORT);
-                        ProductPrivate productPrivate = releaseProductByBatchService.findByPrId(product.getId());
+                        ProductPrivate productPrivate = productPrivateService.findByPrId(product.getId());
                         if (productPrivate == null) {
                             productPrivate = new ProductPrivate();
                             productPrivate.setPrId(product.getId());

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

@@ -16,12 +16,14 @@ import com.uas.platform.b2c.prod.commodity.constant.*;
 import com.uas.platform.b2c.prod.commodity.dao.*;
 import com.uas.platform.b2c.prod.commodity.model.*;
 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.ReleaseProductByBatchService;
 import com.uas.platform.b2c.prod.commodity.util.GoodsUtil;
 import com.uas.platform.b2c.prod.commodity.util.SheetUtil;
 import com.uas.platform.b2c.prod.product.brand.dao.BrandInfoDao;
 import com.uas.platform.b2c.prod.product.brand.modal.BrandInfo;
 import com.uas.platform.b2c.prod.product.common.service.CreateNumberService;
+import com.uas.platform.b2c.prod.product.common.service.impl.CreateNumberServiceImpl;
 import com.uas.platform.b2c.prod.product.kind.dao.KindInfoDao;
 import com.uas.platform.b2c.prod.product.kind.model.KindInfo;
 import com.uas.platform.b2c.prod.product.property.dao.PropertyDao;
@@ -30,6 +32,7 @@ import com.uas.platform.b2c.prod.store.model.StoreStatus;
 import com.uas.platform.b2c.prod.store.service.StoreInService;
 import com.uas.platform.b2c.trade.order.StringConstant.Currency;
 import com.uas.platform.b2c.trade.support.ResultMap;
+import com.uas.platform.b2c.trade.util.BoundedExecutor;
 import com.uas.platform.core.exception.IllegalOperatorException;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.CriterionExpression;
@@ -43,11 +46,9 @@ import org.apache.poi.hssf.usermodel.HSSFDateUtil;
 import org.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.dao.DataAccessException;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.StatementCallback;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
@@ -58,12 +59,11 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.math.BigDecimal;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -123,9 +123,18 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Autowired
 	private V_ProductPrivateDao v_productPrivateDao;
 
+	/**
+	 * 控制任务提交速度的线程池
+	 */
+	private final BoundedExecutor executor;
+
+	private final NamedParameterJdbcTemplate namedJdbcTemplate;
+
 	@Autowired
 	private BrandInfoDao brandInfoDao;
 
+	private final ProductPrivateService productPrivateService;
+
 	private static final String SIZE = "尺寸";
 	private static final String COLOR = "颜色";
 	private static final String THICKCOPPER = "铜厚";
@@ -134,6 +143,13 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 	@Value("#{sys.productServiceIp}")
 	private String productServiceIp;
 
+	public ReleaseProductByBatchServiceImpl(NamedParameterJdbcTemplate namedJdbcTemplate, ProductPrivateService productPrivateService) {
+		this.namedJdbcTemplate = namedJdbcTemplate;
+		this.productPrivateService = productPrivateService;
+		ExecutorService executorService = Executors.newCachedThreadPool();
+		executor = new BoundedExecutor(executorService, 1600);
+	}
+
     private final Logger logger = Logger.getLogger(getClass());
 
 	@Override
@@ -1670,141 +1686,89 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				releaseProductByBatchDao.findByRelbatchid(batch);
 		long l1 = System.currentTimeMillis();
 		System.err.println("l1 -------------------l " + (l1 - l));
-		List<Long> productIds = null;
-		List<ProductPrivate> productPrivateList = null;
-		if (!CollectionUtils.isEmpty(releaseProductByBatchList)) {
-			Map<String, Object> map = convertProduct(releaseProductByBatchList, false, isPcb);
-			long l2 = System.currentTimeMillis();
-			System.err.println("l2 -------------------l1 " + (l2 - l1));
-			List<com.uas.ps.entity.Product> products = (List<com.uas.ps.entity.Product>) map.get("products");
-			// TODO 什么接口
-			String result = restTemplate.postForEntity(productServiceIp + "/product/update", products, String.class).getBody();
-			long l3 = System.currentTimeMillis();
-			System.err.println("l3 -------------------l2 " + (l3 - l2));
-			productIds = JSON.parseArray(result, Long.class);
-			Set<Long> idSet = new HashSet<>(productIds);
-			List<ProductPrivate> productPrivates = new ArrayList<>();
-			for (Long prId : idSet) {
-				ProductPrivate productPrivate = findByPrId(prId);
-				if (null == productPrivate) {
-					productPrivate = new ProductPrivate();
-					productPrivate.setPrId(prId);
-				}
-				productPrivate.setB2cEnabled(IntegerConstant.YES_SHORT);
-				productPrivates.add(productPrivate);
-			}
-			productPrivateList = productPrivateDao.save(productPrivates);
-			long l4 = System.currentTimeMillis();
-			System.err.println("l4 -------------------l3 " + (l4 - l3));
-			//根据更新的规格信息,更新在售产品的信息
-			List<V_ProductPrivate> v_productPrivates = v_productPrivateDao.findProductInIdAndSpecIsNotNull(productIds);
-			long l5 = System.currentTimeMillis();
-			System.err.println("l5 -------------------l4 " + (l5 - l4));
-			List<Goods> goodses = goodsDao.findByProductIds(productIds);
-			long l6 = System.currentTimeMillis();
-			System.err.println("l6 -------------------l5 " + (l6 - l5));
-			goodsService.updateSpecByProducts(v_productPrivates, goodses);
-			long l7 = System.currentTimeMillis();
-			System.err.println("l7 -------------------l6 " + (l7 - l6));
-			if (isPcb) {
-				List<PCB> pcbList = new ArrayList<>();
-				List<PCBPropertyValue> propertyValueList = new ArrayList<>();
-
-				for (Long prId : idSet) {
-					Product product = productDao.findOne(prId);
-					if (product != null) {
-						List<PCB> pcbs = pcbDao.findByProductid(prId);
-						if (CollectionUtils.isEmpty(pcbs)) {
-							PCB pcb = new PCB();
-							pcb.setProductid(prId);
-							pcb.setBrandid(product.getPbrandid());
-							pcb.setKindid(product.getKindid());
-							pcb.setCreatetime(new Date());
-							pcbList.add(pcb);
-						}
-					}
-
-					List<PCBPropertyValue> propertyValues = (List<PCBPropertyValue>) map.get(product.getEnUU().toString().concat(product.getProdNum()));
-					if (CollectionUtils.isNotEmpty(propertyValues)) {
-						for (PCBPropertyValue propertyValue : propertyValues) {
-							propertyValue.setProductid(prId);
-							propertyValueList.add(propertyValue);
-						}
-					}
-				}
-
-				if (CollectionUtils.isNotEmpty(pcbList)) {
-					pcbDao.save(pcbList);
-				}
-				if (CollectionUtils.isNotEmpty(propertyValueList)) {
-					pcbPropertyvalueDao.save(propertyValueList);
-				}
-			}
+		if (CollectionUtils.isEmpty(releaseProductByBatchList)) {
+			return String.valueOf(IntegerConstant.NO_SHORT);
+		}
+		Map<String, Object> map = convertProduct(releaseProductByBatchList, false, isPcb);
+		long l2 = System.currentTimeMillis();
+		System.err.println("l2 -------------------l1 " + (l2 - l1));
+		List<com.uas.ps.entity.Product> products = (List<com.uas.ps.entity.Product>) map.get("products");
+		// TODO 什么接口
+		String result = restTemplate.postForEntity(productServiceIp + "/product/update", products, String.class).getBody();
+		long l3 = System.currentTimeMillis();
+		System.err.println("l3 -------------------l2 " + (l3 - l2));
+		List<Long> productIds = JSON.parseArray(result, Long.class);
+		Set<Long> idSet = new HashSet<>(productIds);
+		if (isPcb) {
+			savePcbInfo(idSet, map);
 		}
 		long l8 = System.currentTimeMillis();
 		Enterprise enterprise = SystemSession.getUser().getEnterprise();
-		final Object[] obj = new Object[]{enterprise.getUu(), enterprise.getEnName(), batch};
-		String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @enName = '%s'; set @batch = '%s'; call RELEASE_TO_GOODS_V3(@enuu, @enName, @batch, @out); select @out";
-		final String updateSql = String.format(sql, obj);
-		String num = jdbcTemplate.execute(new StatementCallback<String>() {
+        long l8 = System.currentTimeMillis();
+        Enterprise enterprise = SystemSession.getUser().getEnterprise();
+        final Object[] obj = new Object[]{enterprise.getUu(), enterprise.getEnName(), batch};
+        String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @enName = '%s'; set @batch = '%s'; call RELEASE_TO_GOODS_V3(@enuu, @enName, @batch, @out); select @out";
+        final String updateSql = String.format(sql, obj);
+        String num = jdbcTemplate.execute(new StatementCallback<String>() {
+
+            @Override
+            public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
+                stmt.executeUpdate(updateSql);
+                ResultSet rs = stmt.getResultSet();
+                if (null != rs) {
+                    rs.next();
+                    return rs.getString(1);
+                }
+                return "0";
+            }
+        });
+		long l9 = System.currentTimeMillis();
+		System.err.println("l9 -------------------l8 " + (l9 - l8));
+		afterPublishToGoodsDo(productIds);
+		return StringUtilB2C.getStr(num);
+	}
 
-			@Override
-			public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
-				stmt.executeUpdate(updateSql);
-				ResultSet rs = stmt.getResultSet();
-				if (null != rs) {
-					rs.next();
-					return rs.getString(1);
+	/**
+	 * 批量保存pcb的信息
+	 * @param idSet id
+	 */
+	public void savePcbInfo(Set<Long> idSet, Map<String, Object> map) {
+		if (idSet == null || idSet.size() < 1) {
+			return ;
+		}
+		List<PCB> pcbList = new ArrayList<>();
+		List<PCBPropertyValue> propertyValueList = new ArrayList<>();
+
+		for (Long prId : idSet) {
+			Product product = productDao.findOne(prId);
+			if (product != null) {
+				List<PCB> pcbs = pcbDao.findByProductid(prId);
+				if (CollectionUtils.isEmpty(pcbs)) {
+					PCB pcb = new PCB();
+					pcb.setProductid(prId);
+					pcb.setBrandid(product.getPbrandid());
+					pcb.setKindid(product.getKindid());
+					pcb.setCreatetime(new Date());
+					pcbList.add(pcb);
 				}
-				return "0";
 			}
-		});
-		long l9 = System.currentTimeMillis();
-		System.err.println("l9 -------------------l8 " + (l9 - l8));
-		if (null != productIds) {
-			for (ProductPrivate productPrivate : productPrivateList) {
-				// 统计现在有多少在售信息
-				int batchCount = goodsDao.findCountByProductid(productPrivate.getPrId());
-				productPrivate.setBatchCount(batchCount);
+
+			List<PCBPropertyValue> propertyValues = (List<PCBPropertyValue>) map.get(product.getEnUU().toString().concat(product.getProdNum()));
+			if (CollectionUtils.isNotEmpty(propertyValues)) {
+				for (PCBPropertyValue propertyValue : propertyValues) {
+					propertyValue.setProductid(prId);
+					propertyValueList.add(propertyValue);
+				}
 			}
-			productPrivateDao.save(productPrivateList);
 		}
-		long l10 = System.currentTimeMillis();
-		System.err.println("l10 -------------------l9 " + (l10 - l9));
-//		Enterprise enterprise = SystemSession.getUser().getEnterprise();
-//		final Object[] obj = new Object[]{enterprise.getUu(), enterprise.getEnName(), batch};
-//		String sql = "/*#mycat:db_type=master*/ set @enuu = %s; set @enName = '%s'; set @batch = '%s'; call RELEASE_TO_PRODUCT_V1(@enuu, @enName, @batch, @out); select @out";
-//		final String updateSql = String.format(sql, obj);
-//		String num = jdbcTemplate.execute(new StatementCallback<String>() {
-//
-//			@Override
-//			public String doInStatement(Statement stmt) throws SQLException, DataAccessException {
-//				stmt.executeQuery(updateSql);
-//				ResultSet rs = stmt.getResultSet();
-//				if (null != rs) {
-//					rs.next();
-//					return rs.getString(1);
-//				}
-//				return "0";
-//			}
-//		});
-//		if (!"0".equals(num)) {
-//			List<Goods> goodsList = goodsDao.findByBatchid(batch);
-//			Set<String> uuids = new HashSet<String>();
-//			for (Goods goods : goodsList) {
-//				if (goods.getUuid() != null) {
-//					uuids.add(goods.getUuid());
-////					goodsService.saveOrUpdatePriceInfos(goods, "NORMAL");
-//				}
-//			}
-//			// TODO 之后删除
-//			for (String uuid : uuids) {
-//				goodsService.updateComponentTradeInfos(uuid);
-//			}
-//		}
-		return StringUtilB2C.getStr(num);
-	}
 
+		if (CollectionUtils.isNotEmpty(pcbList)) {
+			pcbDao.save(pcbList);
+		}
+		if (CollectionUtils.isNotEmpty(propertyValueList)) {
+			pcbPropertyvalueDao.save(propertyValueList);
+		}
+	}
 
 	private  Map<String, Object> convertProduct (List<ReleaseProductByBatch> releaseProductByBatchList, boolean isAPerson , boolean isPcb) {
 		if (CollectionUtils.isEmpty(releaseProductByBatchList)) {
@@ -1824,7 +1788,13 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 			thickCopperProId = propertyDao.findIdByLabelCn(THICKCOPPER);
 			thickProId = propertyDao.findIdByLabelCn(THICK);
 		}
-
+		String importNum = createNumberService.getTimeNumber("trade$product_import_num", 8, releaseProductByBatchList.size());
+		if (StringUtils.isEmpty(importNum)) {
+			throw new IllegalOperatorException("生成批次号失败");
+		}
+		String time = importNum.substring(IntegerConstant.NO_SHORT, (IntegerConstant.TIME_LENGTH - 1));
+		Integer num = Integer.valueOf(importNum.substring(IntegerConstant.TIME_LENGTH));
+		String batchCode = null;
 		for (ReleaseProductByBatch releaseProductByBatch : releaseProductByBatchList) {
 		    if (releaseProductByBatch.getReleaseCode().equals(ReleaseStatus.failure.value()) ||
                     releaseProductByBatch.getReleaseCode().equals(ReleaseStatus.success.value())) {
@@ -1849,7 +1819,8 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 				product.setSpec(releaseProductByBatch.getSpec());
                 // 产品导入默认可销售
                 product.setIsSale((short) 1);
-                String batchCode = "PNUM" + createNumberService.getTimeNumber("trade$product_import_num", 8);
+
+                batchCode = "PNUM" + time + CreateNumberServiceImpl.formatIntToStr(num++, 8);
                 product.setCode(batchCode);
 
 				if (isPcb) {
@@ -1899,7 +1870,7 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
             List<ProductPrivate> productPrivates = new ArrayList<>();
 			Set<Long> idSet = new HashSet<>(productIds);
             for (Long prId : idSet) {
-                ProductPrivate productPrivate = findByPrId(prId);
+                ProductPrivate productPrivate = productPrivateService.findByPrId(prId);
                 if (null == productPrivate) {
                     productPrivate = new ProductPrivate();
 					productPrivate.setPrId(prId);
@@ -1934,14 +1905,60 @@ public class ReleaseProductByBatchServiceImpl implements ReleaseProductByBatchSe
 		return null;
 	}
 
-	@Override
-	public ProductPrivate findByPrId(Long prId) {
-		List<ProductPrivate> productPrivates = productPrivateDao.findByPrId(prId);
-		if (!CollectionUtils.isEmpty(productPrivates)) {
-			ProductPrivate productPrivate = productPrivates.get(0);
-			return productPrivate;
-		} else {
-			return null;
+	/**
+	 * 批量发布之后,需要做的事情,内部使用线程,不需要让用户等结果
+	 */
+	public void afterPublishToGoodsDo(final List<Long> productIds) {
+		if (CollectionUtils.isEmpty(productIds)) {
+			return ;
+		}
+		final Runnable afterPublishToGoodsRunnable = new Runnable() {
+			@Override
+			public void run() {
+				List<ProductPrivate> productPrivates = new ArrayList<ProductPrivate>();
+				List<ProductPrivate> privateList = productPrivateService.findByPrIds(productIds);
+				Boolean isExist = false;
+				ProductPrivate productPrivate = null;
+				int batchCount = 0;
+				Map<Long, Integer> goodsCountByProductId = goodsService.batchGetCountByProductId(productIds);
+				for (Long productId : productIds) {
+					isExist = false;
+					batchCount = 0;
+					if (goodsCountByProductId != null) {
+						batchCount = goodsCountByProductId.get(productId);
+					}
+					for (ProductPrivate productPri : privateList) {
+						if (productPri.getPrId().longValue() == productId.longValue()) {
+							isExist = true;
+							if ((productPri.getB2cEnabled() == null) || (productPri.getB2cEnabled().intValue() != IntegerConstant.YES_SHORT.intValue()) || (productPri.getBatchCount() == null) || (productPri.getBatchCount().intValue() != batchCount)) {
+								productPri.setB2cEnabled(IntegerConstant.YES_SHORT);
+								productPri.setBatchCount(batchCount);
+								productPrivates.add(productPri);
+							}
+						}
+					}
+					if (!isExist) {
+						productPrivate = new ProductPrivate();
+						productPrivate.setPrId(productId);
+						productPrivate.setBatchCount(batchCount);
+						productPrivate.setB2cEnabled(IntegerConstant.YES_SHORT);
+						productPrivates.add(productPrivate);
+					}
+				}
+				if (CollectionUtils.isNotEmpty(productPrivates)) {
+					productPrivateService.saveProductPrivate(productPrivates);
+				}
+
+				//根据更新的规格信息,更新在售产品的信息
+				List<V_ProductPrivate> v_productPrivates = v_productPrivateDao.findProductInIdAndSpecIsNotNull(productIds);
+				List<Goods> goodses = goodsDao.findByProductIds(productIds);
+				goodsService.updateSpecByProducts(v_productPrivates, goodses);
+			}
+		};
+		try {
+			executor.submitTask(afterPublishToGoodsRunnable);
+		} catch (InterruptedException e) {
+			e.printStackTrace();
 		}
 	}
 }

+ 1 - 1
src/main/java/com/uas/platform/b2c/prod/product/common/service/impl/CreateNumberServiceImpl.java

@@ -92,7 +92,7 @@ public class CreateNumberServiceImpl implements CreateNumberService {
 	 * @param digit
 	 *            返回的位数
 	 */
-	private static String formatIntToStr(int number, int digit) {
+	public static String formatIntToStr(int number, int digit) {
 		String format = "%0" + String.valueOf(digit) + "d";
 		return String.format(format, number);
 	}