From 4af0056fca514ed13f5b315a9eafb5f98e1cd98b Mon Sep 17 00:00:00 2001
From: xjs <1294405880@qq.com>
Date: Thu, 24 Mar 2022 20:43:25 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81spu=E7=95=8C=E9=9D=A2=E8=A7=84?=
=?UTF-8?q?=E6=A0=BC=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/api/mall/product/attr.js | 18 ++
.../mall/product/attribute/attrupdate.vue | 175 ++++++++++++++++++
.../views/mall/product/maintain/spuinfo.vue | 4 +-
.../java/com/xjs/validation/ValidList.java | 134 ++++++++++++++
.../product/controller/AttrController.java | 23 ++-
.../entity/ProductAttrValueEntity.java | 8 +-
.../service/ProductAttrValueService.java | 14 ++
.../impl/ProductAttrValueServiceImpl.java | 20 ++
.../ware/service/impl/WareSkuServiceImpl.java | 17 +-
9 files changed, 401 insertions(+), 12 deletions(-)
create mode 100644 ruoyi-ui/src/views/mall/product/attribute/attrupdate.vue
create mode 100644 xjs-business/xjs-business-common/src/main/java/com/xjs/validation/ValidList.java
diff --git a/ruoyi-ui/src/api/mall/product/attr.js b/ruoyi-ui/src/api/mall/product/attr.js
index 757bc0c4..81e7e195 100644
--- a/ruoyi-ui/src/api/mall/product/attr.js
+++ b/ruoyi-ui/src/api/mall/product/attr.js
@@ -53,3 +53,21 @@ export function deleteRelation(ids) {
})
}
+// 查询商品规格属性
+export function baseAtteListForSpu(spuId) {
+ return request({
+ url: `/mall-product/product/attr/base/listforspu/${spuId}`,
+ method: 'get',
+ })
+}
+
+// 修改商品规格属性
+export function updateSpuAttr(spuId,data) {
+ return request({
+ url: `/mall-product/product/attr/update/${spuId}`,
+ method: 'put',
+ data:data
+ })
+}
+
+
diff --git a/ruoyi-ui/src/views/mall/product/attribute/attrupdate.vue b/ruoyi-ui/src/views/mall/product/attribute/attrupdate.vue
new file mode 100644
index 00000000..9faeec4f
--- /dev/null
+++ b/ruoyi-ui/src/views/mall/product/attribute/attrupdate.vue
@@ -0,0 +1,175 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 快速展示
+
+
+
+
+
+
+ 确认修改
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/views/mall/product/maintain/spuinfo.vue b/ruoyi-ui/src/views/mall/product/maintain/spuinfo.vue
index a5441e0f..1cb89152 100644
--- a/ruoyi-ui/src/views/mall/product/maintain/spuinfo.vue
+++ b/ruoyi-ui/src/views/mall/product/maintain/spuinfo.vue
@@ -94,10 +94,10 @@ export default {
}
});
},
+
attrUpdateShow(row) {
- console.log(row);
this.$router.push({
- path: "/product-attrupdate",
+ path: "/mall/product/mall-attribute/spu-attribute",
query: { spuId: row.id, catalogId: row.catalogId }
});
},
diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/validation/ValidList.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/validation/ValidList.java
new file mode 100644
index 00000000..6c801429
--- /dev/null
+++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/validation/ValidList.java
@@ -0,0 +1,134 @@
+package com.xjs.validation;
+
+import lombok.Data;
+
+import javax.validation.Valid;
+import java.util.*;
+
+/**
+ * 封装list
+ *
+ * 实现嵌套校验
+ * @author xiejs
+ * @since 2022-03-24
+ */
+@Data
+public class ValidList implements List {
+ @Valid
+ private List list = new ArrayList<>();
+
+ @Override
+ public int size() {
+ return list.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return list.isEmpty();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return list.contains(o);
+ }
+
+ @Override
+ public Iterator iterator() {
+ return list.iterator();
+ }
+
+ @Override
+ public Object[] toArray() {
+ return list.toArray();
+ }
+
+ @Override
+ public T[] toArray(T[] a) {
+ return list.toArray(a);
+ }
+
+ @Override
+ public boolean add(E e) {
+ return list.add(e);
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ return list.remove(o);
+ }
+
+ @Override
+ public boolean containsAll(Collection> c) {
+ return list.containsAll(c);
+ }
+
+ @Override
+ public boolean addAll(Collection extends E> c) {
+ return list.addAll(c);
+ }
+
+ @Override
+ public boolean addAll(int index, Collection extends E> c) {
+ return list.addAll(index, c);
+ }
+
+ @Override
+ public boolean removeAll(Collection> c) {
+ return list.removeAll(c);
+ }
+
+ @Override
+ public boolean retainAll(Collection> c) {
+ return list.retainAll(c);
+ }
+
+ @Override
+ public void clear() {
+ list.clear();
+ }
+
+ @Override
+ public E get(int index) {
+ return list.get(index);
+ }
+
+ @Override
+ public E set(int index, E element) {
+ return list.set(index, element);
+ }
+
+ @Override
+ public void add(int index, E element) {
+ list.add(index, element);
+ }
+
+ @Override
+ public E remove(int index) {
+ return list.remove(index);
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ return list.indexOf(o);
+ }
+
+ @Override
+ public int lastIndexOf(Object o) {
+ return list.lastIndexOf(o);
+ }
+
+ @Override
+ public ListIterator listIterator() {
+ return list.listIterator();
+ }
+
+ @Override
+ public ListIterator listIterator(int index) {
+ return list.listIterator(index);
+ }
+
+ @Override
+ public List subList(int fromIndex, int toIndex) {
+ return list.subList(fromIndex, toIndex);
+ }
+}
diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/AttrController.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/AttrController.java
index b8d8f071..d605112b 100644
--- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/AttrController.java
+++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/controller/AttrController.java
@@ -2,13 +2,16 @@ package com.xjs.mall.product.controller;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
+import com.xjs.mall.other.R;
import com.xjs.mall.product.entity.AttrEntity;
+import com.xjs.mall.product.entity.ProductAttrValueEntity;
import com.xjs.mall.product.service.AttrService;
+import com.xjs.mall.product.service.ProductAttrValueService;
import com.xjs.mall.product.vo.AttrGroupRelationVo;
import com.xjs.mall.product.vo.AttrResponseVo;
import com.xjs.mall.product.vo.AttrVo;
import com.xjs.utils.PageUtils;
-import com.xjs.mall.other.R;
+import com.xjs.validation.ValidList;
import com.xjs.validation.group.AddGroup;
import com.xjs.validation.group.UpdateGroup;
import com.xjs.web.MyBaseController;
@@ -36,6 +39,24 @@ import java.util.Map;
public class AttrController extends MyBaseController {
@Autowired
private AttrService attrService;
+ @Autowired
+ private ProductAttrValueService productAttrValueService;
+
+ @PutMapping("/update/{spuId}")
+ @ApiOperation("修改商品规格属性")
+ public R updateSpuAttr(@PathVariable Long spuId,
+ @Validated(UpdateGroup.class) @RequestBody ValidList entities) {
+ productAttrValueService.updateSpuAttr(spuId, entities);
+ return R.ok();
+ }
+
+ @GetMapping("base/listforspu/{spuId}")
+ @ApiOperation("查询商品规格属性")
+ public R baseAtteListForSpu(@PathVariable Long spuId) {
+ List list = productAttrValueService.baseAtteListForSpu(spuId);
+
+ return R.ok().put("data", list);
+ }
@DeleteMapping("relation/delete")
diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/ProductAttrValueEntity.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/ProductAttrValueEntity.java
index e867f9fe..1c9f1695 100644
--- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/ProductAttrValueEntity.java
+++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/entity/ProductAttrValueEntity.java
@@ -2,14 +2,15 @@ package com.xjs.mall.product.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.xjs.validation.group.UpdateGroup;
+import lombok.Data;
+import javax.validation.constraints.Size;
import java.io.Serializable;
-import java.util.Date;
-import lombok.Data;
/**
* spu属性值
- *
+ *
* @author xiejs
* @email 1294405880@qq.com
* @date 2022-03-15 10:16:53
@@ -39,6 +40,7 @@ public class ProductAttrValueEntity implements Serializable {
/**
* 属性值
*/
+ @Size(message = "属性值应小于 20 字符",groups = UpdateGroup.class,max = 20)
private String attrValue;
/**
* 顺序
diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/ProductAttrValueService.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/ProductAttrValueService.java
index bd37f492..211995fb 100644
--- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/ProductAttrValueService.java
+++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/ProductAttrValueService.java
@@ -22,5 +22,19 @@ public interface ProductAttrValueService extends IService baseAttrs,Long spuId);
+
+ /**
+ * 查询商品规格属性
+ * @param spuId spu id
+ * @return list
+ */
+ List baseAtteListForSpu(Long spuId);
+
+ /**
+ * 修改商品规格属性
+ * @param spuId spu id
+ * @param entities 要修改的集合
+ */
+ void updateSpuAttr(Long spuId, List entities);
}
diff --git a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/ProductAttrValueServiceImpl.java b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/ProductAttrValueServiceImpl.java
index 176a03aa..c56b3fd9 100644
--- a/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/ProductAttrValueServiceImpl.java
+++ b/xjs-business/xjs-project-mall/mall-product/src/main/java/com/xjs/mall/product/service/impl/ProductAttrValueServiceImpl.java
@@ -1,5 +1,6 @@
package com.xjs.mall.product.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xjs.mall.product.dao.ProductAttrValueDao;
import com.xjs.mall.product.entity.AttrEntity;
@@ -9,12 +10,14 @@ import com.xjs.mall.product.service.ProductAttrValueService;
import com.xjs.mall.product.vo.spu.BaseAttrs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Service("productAttrValueService")
+@Transactional
public class ProductAttrValueServiceImpl extends ServiceImpl implements ProductAttrValueService {
@Autowired
@@ -40,6 +43,23 @@ public class ProductAttrValueServiceImpl extends ServiceImpl baseAtteListForSpu(Long spuId) {
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(ProductAttrValueEntity::getSpuId, spuId);
+ return super.baseMapper.selectList(wrapper);
+ }
+
+ @Override
+ public void updateSpuAttr(Long spuId, List entities) {
+ //删除这个spuId之前对应的所有属性
+ super.baseMapper.delete(new LambdaQueryWrapper().eq(ProductAttrValueEntity::getSpuId, spuId));
+
+ //更新
+ List collect = entities.stream().peek(item -> item.setSpuId(spuId)).collect(Collectors.toList());
+
+ super.saveBatch(collect);
+ }
}
diff --git a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareSkuServiceImpl.java b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareSkuServiceImpl.java
index 25fb313b..0f03496e 100644
--- a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareSkuServiceImpl.java
+++ b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareSkuServiceImpl.java
@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.xjs.mall.RemoteProductFeign;
@@ -17,6 +16,7 @@ import com.xjs.mall.ware.service.WareSkuService;
import com.xjs.mall.ware.vo.WareSkuVo;
import com.xjs.utils.PageUtils;
import com.xjs.utils.Query;
+import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -29,6 +29,7 @@ import java.util.stream.Collectors;
@Service("wareSkuService")
@Transactional
+@Log4j2
public class WareSkuServiceImpl extends ServiceImpl implements WareSkuService {
@Autowired
@@ -78,14 +79,18 @@ public class WareSkuServiceImpl extends ServiceImpl i
wareSkuEntity.setWareId(wareId);
wareSkuEntity.setStockLocked(0);
- //远程查询sku的名字
- R r = remoteProductFeign.getSkuNameById(skuId);
- if (r.getCode() == HttpStatus.SUCCESS) {
- wareSkuEntity.setSkuName((String) r.get("msg"));
+ //远程查询sku的名字 没写降级,所以需要try catch
+ try {
+ R r = remoteProductFeign.getSkuNameById(skuId);
+ if (r.getCode() == 0) {
+ wareSkuEntity.setSkuName((String) r.get("msg"));
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage());
}
super.baseMapper.insert(wareSkuEntity);
- }else {
+ } else {
super.baseMapper.addStock(skuId, wareId, skuNum);
}