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

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

~API:SKU删除优化;

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