记得上下班打卡 | git大法好,push需谨慎

Commit 671ae42c authored by 张国柄's avatar 张国柄

~api:店铺商品管理:批量导入数据;

parent 067636dd
...@@ -24,6 +24,7 @@ import org.apache.commons.lang3.ArrayUtils; ...@@ -24,6 +24,7 @@ import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
...@@ -54,11 +55,16 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -54,11 +55,16 @@ public class GoblinStoreMgtGoodsImportService {
public static final String ALPHABET_NUMBER_32 = "^[a-zA-Z0-9]{0,32}$"; public static final String ALPHABET_NUMBER_32 = "^[a-zA-Z0-9]{0,32}$";
public void goodsInformationDataAnalysisProcessing(MultipartFile file, String uid, String storeId) throws IOException { public void goodsInformationDataAnalysisProcessing(MultipartFile file, String uid, String storeId) throws IOException {
ArrayList<String> skuBarCodeTmpList = CollectionUtil.arrayListString();
ArrayList<GoblinGoodsInfoVo> goodsInfoVos = ObjectUtil.goblinGoodsInfoVoArrayList(); ArrayList<GoblinGoodsInfoVo> goodsInfoVos = ObjectUtil.goblinGoodsInfoVoArrayList();
ArrayList<GoblinGoodsSkuInfoVo> goodsSkuInfoVos = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList(); ArrayList<GoblinGoodsSkuInfoVo> goodsSkuInfoVos = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList();
LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr();
EasyExcel.read(file.getInputStream(), GoblinGoodsImportDto.class, new PageReadListener<GoblinGoodsImportDto>(dts -> { EasyExcel.read(file.getInputStream(), GoblinGoodsImportDto.class, new PageReadListener<GoblinGoodsImportDto>(dts -> {
if (CollectionUtils.isEmpty(dts)) {
throw new LiquidnetServiceException("-1", "无效操作,导入数据为空");
}
GoblinGoodsInfoVo lastGoodsInfoVo = null; GoblinGoodsInfoVo lastGoodsInfoVo = null;
GoblinGoodsSkuInfoVo lastGoodsSkuInfoVo;
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
for (GoblinGoodsImportDto dt : dts) { for (GoblinGoodsImportDto dt : dts) {
log.debug("dt1:{}", dt.toString()); log.debug("dt1:{}", dt.toString());
...@@ -79,7 +85,7 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -79,7 +85,7 @@ public class GoblinStoreMgtGoodsImportService {
if (tobeNextSpuFlg) { if (tobeNextSpuFlg) {
lastGoodsInfoVo.setName(dt.getSpuName());//* lastGoodsInfoVo.setName(dt.getSpuName());//*
if (StringUtils.isNotEmpty(dt.getSpuCode())) { if (StringUtils.isNotEmpty(dt.getSpuCode())) {
if (Pattern.matches(ALPHABET_NUMBER_UNDER_50, dt.getSpuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【商品编码格式错误】"); if (!Pattern.matches(ALPHABET_NUMBER_UNDER_50, dt.getSpuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【商品编码格式错误】");
lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2() + dt.getSpuCode());//* lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2() + dt.getSpuCode());//*
} else { } else {
lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2());//* lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2());//*
...@@ -112,17 +118,24 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -112,17 +118,24 @@ public class GoblinStoreMgtGoodsImportService {
lastGoodsInfoVo.setCreatedBy(uid);//* lastGoodsInfoVo.setCreatedBy(uid);//*
lastGoodsInfoVo.setStoreId(storeId);//* lastGoodsInfoVo.setStoreId(storeId);//*
this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, true, goodsSkuInfoVos, initGoodsSkuObjs); lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, true, goodsSkuInfoVos, initGoodsSkuObjs);
goodsInfoVos.add(lastGoodsInfoVo); goodsInfoVos.add(lastGoodsInfoVo);
} else { } else {
this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, false, goodsSkuInfoVos, initGoodsSkuObjs); lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, false, goodsSkuInfoVos, initGoodsSkuObjs);
}
if (null != lastGoodsSkuInfoVo && skuBarCodeTmpList.contains(lastGoodsSkuInfoVo.getSkuNo())) {
throw new LiquidnetServiceException("-1", "数据内容不规范【表格内规格条码重复】");
} }
log.debug("dt2:{}", lastGoodsInfoVo); log.debug("dt2:{}", lastGoodsInfoVo);
} }
log.debug("dt3-1:{}", JsonUtils.toJson(goodsInfoVos)); log.debug("dt3-1:{}", JsonUtils.toJson(goodsInfoVos));
log.debug("dt3-2:{}", JsonUtils.toJson(goodsSkuInfoVos)); log.debug("dt3-2:{}", JsonUtils.toJson(goodsSkuInfoVos));
if (goblinMongoUtils.countMgtGoodsSkuBySkuNoList(storeId, skuBarCodeTmpList) > 0) {
throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码与已添加商品条码重复】");
}
goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos); goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos);
goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos); goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos);
goodsSkuInfoVos.forEach(r -> goblinRedisUtils.setSkuStock(null, r.getSkuId(), r.getSkuStock())); goodsSkuInfoVos.forEach(r -> goblinRedisUtils.setSkuStock(null, r.getSkuId(), r.getSkuStock()));
...@@ -154,7 +167,7 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -154,7 +167,7 @@ public class GoblinStoreMgtGoodsImportService {
}).sheet().doReadSync(); }).sheet().doReadSync();
} }
private void goodsInformationDataAnalysisProcessingForSku(GoblinGoodsImportDto dt, GoblinGoodsInfoVo lastGoodsInfoVo, private GoblinGoodsSkuInfoVo goodsInformationDataAnalysisProcessingForSku(GoblinGoodsImportDto dt, GoblinGoodsInfoVo lastGoodsInfoVo,
String uid, String storeId, LocalDateTime now, boolean hasNextSpuFlg, String uid, String storeId, LocalDateTime now, boolean hasNextSpuFlg,
List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos, LinkedList<Object[]> initGoodsSkuObjs) { List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos, LinkedList<Object[]> initGoodsSkuObjs) {
GoblinGoodsSkuInfoVo skuInfoVo = GoblinGoodsSkuInfoVo.getNew(); GoblinGoodsSkuInfoVo skuInfoVo = GoblinGoodsSkuInfoVo.getNew();
...@@ -201,7 +214,7 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -201,7 +214,7 @@ public class GoblinStoreMgtGoodsImportService {
spuSpecVo.setSpecValues(spuSpecValueVos); spuSpecVo.setSpecValues(spuSpecValueVos);
} }
} else {// 不匹配的规格直接跳过(默认只匹配商品第一行数据中的规格项) } else {// 不匹配的规格直接跳过(默认只匹配商品第一行数据中的规格项)
return; return null;
} }
} }
} }
...@@ -211,7 +224,7 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -211,7 +224,7 @@ public class GoblinStoreMgtGoodsImportService {
skuInfoVo.setPrice(dt.getPrice());//* skuInfoVo.setPrice(dt.getPrice());//*
skuInfoVo.setPriceMember(dt.getPrice());//* skuInfoVo.setPriceMember(dt.getPrice());//*
if (StringUtils.isNotEmpty(dt.getSkuCode())) { if (StringUtils.isNotEmpty(dt.getSkuCode())) {
if (Pattern.matches(ALPHABET_NUMBER_UNDER_50, dt.getSkuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【规格编码格式错误】"); if (!Pattern.matches(ALPHABET_NUMBER_UNDER_50, dt.getSkuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【规格编码格式错误】");
skuInfoVo.setSkuId(lastGoodsInfoVo.getSpuId().concat(dt.getSkuCode()).concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));//* skuInfoVo.setSkuId(lastGoodsInfoVo.getSpuId().concat(dt.getSkuCode()).concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));//*
} else { } else {
skuInfoVo.setSkuId(lastGoodsInfoVo.getSpuId().concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));//* skuInfoVo.setSkuId(lastGoodsInfoVo.getSpuId().concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));//*
...@@ -225,7 +238,7 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -225,7 +238,7 @@ public class GoblinStoreMgtGoodsImportService {
// skuInfoVo.setSkuPic("");// 设置默认图片 // skuInfoVo.setSkuPic("");// 设置默认图片
} }
if (StringUtils.isNotEmpty(dt.getSkuBarCode())) { if (StringUtils.isNotEmpty(dt.getSkuBarCode())) {
if (Pattern.matches(ALPHABET_NUMBER_32, dt.getSkuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码格式错误】"); if (!Pattern.matches(ALPHABET_NUMBER_32, dt.getSkuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码格式错误】");
skuInfoVo.setSkuNo(dt.getSkuBarCode());//* skuInfoVo.setSkuNo(dt.getSkuBarCode());//*
} else { } else {
skuInfoVo.setSkuNo(lastGoodsInfoVo.getSpuNo());//* skuInfoVo.setSkuNo(lastGoodsInfoVo.getSpuNo());//*
...@@ -275,5 +288,6 @@ public class GoblinStoreMgtGoodsImportService { ...@@ -275,5 +288,6 @@ public class GoblinStoreMgtGoodsImportService {
lastGoodsInfoVo.setPriceGe(skuInfoVo.getPrice().compareTo(priceGe) < 0 ? skuInfoVo.getPrice() : priceGe); lastGoodsInfoVo.setPriceGe(skuInfoVo.getPrice().compareTo(priceGe) < 0 ? skuInfoVo.getPrice() : priceGe);
lastGoodsInfoVo.setPriceLe(priceLe.compareTo(skuInfoVo.getPrice()) < 0 ? skuInfoVo.getPrice() : priceLe); lastGoodsInfoVo.setPriceLe(priceLe.compareTo(skuInfoVo.getPrice()) < 0 ? skuInfoVo.getPrice() : priceLe);
} }
return skuInfoVo;
} }
} }
...@@ -840,6 +840,12 @@ public class GoblinMongoUtils { ...@@ -840,6 +840,12 @@ public class GoblinMongoUtils {
return pagedResult.setList(list).setTotal(count, pageSize); return pagedResult.setList(list).setTotal(count, pageSize);
} }
// 根据sku条码获取sku总数
public long countMgtGoodsSkuBySkuNoList(String storeId, List<String> skuNoList) {
return mongoTemplate.count(Query.query(Criteria.where("delFlg").is("0").and("storeId").is(storeId).and("skuNo").in(skuNoList)),
GoblinMixDetailsVo.class, GoblinMixDetailsVo.class.getSimpleName());
}
// SKU信息 // SKU信息
public GoblinGoodsSkuInfoVo getGoodsSkuInfoVo(String skuId) { public GoblinGoodsSkuInfoVo getGoodsSkuInfoVo(String skuId) {
// return mongoTemplate.findOne(Query.query(Criteria.where("skuId").is(skuId).and("delFlg").is("0").and("shelvesStatus").is("3")), // return mongoTemplate.findOne(Query.query(Criteria.where("skuId").is(skuId).and("delFlg").is("0").and("shelvesStatus").is("3")),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment