|
|
@@ -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();
|
|
|
}
|
|
|
}
|
|
|
}
|