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 c) { + return list.addAll(c); + } + + @Override + public boolean addAll(int index, Collection 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); }