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

Commit 21ebe7a4 authored by 张国柄's avatar 张国柄

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

parent 671ae42c
......@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class GoblinGoodsImportDto {
......@@ -13,8 +14,10 @@ public class GoblinGoodsImportDto {
private String spuName;
@ExcelProperty(value = "商品图片")
private String spuImgs;
private List<String> spuImgList;
@ExcelProperty(value = "商品规格")
private String skuSpec;
private List<GoblinGoodsSpecDto> skuSpecDtos;
@ExcelProperty(value = "规格编码")
private String skuCode;
@ExcelProperty(value = "价格")
......
......@@ -34,9 +34,9 @@ public class GoblinStoreMgtGoodsImportController {
@PostMapping("/upload")
@ApiOperation(value = "批量导入数据", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "File", name = "file", value = "文件", required = true),
@ApiImplicitParam(type = "form", dataType = "Integer", name = "dataType", value = "导入数据类型[1-商品数据]", example = "1"),
@ApiImplicitParam(type = "form", dataType = "String", name = "storeId", value = "店铺ID"),
@ApiImplicitParam(type = "form", required = true, dataType = "File", name = "file", value = "文件"),
@ApiImplicitParam(type = "form", required = true, dataType = "Integer", name = "dataType", value = "导入数据类型[1-商品数据]", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "storeId", value = "店铺ID"),
})
public ResponseDto<String> upload(@RequestParam MultipartFile file, @RequestParam int dataType,
@RequestParam @NotBlank(message = "店铺ID不能为空") String storeId) {
......@@ -51,12 +51,12 @@ public class GoblinStoreMgtGoodsImportController {
break;
case 2:
default:
return ResponseDto.failure(ErrorMapping.get("39001"));
return ResponseDto.failure(ErrorMapping.get("149001"));
}
} catch (LiquidnetServiceException e) {
return ResponseDto.failure(e.getMessage());
} catch (IOException e) {
log.error("店铺商品管理:批量导入数据:异常[UID={},dataType={},fileName={}]", currentUid, dataType, file.getOriginalFilename(), e);
log.warn("店铺商品管理:批量导入数据:异常[UID={},dataType={},fileName={}]", currentUid, dataType, file.getOriginalFilename(), e);
return ResponseDto.failure("数据错误,解析失败");
}
return ResponseDto.success();
......
......@@ -2,13 +2,12 @@ package com.liquidnet.service.goblin.service.impl.manage;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.dto.GoblinGoodsImportDto;
import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo;
......@@ -48,150 +47,324 @@ public class GoblinStoreMgtGoodsImportService {
* 长度:0,50
*/
public static final String ALPHABET_NUMBER_UNDER_50 = "^[a-zA-Z0-9]{0,50}$";
/**
* 大小字母 || 数字
* 长度: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 {
ArrayList<String> skuBarCodeTmpList = CollectionUtil.arrayListString();
ArrayList<GoblinGoodsInfoVo> goodsInfoVos = ObjectUtil.goblinGoodsInfoVoArrayList();
ArrayList<GoblinGoodsSkuInfoVo> goodsSkuInfoVos = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList();
LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr();
EasyExcel.read(file.getInputStream(), GoblinGoodsImportDto.class, new PageReadListener<GoblinGoodsImportDto>(dts -> {
if (CollectionUtils.isEmpty(dts)) {
throw new LiquidnetServiceException("-1", "无效操作,导入数据为空");
}
GoblinGoodsInfoVo lastGoodsInfoVo = null;
GoblinGoodsSkuInfoVo lastGoodsSkuInfoVo;
LocalDateTime now = LocalDateTime.now();
for (GoblinGoodsImportDto dt : dts) {
log.debug("dt1:{}", dt.toString());
if (StringUtils.isEmpty(dt.getSpuName()) || dt.getSpuName().length() > 100
|| StringUtils.isEmpty(dt.getSkuSpec())
|| null == dt.getPrice() || dt.getPrice().compareTo(BigDecimal.valueOf(0.01)) < 0 || dt.getPrice().compareTo(BigDecimal.valueOf(9999999)) > 0
|| null == dt.getStock() || dt.getStock() < 0 || dt.getStock() > 9999999
) {// 数据不规范停止解析并提示用户
throw new LiquidnetServiceException("-1", "数据内容不规范【请核实必填项信息】");
private void goodsInformationDataAnalysisProcessingValid(GoblinGoodsImportDto dto, List<String> skuBarCodeTmpList) {
/* 商品编码校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSpuCode()) && !Pattern.matches(ALPHABET_NUMBER_UNDER_50, dto.getSpuCode())) {
throw new LiquidnetServiceException("-1", "数据内容不规范【商品编码有误】");
}
/* 商品名称校验|------------------------------------------------------------------------------ */
if (StringUtils.isEmpty(dto.getSpuName()) || dto.getSpuName().length() > 100) {
throw new LiquidnetServiceException("-1", "数据内容不规范【商品名称超出长度限制】");
}
/* 商品图片校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSpuImgs())) {
if (dto.getSpuImgs().startsWith("【图片链接】")) {
String[] spuImgsArr = dto.getSpuImgs().replace("【图片链接】", "").replace(";", ";").split(";");
if (spuImgsArr.length > 15) {
throw new LiquidnetServiceException("-1", "数据内容不规范【商品图片最多支持15张】");
}
ArrayList<String> spuImgList = CollectionUtil.arrayListString();
for (String spuImg : spuImgsArr) {
if (StringUtils.isNotBlank(spuImg)) {
spuImgList.add(spuImg);
}
}
if (!CollectionUtils.isEmpty(spuImgList)) {
dto.setSpuImgList(spuImgList);
}
} else {
throw new LiquidnetServiceException("-1", "数据内容不规范【商品图片格式有误】");
}
}
/* 商品规格校验|------------------------------------------------------------------------------ */
if (StringUtils.isEmpty(dto.getSkuSpec())) {
throw new LiquidnetServiceException("-1", "数据内容不规范【商品规格信息缺失】");
}
String[] skuSpecArr = dto.getSkuSpec().replace(":", ":").replace(";", ";").split(";");
List<GoblinGoodsSpecDto> skuSpecDtos = ObjectUtil.getGoblinGoodsSpecDtoArrayList();
for (int i = 0, size = skuSpecArr.length; i < size; i++) {
String skuSpec = skuSpecArr[i];
if (StringUtils.isEmpty(skuSpec)) {
throw new LiquidnetServiceException("-1", "数据内容不规范【商品规格信息有误】");
}
String[] specArr = skuSpec.split(":");
if (ArrayUtils.isEmpty(specArr) || specArr.length != 2
|| specArr[0].length() > 5 || specArr[1].length() > 40
) {
throw new LiquidnetServiceException("-1", "数据内容不规范【商品规格信息有误】");
}
boolean tobeNextSpuFlg = false;
if (null == lastGoodsInfoVo || !lastGoodsInfoVo.getName().equals(dt.getSpuName())) {
lastGoodsInfoVo = GoblinGoodsInfoVo.getNew();
tobeNextSpuFlg = true;
GoblinGoodsSpecDto skuSpecDto = GoblinGoodsSpecDto.getNew();
skuSpecDto.setSpecName(specArr[0]);
skuSpecDto.setSpecVname(specArr[1]);
skuSpecDtos.add(skuSpecDto);
dto.setSkuSpecDtos(skuSpecDtos);
}
/* 规格编码校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSkuCode()) && !Pattern.matches(ALPHABET_NUMBER_UNDER_50, dto.getSkuCode())) {
throw new LiquidnetServiceException("-1", "数据内容不规范【规格编码格式有误】");
}
/* 价格校验|------------------------------------------------------------------------------ */
if (null == dto.getPrice() || dto.getPrice().compareTo(BigDecimal.valueOf(0.01)) < 0 || dto.getPrice().compareTo(BigDecimal.valueOf(9999999)) > 0) {
throw new LiquidnetServiceException("-1", "数据内容不规范【价格信息有误】");
}
/* 库存校验|------------------------------------------------------------------------------ */
if (null == dto.getStock() || dto.getStock() < 0 || dto.getStock() > 9999999) {// 数据不规范停止解析并提示用户
throw new LiquidnetServiceException("-1", "数据内容不规范【库存信息有误】");
}
/* 规格图片校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSkuImg())) {
if (dto.getSkuImg().startsWith("【图片链接】")) {
String[] skuImgArr = dto.getSkuImg().replace("【图片链接】", "").replace(";", ";").split(";");
if (skuImgArr.length == 1) {
dto.setSkuImg(StringUtils.isNotBlank(skuImgArr[0]) ? skuImgArr[0] : null);
} else {
throw new LiquidnetServiceException("-1", "数据内容不规范【规格图片仅支持1张】");
}
} else {
throw new LiquidnetServiceException("-1", "数据内容不规范【规格图片格式有误】");
}
}
/* 规格条码校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSkuBarCode())) {
if (Pattern.matches(ALPHABET_NUMBER_32, dto.getSkuBarCode())) {
if (skuBarCodeTmpList.contains(dto.getSkuBarCode())) {
throw new LiquidnetServiceException("-1", "数据内容不规范【表格内规格条码重复】");
}
skuBarCodeTmpList.add(dto.getSkuBarCode());
} else {
throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码格式有误】");
}
}
/* 校验|------------------------------------------------------------------------------ */
/* 校验|------------------------------------------------------------------------------ */
/* 校验|------------------------------------------------------------------------------ */
}
public void goodsInformationDataAnalysisProcessing(MultipartFile file, String uid, String storeId) throws IOException {
List<String> skuBarCodeTmpList = CollectionUtil.arrayListString();
List<GoblinGoodsInfoVo> goodsInfoVos = ObjectUtil.goblinGoodsInfoVoArrayList();
List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList();
LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr();
EasyExcel.read(file.getInputStream(), GoblinGoodsImportDto.class, new AnalysisEventListener<GoblinGoodsImportDto>() {
if (tobeNextSpuFlg) {
lastGoodsInfoVo.setName(dt.getSpuName());//*
if (StringUtils.isNotEmpty(dt.getSpuCode())) {
if (!Pattern.matches(ALPHABET_NUMBER_UNDER_50, dt.getSpuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【商品编码格式错误】");
lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2() + dt.getSpuCode());//*
} else {
lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2());//*
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
Integer approximateTotalRowNumber = context.readSheetHolder().getApproximateTotalRowNumber();
if (approximateTotalRowNumber > 501) {
log.warn("店铺商品管理:批量导入数据:异常[UID={},storeId={},totalRowNumber={}]", uid, storeId, approximateTotalRowNumber);
throw new LiquidnetServiceException("-1", "超出总行数限制500");
}
super.invokeHead(headMap, context);
}
// if (StringUtils.isNotEmpty(dt.getSpuBarCode())) {
// lastGoodsInfoVo.setSpuNo(dt.getSpuBarCode());//*
// } else {
lastGoodsInfoVo.setSpuNo(lastGoodsInfoVo.getSpuId());//*
// }
if (StringUtils.isNotEmpty(dt.getSpuImgs())) {
if (!dt.getSkuImg().startsWith("【图片链接】")) throw new LiquidnetServiceException("-1", "数据内容不规范【商品图片格式错误】");
String[] spuImgsArr = dt.getSpuImgs().replace("【图片链接】", "").replace(";", ";").split(";");
if (spuImgsArr.length > 15) throw new LiquidnetServiceException("-1", "数据内容不规范【商品图片最多支持15张】");
List<String> imageList = Arrays.asList(spuImgsArr);
lastGoodsInfoVo.setImageList(imageList);
lastGoodsInfoVo.setCoverPic(imageList.get(0));
@Override
public void invoke(GoblinGoodsImportDto dto, AnalysisContext analysisContext) {
goodsInformationDataAnalysisProcessingValid(dto, skuBarCodeTmpList);
GoblinGoodsInfoVo lastGoodsInfoVo = CollectionUtils.isEmpty(goodsInfoVos) ? null : goodsInfoVos.get(goodsInfoVos.size() - 1);
GoblinGoodsInfoVo goodsInfoVo = goodsInformationDataAnalysisProcessingForSpu(dto, lastGoodsInfoVo, uid, storeId,
LocalDateTime.now(), goodsSkuInfoVos, initGoodsSkuObjs);
if (null != goodsInfoVo) {
goodsInfoVos.add(goodsInfoVo);
}
}
lastGoodsInfoVo.setDetails(lastGoodsInfoVo.getName());
lastGoodsInfoVo.setSpuType(0);//*
lastGoodsInfoVo.setSpecMode("1");//*
lastGoodsInfoVo.setShelvesHandle("1");
lastGoodsInfoVo.setVirtualFlg("0");
lastGoodsInfoVo.setStatus("3");
lastGoodsInfoVo.setShelvesStatus("0");
lastGoodsInfoVo.setSpuAppear("0");//*
lastGoodsInfoVo.setSpuCanbuy("1");
lastGoodsInfoVo.setDelFlg("0");
lastGoodsInfoVo.setCreatedAt(now);
lastGoodsInfoVo.setCreatedBy(uid);//*
lastGoodsInfoVo.setStoreId(storeId);//*
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {// 解析完成...
log.debug("dt3-1:{}", 1);
log.debug("dt3-1:{}", JsonUtils.toJson(goodsInfoVos));
log.debug("dt3-2:{}", JsonUtils.toJson(goodsSkuInfoVos));
lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, true, goodsSkuInfoVos, initGoodsSkuObjs);
if (goblinMongoUtils.countMgtGoodsSkuBySkuNoList(storeId, skuBarCodeTmpList) > 0) {
throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码与已添加商品条码重复】");
}
goodsInfoVos.add(lastGoodsInfoVo);
} else {
lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, false, goodsSkuInfoVos, initGoodsSkuObjs);
}
if (null != lastGoodsSkuInfoVo && skuBarCodeTmpList.contains(lastGoodsSkuInfoVo.getSkuNo())) {
throw new LiquidnetServiceException("-1", "数据内容不规范【表格内规格条码重复】");
// goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos);
// goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos);
// goodsSkuInfoVos.forEach(r -> goblinRedisUtils.setSkuStock(null, r.getSkuId(), r.getSkuStock()));
//
// LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
// toMqSqls.add(SqlMapping.get("goblin_goods.insert"));
// LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
// goodsInfoVos.forEach(r -> initGoodsObjs.add(new Object[]{
// r.getSpuId(), r.getSpuNo(), r.getName(), r.getSubtitle(), r.getSellPrice(),
// r.getPriceGe(), r.getPriceLe(), r.getIntro(), r.getDetails(), r.getCoverPic(),
// r.getVideo(), r.getSpecMode(), r.getStoreId(), r.getCateFid(), r.getCateSid(),
// r.getCateTid(), r.getStoreCateFid(), r.getStoreCateSid(), r.getStoreCateTid(), r.getBrandId(),
// r.getShelvesHandle(), r.getShelvesTime(), r.getSpuValidity(), r.getVirtualFlg(), r.getStatus(),
// r.getShelvesStatus(), r.getSpuAppear(), r.getShelvesAt(), r.getCreatedBy(), r.getCreatedAt(),
// r.getLogisticsTemplate()
// }));
// toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
// queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs, initGoodsSkuObjs));
}
}
log.debug("dt2:{}", lastGoodsInfoVo);
}
log.debug("dt3-1:{}", JsonUtils.toJson(goodsInfoVos));
log.debug("dt3-2:{}", JsonUtils.toJson(goodsSkuInfoVos));
).sheet(0).doReadSync();
// EasyExcel.read(file.getInputStream(), GoblinGoodsImportDto.class, new PageReadListener<GoblinGoodsImportDto>(dts -> {
// GoblinGoodsInfoVo lastGoodsInfoVo = null;
// GoblinGoodsSkuInfoVo lastGoodsSkuInfoVo;
// LocalDateTime now = LocalDateTime.now();
// for (GoblinGoodsImportDto dt : dts) {
// log.debug("dt1:{}", dt.toString());
//
// boolean tobeNextSpuFlg = false;
// if (null == lastGoodsInfoVo || !lastGoodsInfoVo.getName().equals(dt.getSpuName())) {
// lastGoodsInfoVo = GoblinGoodsInfoVo.getNew();
// tobeNextSpuFlg = true;
// }
//
// if (tobeNextSpuFlg) {
// lastGoodsInfoVo.setName(dt.getSpuName());//*
// if (StringUtils.isNotEmpty(dt.getSpuCode())) {
// lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2() + dt.getSpuCode());//*
// } else {
// lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2());//*
// }
//// if (StringUtils.isNotEmpty(dt.getSpuBarCode())) {
//// lastGoodsInfoVo.setSpuNo(dt.getSpuBarCode());//*
//// } else {
// lastGoodsInfoVo.setSpuNo(lastGoodsInfoVo.getSpuId());//*
//// }
// if (!CollectionUtils.isEmpty(dt.getSpuImgList())) {
// lastGoodsInfoVo.setImageList(dt.getSpuImgList());
// lastGoodsInfoVo.setCoverPic(lastGoodsInfoVo.getImageList().get(0));
// }
//
// lastGoodsInfoVo.setDetails(lastGoodsInfoVo.getName());
// lastGoodsInfoVo.setSpuType(0);//*
// lastGoodsInfoVo.setSpecMode("1");//*
// lastGoodsInfoVo.setShelvesHandle("1");
// lastGoodsInfoVo.setVirtualFlg("0");
// lastGoodsInfoVo.setStatus("3");
// lastGoodsInfoVo.setShelvesStatus("0");
// lastGoodsInfoVo.setSpuAppear("0");//*
// lastGoodsInfoVo.setSpuCanbuy("1");
// lastGoodsInfoVo.setDelFlg("0");
// lastGoodsInfoVo.setCreatedAt(now);
// lastGoodsInfoVo.setCreatedBy(uid);//*
// lastGoodsInfoVo.setStoreId(storeId);//*
//
// lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, true, goodsSkuInfoVos, initGoodsSkuObjs);
//
// goodsInfoVos.add(lastGoodsInfoVo);
// } else {
// lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, false, goodsSkuInfoVos, initGoodsSkuObjs);
// }
//// log.debug("dt2:{}", lastGoodsInfoVo);
// }
// log.debug("dt3-1:{}", 1);
//// log.debug("dt3-1:{}", JsonUtils.toJson(goodsInfoVos));
//// log.debug("dt3-2:{}", JsonUtils.toJson(goodsSkuInfoVos));
//
//// if (goblinMongoUtils.countMgtGoodsSkuBySkuNoList(storeId, skuBarCodeTmpList) > 0) {
//// throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码与已添加商品条码重复】");
//// }
////
//// goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos);
//// goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos);
//// goodsSkuInfoVos.forEach(r -> goblinRedisUtils.setSkuStock(null, r.getSkuId(), r.getSkuStock()));
////
//// LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
//// toMqSqls.add(SqlMapping.get("goblin_goods.insert"));
//// LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
//// goodsInfoVos.forEach(r -> initGoodsObjs.add(new Object[]{
//// r.getSpuId(), r.getSpuNo(), r.getName(), r.getSubtitle(), r.getSellPrice(),
//// r.getPriceGe(), r.getPriceLe(), r.getIntro(), r.getDetails(), r.getCoverPic(),
//// r.getVideo(), r.getSpecMode(), r.getStoreId(), r.getCateFid(), r.getCateSid(),
//// r.getCateTid(), r.getStoreCateFid(), r.getStoreCateSid(), r.getStoreCateTid(), r.getBrandId(),
//// r.getShelvesHandle(), r.getShelvesTime(), r.getSpuValidity(), r.getVirtualFlg(), r.getStatus(),
//// r.getShelvesStatus(), r.getSpuAppear(), r.getShelvesAt(), r.getCreatedBy(), r.getCreatedAt(),
//// r.getLogisticsTemplate()
//// }));
//// toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
//// queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs, initGoodsSkuObjs));
// }) {
//
// @Override
// public void invoke(GoblinGoodsImportDto dto, AnalysisContext context) {
// super.invoke(dto, context);
// }
// }).sheet().doReadSync();
}
private GoblinGoodsInfoVo goodsInformationDataAnalysisProcessingForSpu(GoblinGoodsImportDto dt,GoblinGoodsInfoVo lastGoodsInfoVo,
String uid, String storeId, LocalDateTime now,
List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos, LinkedList<Object[]> initGoodsSkuObjs) {
log.debug("dt1:{}", dt.toString());
if (goblinMongoUtils.countMgtGoodsSkuBySkuNoList(storeId, skuBarCodeTmpList) > 0) {
throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码与已添加商品条码重复】");
boolean tobeNextSpuFlg = false;
if (null == lastGoodsInfoVo || !lastGoodsInfoVo.getName().equals(dt.getSpuName())) {
lastGoodsInfoVo = GoblinGoodsInfoVo.getNew();
tobeNextSpuFlg = true;
}
GoblinGoodsSkuInfoVo skuInfoVo;
if (tobeNextSpuFlg) {
lastGoodsInfoVo.setName(dt.getSpuName());//*
if (StringUtils.isNotEmpty(dt.getSpuCode())) {
lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2() + dt.getSpuCode());//*
} else {
lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2());//*
}
// if (StringUtils.isNotEmpty(dt.getSpuBarCode())) {
// lastGoodsInfoVo.setSpuNo(dt.getSpuBarCode());//*
// } else {
lastGoodsInfoVo.setSpuNo(lastGoodsInfoVo.getSpuId());//*
// }
if (!CollectionUtils.isEmpty(dt.getSpuImgList())) {
lastGoodsInfoVo.setImageList(dt.getSpuImgList());
lastGoodsInfoVo.setCoverPic(lastGoodsInfoVo.getImageList().get(0));
}
goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos);
goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos);
goodsSkuInfoVos.forEach(r -> goblinRedisUtils.setSkuStock(null, r.getSkuId(), r.getSkuStock()));
lastGoodsInfoVo.setDetails(lastGoodsInfoVo.getName());
lastGoodsInfoVo.setSpuType(0);//*
lastGoodsInfoVo.setSpecMode("1");//*
lastGoodsInfoVo.setShelvesHandle("1");
lastGoodsInfoVo.setVirtualFlg("0");
lastGoodsInfoVo.setStatus("3");
lastGoodsInfoVo.setShelvesStatus("0");
lastGoodsInfoVo.setSpuAppear("0");//*
lastGoodsInfoVo.setSpuCanbuy("1");
lastGoodsInfoVo.setDelFlg("0");
lastGoodsInfoVo.setCreatedAt(now);
lastGoodsInfoVo.setCreatedBy(uid);//*
lastGoodsInfoVo.setStoreId(storeId);//*
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_goods.insert"));
LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
goodsInfoVos.forEach(r -> initGoodsObjs.add(new Object[]{
r.getSpuId(), r.getSpuNo(), r.getName(), r.getSubtitle(), r.getSellPrice(),
r.getPriceGe(), r.getPriceLe(), r.getIntro(), r.getDetails(), r.getCoverPic(),
r.getVideo(), r.getSpecMode(), r.getStoreId(), r.getCateFid(), r.getCateSid(),
r.getCateTid(), r.getStoreCateFid(), r.getStoreCateSid(), r.getStoreCateTid(), r.getBrandId(),
r.getShelvesHandle(), r.getShelvesTime(), r.getSpuValidity(), r.getVirtualFlg(), r.getStatus(),
r.getShelvesStatus(), r.getSpuAppear(), r.getShelvesAt(), r.getCreatedBy(), r.getCreatedAt(),
r.getLogisticsTemplate()
}));
toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs, initGoodsSkuObjs));
}) {
@Override
public void invoke(GoblinGoodsImportDto data, AnalysisContext context) {
Integer approximateTotalRowNumber = context.readSheetHolder().getApproximateTotalRowNumber();
if (approximateTotalRowNumber > 501) {
log.error("店铺商品管理:批量导入数据:异常[UID={},storeId={},totalRowNumber={}]", uid, storeId, approximateTotalRowNumber);
throw new LiquidnetServiceException("-1", "超出总行数限制500");
}
super.invoke(data, context);
}
}).sheet().doReadSync();
skuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, true);
} else {
skuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, false);
}
goodsSkuInfoVos.add(skuInfoVo);
initGoodsSkuObjs.add(new Object[]{
skuInfoVo.getSkuId(), skuInfoVo.getSpuId(), skuInfoVo.getSkuNo(), skuInfoVo.getName(), skuInfoVo.getSubtitle(),
skuInfoVo.getSellPrice(), skuInfoVo.getSkuPic(), skuInfoVo.getSkuIsbn(), skuInfoVo.getStock(), skuInfoVo.getSkuStock(),
skuInfoVo.getWarningStock(), skuInfoVo.getPrice(), skuInfoVo.getPriceMember(), skuInfoVo.getWeight(), skuInfoVo.getBuyFactor(),
skuInfoVo.getBuyRoster(), skuInfoVo.getBuyLimit(), skuInfoVo.getStoreId(), skuInfoVo.getSkuValidity(), skuInfoVo.getVirtualFlg(),
skuInfoVo.getStatus(), skuInfoVo.getShelvesStatus(), skuInfoVo.getSkuAppear(), skuInfoVo.getShelvesAt(), uid,
now, skuInfoVo.getLogisticsTemplate()
});
log.debug("dt2:{}", lastGoodsInfoVo);
return tobeNextSpuFlg ? lastGoodsInfoVo : null;
}
private GoblinGoodsSkuInfoVo goodsInformationDataAnalysisProcessingForSku(GoblinGoodsImportDto dt, GoblinGoodsInfoVo lastGoodsInfoVo,
String uid, String storeId, LocalDateTime now, boolean hasNextSpuFlg,
List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos, LinkedList<Object[]> initGoodsSkuObjs) {
String uid, String storeId, LocalDateTime now, boolean hasNextSpuFlg) {
GoblinGoodsSkuInfoVo skuInfoVo = GoblinGoodsSkuInfoVo.getNew();
skuInfoVo.setName("");
String[] skuSpecArr = dt.getSkuSpec().replace(":", ":").replace(";", ";").split(";");
List<GoblinGoodsSpecDto> skuSpecDtos = dt.getSkuSpecDtos();
List<GoblinGoodsSpecVo> spuSpecVos = hasNextSpuFlg ? ObjectUtil.getGoblinGoodsSpecVoArrayList() : lastGoodsInfoVo.getSpecVoList();
List<GoblinGoodsSpecDto> skuSpecDtos = ObjectUtil.getGoblinGoodsSpecDtoArrayList();
for (int i = 0, size = skuSpecArr.length; i < size; i++) {
String skuSpec = skuSpecArr[i];
if (StringUtils.isEmpty(skuSpec)) {// 数据不规范停止解析并提示用户
throw new LiquidnetServiceException("-1", "数据内容不规范【请核实商品规格信息】");
}
String[] specArr = skuSpec.split(":");
if (ArrayUtils.isEmpty(specArr) || specArr.length != 2
|| specArr[0].length() > 5 || specArr[1].length() > 40
) {// 数据不规范停止解析并提示用户
throw new LiquidnetServiceException("-1", "数据内容不规范【请核实商品规格信息】");
}
GoblinGoodsSpecDto skuSpecDto = GoblinGoodsSpecDto.getNew();
skuSpecDto.setSpecName(specArr[0]);
skuSpecDto.setSpecVname(specArr[1]);
skuSpecDtos.add(skuSpecDto);
for (int i = 0, size = skuSpecDtos.size(); i < size; i++) {
GoblinGoodsSpecDto skuSpecDto = skuSpecDtos.get(i);
skuInfoVo.setName(skuInfoVo.getName().concat(skuSpecDto.getSpecVname()));
......@@ -224,21 +397,16 @@ public class GoblinStoreMgtGoodsImportService {
skuInfoVo.setPrice(dt.getPrice());//*
skuInfoVo.setPriceMember(dt.getPrice());//*
if (StringUtils.isNotEmpty(dt.getSkuCode())) {
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)));//*
} else {
skuInfoVo.setSkuId(lastGoodsInfoVo.getSpuId().concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));//*
}
if (StringUtils.isNotEmpty(dt.getSkuImg())) {
if (!dt.getSkuImg().startsWith("【图片链接】")) throw new LiquidnetServiceException("-1", "数据内容不规范【规格图片格式错误】");
String[] skuImgArr = dt.getSkuImg().replace("【图片链接】", "").replace(";", ";").split(";");
if (skuImgArr.length > 1) throw new LiquidnetServiceException("-1", "数据内容不规范【规格图片仅支持1张】");
skuInfoVo.setSkuPic(skuImgArr[0]);
skuInfoVo.setSkuPic(dt.getSkuImg());
} else {
// skuInfoVo.setSkuPic("");// 设置默认图片
}
if (StringUtils.isNotEmpty(dt.getSkuBarCode())) {
if (!Pattern.matches(ALPHABET_NUMBER_32, dt.getSkuCode())) throw new LiquidnetServiceException("-1", "数据内容不规范【规格条码格式错误】");
skuInfoVo.setSkuNo(dt.getSkuBarCode());//*
} else {
skuInfoVo.setSkuNo(lastGoodsInfoVo.getSpuNo());//*
......@@ -259,16 +427,6 @@ public class GoblinStoreMgtGoodsImportService {
skuInfoVo.setStoreId(storeId);
skuInfoVo.setSkuSpecList(skuSpecDtos);
goodsSkuInfoVos.add(skuInfoVo);
initGoodsSkuObjs.add(new Object[]{
skuInfoVo.getSkuId(), skuInfoVo.getSpuId(), skuInfoVo.getSkuNo(), skuInfoVo.getName(), skuInfoVo.getSubtitle(),
skuInfoVo.getSellPrice(), skuInfoVo.getSkuPic(), skuInfoVo.getSkuIsbn(), skuInfoVo.getStock(), skuInfoVo.getSkuStock(),
skuInfoVo.getWarningStock(), skuInfoVo.getPrice(), skuInfoVo.getPriceMember(), skuInfoVo.getWeight(), skuInfoVo.getBuyFactor(),
skuInfoVo.getBuyRoster(), skuInfoVo.getBuyLimit(), skuInfoVo.getStoreId(), skuInfoVo.getSkuValidity(), skuInfoVo.getVirtualFlg(),
skuInfoVo.getStatus(), skuInfoVo.getShelvesStatus(), skuInfoVo.getSkuAppear(), skuInfoVo.getShelvesAt(), uid,
now, skuInfoVo.getLogisticsTemplate()
});
if (hasNextSpuFlg) {
List<String> skuIdList = CollectionUtil.arrayListString();
skuIdList.add(skuInfoVo.getSkuId());
......
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