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

Commit 317400e4 authored by 张国柄's avatar 张国柄

~API:SKU删除优化;

parent 94c86adb
......@@ -562,31 +562,33 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
LinkedList<Object[]> initSpuSpecValueObjs = CollectionUtil.linkedListObjectArr();
LinkedList<Object[]> delSpuSpecValueObjs = CollectionUtil.linkedListObjectArr();
List<GoblinGoodsSpecVo> specVoList = goodsInfoVo.getSpecVoList();
boolean updateGoodsInfoVoFlg = false;
List<GoblinGoodsSpecDto> skuSpecList = mgtGoodsEditSkuParam.getSkuSpecList();
skuSpecList.forEach(spec -> {
String specName = spec.getSpecName(), specVname = spec.getSpecVname();
GoblinGoodsSpecVo specVo = specVoList.stream().filter(r -> r.getSpecName().equals(specName)).findAny().get();
specVo.getSpecValues().forEach(r -> initSpuSpecValueObjs.add(new Object[]{spuId, specName, r.getSpecVname(), r.getSpecVsort()}));
updateSkuSpecValueObjs.add(new Object[]{specVname, skuId, specName});
if (!CollectionUtils.isEmpty(marketSkuIdList)) {
marketSkuIdList.forEach(marketSkuId -> updateSkuSpecValueObjs.add(new Object[]{specVname, marketSkuId, specName}));
}
});
if (!CollectionUtils.isEmpty(skuSpecList)) {// 不为空,则更改了规格
List<GoblinGoodsSpecVo> specVoList = goodsInfoVo.getSpecVoList();
skuSpecList.forEach(spec -> {
String specName = spec.getSpecName(), specVname = spec.getSpecVname();
GoblinGoodsSpecVo specVo = specVoList.stream().filter(r -> r.getSpecName().equals(specName)).findAny().get();
specVo.getSpecValues().forEach(r -> initSpuSpecValueObjs.add(new Object[]{spuId, specName, r.getSpecVname(), r.getSpecVsort()}));
updateSkuSpecValueObjs.add(new Object[]{specVname, skuId, specName});
if (!CollectionUtils.isEmpty(marketSkuIdList)) {
marketSkuIdList.forEach(marketSkuId -> updateSkuSpecValueObjs.add(new Object[]{specVname, marketSkuId, specName}));
}
});
boolean updateGoodsInfoVoFlg = false;
if (!delSpuSpecMap.isEmpty()) {// 删除了规格值,需要同步SPU里的规格信息
updateGoodsInfoVoFlg = true;
goodsInfoVo.setUpdatedBy(uid);
goodsInfoVo.setUpdatedAt(now);
if (!delSpuSpecMap.isEmpty()) {// 删除了规格值,需要同步SPU里的规格信息
updateGoodsInfoVoFlg = true;
goodsInfoVo.setUpdatedBy(uid);
goodsInfoVo.setUpdatedAt(now);
delSpuSpecMap.forEach((k, v) -> delSpuSpecValueObjs.add(new Object[]{spuId, k, v}));
}
if (!addSpuSpecMap.isEmpty()) {// 新增了规格值,需要同步SPU里的规格信息
updateGoodsInfoVoFlg = true;
goodsInfoVo.setUpdatedBy(uid);
goodsInfoVo.setUpdatedAt(now);
delSpuSpecMap.forEach((k, v) -> delSpuSpecValueObjs.add(new Object[]{spuId, k, v}));
}
if (!addSpuSpecMap.isEmpty()) {// 新增了规格值,需要同步SPU里的规格信息
updateGoodsInfoVoFlg = true;
goodsInfoVo.setUpdatedBy(uid);
goodsInfoVo.setUpdatedAt(now);
}
}
BigDecimal priceGe = BigDecimal.ZERO, priceLe = BigDecimal.ZERO;
......@@ -743,71 +745,67 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
}
@Override
public boolean goodsEditSkuDel(String uid, GoblinGoodsSkuInfoVo goodsSkuInfoVo, GoblinGoodsInfoVo mgtGoodsInfoVo) {
String spuId = goodsSkuInfoVo.getSpuId();
String delSkuId = goodsSkuInfoVo.getSkuId();
public boolean goodsEditSkuDel(String uid, GoblinGoodsSkuInfoVo delGoodsSkuInfoVo, GoblinGoodsInfoVo mgtGoodsInfoVo) {
String spuId = delGoodsSkuInfoVo.getSpuId();
String delSkuId = delGoodsSkuInfoVo.getSkuId();
List<String> skuIdList = mgtGoodsInfoVo.getSkuIdList();
skuIdList.removeIf(r -> r.equals(delSkuId));
List<GoblinGoodsSkuInfoVo> goodsSkuInfoVos = goblinMongoUtils.getGoodsSkuInfoVos(skuIdList);
List<List<GoblinGoodsSpecDto>> remainSkuSpecDtoList = goodsSkuInfoVos.stream()
.filter(r -> r.getDelFlg().equals("0")).map(GoblinGoodsSkuInfoVo::getSkuSpecList).collect(Collectors.toList());
Map<String, Set<String>> remainSkuSpecMap = new HashMap<>();
for (List<GoblinGoodsSpecDto> goblinGoodsSpecDtos : remainSkuSpecDtoList) {
for (GoblinGoodsSpecDto goblinGoodsSpecDto : goblinGoodsSpecDtos) {
String specName = goblinGoodsSpecDto.getSpecName(), specVname = goblinGoodsSpecDto.getSpecVname();
Set<String> remainSkuSpecVnameSet = remainSkuSpecMap.get(specName);
if (CollectionUtils.isEmpty(remainSkuSpecVnameSet)) {
remainSkuSpecVnameSet = CollectionUtil.getStringArraySet();
List<GoblinGoodsSkuInfoVo> remainGoodsSkuInfoVos = goblinMongoUtils.getGoodsSkuInfoVos(skuIdList);
Map<String, Set<String>> remainSkuSpecNameVnameMap = new HashMap<>();
int remainGoodsSkuInfoVoSize = remainGoodsSkuInfoVos.size();
for (int i = 0; i < remainGoodsSkuInfoVoSize; i++) {
GoblinGoodsSkuInfoVo remainGoodsSkuInfoVo = remainGoodsSkuInfoVos.get(i);
if (remainGoodsSkuInfoVo.getDelFlg().equals("0")) {// 有效SKU
List<GoblinGoodsSpecDto> remainGoodsSkuSpecDtoList = remainGoodsSkuInfoVo.getSkuSpecList();
for (GoblinGoodsSpecDto remainGoodsSkuSpecDto : remainGoodsSkuSpecDtoList) {
String remainGoodsSkuSpecDtoSpecName = remainGoodsSkuSpecDto.getSpecName();
String remainGoodsSkuSpecDtoSpecVname = remainGoodsSkuSpecDto.getSpecVname();
Set<String> remainSkuSpecVnameTmpSet = remainSkuSpecNameVnameMap.get(remainGoodsSkuSpecDtoSpecName);
if (CollectionUtils.isEmpty(remainSkuSpecVnameTmpSet)) {
remainSkuSpecVnameTmpSet = CollectionUtil.getStringArraySet();
}
remainSkuSpecVnameTmpSet.add(remainGoodsSkuSpecDtoSpecVname);
remainSkuSpecNameVnameMap.put(remainGoodsSkuSpecDtoSpecName, remainSkuSpecVnameTmpSet);
}
remainSkuSpecVnameSet.add(specVname);
remainSkuSpecMap.put(specName, remainSkuSpecVnameSet);
}
}
Map<String, String> delGoodsSkuSpecMap = goodsSkuInfoVo.getSkuSpecList().stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname));
List<GoblinGoodsSpecVo> specVoList = mgtGoodsInfoVo.getSpecVoList();
List<GoblinGoodsSpecVo> goodsInfoVoSpecVoList = mgtGoodsInfoVo.getSpecVoList();
List<GoblinGoodsSpecDto> delGoodsSkuInfoVoSkuSpecList = delGoodsSkuInfoVo.getSkuSpecList();
LinkedList<Object[]> updateGoodsSpuSpecObjs = CollectionUtil.linkedListObjectArr();
for (int i = 0; i < specVoList.size(); i++) {// 处理商品规格信息
GoblinGoodsSpecVo specVo = specVoList.get(i);// 商品指定规格
List<GoblinGoodsSpecValueVo> modifySpecValues = ObjectUtil.getGoblinGoodsSpecValueVoArrayList();
String specName = specVo.getSpecName();// 商品指定规格的名
Set<String> specVnameSet = remainSkuSpecMap.get(specName);// 剩余SKU指定规格的值集合
String delSpecVname = delGoodsSkuSpecMap.get(specName);// 需要删除的SKU下指定规格的规格值
List<GoblinGoodsSpecValueVo> specValues = specVo.getSpecValues();// 商品指定规格下所有规格值
Integer rmIdx = null;
specValues.sort(Comparator.comparing(GoblinGoodsSpecValueVo::getSpecVsort));
for (GoblinGoodsSpecValueVo specValue : specValues) {// 遍历指定规格下每个规格值
String specVname = specValue.getSpecVname();
int specVsort = specValue.getSpecVsort();
if (specVname.equals(delSpecVname)) {
if (CollectionUtils.isEmpty(specVnameSet)) break;
if (specVnameSet.contains(delSpecVname)) {// 剩余SKU指定规格的值集合,包含当前删除的规格值,则不做处理
modifySpecValues.addAll(specValues);
for (int i = 0; i < delGoodsSkuInfoVoSkuSpecList.size(); i++) {
GoblinGoodsSpecDto delGoodsSpecDto = delGoodsSkuInfoVoSkuSpecList.get(i);
String delGoodsSpecDtoSpecName = delGoodsSpecDto.getSpecName();
String delGoodsSpecDtoSpecVname = delGoodsSpecDto.getSpecVname();
Set<String> remainSkuSpecVnameSet = remainSkuSpecNameVnameMap.get(delGoodsSpecDtoSpecName);
if (CollectionUtils.isEmpty(remainSkuSpecVnameSet) || !remainSkuSpecVnameSet.contains(delGoodsSpecDtoSpecVname)) {// 其他SKU规格值中不存在当前删除SKU规格值,则删除该规格值
for (GoblinGoodsSpecVo goodsSpecVo : goodsInfoVoSpecVoList) {
if (goodsSpecVo.getSpecName().equals(delGoodsSpecDtoSpecName)) {
List<GoblinGoodsSpecValueVo> goodsSpecVoSpecValues = goodsSpecVo.getSpecValues();
goodsSpecVoSpecValues.removeIf(r -> r.getSpecVname().equals(delGoodsSpecDtoSpecVname));
goodsSpecVoSpecValues.sort(Comparator.comparing(GoblinGoodsSpecValueVo::getSpecVsort));
updateGoodsSpuSpecObjs.add(new Object[]{0, "1", spuId, delGoodsSpecDtoSpecName, delGoodsSpecDtoSpecVname});
for (int j = 0; j < goodsSpecVoSpecValues.size(); j++) {
GoblinGoodsSpecValueVo goodsSpecVoSpecValue = goodsSpecVoSpecValues.get(j);
goodsSpecVoSpecValue.setSpecVsort(j);
updateGoodsSpuSpecObjs.add(new Object[]{j, "0", spuId, delGoodsSpecDtoSpecName, goodsSpecVoSpecValue.getSpecVname()});
}
break;
} else {// 剩余SKU指定规格的值集合,不包含当前删除的规格值,则可以删除且记录排序以处理其他规格值排序
rmIdx = specVsort;
updateGoodsSpuSpecObjs.add(new Object[]{0, "1", spuId, specName, delSpecVname});
continue;
}
}
if (null != rmIdx && specVsort > rmIdx) {
specValue.setSpecVsort(specVsort - 1);
updateGoodsSpuSpecObjs.add(new Object[]{specVsort, "0", spuId, specName, specVname});
}
modifySpecValues.add(specValue);
}
specVo.setSpecValues(modifySpecValues);
}
LocalDateTime now = LocalDateTime.now();
goodsSkuInfoVo.setUpdatedBy(uid);
goodsSkuInfoVo.setUpdatedAt(now);
goodsSkuInfoVo.setDeletedBy(uid);
goodsSkuInfoVo.setDeletedAt(now);
delGoodsSkuInfoVo.setUpdatedBy(uid);
delGoodsSkuInfoVo.setUpdatedAt(now);
delGoodsSkuInfoVo.setDeletedBy(uid);
delGoodsSkuInfoVo.setDeletedAt(now);
List<String> delSkuIdList = goblinRedisUtils.getSkuRe(delSkuId);
delSkuIdList = null == delSkuIdList ? CollectionUtil.arrayListString() : delSkuIdList;
......@@ -815,7 +813,7 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
if (log.isDebugEnabled()) {
log.debug("商品管理:商品编辑:SKU删除[delSkuId={},skuReId={}]", delSkuId, JsonUtils.toJson(delSkuIdList));
}
if (goblinMongoUtils.delGoodsSkuInfoVo(goodsSkuInfoVo, delSkuIdList)) {
if (goblinMongoUtils.delGoodsSkuInfoVo(delGoodsSkuInfoVo, delSkuIdList)) {
delSkuIdList.forEach(skuId -> {
goblinRedisUtils.delGoodsSkuInfoVo(skuId);
goblinRedisUtils.delGoodsSkuInfoVoByUnShelves(skuId);
......
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