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

Commit 43767c0b authored by 张国柄's avatar 张国柄

~API:商品管理:SKU编辑;

parent ce553850
...@@ -7,6 +7,7 @@ import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo; ...@@ -7,6 +7,7 @@ import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
...@@ -62,24 +63,31 @@ public class GoblinStoreMgtGoodsEditSkuParam implements Serializable { ...@@ -62,24 +63,31 @@ public class GoblinStoreMgtGoodsEditSkuParam implements Serializable {
private Integer operStock; private Integer operStock;
public GoblinGoodsSkuInfoVo initEditGoodsSkuInfoVo() { public GoblinGoodsSkuInfoVo initEditGoodsSkuInfoVo() {
GoblinGoodsSkuInfoVo vo = GoblinGoodsSkuInfoVo.getNew(); GoblinGoodsSkuInfoVo goodsSkuInfoVo = GoblinGoodsSkuInfoVo.getNew();
vo.setSkuId(this.getSkuId()); List<GoblinGoodsSpecDto> skuSpecList = this.getSkuSpecList();
vo.setSkuPic(this.getSkuPic()); if (!CollectionUtils.isEmpty(skuSpecList)) {
vo.setSkuSpecList(this.getSkuSpecList()); goodsSkuInfoVo.setName("");
vo.setSellPrice(this.getSellPrice()); for (GoblinGoodsSpecDto goblinGoodsSpecDto : skuSpecList) {
vo.setPrice(this.getPrice()); goodsSkuInfoVo.setName(goodsSkuInfoVo.getName().concat(goblinGoodsSpecDto.getSpecVname()));
vo.setPriceMember(this.getPriceMember()); }
vo.setWeight(this.getWeight()); }
vo.setStock(this.getStock()); goodsSkuInfoVo.setSkuId(this.getSkuId());
vo.setSkuStock(this.getSkuStock()); goodsSkuInfoVo.setSkuPic(this.getSkuPic());
vo.setWarningStock(this.getWarningStock()); goodsSkuInfoVo.setSkuSpecList(skuSpecList);
vo.setSkuAppear(this.getSkuAppear()); goodsSkuInfoVo.setSellPrice(this.getSellPrice());
vo.setSkuIsbn(this.getSkuIsbn()); goodsSkuInfoVo.setPrice(this.getPrice());
vo.setBuyFactor(this.getBuyFactor()); goodsSkuInfoVo.setPriceMember(this.getPriceMember());
vo.setBuyRoster(this.getBuyRoster()); goodsSkuInfoVo.setWeight(this.getWeight());
vo.setBuyLimit(this.getBuyLimit()); goodsSkuInfoVo.setStock(this.getStock());
vo.setSkuValidity(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getSkuValidity())); goodsSkuInfoVo.setSkuStock(this.getSkuStock());
return vo; goodsSkuInfoVo.setWarningStock(this.getWarningStock());
goodsSkuInfoVo.setSkuAppear(this.getSkuAppear());
goodsSkuInfoVo.setSkuIsbn(this.getSkuIsbn());
goodsSkuInfoVo.setBuyFactor(this.getBuyFactor());
goodsSkuInfoVo.setBuyRoster(this.getBuyRoster());
goodsSkuInfoVo.setBuyLimit(this.getBuyLimit());
goodsSkuInfoVo.setSkuValidity(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getSkuValidity()));
return goodsSkuInfoVo;
} }
public GoblinGoodsSkuInfoVo initEditAddGoodsSkuInfoVo() { public GoblinGoodsSkuInfoVo initEditAddGoodsSkuInfoVo() {
......
...@@ -46,11 +46,12 @@ public interface IGoblinstoreMgtGoodsService { ...@@ -46,11 +46,12 @@ public interface IGoblinstoreMgtGoodsService {
/** /**
* 商品管理:商品编辑:SKU编辑 * 商品管理:商品编辑:SKU编辑
* *
* @param uid UID
* @param storeMgtGoodsEditSkuParam GoblinStoreMgtGoodsEditSkuParam * @param storeMgtGoodsEditSkuParam GoblinStoreMgtGoodsEditSkuParam
* @param goodsInfoVo GoblinGoodsInfoVo * @param goodsInfoVo GoblinGoodsInfoVo
* @return boolean * @return boolean
*/ */
boolean goodsEditSku(GoblinStoreMgtGoodsEditSkuParam storeMgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo); boolean goodsEditSku(String uid, GoblinStoreMgtGoodsEditSkuParam storeMgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo);
/** /**
* 商品管理:商品编辑:SKU添加 * 商品管理:商品编辑:SKU添加
......
...@@ -214,7 +214,8 @@ public class GoblinStoreMgtGoodsController { ...@@ -214,7 +214,8 @@ public class GoblinStoreMgtGoodsController {
@ApiOperation(value = "商品编辑:SKU编辑", notes = "只修改单品信息,不包含商品信息") @ApiOperation(value = "商品编辑:SKU编辑", notes = "只修改单品信息,不包含商品信息")
@PostMapping("edit_sku") @PostMapping("edit_sku")
public ResponseDto<Object> editSku(@Valid @RequestBody GoblinStoreMgtGoodsEditSkuParam storeMgtGoodsEditSkuParam) { public ResponseDto<Object> editSku(@Valid @RequestBody GoblinStoreMgtGoodsEditSkuParam storeMgtGoodsEditSkuParam) {
if (!goblinRedisUtils.hasStoreId(CurrentUtil.getCurrentUid(), storeMgtGoodsEditSkuParam.getStoreId())) { String currentUid = CurrentUtil.getCurrentUid();
if (!goblinRedisUtils.hasStoreId(currentUid, storeMgtGoodsEditSkuParam.getStoreId())) {
return ResponseDto.failure(ErrorMapping.get("149002")); return ResponseDto.failure(ErrorMapping.get("149002"));
} }
GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo = goblinRedisUtils.getMgtGoodsSkuInfoVo(storeMgtGoodsEditSkuParam.getSkuId()); GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo = goblinRedisUtils.getMgtGoodsSkuInfoVo(storeMgtGoodsEditSkuParam.getSkuId());
...@@ -252,15 +253,27 @@ public class GoblinStoreMgtGoodsController { ...@@ -252,15 +253,27 @@ public class GoblinStoreMgtGoodsController {
storeMgtGoodsEditSkuParam.setStock(stock + operStockVal); storeMgtGoodsEditSkuParam.setStock(stock + operStockVal);
} }
} }
List<GoblinGoodsSpecDto> paramSkuSpecList = storeMgtGoodsEditSkuParam.getSkuSpecList();
List<String> skuIdList = goodsInfoVo.getSkuIdList(); List<String> skuIdList = goodsInfoVo.getSkuIdList();
for (String skuId : skuIdList) {// 比对所有SKU规格信息 for (String skuId : skuIdList) {// 比对所有SKU规格信息
GoblinGoodsSkuInfoVo existMgtGoodsSkuInfoVo = goblinRedisUtils.getMgtGoodsSkuInfoVo(skuId); GoblinGoodsSkuInfoVo existMgtGoodsSkuInfoVo = goblinRedisUtils.getMgtGoodsSkuInfoVo(skuId);
Map<String, String> editBefSkuSpecMap = existMgtGoodsSkuInfoVo.getSkuSpecList().stream() Map<String, String> editBefSkuSpecMap = existMgtGoodsSkuInfoVo.getSkuSpecList().stream()
.collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2)); .collect(Collectors.toMap(GoblinGoodsSpecDto::getSpecName, GoblinGoodsSpecDto::getSpecVname, (k1, k2) -> k2));
boolean diffSpecFlg = false; boolean diffSpecFlg = false;
List<GoblinGoodsSpecDto> paramSkuSpecList = storeMgtGoodsEditSkuParam.getSkuSpecList(); if (paramSkuSpecList.size() != editBefSkuSpecMap.size()) {
log.warn("商品管理:商品编辑:SKU编辑:规格信息不一致[skuId={},editBefSkuSpecMap={},paramGoodsSpecDto={}]",
paramSkuId, editBefSkuSpecMap, paramSkuSpecList);
return ResponseDto.failure(ErrorMapping.get("149014"));
}
for (GoblinGoodsSpecDto paramGoodsSpecDto : paramSkuSpecList) { for (GoblinGoodsSpecDto paramGoodsSpecDto : paramSkuSpecList) {
if (!editBefSkuSpecMap.get(paramGoodsSpecDto.getSpecName()).equals(paramGoodsSpecDto.getSpecVname())) { String editBefSkuSpecVname = editBefSkuSpecMap.get(paramGoodsSpecDto.getSpecName());
if (null == editBefSkuSpecVname) {// 入参规格不存在于原SKU中,则参数有误
log.warn("商品管理:商品编辑:SKU编辑:规格信息不一致[skuId={},editBefSkuSpecMap={},paramGoodsSpecDto={}]",
paramSkuId, editBefSkuSpecMap, paramGoodsSpecDto);
return ResponseDto.failure(ErrorMapping.get("149014"));
}
if (!editBefSkuSpecVname.equals(paramGoodsSpecDto.getSpecVname())) {
diffSpecFlg = true;// 多个规格中只要存在一个不一致,即可跳过,标记为允许添加 diffSpecFlg = true;// 多个规格中只要存在一个不一致,即可跳过,标记为允许添加
break; break;
} }
...@@ -275,11 +288,11 @@ public class GoblinStoreMgtGoodsController { ...@@ -275,11 +288,11 @@ public class GoblinStoreMgtGoodsController {
if (specVo.getSpecName().equals(entry.getKey())) { if (specVo.getSpecName().equals(entry.getKey())) {
List<GoblinGoodsSpecValueVo> specValues = specVo.getSpecValues(); List<GoblinGoodsSpecValueVo> specValues = specVo.getSpecValues();
int idx = IntStream.range(0, specValues.size()) int idx = IntStream.range(0, specValues.size())
.filter(i -> specValues.get(i).getSpecVname().equals(entry.getValue())) .filter(i -> specValues.get(i).getSpecVname().equals(entry.getValue())).findFirst().orElse(-1);
.findFirst().orElse(-1);
if (idx == -1) { if (idx == -1) {
log.warn("商品管理:商品编辑:SKU编辑:规格信息不一致[specVoList={},editBefSkuSpecMap={}]", JsonUtils.toJson(specVoList), editBefSkuSpecMap); log.warn("商品管理:商品编辑:SKU编辑:规格信息不一致[skuId={},specVoList={},editBefSkuSpecMap={}]",
return ResponseDto.failure(ErrorMapping.get("149013")); paramSkuId, JsonUtils.toJson(specValues), editBefSkuSpecMap);
return ResponseDto.failure(ErrorMapping.get("149014"));
} else { } else {
specValues.get(idx).setSpecVname(paramSkuSpecMap.get(specVo.getSpecName())); specValues.get(idx).setSpecVname(paramSkuSpecMap.get(specVo.getSpecName()));
} }
...@@ -292,11 +305,12 @@ public class GoblinStoreMgtGoodsController { ...@@ -292,11 +305,12 @@ public class GoblinStoreMgtGoodsController {
continue; continue;
} }
if (!diffSpecFlg) { if (!diffSpecFlg) {
log.warn("商品管理:商品编辑:SKU编辑:重复的规格信息[editBefSkuSpecMap={},paramSkuSpecMap={}]", editBefSkuSpecMap, JsonUtils.toJson(paramSkuSpecList)); log.warn("商品管理:商品编辑:SKU编辑:重复的规格信息[skuId={},editBefSkuSpecMap={},paramSkuSpecMap={}]",
return ResponseDto.failure(ErrorMapping.get("149014")); paramSkuId, editBefSkuSpecMap, JsonUtils.toJson(paramSkuSpecList));
return ResponseDto.failure(ErrorMapping.get("149015"));
} }
} }
if (goblinstoreMgtGoodsService.goodsEditSku(storeMgtGoodsEditSkuParam, goodsInfoVo)) { if (goblinstoreMgtGoodsService.goodsEditSku(currentUid, storeMgtGoodsEditSkuParam, goodsInfoVo)) {
return ResponseDto.success(goblinRedisUtils.getMgtGoodsSkuInfoVo(paramSkuId)); return ResponseDto.success(goblinRedisUtils.getMgtGoodsSkuInfoVo(paramSkuId));
} else { } else {
if (null != operStock && operStock != 0) {// 处理库存:回滚 if (null != operStock && operStock != 0) {// 处理库存:回滚
...@@ -337,7 +351,7 @@ public class GoblinStoreMgtGoodsController { ...@@ -337,7 +351,7 @@ public class GoblinStoreMgtGoodsController {
} }
if (!diffSpecFlg) { if (!diffSpecFlg) {
log.warn("商品管理:商品编辑:SKU添加:重复的规格信息[skuSpecMap={},paramSkuSpecMap={}]", skuSpecMap, JsonUtils.toJson(skuSpecList)); log.warn("商品管理:商品编辑:SKU添加:重复的规格信息[skuSpecMap={},paramSkuSpecMap={}]", skuSpecMap, JsonUtils.toJson(skuSpecList));
return ResponseDto.failure(ErrorMapping.get("149014")); return ResponseDto.failure(ErrorMapping.get("149015"));
} }
} }
List<GoblinGoodsSpecVo> specVoList = goodsInfoVo.getSpecVoList(); List<GoblinGoodsSpecVo> specVoList = goodsInfoVo.getSpecVoList();
......
...@@ -209,12 +209,19 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -209,12 +209,19 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
} }
@Override @Override
public boolean goodsEditSku(GoblinStoreMgtGoodsEditSkuParam storeMgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo) { public boolean goodsEditSku(String uid, GoblinStoreMgtGoodsEditSkuParam storeMgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo) {
GoblinGoodsSkuInfoVo editGoodsSkuInfoVo = storeMgtGoodsEditSkuParam.initEditGoodsSkuInfoVo(); GoblinGoodsSkuInfoVo editGoodsSkuInfoVo = storeMgtGoodsEditSkuParam.initEditGoodsSkuInfoVo();
editGoodsSkuInfoVo.setUpdatedBy(uid);
editGoodsSkuInfoVo.setUpdatedAt(LocalDateTime.now());
if (goblinMongoUtils.updateGoodsSkuInfoVo(editGoodsSkuInfoVo)) { if (goblinMongoUtils.updateGoodsSkuInfoVo(editGoodsSkuInfoVo)) {
goblinRedisUtils.setSkuStock(null, editGoodsSkuInfoVo.getSkuId(), editGoodsSkuInfoVo.getSkuStock()); Integer operStock = storeMgtGoodsEditSkuParam.getOperStock();
if (null != operStock && operStock != 0) {
goblinRedisUtils.setSkuStock(null, editGoodsSkuInfoVo.getSkuId(), editGoodsSkuInfoVo.getSkuStock());
}
if (!CollectionUtils.isEmpty(storeMgtGoodsEditSkuParam.getSkuSpecList())) {// 更改了规格,需要同步SPU里的规格信息 if (!CollectionUtils.isEmpty(storeMgtGoodsEditSkuParam.getSkuSpecList())) {// 更改了规格,需要同步SPU里的规格信息
goodsInfoVo.setUpdatedBy(uid);
goodsInfoVo.setUpdatedAt(editGoodsSkuInfoVo.getUpdatedAt());
goblinMongoUtils.updateGoodsInfoVo(goodsInfoVo); goblinMongoUtils.updateGoodsInfoVo(goodsInfoVo);
} }
// TODO: 2022/1/5 zhanggb redis+sql // TODO: 2022/1/5 zhanggb redis+sql
......
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
149011=SKU不存在,请核实 149011=SKU不存在,请核实
149012=SKU库存不足,请核实 149012=SKU库存不足,请核实
149013=SKU编辑失败 149013=SKU编辑失败
149014=SKU添加失败,重复的规格信息 149014=SKU编辑失败,规格信息有误
149015=SKU添加失败,重复的规格信息
148001=库存不足 148001=库存不足
......
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