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

Commit 3223bd70 authored by zhanggb's avatar zhanggb

~规格校验同步;

parent e8c686fc
package com.liquidnet.service.goblin.dto.manage;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.constant.LnsRegex;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
......@@ -13,6 +15,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
......@@ -21,6 +24,9 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
@ApiModel(value = "GoblinStoreMgtGoodsAddParam", description = "商品管理:添加商品入参")
@Data
......@@ -213,10 +219,14 @@ public class GoblinStoreMgtGoodsAddParam implements Serializable {
public void initGoodsSkuInfoVo(GoblinGoodsInfoVo goodsInfoVo, List<GoblinGoodsSkuInfoVo> vos,
List<GoblinGoodsSpecVo> goodsSpecVos) {
List<GoblinStoreMgtGoodsAddSkuParam> mgtGoodsAddSkuParamList = this.getSkuParamList();
int size = mgtGoodsAddSkuParamList.size();
if (CollectionUtils.isEmpty(mgtGoodsAddSkuParamList)) {
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("149006");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
ArrayList<String> skuIdList = CollectionUtil.arrayListString();
List<String> skuIdList = CollectionUtil.arrayListString();
BigDecimal priceGe = BigDecimal.ZERO, priceLe = BigDecimal.ZERO;
int size = mgtGoodsAddSkuParamList.size(), skuSpecSize = 0;
for (int i = 0; i < size; i++) {
GoblinStoreMgtGoodsAddSkuParam addSkuParam = mgtGoodsAddSkuParamList.get(i);
String skuId = addSkuParam.getSkuId();
......@@ -261,26 +271,66 @@ public class GoblinStoreMgtGoodsAddParam implements Serializable {
List<GoblinGoodsSpecDto> skuSpecList = addSkuParam.getSkuSpecList();
vo.setSkuSpecList(skuSpecList);
for (GoblinGoodsSkuInfoVo goodsSkuInfoVo : vos) {// 规格比对
Map<String, String> skuSpecMap = goodsSkuInfoVo.getSkuSpecList().stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
boolean diffSpecFlg = false;
for (GoblinGoodsSpecDto goodsSpecDto : skuSpecList) {
String specName = goodsSpecDto.getSpecName();
if (!skuSpecMap.get(specName).equals(goodsSpecDto.getSpecVname())) {
diffSpecFlg = true;// 多个规格中只要存在一个不一致,即可跳过,标记为允许添加
break;
}
}
if (!diffSpecFlg) {// 重复的规格信息
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("149006");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
}
vos.add(vo);
skuIdList.add(vo.getSkuId());
skuIdList.add(vo.getSkuId());
priceGe = priceGe.compareTo(vo.getPrice()) > 0 ? vo.getPrice() : priceGe;
priceLe = priceLe.compareTo(vo.getPrice()) < 0 ? vo.getPrice() : priceLe;
if (CollectionUtils.isEmpty(skuSpecList) || (skuSpecSize > 0 && skuSpecSize != skuSpecList.size())) {
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("149006");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
int specSize = skuSpecList.size();// SKU包含的规格数量
skuSpecSize = i == 0 ? specSize : skuSpecSize;// 标记第一个SKU的规格数量,用于校验
List<String> skuSpecNListTmp = CollectionUtil.arrayListString();// 标记单个SKU的规格名称,用于校验
for (int j = 0; j < specSize; j++) {
GoblinGoodsSpecDto specDto = skuSpecList.get(j);
String specName = specDto.getSpecName();
String specVname = specDto.getSpecVname();
GoblinGoodsSpecValueVo specValueVo = GoblinGoodsSpecValueVo.getNew().setSpecVname(specDto.getSpecVname()).setSpecVsort(j);
GoblinGoodsSpecValueVo specValueVo = GoblinGoodsSpecValueVo.getNew().setSpecVname(specVname).setSpecVsort(i);
if (i == 0) {
if (goodsSpecVos.stream().anyMatch(r -> r.getSpecName().equals(specName))) {// 单SKU重复的规格
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("149006");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
ArrayList<GoblinGoodsSpecValueVo> specValueVos = new ArrayList<>();
specValueVos.add(specValueVo);
goodsSpecVos.add(j, GoblinGoodsSpecVo.getNew()
.setSpecName(specDto.getSpecName()).setSpecSort(j).setSpecValues(specValueVos));
} else {// 补充规格对应的值
goodsSpecVos.get(j).getSpecValues().add(specValueVo);
goodsSpecVos.add(GoblinGoodsSpecVo.getNew().setSpecName(specName).setSpecSort(j).setSpecValues(specValueVos));
} else {
Optional<GoblinGoodsSpecVo> filterGoodsSpecOptional = goodsSpecVos.stream().filter(r -> r.getSpecName().equals(specName)).findAny();
if (filterGoodsSpecOptional.isPresent()) {// 存在该规格
if (filterGoodsSpecOptional.get().getSpecValues().stream().noneMatch(r -> r.getSpecVname().equals(specVname))) {
// 且不包含该规格值,则补充规格对应的值
filterGoodsSpecOptional.get().getSpecValues().add(specValueVo);
}
} else {// 不存在该规格,则不同SKU规格不一致
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("149006");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
}
if (!skuSpecNListTmp.isEmpty() && skuSpecNListTmp.contains(specName)) {// 单SKU重复的规格
ErrorMapping.ErrorMessage errorMessage = ErrorMapping.get("149006");
throw new LiquidnetServiceException(errorMessage.getCode(), errorMessage.getMessage());
}
skuSpecNListTmp.add(specName);
}
}
goodsInfoVo.setPriceGe(priceGe);
......
......@@ -216,19 +216,22 @@ public class GoblinStoreMgtGoodsController {
}
}
List<String> skuIdList = goodsInfoVo.getSkuIdList();
Map<String, String> paramSkuSpecMap = storeMgtGoodsEditSkuParam.getSkuSpecList().stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
for (String skuId : skuIdList) {// 比对所有SKU规格信息
GoblinGoodsSkuInfoVo existMgtGoodsSkuInfoVo = goblinRedisUtils.getMgtGoodsSkuInfoVo(skuId);
Map<String, String> editBefSkuSpecMap = existMgtGoodsSkuInfoVo.getSkuSpecList().stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
boolean existingFlg = false;
Set<Map.Entry<String, String>> paramSkuSpecSet = paramSkuSpecMap.entrySet();
for (Map.Entry<String, String> entry : paramSkuSpecSet) {
existingFlg = editBefSkuSpecMap.get(entry.getKey()).equals(entry.getValue());
boolean diffSpecFlg = false;
List<GoblinGoodsSpecDto> paramSkuSpecList = storeMgtGoodsEditSkuParam.getSkuSpecList();
for (GoblinGoodsSpecDto paramGoodsSpecDto : paramSkuSpecList) {
if (!editBefSkuSpecMap.get(paramGoodsSpecDto.getSpecName()).equals(paramGoodsSpecDto.getSpecVname())) {
diffSpecFlg = true;// 多个规格中只要存在一个不一致,即可跳过,标记为允许添加
break;
}
}
if (skuId.equals(paramSkuId)) {
if (!existingFlg) {// 更改了规格,则同步修改SPU里的规格信息
if (diffSpecFlg) {// 更改了规格,则同步修改SPU里的规格信息
Map<String, String> paramSkuSpecMap = paramSkuSpecList.stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
List<GoblinGoodsSpecVo> specVoList = goodsInfoVo.getSpecVoList();
for (Map.Entry<String, String> entry : editBefSkuSpecMap.entrySet()) {
for (GoblinGoodsSpecVo specVo : specVoList) {
......@@ -251,13 +254,13 @@ public class GoblinStoreMgtGoodsController {
}
continue;
}
if (existingFlg) {
log.warn("商品管理:商品编辑:SKU编辑:重复的规格信息[editBefSkuSpecMap={},paramSkuSpecMap={}]", editBefSkuSpecMap, paramSkuSpecMap);
if (!diffSpecFlg) {
log.warn("商品管理:商品编辑:SKU编辑:重复的规格信息[editBefSkuSpecMap={},paramSkuSpecMap={}]", editBefSkuSpecMap, JsonUtils.toJson(paramSkuSpecList));
return ResponseDto.failure(ErrorMapping.get("149014"));
}
}
if (goblinstoreMgtGoodsService.goodsEditSku(storeMgtGoodsEditSkuParam, goodsInfoVo)) {
return ResponseDto.success(goblinRedisUtils.getMgtGoodsSkuInfoVo(storeMgtGoodsEditSkuParam.getSkuId()));
return ResponseDto.success(goblinRedisUtils.getMgtGoodsSkuInfoVo(paramSkuId));
} else {
if (null != operStock && operStock != 0) {// 处理库存:回滚
int operStockVal = Math.abs(operStock);
......@@ -284,19 +287,19 @@ public class GoblinStoreMgtGoodsController {
}
List<String> skuIdList = goodsInfoVo.getSkuIdList();
List<GoblinGoodsSpecDto> skuSpecList = storeMgtGoodsEditSkuParam.getSkuSpecList();
Map<String, String> paramSkuSpecMap = skuSpecList.stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
for (String skuId : skuIdList) {// 比对所有SKU规格信息
GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo = goblinRedisUtils.getMgtGoodsSkuInfoVo(skuId);
Map<String, String> skuSpecMap = mgtGoodsSkuInfoVo.getSkuSpecList().stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
boolean existingFlg = false;
Set<Map.Entry<String, String>> paramSkuSpecSet = paramSkuSpecMap.entrySet();
for (Map.Entry<String, String> entry : paramSkuSpecSet) {
existingFlg = skuSpecMap.get(entry.getKey()).equals(entry.getValue());
boolean diffSpecFlg = false;
for (GoblinGoodsSpecDto goodsSpecDto : skuSpecList) {
if (!skuSpecMap.get(goodsSpecDto.getSpecName()).equals(goodsSpecDto.getSpecVname())) {
diffSpecFlg = true;// 多个规格中只要存在一个不一致,即可跳过,标记为允许添加
break;
}
}
if (existingFlg) {
log.warn("商品管理:商品编辑:SKU添加:重复的规格信息[skuSpecMap={},paramSkuSpecMap={}]", skuSpecMap, paramSkuSpecMap);
if (!diffSpecFlg) {
log.warn("商品管理:商品编辑:SKU添加:重复的规格信息[skuSpecMap={},paramSkuSpecMap={}]", skuSpecMap, JsonUtils.toJson(skuSpecList));
return ResponseDto.failure(ErrorMapping.get("149014"));
}
}
......@@ -311,6 +314,8 @@ public class GoblinStoreMgtGoodsController {
specVoList.add(GoblinGoodsSpecVo.getNew().setSpecName(specDto.getSpecName()).setSpecSort(i).setSpecValues(specValueVoList));
}
} else {
Map<String, String> paramSkuSpecMap = skuSpecList.stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
for (GoblinGoodsSpecVo specVo : specVoList) {// 同步添加SPU规格信息
List<GoblinGoodsSpecValueVo> specValues = specVo.getSpecValues();
specValues.add(GoblinGoodsSpecValueVo.getNew().setSpecVname(paramSkuSpecMap.get(specVo.getSpecName())).setSpecVsort(specValues.size()));
......
......@@ -46,13 +46,14 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
String uid = CurrentUtil.getCurrentUid();
LocalDateTime now = LocalDateTime.now();
GoblinGoodsInfoVo vo = storeMgtGoodsAddParam.initGoodsInfoVo();
vo.setCreatedBy(uid);
vo.setCreatedAt(now);
GoblinGoodsInfoVo goodsInfoVo = storeMgtGoodsAddParam.initGoodsInfoVo();
goodsInfoVo.setCreatedBy(uid);
goodsInfoVo.setCreatedAt(now);
ArrayList<GoblinGoodsSpecVo> goodsSpecVoList = ObjectUtil.getGoblinGoodsSpecVoArrayList();
List<GoblinGoodsSkuInfoVo> goodsSkuInfoVoList = ObjectUtil.getGoblinGoodsSkuInfoVoArrayList();
storeMgtGoodsAddParam.initGoodsSkuInfoVo(vo, goodsSkuInfoVoList, goodsSpecVoList);
storeMgtGoodsAddParam.initGoodsSkuInfoVo(goodsInfoVo, goodsSkuInfoVoList, goodsSpecVoList);
{// 标签处理
List<String> goodsTagIdList = storeMgtGoodsAddParam.getTagList();
......@@ -75,7 +76,7 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
}
}
}
vo.setTagVoList(goodsTagVoList);
goodsInfoVo.setTagVoList(goodsTagVoList);
}
if (!goodsExtagIsEmpty) {
List<GoblinGoodsExtagVo> goodsExtagVoList = ObjectUtil.getGoblinGoodsExtagVoArrayList();
......@@ -87,15 +88,15 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
}
}
}
vo.setExtagVoList(goodsExtagVoList);
goodsInfoVo.setExtagVoList(goodsExtagVoList);
}
}
}
// 服务保障处理
vo.setServiceSupportVoList(goblinMongoUtils.getServiceSupportVos(storeMgtGoodsAddParam.getSsidList()));
goodsInfoVo.setServiceSupportVoList(goblinMongoUtils.getServiceSupportVos(storeMgtGoodsAddParam.getSsidList()));
goblinMongoUtils.setGoodsInfoVo(vo);
goblinMongoUtils.setGoodsInfoVo(goodsInfoVo);
goblinMongoUtils.setGoodsSkuInfoVos(goodsSkuInfoVoList);
}
......
......@@ -20,7 +20,7 @@
149003=
149004=
149005=
149006=
149006=添加商品失败,规格信息无效
149007=
149008=
149009=
......
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