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

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

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

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