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

Commit 04771566 authored by 张国柄's avatar 张国柄

Merge remote-tracking branch 'origin/dev_221107_zgb_goods_import' into dev_221101ZGB01

# Conflicts:
#	liquidnet-bus-service/liquidnet-service-goblin/liquidnet-service-goblin-impl/docu/db_ln_goblin_initialdata.sql
parents cddbb989 9f349e3f
package com.liquidnet.service.goblin.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class GoblinGoodsImportDto {
@ExcelProperty(value = "商品编码", index = 0)
private String spuCode;
@ExcelProperty(value = "商品名称", index = 1)
private String spuName;
@ExcelProperty(value = "商品图片", index = 2)
private String spuImgs;
private List<String> spuImgList;//
@ExcelProperty(value = "商品规格", index = 3)
private String skuSpec;
private List<GoblinGoodsSpecDto> skuSpecDtos;//
@ExcelProperty(value = "规格编码", index = 4)
private String skuCode;
@ExcelProperty(value = "价格", index = 5)
private BigDecimal price;
@ExcelProperty(value = "库存", index = 6)
private Integer stock;
@ExcelProperty(value = "规格图片", index = 7)
private String skuImg;
@ExcelProperty(value = "规格条码", index = 8)
private String skuBarCode;
// @ExcelProperty(value = "商品条码")
// private String spuBarCode;
private String failureReason;//
}
...@@ -22,8 +22,12 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable { ...@@ -22,8 +22,12 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable {
private String storeId; private String storeId;
@ApiModelProperty(position = 11, value = "商品ID[64]") @ApiModelProperty(position = 11, value = "商品ID[64]")
private String spuId; private String spuId;
@ApiModelProperty(position = 12, value = "商品编码[默认为系统编码,也可手动输入商家自己的编码]") @ApiModelProperty(position = 12, value = "商品编码[50]默认为系统编码,也可手动输入商家自己的编码")
private String spuNo; private String spuNo;
@ApiModelProperty(position = 12, value = "商品条码[32]")
private String spuBarCode;
@ApiModelProperty(position = 12, value = "ERP商品编码[64]")
private String spuErpCode;
@ApiModelProperty(position = 12, value = "商品类型[0-常规|1-数字藏品]") @ApiModelProperty(position = 12, value = "商品类型[0-常规|1-数字藏品]")
private int spuType; private int spuType;
@ApiModelProperty(position = 13, value = "商品名称[100]") @ApiModelProperty(position = 13, value = "商品名称[100]")
......
...@@ -23,8 +23,12 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable { ...@@ -23,8 +23,12 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable {
private String skuId; private String skuId;
@ApiModelProperty(position = 11, value = "商品ID[64]") @ApiModelProperty(position = 11, value = "商品ID[64]")
private String spuId; private String spuId;
@ApiModelProperty(position = 12, value = "单品的编号[45]") @ApiModelProperty(position = 12, value = "单品的条码[50]默认为系统编码,也可手动输入商家自己的编码")
private String skuNo; private String skuNo;
@ApiModelProperty(position = 12, value = "单品条码[32]")
private String skuBarCode;
@ApiModelProperty(position = 12, value = "ERP单品编码[64]")
private String skuErpCode;
@ApiModelProperty(position = 12, value = "商品类型[0-常规|1-数字藏品]") @ApiModelProperty(position = 12, value = "商品类型[0-常规|1-数字藏品]")
private int skuType; private int skuType;
@ApiModelProperty(position = 13, value = "单品的名称[100]") @ApiModelProperty(position = 13, value = "单品的名称[100]")
......
...@@ -35,6 +35,16 @@ public class GoblinGoods implements Serializable { ...@@ -35,6 +35,16 @@ public class GoblinGoods implements Serializable {
*/ */
private String spuNo; private String spuNo;
/**
* 商品条码
*/
private String spuBarCode;
/**
* ERP商品编码
*/
private String spuErpCode;
/** /**
* 商品类型[0-常规|1-数字藏品] * 商品类型[0-常规|1-数字藏品]
*/ */
......
...@@ -28,10 +28,20 @@ public class GoblinGoodsSku implements Serializable { ...@@ -28,10 +28,20 @@ public class GoblinGoodsSku implements Serializable {
private String spuId; private String spuId;
/** /**
* 单品的编号 * 单品编码
*/ */
private String skuNo; private String skuNo;
/**
* 单品条码
*/
private String skuBarCode;
/**
* ERP单品编码
*/
private String skuErpCode;
/** /**
* 商品类型[0-常规|1-数字藏品] * 商品类型[0-常规|1-数字藏品]
*/ */
......
...@@ -1198,6 +1198,14 @@ create table goblin_goods_anticipate_mix ...@@ -1198,6 +1198,14 @@ create table goblin_goods_anticipate_mix
state int(1) default 0 not null comment '状态(0:正常(默认))', state int(1) default 0 not null comment '状态(0:正常(默认))',
created_date datetime null comment '创建时间' created_date datetime null comment '创建时间'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci comment '用户mix预约记录'; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci comment '用户mix预约记录';
# -- >>------------------------------------------------------------------------------------ |20221110商品导入扫码
alter table goblin_goods modify spu_no varchar(64) not null comment '商品编码';
alter table goblin_goods add spu_bar_code varchar(64) null comment '商品条码' after spu_no;
alter table goblin_goods add spu_erp_code varchar(64) null comment 'ERP商品编码' after spu_bar_code;
alter table goblin_goods_sku modify sku_no varchar(64) not null comment '单品编码';
alter table goblin_goods_sku add sku_bar_code varchar(64) null comment '单品条码' after sku_no;
alter table goblin_goods_sku add sku_erp_code varchar(64) null comment 'ERP单品编码' after sku_bar_code;
# -- >>------------------------------------------------------------------------------------ # -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------ # -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------ # -- >>------------------------------------------------------------------------------------
......
package com.liquidnet.service.goblin.controller.manage;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.service.impl.manage.GoblinStoreMgtGoodsImportService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
@Api(tags = "店铺商品管理")
@Slf4j
@RestController
@RequestMapping("store/mgt/goods")
public class GoblinStoreMgtGoodsImportController {
@Autowired
GoblinRedisUtils goblinRedisUtils;
@Autowired
private GoblinStoreMgtGoodsImportService goblinStoreMgtGoodsImportService;
@PostMapping("/upload")
@ApiOperation(value = "批量导入数据", notes = "同一个店铺多次导入数据时间间隔最短30秒")
@ApiImplicitParams({
@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) {
String currentUid = CurrentUtil.getCurrentUid();
if (!goblinRedisUtils.hasStoreId(currentUid, storeId)) {
return ResponseDto.failure(ErrorMapping.get("149002"));
}
if (!goblinRedisUtils.redisUtil.lock(GoblinRedisConst.BASIC_GOODS_SKU.concat("lk").concat(storeId), 1, 30)) {
return ResponseDto.failure(ErrorMapping.get("140000"));
}
String analysisResultMsg;
try {
switch (dataType) {
case 1:
analysisResultMsg = goblinStoreMgtGoodsImportService.goodsInformationDataAnalysisProcessing(file, currentUid, storeId);
break;
case 2:
default:
return ResponseDto.failure(ErrorMapping.get("149001"));
}
} catch (LiquidnetServiceException e) {
return ResponseDto.failure(e.getMessage());
} catch (IOException e) {
log.warn("店铺商品管理:批量导入数据:异常[UID={},dataType={},fileName={}]", currentUid, dataType, file.getOriginalFilename(), e);
return ResponseDto.failure("数据有误,解析失败");
}
return ResponseDto.success(analysisResultMsg);
}
}
package com.liquidnet.service.goblin.service.impl.manage;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
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;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSpecValueVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSpecVo;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.ObjectUtil;
import com.liquidnet.service.goblin.util.QueueUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.regex.Pattern;
@Slf4j
@Service
public class GoblinStoreMgtGoodsImportService {
@Autowired
QueueUtils queueUtils;
@Autowired
GoblinRedisUtils goblinRedisUtils;
@Autowired
GoblinMongoUtils goblinMongoUtils;
/**
* 大小字母 || 数字
* 长度:0,50
*/
private static final String ALPHABET_NUMBER_UNDER_50 = "^[a-zA-Z0-9]{0,50}$";
/**
* 大小字母 || 数字
* 长度:0,32
*/
private static final String ALPHABET_NUMBER_32 = "^[a-zA-Z0-9]{0,32}$";
/**
* 批量导入SPU.SQL队列入库分批处理数量
*/
private static final int BATCH_COUNT_SPU_SQL_TO_QUEUE = 10;
/**
* 批量导入SKU.SQL队列入库分批处理数量
*/
private static final int BATCH_COUNT_SKU_SQL_TO_QUEUE = 20;
private void goodsInformationDataAnalysisProcessingValid(GoblinGoodsImportDto dto, List<String> skuBarCodeTmpList, Integer rowNum) {
/* 商品编码校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSpuCode()) && !Pattern.matches(ALPHABET_NUMBER_UNDER_50, dto.getSpuCode())) {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行商品编码有误】", rowNum));
}
/* 商品名称校验|------------------------------------------------------------------------------ */
if (StringUtils.isEmpty(dto.getSpuName()) || dto.getSpuName().length() > 100) {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行商品名称有误】", rowNum));
}
/* 商品图片校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSpuImgs())) {
if (dto.getSpuImgs().startsWith("【图片链接】")) {
String[] spuImgsArr = dto.getSpuImgs().replace("【图片链接】", "").replace(";", ";").split(";");
if (spuImgsArr.length > 15) {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行商品图片最多支持15张】", rowNum));
}
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", String.format("数据内容不规范【第%s行商品图片格式有误】", rowNum));
}
}
/* 商品规格校验|------------------------------------------------------------------------------ */
if (StringUtils.isEmpty(dto.getSkuSpec())) {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行商品规格信息缺失】", rowNum));
}
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.format("数据内容不规范【第%s行商品规格信息有误】", rowNum));
}
String[] specArr = skuSpec.split(":");
if (ArrayUtils.isEmpty(specArr) || specArr.length != 2 || specArr[0].length() > 5 || specArr[1].length() > 40) {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行商品规格信息有误】", rowNum));
}
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", String.format("数据内容不规范【第%s行规格编码格式有误】", rowNum));
}
/* 价格校验|------------------------------------------------------------------------------ */
if (null == dto.getPrice() || dto.getPrice().compareTo(BigDecimal.valueOf(0.01)) < 0 || dto.getPrice().compareTo(BigDecimal.valueOf(9999999)) > 0) {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行价格信息有误】", rowNum));
}
/* 库存校验|------------------------------------------------------------------------------ */
if (null == dto.getStock() || dto.getStock() < 0 || dto.getStock() > 9999999) {// 数据不规范停止解析并提示用户
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行库存信息有误】", rowNum));
}
/* 规格图片校验|------------------------------------------------------------------------------ */
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", String.format("数据内容不规范【第%s行规格图片仅支持1张】", rowNum));
}
} else {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行规格图片格式有误】", rowNum));
}
}
/* 规格条码校验|------------------------------------------------------------------------------ */
if (StringUtils.isNotEmpty(dto.getSkuBarCode())) {
if (Pattern.matches(ALPHABET_NUMBER_32, dto.getSkuBarCode())) {
// if (skuBarCodeTmpList.contains(dto.getSkuBarCode())) {
// throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行表格内规格条码重复】", rowNum));
// }
// skuBarCodeTmpList.add(dto.getSkuBarCode());
} else {
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行规格条码格式有误】", rowNum));
}
}
/* 校验|------------------------------------------------------------------------------ */
/* 校验|------------------------------------------------------------------------------ */
/* 校验|------------------------------------------------------------------------------ */
}
public String goodsInformationDataAnalysisProcessing(MultipartFile file, String uid, String storeId) throws IOException {
AnalysisEventListener<GoblinGoodsImportDto> analysisEventListener = new AnalysisEventListener<GoblinGoodsImportDto>() {
List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos;
List<GoblinGoodsInfoVo> goodsInfoVos;
List<String> skuBarCodeTmpList;
LocalDateTime now;
@Override
public void onException(Exception exception, AnalysisContext context) throws Exception {
if (exception instanceof ExcelDataConvertException) {
Integer rowIndex = ((ExcelDataConvertException) exception).getRowIndex();
Integer columnIndex = ((ExcelDataConvertException) exception).getColumnIndex();
throw new LiquidnetServiceException("-1", String.format("数据内容不规范【第%s行,第%s列数据格式有误】", rowIndex + 1, columnIndex + 1));
}
super.onException(exception, context);
}
@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");
} else if (approximateTotalRowNumber <= 1) {
throw new LiquidnetServiceException("-1", "导入文件不能为空");
}
goodsSkuInfoVos = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList();
goodsInfoVos = ObjectUtil.goblinGoodsInfoVoArrayList();
skuBarCodeTmpList = CollectionUtil.arrayListString();
now = LocalDateTime.now();
super.invokeHead(headMap, context);
}
@Override
public void invoke(GoblinGoodsImportDto dto, AnalysisContext analysisContext) {
Integer rowIndex = analysisContext.readRowHolder().getRowIndex();
goodsInformationDataAnalysisProcessingValid(dto, skuBarCodeTmpList, rowIndex + 1);
GoblinGoodsInfoVo lastGoodsInfoVo = CollectionUtils.isEmpty(goodsInfoVos) ? null : goodsInfoVos.get(goodsInfoVos.size() - 1);
GoblinGoodsInfoVo goodsInfoVo = goodsInformationDataAnalysisProcessingForSpu(dto, lastGoodsInfoVo, uid, storeId, now, goodsSkuInfoVos);
if (null != goodsInfoVo) {
if (log.isDebugEnabled()) {
log.debug("dt2:{}", goodsInfoVo);
}
goodsInfoVos.add(goodsInfoVo);
}
dto.setSkuSpecDtos(null);
dto.setSpuImgList(null);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {// 解析完成...
if (log.isDebugEnabled()) {
log.debug("dt3-1:{}", JsonUtils.toJson(goodsInfoVos));
log.debug("dt3-2:{}", JsonUtils.toJson(goodsSkuInfoVos));
}
if (!CollectionUtils.isEmpty(goodsInfoVos)) {
// List<String> existGoodsSkuNoList = goblinMongoUtils.existGoodsSkuNoBySkuNoList(storeId, skuBarCodeTmpList);
// if (!CollectionUtils.isEmpty(existGoodsSkuNoList)) {
// if (existGoodsSkuNoList.size() > 3) {
// throw new LiquidnetServiceException("-1", String.format("规格条码与已添加商品条码重复,重复条码如下: %s,...", StringUtils.join(existGoodsSkuNoList.subList(0, 3), ",")));
// }
// throw new LiquidnetServiceException("-1", String.format("规格条码与已添加商品条码重复,重复条码如下: %s", StringUtils.join(existGoodsSkuNoList, ",")));
// }
goblinMongoUtils.insertMgtGoodsInfoVos(goodsInfoVos);
goblinMongoUtils.insertMgtGoodsSkuInfoVos(goodsSkuInfoVos);
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_goods.insert"));
LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
toMqSqls.add(SqlMapping.get("goblin_goods_image.insert_byreplace"));// SPU图片
LinkedList<Object[]> initGoodsImageObjs = CollectionUtil.linkedListObjectArr();
toMqSqls.add(SqlMapping.get("goblin_goods_spu_spec_value.insert_byreplace"));// SPU规格信息
LinkedList<Object[]> initGoodsSpuSpecValueObjs = CollectionUtil.linkedListObjectArr();
for (int i = 0, size = goodsInfoVos.size(); i < size; i++) {
GoblinGoodsInfoVo goodsInfoVo = goodsInfoVos.get(i);
initGoodsObjs.add(new Object[]{goodsInfoVo.getSpuId(), goodsInfoVo.getSpuNo(), goodsInfoVo.getSpuBarCode(), goodsInfoVo.getName(), goodsInfoVo.getSubtitle(),
goodsInfoVo.getSellPrice(), goodsInfoVo.getPriceGe(), goodsInfoVo.getPriceLe(), goodsInfoVo.getIntro(), goodsInfoVo.getDetails(),
goodsInfoVo.getCoverPic(), goodsInfoVo.getVideo(), goodsInfoVo.getSpecMode(), goodsInfoVo.getStoreId(), goodsInfoVo.getCateFid(),
goodsInfoVo.getCateSid(), goodsInfoVo.getCateTid(), goodsInfoVo.getStoreCateFid(), goodsInfoVo.getStoreCateSid(), goodsInfoVo.getStoreCateTid(),
goodsInfoVo.getBrandId(), goodsInfoVo.getShelvesHandle(), goodsInfoVo.getShelvesTime(), goodsInfoVo.getSpuValidity(), goodsInfoVo.getVirtualFlg(),
goodsInfoVo.getStatus(), goodsInfoVo.getShelvesStatus(), goodsInfoVo.getSpuAppear(), goodsInfoVo.getShelvesAt(), goodsInfoVo.getCreatedBy(),
goodsInfoVo.getCreatedAt(), goodsInfoVo.getLogisticsTemplate()}
);
if (!CollectionUtils.isEmpty(goodsInfoVo.getImageList())) {
goodsInfoVo.getImageList().forEach(imageUrl -> initGoodsImageObjs.add(new Object[]{goodsInfoVo.getSpuId(), imageUrl}));
}
goodsInfoVo.getSpecVoList().forEach(specVo -> {
specVo.getSpecValues().forEach(specValues -> {
initGoodsSpuSpecValueObjs.add(new Object[]{goodsInfoVo.getSpuId(), specVo.getSpecName(), specValues.getSpecVname(), specValues.getSpecVsort()});
});
});
if (initGoodsObjs.size() == BATCH_COUNT_SPU_SQL_TO_QUEUE) {
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs, initGoodsImageObjs, initGoodsSpuSpecValueObjs));
initGoodsObjs.clear();
initGoodsImageObjs.clear();
initGoodsSpuSpecValueObjs.clear();
}
}
if (initGoodsObjs.size() > 0) {
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs, initGoodsImageObjs, initGoodsSpuSpecValueObjs));
}
toMqSqls.clear();
toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr();
toMqSqls.add(SqlMapping.get("goblin_goods_sku_spec_value.insert_byreplace"));// SKU规格信息
LinkedList<Object[]> initGoodsSkuSpecValueObjs = CollectionUtil.linkedListObjectArr();
goodsSkuInfoVos.forEach(goodsSkuInfoVo -> {
goblinRedisUtils.setSkuStock(null, goodsSkuInfoVo.getSkuId(), goodsSkuInfoVo.getSkuStock());
initGoodsSkuObjs.add(new Object[]{goodsSkuInfoVo.getSkuId(), goodsSkuInfoVo.getSpuId(), goodsSkuInfoVo.getSkuNo(), goodsSkuInfoVo.getSkuBarCode(), goodsSkuInfoVo.getName(),
goodsSkuInfoVo.getSubtitle(), goodsSkuInfoVo.getSellPrice(), goodsSkuInfoVo.getSkuPic(), goodsSkuInfoVo.getSkuIsbn(), goodsSkuInfoVo.getStock(),
goodsSkuInfoVo.getSkuStock(), goodsSkuInfoVo.getWarningStock(), goodsSkuInfoVo.getPrice(), goodsSkuInfoVo.getPriceMember(), goodsSkuInfoVo.getWeight(),
goodsSkuInfoVo.getBuyFactor(), goodsSkuInfoVo.getBuyRoster(), goodsSkuInfoVo.getBuyLimit(), goodsSkuInfoVo.getStoreId(), goodsSkuInfoVo.getSkuValidity(),
goodsSkuInfoVo.getVirtualFlg(),goodsSkuInfoVo.getStatus(), goodsSkuInfoVo.getShelvesStatus(), goodsSkuInfoVo.getSkuAppear(), goodsSkuInfoVo.getShelvesAt(),
uid, goodsSkuInfoVo.getCreatedAt(), goodsSkuInfoVo.getLogisticsTemplate()
});
goodsSkuInfoVo.getSkuSpecList().forEach(skuSpecDto -> initGoodsSkuSpecValueObjs.add(new Object[]{
goodsSkuInfoVo.getSpuId(), goodsSkuInfoVo.getSkuId(), skuSpecDto.getSpecName(), skuSpecDto.getSpecVname()
}));
if (initGoodsSkuObjs.size() == BATCH_COUNT_SKU_SQL_TO_QUEUE) {
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsSkuObjs, initGoodsSkuSpecValueObjs));
initGoodsSkuObjs.clear();
initGoodsSkuSpecValueObjs.clear();
}
});
if (initGoodsSkuObjs.size() > 0) {
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsSkuObjs, initGoodsSkuSpecValueObjs));
}
}
}
};
List<GoblinGoodsImportDto> readDtoList = EasyExcel.read(file.getInputStream(), GoblinGoodsImportDto.class, analysisEventListener).sheet(0).doReadSync();
if (CollectionUtils.isEmpty(readDtoList)) {
throw new LiquidnetServiceException("-1", "导入文件不能为空");
}
long failureRows = readDtoList.stream().filter(r -> StringUtils.isNotEmpty(r.getFailureReason())).count();
String analysisResultMsg = String.format("导入成功%s条数据,导入失败%s条数据", readDtoList.size() - failureRows, failureRows);
log.info("DT-IN:[storeId={},uid={},fileName={},readResult:{}]", uid, storeId, file.getOriginalFilename(), analysisResultMsg);
return analysisResultMsg;
}
private GoblinGoodsInfoVo goodsInformationDataAnalysisProcessingForSpu(GoblinGoodsImportDto dt, GoblinGoodsInfoVo lastGoodsInfoVo, String uid, String storeId, LocalDateTime now, List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos) {
if (log.isDebugEnabled()) {
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());//*
lastGoodsInfoVo.setSpuId(IDGenerator.nextMilliId2());//*
if (StringUtils.isNotEmpty(dt.getSpuCode())) {
lastGoodsInfoVo.setSpuNo(dt.getSpuCode());
} else {
lastGoodsInfoVo.setSpuNo(lastGoodsInfoVo.getSpuId());
}
// if (StringUtils.isNotEmpty(dt.getSpuBarCode())) {
// lastGoodsInfoVo.setSpuBarCode(dt.getSpuBarCode());
// } else {
// lastGoodsInfoVo.setSpuBarCode(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);//*
}
GoblinGoodsSkuInfoVo lastGoodsSkuInfoVo = this.goodsInformationDataAnalysisProcessingForSku(dt, lastGoodsInfoVo, uid, storeId, now, tobeNextSpuFlg);
if (null != lastGoodsSkuInfoVo) {
goodsSkuInfoVos.add(lastGoodsSkuInfoVo);
}
return tobeNextSpuFlg ? lastGoodsInfoVo : null;
}
private GoblinGoodsSkuInfoVo goodsInformationDataAnalysisProcessingForSku(GoblinGoodsImportDto dt, GoblinGoodsInfoVo lastGoodsInfoVo, String uid, String storeId, LocalDateTime now, boolean tobeNextSpuFlg) {
GoblinGoodsSkuInfoVo skuInfoVo = GoblinGoodsSkuInfoVo.getNew();
skuInfoVo.setName("");
List<GoblinGoodsSpecDto> skuSpecDtos = dt.getSkuSpecDtos();
List<GoblinGoodsSpecVo> spuSpecVos = tobeNextSpuFlg ? ObjectUtil.getGoblinGoodsSpecVoArrayList() : lastGoodsInfoVo.getSpecVoList();
for (int i = 0, size = skuSpecDtos.size(); i < size; i++) {
GoblinGoodsSpecDto skuSpecDto = skuSpecDtos.get(i);
skuInfoVo.setName(skuInfoVo.getName().concat(skuSpecDto.getSpecVname()));
if (tobeNextSpuFlg) {
List<GoblinGoodsSpecValueVo> spuSpecValueVos = ObjectUtil.getGoblinGoodsSpecValueVoArrayList();
spuSpecValueVos.add(GoblinGoodsSpecValueVo.getNew().setSpecVname(skuSpecDto.getSpecVname()).setSpecVsort(1));
GoblinGoodsSpecVo spuSpecVo = GoblinGoodsSpecVo.getNew().setSpecName(skuSpecDto.getSpecName()).setSpecSort(i + 1).setSpecValues(spuSpecValueVos);
spuSpecVos.add(spuSpecVo);
} else {
Optional<GoblinGoodsSpecVo> hasSpecOptional = spuSpecVos.stream().filter(r -> r.getSpecName().equals(skuSpecDto.getSpecName())).findAny();
if (hasSpecOptional.isPresent()) {
GoblinGoodsSpecVo spuSpecVo = hasSpecOptional.get();
List<GoblinGoodsSpecValueVo> spuSpecValueVos = spuSpecVo.getSpecValues();
Optional<GoblinGoodsSpecValueVo> any = spuSpecValueVos.stream().filter(r -> r.getSpecVname().equals(skuSpecDto.getSpecVname())).findAny();
if (!any.isPresent()) {
spuSpecValueVos.add(GoblinGoodsSpecValueVo.getNew().setSpecVname(skuSpecDto.getSpecVname()).setSpecVsort(lastGoodsInfoVo.getSkuIdList().size() + 1));
spuSpecVo.setSpecValues(spuSpecValueVos);
}
} else {// 不匹配的规格直接跳过(默认只匹配商品第一行数据中的规格项)
return null;
}
}
}
skuInfoVo.setStock(dt.getStock());//*
skuInfoVo.setSkuStock(dt.getStock());//*
skuInfoVo.setPrice(dt.getPrice());//*
skuInfoVo.setPriceMember(dt.getPrice());//*
skuInfoVo.setSkuId(lastGoodsInfoVo.getSpuId().concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));//*
if (StringUtils.isNotEmpty(dt.getSkuCode())) {
skuInfoVo.setSkuNo(dt.getSkuCode());
} else {
skuInfoVo.setSkuNo(lastGoodsInfoVo.getSpuNo());
}
if (StringUtils.isNotEmpty(dt.getSkuImg())) {
skuInfoVo.setSkuPic(dt.getSkuImg());
} else {
// skuInfoVo.setSkuPic("");// 设置默认图片
}
if (StringUtils.isNotEmpty(dt.getSkuBarCode())) {
skuInfoVo.setSkuBarCode(dt.getSkuBarCode());
} else {
skuInfoVo.setSkuBarCode(lastGoodsInfoVo.getSpuNo());
}
skuInfoVo.setSpuId(lastGoodsInfoVo.getSpuId());//*
skuInfoVo.setSkuType(0);//*
skuInfoVo.setBuyFactor("0");
skuInfoVo.setBuyLimit(0);
skuInfoVo.setStatus("3");
skuInfoVo.setShelvesStatus(lastGoodsInfoVo.getShelvesStatus());
skuInfoVo.setSoldoutStatus("0");//*
skuInfoVo.setSkuAppear("0");//*
skuInfoVo.setSkuCanbuy("1");
skuInfoVo.setDelFlg("0");
skuInfoVo.setCreatedAt(now);//*
skuInfoVo.setCreatedBy(uid);//*
skuInfoVo.setStoreId(storeId);
skuInfoVo.setSkuSpecList(skuSpecDtos);
if (tobeNextSpuFlg) {
List<String> skuIdList = CollectionUtil.arrayListString();
skuIdList.add(skuInfoVo.getSkuId());
lastGoodsInfoVo.setSkuIdList(skuIdList);
lastGoodsInfoVo.setSpecVoList(spuSpecVos);
lastGoodsInfoVo.setPriceGe(skuInfoVo.getPrice());
lastGoodsInfoVo.setPriceLe(skuInfoVo.getPrice());
} else {
BigDecimal priceGe = lastGoodsInfoVo.getPriceGe();
BigDecimal priceLe = lastGoodsInfoVo.getPriceLe();
List<String> skuIdList = lastGoodsInfoVo.getSkuIdList();
skuIdList.add(skuInfoVo.getSkuId());
lastGoodsInfoVo.setSkuIdList(skuIdList);
lastGoodsInfoVo.setSpecVoList(spuSpecVos);
lastGoodsInfoVo.setPriceGe(skuInfoVo.getPrice().compareTo(priceGe) < 0 ? skuInfoVo.getPrice() : priceGe);
lastGoodsInfoVo.setPriceLe(priceLe.compareTo(skuInfoVo.getPrice()) < 0 ? skuInfoVo.getPrice() : priceLe);
}
return skuInfoVo;
}
}
...@@ -158,12 +158,12 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -158,12 +158,12 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
goblinRedisUtils.setSkuStock(null, skuId, skuInfoVo.getSkuStock()); goblinRedisUtils.setSkuStock(null, skuId, skuInfoVo.getSkuStock());
initGoodsSkuObjs.add(new Object[]{ initGoodsSkuObjs.add(new Object[]{
skuId, skuInfoVo.getSpuId(), skuInfoVo.getSkuNo(), skuInfoVo.getName(), skuInfoVo.getSubtitle(), skuId, skuInfoVo.getSpuId(), skuInfoVo.getSkuNo(), skuInfoVo.getSkuBarCode(), skuInfoVo.getName(),
skuInfoVo.getSellPrice(), skuInfoVo.getSkuPic(), skuInfoVo.getSkuIsbn(), skuInfoVo.getStock(), skuInfoVo.getSkuStock(), skuInfoVo.getSubtitle(), skuInfoVo.getSellPrice(), skuInfoVo.getSkuPic(), skuInfoVo.getSkuIsbn(), skuInfoVo.getStock(),
skuInfoVo.getWarningStock(), skuInfoVo.getPrice(), skuInfoVo.getPriceMember(), skuInfoVo.getWeight(), skuInfoVo.getBuyFactor(), skuInfoVo.getSkuStock(), skuInfoVo.getWarningStock(), skuInfoVo.getPrice(), skuInfoVo.getPriceMember(), skuInfoVo.getWeight(),
buyRoster, skuInfoVo.getBuyLimit(), skuInfoVo.getStoreId(), skuInfoVo.getSkuValidity(), skuInfoVo.getVirtualFlg(), skuInfoVo.getBuyFactor(), buyRoster, skuInfoVo.getBuyLimit(), skuInfoVo.getStoreId(), skuInfoVo.getSkuValidity(),
skuInfoVo.getStatus(), skuInfoVo.getShelvesStatus(), skuInfoVo.getSkuAppear(), skuInfoVo.getShelvesAt(), createdBy, skuInfoVo.getVirtualFlg(), skuInfoVo.getStatus(), skuInfoVo.getShelvesStatus(), skuInfoVo.getSkuAppear(), skuInfoVo.getShelvesAt(),
createdAt, skuInfoVo.getLogisticsTemplate() createdBy, createdAt, skuInfoVo.getLogisticsTemplate()
}); });
skuInfoVo.getSkuSpecList().forEach(skuSpecDto -> initGoodsSkuSpecValueObjs.add(new Object[]{ skuInfoVo.getSkuSpecList().forEach(skuSpecDto -> initGoodsSkuSpecValueObjs.add(new Object[]{
...@@ -178,13 +178,13 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -178,13 +178,13 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
toMqSqls.add(SqlMapping.get("goblin_goods.insert")); toMqSqls.add(SqlMapping.get("goblin_goods.insert"));
LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
initGoodsObjs.add(new Object[]{ initGoodsObjs.add(new Object[]{
spuId, goodsInfoVo.getSpuNo(), goodsInfoVo.getName(), goodsInfoVo.getSubtitle(), goodsInfoVo.getSellPrice(), spuId, goodsInfoVo.getSpuNo(), goodsInfoVo.getSpuBarCode(), goodsInfoVo.getName(), goodsInfoVo.getSubtitle(),
goodsInfoVo.getPriceGe(), goodsInfoVo.getPriceLe(), goodsInfoVo.getIntro(), goodsInfoVo.getDetails(), goodsInfoVo.getCoverPic(), goodsInfoVo.getSellPrice(), goodsInfoVo.getPriceGe(), goodsInfoVo.getPriceLe(), goodsInfoVo.getIntro(), goodsInfoVo.getDetails(),
goodsInfoVo.getVideo(), goodsInfoVo.getSpecMode(), goodsInfoVo.getStoreId(), goodsInfoVo.getCateFid(), goodsInfoVo.getCateSid(), goodsInfoVo.getCoverPic(), goodsInfoVo.getVideo(), goodsInfoVo.getSpecMode(), goodsInfoVo.getStoreId(), goodsInfoVo.getCateFid(),
goodsInfoVo.getCateTid(), goodsInfoVo.getStoreCateFid(), goodsInfoVo.getStoreCateSid(), goodsInfoVo.getStoreCateTid(), goodsInfoVo.getBrandId(), goodsInfoVo.getCateSid(), goodsInfoVo.getCateTid(), goodsInfoVo.getStoreCateFid(), goodsInfoVo.getStoreCateSid(), goodsInfoVo.getStoreCateTid(),
goodsInfoVo.getShelvesHandle(), goodsInfoVo.getShelvesTime(), goodsInfoVo.getSpuValidity(), goodsInfoVo.getVirtualFlg(), goodsInfoVo.getStatus(), goodsInfoVo.getBrandId(), goodsInfoVo.getShelvesHandle(), goodsInfoVo.getShelvesTime(), goodsInfoVo.getSpuValidity(), goodsInfoVo.getVirtualFlg(),
goodsInfoVo.getShelvesStatus(), goodsInfoVo.getSpuAppear(), goodsInfoVo.getShelvesAt(), createdBy, createdAt, goodsInfoVo.getStatus(), goodsInfoVo.getShelvesStatus(), goodsInfoVo.getSpuAppear(), goodsInfoVo.getShelvesAt(), createdBy,
goodsInfoVo.getLogisticsTemplate() createdAt, goodsInfoVo.getLogisticsTemplate()
}); });
toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert")); toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
toMqSqls.add(SqlMapping.get("goblin_goods_image.insert_byreplace")); toMqSqls.add(SqlMapping.get("goblin_goods_image.insert_byreplace"));
...@@ -930,12 +930,12 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -930,12 +930,12 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert")); toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert"));
LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr();
initGoodsSkuObjs.add(new Object[]{ initGoodsSkuObjs.add(new Object[]{
addSkuInfoVo.getSkuId(), addSkuInfoVo.getSpuId(), addSkuInfoVo.getSkuNo(), addSkuInfoVo.getName(), addSkuInfoVo.getSubtitle(), addSkuInfoVo.getSkuId(), addSkuInfoVo.getSpuId(), addSkuInfoVo.getSkuNo(), addSkuInfoVo.getSkuBarCode(), addSkuInfoVo.getName(),
addSkuInfoVo.getSellPrice(), addSkuInfoVo.getSkuPic(), addSkuInfoVo.getSkuIsbn(), addSkuInfoVo.getStock(), addSkuInfoVo.getSkuStock(), addSkuInfoVo.getSubtitle(), addSkuInfoVo.getSellPrice(), addSkuInfoVo.getSkuPic(), addSkuInfoVo.getSkuIsbn(), addSkuInfoVo.getStock(),
addSkuInfoVo.getWarningStock(), addSkuInfoVo.getPrice(), addSkuInfoVo.getPriceMember(), addSkuInfoVo.getWeight(), addSkuInfoVo.getBuyFactor(), addSkuInfoVo.getSkuStock(), addSkuInfoVo.getWarningStock(), addSkuInfoVo.getPrice(), addSkuInfoVo.getPriceMember(), addSkuInfoVo.getWeight(),
addSkuInfoVo.getBuyRoster(), addSkuInfoVo.getBuyLimit(), addSkuInfoVo.getStoreId(), addSkuInfoVo.getSkuValidity(), addSkuInfoVo.getVirtualFlg(), addSkuInfoVo.getBuyFactor(), addSkuInfoVo.getBuyRoster(), addSkuInfoVo.getBuyLimit(), addSkuInfoVo.getStoreId(), addSkuInfoVo.getSkuValidity(),
addSkuInfoVo.getStatus(), addSkuInfoVo.getShelvesStatus(), addSkuInfoVo.getSkuAppear(), addSkuInfoVo.getShelvesAt(), uid, addSkuInfoVo.getVirtualFlg(), addSkuInfoVo.getStatus(), addSkuInfoVo.getShelvesStatus(), addSkuInfoVo.getSkuAppear(), addSkuInfoVo.getShelvesAt(),
now, addSkuInfoVo.getLogisticsTemplate() uid, now, addSkuInfoVo.getLogisticsTemplate()
}); });
toMqSqls.add(SqlMapping.get("goblin_goods_spec.insert_byreplace")); toMqSqls.add(SqlMapping.get("goblin_goods_spec.insert_byreplace"));
LinkedList<Object[]> initGoodsSpecObjs = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> initGoodsSpecObjs = CollectionUtil.linkedListObjectArr();
......
...@@ -506,6 +506,10 @@ public class GoblinMongoUtils { ...@@ -506,6 +506,10 @@ public class GoblinMongoUtils {
return mongoTemplate.insert(vo, GoblinGoodsInfoVo.class.getSimpleName()); return mongoTemplate.insert(vo, GoblinGoodsInfoVo.class.getSimpleName());
} }
public List<GoblinGoodsInfoVo> insertMgtGoodsInfoVos(List<GoblinGoodsInfoVo> vos) {
return (List<GoblinGoodsInfoVo>) mongoTemplate.insert(vos, GoblinGoodsInfoVo.class.getSimpleName());
}
public void upsertGoodsInfoVo(GoblinGoodsInfoVo vo) { public void upsertGoodsInfoVo(GoblinGoodsInfoVo vo) {
Document document = (Document) mongoConverter.convertToMongoType(vo); Document document = (Document) mongoConverter.convertToMongoType(vo);
Update update = Update.fromDocument(document); Update update = Update.fromDocument(document);
...@@ -790,6 +794,10 @@ public class GoblinMongoUtils { ...@@ -790,6 +794,10 @@ public class GoblinMongoUtils {
return mongoTemplate.insert(vo, GoblinGoodsSkuInfoVo.class.getSimpleName()); return mongoTemplate.insert(vo, GoblinGoodsSkuInfoVo.class.getSimpleName());
} }
public List<GoblinGoodsSkuInfoVo> insertMgtGoodsSkuInfoVos(List<GoblinGoodsSkuInfoVo> vos) {
return (List<GoblinGoodsSkuInfoVo>) mongoTemplate.insert(vos, GoblinGoodsSkuInfoVo.class.getSimpleName());
}
public UpdateResult upsertGoodsSkuInfoVo(GoblinGoodsSkuInfoVo vo) { public UpdateResult upsertGoodsSkuInfoVo(GoblinGoodsSkuInfoVo vo) {
Document document = (Document) mongoConverter.convertToMongoType(vo); Document document = (Document) mongoConverter.convertToMongoType(vo);
Update update = Update.fromDocument(document); Update update = Update.fromDocument(document);
...@@ -883,6 +891,15 @@ public class GoblinMongoUtils { ...@@ -883,6 +891,15 @@ public class GoblinMongoUtils {
return pagedResult.setList(list).setTotal(count, pageSize); return pagedResult.setList(list).setTotal(count, pageSize);
} }
// 根据sku条码获取skuNo
public List<String> existGoodsSkuNoBySkuNoList(String storeId, List<String> skuNoList) {
Query query = Query.query(Criteria.where("delFlg").is("0").and("storeId").is(storeId).and("skuNo").in(skuNoList));
query.fields().include("skuNo");
List<GoblinGoodsSkuInfoVo> vos = mongoTemplate.find(query, GoblinGoodsSkuInfoVo.class, GoblinGoodsSkuInfoVo.class.getSimpleName());
return CollectionUtils.isEmpty(vos) ? null : vos.stream().map(GoblinGoodsSkuInfoVo::getSkuNo).collect(Collectors.toList());
// return mongoTemplate.count(query, GoblinGoodsSkuInfoVo.class, GoblinGoodsSkuInfoVo.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")),
......
...@@ -43,7 +43,7 @@ import static com.liquidnet.service.goblin.constant.GoblinRedisConst.REDIS_GOBLI ...@@ -43,7 +43,7 @@ import static com.liquidnet.service.goblin.constant.GoblinRedisConst.REDIS_GOBLI
@Component @Component
public class GoblinRedisUtils { public class GoblinRedisUtils {
@Autowired @Autowired
RedisUtil redisUtil; public RedisUtil redisUtil;
@Autowired @Autowired
GoblinMongoUtils goblinMongoUtils; GoblinMongoUtils goblinMongoUtils;
@Autowired @Autowired
......
...@@ -34,7 +34,8 @@ goblin_goods_sku_spec_value.insert_byreplace=REPLACE INTO goblin_goods_sku_spec_ ...@@ -34,7 +34,8 @@ goblin_goods_sku_spec_value.insert_byreplace=REPLACE INTO goblin_goods_sku_spec_
goblin_goods_sku_spec_value.update_by_edit=UPDATE goblin_goods_sku_spec_value SET spec_vname=? WHERE sku_id=? AND spec_name=? AND del_flg='0' goblin_goods_sku_spec_value.update_by_edit=UPDATE goblin_goods_sku_spec_value SET spec_vname=? WHERE sku_id=? AND spec_name=? AND del_flg='0'
goblin_goods_sku_spec_value.update_by_del_sku=UPDATE goblin_goods_sku_spec_value SET del_flg='1' WHERE sku_id=? AND del_flg='0' goblin_goods_sku_spec_value.update_by_del_sku=UPDATE goblin_goods_sku_spec_value SET del_flg='1' WHERE sku_id=? AND del_flg='0'
#---- \u5546\u54C1\u4FE1\u606F #---- \u5546\u54C1\u4FE1\u606F
goblin_goods.insert=INSERT INTO goblin_goods (spu_id,spu_no,name,subtitle,sell_price, price_ge,price_le,intro,details,cover_pic, video,spec_mode,store_id,cate_fid,cate_sid, cate_tid,store_cate_fid,store_cate_sid,store_cate_tid,brand_id, shelves_handle,shelves_time,spu_validity,virtual_flg,status, shelves_status,spu_appear,shelves_at,created_by,created_at, logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) #goblin_goods.insert=INSERT INTO goblin_goods (spu_id,spu_no,name,subtitle,sell_price, price_ge,price_le,intro,details,cover_pic, video,spec_mode,store_id,cate_fid,cate_sid, cate_tid,store_cate_fid,store_cate_sid,store_cate_tid,brand_id, shelves_handle,shelves_time,spu_validity,virtual_flg,status, shelves_status,spu_appear,shelves_at,created_by,created_at, logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods.insert=INSERT INTO goblin_goods (spu_id,spu_no,spu_bar_code,name,subtitle,sell_price, price_ge,price_le,intro,details,cover_pic, video,spec_mode,store_id,cate_fid,cate_sid, cate_tid,store_cate_fid,store_cate_sid,store_cate_tid,brand_id, shelves_handle,shelves_time,spu_validity,virtual_flg,status, shelves_status,spu_appear,shelves_at,created_by,created_at, logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods.insert_for_digital=INSERT INTO goblin_goods (spu_id,spu_no,spu_type,name,intro,attention,store_id,cate_fid,cate_sid,cate_tid,virtual_flg,status,shelves_status,spu_appear,author,publisher,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) goblin_goods.insert_for_digital=INSERT INTO goblin_goods (spu_id,spu_no,spu_type,name,intro,attention,store_id,cate_fid,cate_sid,cate_tid,virtual_flg,status,shelves_status,spu_appear,author,publisher,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods.update_by_edit=UPDATE goblin_goods SET spu_no=?,name=?,subtitle=?,sell_price=?,intro=?,details=?,cover_pic=?,video=?,spec_mode=?,cate_fid=?,cate_sid=?,cate_tid=?,shelves_handle=?,shelves_time=?,spu_validity=?,virtual_flg=?,logistics_template=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0' goblin_goods.update_by_edit=UPDATE goblin_goods SET spu_no=?,name=?,subtitle=?,sell_price=?,intro=?,details=?,cover_pic=?,video=?,spec_mode=?,cate_fid=?,cate_sid=?,cate_tid=?,shelves_handle=?,shelves_time=?,spu_validity=?,virtual_flg=?,logistics_template=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0'
goblin_goods.update_by_edit_for_digital=UPDATE goblin_goods SET name=?,intro=?,cate_fid=?,cate_sid=?,cate_tid=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0' goblin_goods.update_by_edit_for_digital=UPDATE goblin_goods SET name=?,intro=?,cate_fid=?,cate_sid=?,cate_tid=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0'
...@@ -46,7 +47,8 @@ goblin_goods.update_by_edit_sku_for_digital=UPDATE goblin_goods SET price_ge=?,p ...@@ -46,7 +47,8 @@ goblin_goods.update_by_edit_sku_for_digital=UPDATE goblin_goods SET price_ge=?,p
goblin_goods.update_by_del_sku=UPDATE goblin_goods SET price_ge=?,price_le=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0' goblin_goods.update_by_del_sku=UPDATE goblin_goods SET price_ge=?,price_le=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0'
goblin_goods.update_by_del_store=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE store_id=? AND del_flg='0' goblin_goods.update_by_del_store=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE store_id=? AND del_flg='0'
goblin_goods.update_by_del=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE spu_id=? AND del_flg='0' goblin_goods.update_by_del=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE spu_id=? AND del_flg='0'
goblin_goods_sku.insert=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,name,subtitle, sell_price,sku_pic,sku_isbn,stock,sku_stock, warning_stock,price,price_member,weight,buy_factor, buy_roster,buy_limit,store_id,sku_validity,virtual_flg, status,shelves_status,sku_appear,shelves_at,created_by, created_at,logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) #goblin_goods_sku.insert=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,name,subtitle, sell_price,sku_pic,sku_isbn,stock,sku_stock, warning_stock,price,price_member,weight,buy_factor, buy_roster,buy_limit,store_id,sku_validity,virtual_flg, status,shelves_status,sku_appear,shelves_at,created_by, created_at,logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods_sku.insert=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,sku_bar_code,name,subtitle, sell_price,sku_pic,sku_isbn,stock,sku_stock, warning_stock,price,price_member,weight,buy_factor, buy_roster,buy_limit,store_id,sku_validity,virtual_flg, status,shelves_status,sku_appear,shelves_at,created_by, created_at,logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods_sku.insert_for_digital=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,sku_type,name,subtitle,sku_pic,sku_watch,watch_type,sku_watch_pic,stock,sku_stock,hit_ratio,price,price_v,product_id,price_member,intro,details,buy_factor,buy_limit,store_id,shelves_handle,shelves_time,sale_start_time,virtual_flg,status,shelves_status,sku_appear,sku_canbuy,unbox,opening_time,shelves_at,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) goblin_goods_sku.insert_for_digital=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,sku_type,name,subtitle,sku_pic,sku_watch,watch_type,sku_watch_pic,stock,sku_stock,hit_ratio,price,price_v,product_id,price_member,intro,details,buy_factor,buy_limit,store_id,shelves_handle,shelves_time,sale_start_time,virtual_flg,status,shelves_status,sku_appear,sku_canbuy,unbox,opening_time,shelves_at,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods_sku.update_by_edit_for_market=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,weight=?,stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0' goblin_goods_sku.update_by_edit_for_market=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,weight=?,stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0'
goblin_goods_sku.update_by_edit=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,price=?,price_member=?,weight=?,stock=?,sku_stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,buy_factor=?,buy_roster=?,buy_limit=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0' goblin_goods_sku.update_by_edit=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,price=?,price_member=?,weight=?,stock=?,sku_stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,buy_factor=?,buy_roster=?,buy_limit=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0'
......
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