From 291d1816a503ab037ff31efd4474441dfaebba4f Mon Sep 17 00:00:00 2001 From: xiaohuang <1559741705@qq.com> Date: Tue, 2 Apr 2024 17:32:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E5=85=A8=E9=83=A8=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- muyu-common/muyu-common-cache/pom.xml | 26 +++ .../java/com/muyu/common/cache/Cache.java | 43 +++++ .../java/com/muyu/common/cache/HashCache.java | 97 ++++++++++ .../com/muyu/common/cache/abs/CacheAbs.java | 96 ++++++++++ .../muyu/common/cache/abs/HashCacheAbs.java | 169 ++++++++++++++++++ .../cache/decoration/DecorationKey.java | 30 ++++ muyu-common/muyu-common-core/pom.xml | 1 + .../common/redis/service/RedisService.java | 2 +- muyu-common/pom.xml | 1 + .../muyu-product-cache/.gitignore | 38 ++++ .../muyu-product/muyu-product-cache/pom.xml | 33 ++++ .../muyu/product/cache/ProjectInfoCache.java | 78 ++++++++ .../muyu/product/cache/ProjectSkuCache.java | 9 + .../product/cache/ProjectSkuStockCache.java | 9 + .../cache/datasource/ProjectInfoData.java | 19 ++ .../muyu-product/muyu-product-common/pom.xml | 1 + .../domain/AsProductAttributeInfo.java | 10 ++ .../com/muyu/product/domain/ProjectInfo.java | 34 ++-- .../muyu/product/domain/ProjectSkuInfo.java | 13 ++ .../com/muyu/product/domain/demo/ShiTi.java | 42 ----- .../product/domain/model/AttrValueModel.java | 29 +++ .../domain/model/AttributeGroupAddModel.java | 31 ---- .../domain/model/AttributeGroupSaveModel.java | 2 +- .../product/domain/model/ProductSkuModel.java | 38 ++++ .../product/domain/model/ProjectAddModel.java | 59 ++++++ .../domain/model/TemplateAttributeModel.java | 9 + .../domain/req/ProjectInfoEditReq.java | 6 +- .../domain/req/ProjectInfoQueryReq.java | 6 +- .../domain/req/ProjectInfoSaveReq.java | 69 ++----- .../domain/resp/ProjectDetailResp.java | 64 +++++++ .../muyu-product/muyu-product-server/pom.xml | 12 ++ .../cache/impl/ProjectInfoDataImpl.java | 30 ++++ .../controller/AttributeGroupController.java | 4 +- .../controller/ProjectInfoController.java | 29 ++- .../product/service/AttributeInfoService.java | 2 +- .../product/service/CategoryInfoService.java | 2 + .../product/service/ProjectInfoService.java | 15 ++ .../impl/AttributeGroupServiceImpl.java | 26 ++- .../impl/AttributeInfoServiceImpl.java | 1 - .../service/impl/CategoryInfoServiceImpl.java | 14 +- .../service/impl/ProjectInfoServiceImpl.java | 155 +++++++++++++++- muyu-modules/muyu-product/pom.xml | 1 + muyu-modules/muyu-product/结构 | 26 +++ pom.xml | 9 +- 44 files changed, 1214 insertions(+), 176 deletions(-) create mode 100644 muyu-common/muyu-common-cache/pom.xml create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java create mode 100644 muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/.gitignore create mode 100644 muyu-modules/muyu-product/muyu-product-cache/pom.xml create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java create mode 100644 muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/ProjectInfoData.java delete mode 100644 muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/demo/ShiTi.java create mode 100644 muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttrValueModel.java delete mode 100644 muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupAddModel.java create mode 100644 muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java create mode 100644 muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectAddModel.java create mode 100644 muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/ProjectDetailResp.java create mode 100644 muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java create mode 100644 muyu-modules/muyu-product/结构 diff --git a/muyu-common/muyu-common-cache/pom.xml b/muyu-common/muyu-common-cache/pom.xml new file mode 100644 index 0000000..c6778f0 --- /dev/null +++ b/muyu-common/muyu-common-cache/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + com.muyu + muyu-common + 3.6.3 + + + muyu-common-cache + + + 17 + 17 + UTF-8 + + + + + com.muyu + muyu-common-redis + + + diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java new file mode 100644 index 0000000..9d96206 --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java @@ -0,0 +1,43 @@ +package com.muyu.common.cache; + +import com.muyu.common.cache.decoration.DecorationKey; + +/** + * @author DongZl + * @description: 缓存接口基类 + * @Date 2024-3-26 下午 03:25 + */ +public interface Cache extends DecorationKey { + + /** + * 通过Key获取value值 + * @param key 键 + * @return 值 + */ + public V get(K key); + + /** + * 缓存添加/修改 + * @param key 键 + * @param value 值 + */ + public void put(K key, V value); + + /** + * 通过键删除 + * @param key 键 + */ + public void remove(K key); + + /** + * 刷新缓存时间 + * @param key 键 + */ + public void refreshTime (K key); + + /** + * 刷新缓存数据 + * @param key 键 + */ + public void refreshData (K key); +} diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java new file mode 100644 index 0000000..dff5fec --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/HashCache.java @@ -0,0 +1,97 @@ +package com.muyu.common.cache; + +import com.muyu.common.cache.decoration.DecorationKey; + +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +/** + * @author DongZl + * @description: Hash缓存基准 + * @Date 2024-3-29 下午 03:16 + */ +public interface HashCache extends DecorationKey { + + + /** + * 编码 + * @param hashKey ID + * @return 键 + */ + public String encodeHashKey(HK hashKey); + + /** + * 解码 + * @param redisHashKey 数据库键 + * @return ID + */ + public HK decodeHashKey(String redisHashKey); + + /** + * 通过Key获取所有的map + * @param key 数据库键 + * @return 所有集合Map + */ + public Map get(K key); + + /** + * 通过键和hashKey获取数据库hashValue + * @param key 键 + * @param hashKey hash键 + * @return hash值 + */ + public HV get(K key, HK hashKey); + + /** + * 通过键和hashKey获取数据库hashValue + * @param key 键 + * @param hashKeyList hash键集合 + * @return hash值 + */ + public List get(K key, HK... hashKeyList); + + /** + * 获取hash值集合 + * @param key 键 + * @return hash值集合 + */ + public List getToList(K key); + + /** + * 存储数据 + * @param key redis键 + * @param map hashMap集合 + */ + public void put(K key, Map map); + + /** + * 存储数据 + * @param key redis键 + * @param dataList 数据值 + * @param hashKey hash键 + */ + public void put(K key, List dataList, Function hashKey); + + /** + * 存储数据 + * @param key redis键 + * @param hashKey hash键 + * @param hashValue hash值 + */ + public void put(K key, HK hashKey, HV hashValue); + + /** + * 通过redis键删除 + * @param key hash键 + */ + public void remove(K key); + + /** + * 通过redis键和hash键删除 + * @param key redis键 + * @param hashKey hash键 + */ + public void remove(K key, HK hashKey); + +} diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java new file mode 100644 index 0000000..d2bf765 --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/CacheAbs.java @@ -0,0 +1,96 @@ +package com.muyu.common.cache.abs; + +import com.muyu.common.cache.Cache; +import com.muyu.common.redis.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.concurrent.TimeUnit; + +/** + * @author DongZl + * @description: 缓存抽象类 + * @Date 2024-3-27 下午 03:10 + */ +public abstract class CacheAbs implements Cache { + + @Autowired + private RedisService redisService; + + /** + * 编码 + * @param key ID + * @return 键 + */ + @Override + public String encode (K key) { + return keyPre() + key; + } + + /** + * 通过Key获取value值 + * @param key 键 + * @return 值 + */ + @Override + public V get (K key) { + V value = redisService.getCacheObject(encode(key)); + if (value == null){ + value = getData(key); + if (value == null){ + value = defaultValue(); + } + } + this.put(key, value); + return value; + } + + /** + * 缓存添加/修改 + * @param key 键 + * @param value 值 + */ + @Override + public void put (K key, V value) { + this.redisService.setCacheObject(encode(key), value); + } + + /** + * 通过键删除 + * @param key 键 + */ + @Override + public void remove (K key) { + this.redisService.deleteObject(encode(key)); + } + + /** + * 刷新缓存 + * @param key 键 + */ + @Override + public void refreshTime (K key) { + this.redisService.expire(encode(key), 60, TimeUnit.SECONDS); + } + + /** + * 刷新缓存数据 + * + * @param key 键 + */ + @Override + public void refreshData (K key) { + this.put(key, getData(key)); + } + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + public abstract V getData(K key); + + /** + * 默认值 + */ + public abstract V defaultValue(); +} diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java new file mode 100644 index 0000000..126fbf0 --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/abs/HashCacheAbs.java @@ -0,0 +1,169 @@ +package com.muyu.common.cache.abs; + +import com.muyu.common.cache.HashCache; +import com.muyu.common.redis.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.*; +import java.util.function.Function; + +/** + * @author DongZl + * @description: hash缓存抽象类 + * @Date 2024-3-29 下午 07:40 + */ +public abstract class HashCacheAbs implements HashCache { + + @Autowired + private RedisService redisService; + + /** + * 编码 + * + * @param key ID + * + * @return 键 + */ + @Override + public String encode (K key) { + return keyPre() + key; + } + + /** + * 编码 + * @param hashKey ID + * @return 键 + */ + @Override + public String encodeHashKey (HK hashKey) { + return hashKey.toString(); + } + + /** + * 通过Key获取所有的map + * @param key 数据库键 + * @return 所有集合Map + */ + @Override + public Map get (K key) { + return decodeMap(redisService.getCacheMap(encode(key))); + } + + /** + * 通过键和hashKey获取数据库hashValue + * + * @param key 键 + * @param hashKey hash键 + * + * @return hash值 + */ + @Override + public HV get (K key, HK hashKey) { + return redisService.getCacheMapValue(encode(key), encodeHashKey(hashKey)); + } + + /** + * 通过键和hashKey获取数据库hashValue + * + * @param key 键 + * @param hashKeyList hash键集合 + * + * @return hash值 + */ + @Override + public List get (K key, HK... hashKeyList) { + List encodeHashKeyList = Arrays.stream(hashKeyList).map(this::encodeHashKey).toList(); + return redisService.getMultiCacheMapValue(encode(key), encodeHashKeyList); + } + + /** + * 获取hash值集合 + * + * @param key 键 + * + * @return hash值集合 + */ + @Override + public List getToList (K key) { + Map hkhvMap = get(key); + return hkhvMap.values().stream().toList(); + } + + /** + * 存储数据 + * + * @param key redis键 + * @param map hashMap集合 + */ + @Override + public void put (K key, Map map) { + redisService.setCacheMap(encode(key), encodeMap(map)); + } + + /** + * 存储数据 + * + * @param key redis键 + * @param dataList 数据值 + * @param hashKey hash键 + */ + @Override + public void put (K key, List dataList, Function hashKey) { + + } + + /** + * 存储数据 + * + * @param key redis键 + * @param hashKey hash键 + * @param hashValue hash值 + */ + @Override + public void put (K key, HK hashKey, HV hashValue) { + + } + + /** + * 通过redis键删除 + * + * @param key hash键 + */ + @Override + public void remove (K key) { + + } + + /** + * 通过redis键和hash键删除 + * + * @param key redis键 + * @param hashKey hash键 + */ + @Override + public void remove (K key, HK hashKey) { + + } + + /** + * 原始数据转编码数据 + * @param dataMap 原始数据 + * @return 编码数据 + */ + private Map encodeMap(Map dataMap){ + Map encodeDataMap = new HashMap<>(); + dataMap.forEach((hashKey, HashValue) -> encodeDataMap.put(encodeHashKey(hashKey), HashValue)); + return encodeDataMap; + } + + /** + * 编码数据转原始数据 + * @param encodeDataMap 编码数据 + * @return 原始数据 + */ + private Map decodeMap(Map encodeDataMap){ + Map dataMap = new HashMap<>(); + encodeDataMap.forEach((hashKey, hashValue) -> dataMap.put(decodeHashKey(hashKey), hashValue)); + return dataMap; + } +} diff --git a/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java new file mode 100644 index 0000000..284b09a --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/decoration/DecorationKey.java @@ -0,0 +1,30 @@ +package com.muyu.common.cache.decoration; + +/** + * @author DongZl + * @description: 装饰Key + * @Date 2024-3-29 下午 03:19 + */ +public interface DecorationKey { + + /** + * key前缀 + * @return key前缀 + */ + public String keyPre(); + + + /** + * 编码 + * @param key ID + * @return 键 + */ + public String encode(K key); + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + public K decode(String redisKey); +} diff --git a/muyu-common/muyu-common-core/pom.xml b/muyu-common/muyu-common-core/pom.xml index d7ff491..cd28ded 100644 --- a/muyu-common/muyu-common-core/pom.xml +++ b/muyu-common/muyu-common-core/pom.xml @@ -7,6 +7,7 @@ muyu-common 3.6.3 + 4.0.0 muyu-common-core diff --git a/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java b/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java index db90c1e..e5d92bf 100644 --- a/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java +++ b/muyu-common/muyu-common-redis/src/main/java/com/muyu/common/redis/service/RedisService.java @@ -229,7 +229,7 @@ public class RedisService { * * @return Hash对象集合 */ - public List getMultiCacheMapValue (final String key, final Collection hKeys) { + public List getMultiCacheMapValue (final String key, final Collection hKeys) { return redisTemplate.opsForHash().multiGet(key, hKeys); } diff --git a/muyu-common/pom.xml b/muyu-common/pom.xml index 5b58e93..ca042b2 100644 --- a/muyu-common/pom.xml +++ b/muyu-common/pom.xml @@ -18,6 +18,7 @@ muyu-common-datascope muyu-common-datasource muyu-common-system + muyu-common-cache muyu-common diff --git a/muyu-modules/muyu-product/muyu-product-cache/.gitignore b/muyu-modules/muyu-product/muyu-product-cache/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/muyu-modules/muyu-product/muyu-product-cache/pom.xml b/muyu-modules/muyu-product/muyu-product-cache/pom.xml new file mode 100644 index 0000000..5a88733 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + com.muyu + muyu-product + 3.6.3 + + + muyu-product-cache + + + 17 + 17 + UTF-8 + + + + + com.muyu + muyu-common-cache + + + + com.muyu + muyu-product-common + + + + + diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java new file mode 100644 index 0000000..9aee076 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java @@ -0,0 +1,78 @@ +package com.muyu.product.cache; + +import com.muyu.common.cache.HashCache; +import com.muyu.common.cache.abs.CacheAbs; +import com.muyu.common.core.text.Convert; +import com.muyu.product.cache.datasource.ProjectInfoData; +import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.domain.ProjectSkuInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.List; + +/** + * @author DongZl + * @description: 商品缓存 + * @Date 2024-3-27 下午 03:30 + */ +@Component +public class ProjectInfoCache extends CacheAbs { + + public static void main (String[] args) { + Long projectId = 10L; + HashCache hashCache = null; + List projectSkuInfoList = new ArrayList<>(){{ + add(new ProjectSkuInfo()); + add(new ProjectSkuInfo()); + }}; + hashCache.put(projectId, projectSkuInfoList, ProjectSkuInfo::getProjectId); + Long[] longArr = new Long[]{10L,11L,12L,13L,14L,15L}; + hashCache.get(projectId, longArr); + } + + @Autowired + private ProjectInfoData projectInfoData; + + /** + * key前缀 + * + * @return key前缀 + */ + @Override + public String keyPre () { + return "project:info:"; + } + + /** + * 解码 + * + * @param redisKey 数据库键 + * + * @return ID + */ + @Override + public Long decode (String redisKey) { + return Convert.toLong(redisKey.replace(keyPre(),""), 0L); + } + + /** + * 从数据库获取数据 + * + * @param key ID + * + * @return 缓存对象 + */ + @Override + public ProjectInfo getData (Long key) { + return projectInfoData.getData(key); + } + + /** + * 默认值 + */ + @Override + public ProjectInfo defaultValue () { + return new ProjectInfo(); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java new file mode 100644 index 0000000..c268357 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuCache.java @@ -0,0 +1,9 @@ +package com.muyu.product.cache; + +/** + * @author DongZl + * @description: 商品sku基本信息 + * @Date 2024-3-29 下午 03:06 + */ +public class ProjectSkuCache { +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java new file mode 100644 index 0000000..3e92a40 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectSkuStockCache.java @@ -0,0 +1,9 @@ +package com.muyu.product.cache; + +/** + * @author DongZl + * @description: 商品SKU库存缓存 + * @Date 2024-3-29 下午 03:06 + */ +public class ProjectSkuStockCache { +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/ProjectInfoData.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/ProjectInfoData.java new file mode 100644 index 0000000..73be8d3 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/ProjectInfoData.java @@ -0,0 +1,19 @@ +package com.muyu.product.cache.datasource; + +import com.muyu.product.domain.ProjectInfo; + +/** + * @author DongZl + * @description: 缓存数据获取 + * @Date 2024-3-27 下午 03:34 + */ +public interface ProjectInfoData { + + /** + * 从数据库获取数据 + * + * @param key ID + * @return 缓存对象 + */ + public ProjectInfo getData (Long key); +} diff --git a/muyu-modules/muyu-product/muyu-product-common/pom.xml b/muyu-modules/muyu-product/muyu-product-common/pom.xml index a1e6024..0baf314 100644 --- a/muyu-modules/muyu-product/muyu-product-common/pom.xml +++ b/muyu-modules/muyu-product/muyu-product-common/pom.xml @@ -22,6 +22,7 @@ com.muyu muyu-common-core + diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java index 49f25a8..853c477 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java @@ -1,10 +1,13 @@ package com.muyu.product.domain; import java.util.Date; +import java.util.function.Supplier; + import com.fasterxml.jackson.annotation.JsonFormat; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.product.domain.model.AttrValueModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -51,4 +54,11 @@ public class AsProductAttributeInfo extends BaseEntity { @ApiModelProperty(name = "属性值", value = "属性值", required = true) private String value; + public static AsProductAttributeInfo attrValueModelBuild(AttrValueModel attrValueModel, Supplier projectId){ + return AsProductAttributeInfo.builder() + .productId(projectId.get()) + .attributeId(attrValueModel.getId()) + .value(attrValueModel.getValue()) + .build(); + } } diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectInfo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectInfo.java index 2688652..156bd38 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectInfo.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectInfo.java @@ -3,6 +3,7 @@ package com.muyu.product.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.product.domain.model.ProjectAddModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -15,6 +16,9 @@ import com.muyu.product.domain.req.ProjectInfoSaveReq; import com.muyu.product.domain.req.ProjectInfoEditReq; import com.muyu.common.core.web.domain.BaseEntity; +import java.util.Date; +import java.util.function.Supplier; + /** * 商品信息对象 project_info * @@ -50,17 +54,17 @@ public class ProjectInfo extends BaseEntity { /** 主类型 */ @Excel(name = "主类型") @ApiModelProperty(name = "主类型", value = "主类型") - private String mianType; + private Long mianType; /** 父类型 */ @Excel(name = "父类型") @ApiModelProperty(name = "父类型", value = "父类型") - private String parentType; + private Long parentType; /** 商品类型 */ @Excel(name = "商品类型") @ApiModelProperty(name = "商品类型", value = "商品类型") - private String type; + private Long type; /** 商品图片 */ @Excel(name = "商品图片") @@ -108,18 +112,20 @@ public class ProjectInfo extends BaseEntity { /** * 添加构造器 */ - public static ProjectInfo saveBuild(ProjectInfoSaveReq projectInfoSaveReq){ + public static ProjectInfo saveModelBuild(ProjectAddModel projectAddModel, Supplier createBy){ return ProjectInfo.builder() - .name(projectInfoSaveReq.getName()) - .introduction(projectInfoSaveReq.getIntroduction()) - .mianType(projectInfoSaveReq.getMianType()) - .parentType(projectInfoSaveReq.getParentType()) - .type(projectInfoSaveReq.getType()) - .image(projectInfoSaveReq.getImage()) - .carouselImages(projectInfoSaveReq.getCarouselImages()) - .status(projectInfoSaveReq.getStatus()) - .ruleId(projectInfoSaveReq.getRuleId()) - .brandId(projectInfoSaveReq.getBrandId()) + .name(projectAddModel.getName()) + .introduction(projectAddModel.getIntroduction()) + .mianType(projectAddModel.getMianType()) + .parentType(projectAddModel.getParentType()) + .type(projectAddModel.getType()) + .image(projectAddModel.getImage()) + .carouselImages(projectAddModel.getCarouselImages()) + .status(projectAddModel.getStatus()) + .ruleId(projectAddModel.getRuleId()) + .brandId(projectAddModel.getBrandId()) + .createBy(createBy.get()) + .createTime(new Date()) .build(); } diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java index 3ea0dcb..9a28465 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java @@ -1,9 +1,12 @@ package com.muyu.product.domain; import java.math.BigDecimal; +import java.util.function.Supplier; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.product.domain.model.ProductSkuModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -103,4 +106,14 @@ public class ProjectSkuInfo extends BaseEntity { .build(); } + public static ProjectSkuInfo productSkuModelBuild(ProductSkuModel productSkuModel, Supplier projectId){ + return ProjectSkuInfo.builder() + .projectId(projectId.get()) + .sku(productSkuModel.getSku()) + .image(productSkuModel.getImage()) + .stock(productSkuModel.getStock()) + .price(productSkuModel.getPrice()) + .build(); + } + } diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/demo/ShiTi.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/demo/ShiTi.java deleted file mode 100644 index b51c3a9..0000000 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/demo/ShiTi.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.muyu.product.domain.demo; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -import java.util.List; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@ToString -public class ShiTi { - //属性组id - private Integer id; - - //属性集合id - private Integer ids; - - //属性组名称 - private String name; - - //属性集合里面的属性名称 - private String names; - - //编码 - private Integer code; - - - //分组 - private String attrinuteName; - - - //品牌ID - private Integer brandId; - - - //商品ID - private Integer projectId; - -} diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttrValueModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttrValueModel.java new file mode 100644 index 0000000..303f010 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttrValueModel.java @@ -0,0 +1,29 @@ +package com.muyu.product.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author DongZl + * @description: 商品属性 + * @Date 2024-3-22 上午 10:53 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AttrValueModel { + + /** + * ID + */ + private Long id; + + /** + * 值 + */ + private String value; +} diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupAddModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupAddModel.java deleted file mode 100644 index 5dd26d3..0000000 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupAddModel.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.muyu.product.domain.model; - -import com.muyu.common.core.web.domain.BaseEntity; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -import java.util.List; - -@Data -@SuperBuilder -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(callSuper = true) -public class AttributeGroupAddModel extends BaseEntity { - - private static final long serialVersionUID = 1L; - - /** - * 属性组编号 - */ - private Long id; - - private String name; - - private String states; - - private List attributeIdList; -} diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupSaveModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupSaveModel.java index 5c84255..eecfb3f 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupSaveModel.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttributeGroupSaveModel.java @@ -40,7 +40,7 @@ public class AttributeGroupSaveModel extends BaseEntity { public static AttributeGroupSaveModel saveReqBuild (AttributeGroupSaveReq req){ return AttributeGroupSaveModel.builder() - .name(req.getName())// 组名称 + .name(req.getName()) .states(req.getStates()) .attributeIdList(req.getAttributeIdList()) .build(); diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java new file mode 100644 index 0000000..a9f2d88 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java @@ -0,0 +1,38 @@ +package com.muyu.product.domain.model; + +import com.muyu.common.core.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @author DongZl + * @description: 商品Sku + * @Date 2024-3-22 上午 10:54 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProductSkuModel { + + /** sku */ + @ApiModelProperty(name = "sku", value = "sku", required = true) + private String sku; + + /** 商品库存 */ + @ApiModelProperty(name = "商品库存", value = "商品库存", required = true) + private Long stock; + + /** 商品价格 */ + @ApiModelProperty(name = "商品价格", value = "商品价格", required = true) + private BigDecimal price; + + /** 规格图片 */ + @ApiModelProperty(name = "规格图片", value = "规格图片", required = true) + private String image; +} diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectAddModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectAddModel.java new file mode 100644 index 0000000..33bc029 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectAddModel.java @@ -0,0 +1,59 @@ +package com.muyu.product.domain.model; + +import com.muyu.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import lombok.experimental.SuperBuilder; + +/** + * @author DongZl + * @description: 商品添加模型 + * @Date 2024-3-22 上午 10:50 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class ProjectAddModel extends BaseEntity { + + /** 商品名称 */ + @ApiModelProperty(name = "商品名称", value = "商品名称") + private String name; + + /** 商品描述 */ + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String introduction; + + /** 主类型 */ + @ApiModelProperty(name = "主类型", value = "主类型") + private Long mianType; + + /** 父类型 */ + @ApiModelProperty(name = "父类型", value = "父类型") + private Long parentType; + + /** 商品类型 */ + @ApiModelProperty(name = "商品类型", value = "商品类型") + private Long type; + + /** 商品图片 */ + @ApiModelProperty(name = "商品图片", value = "商品图片") + private String image; + + /** 商品轮播图 */ + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 商品状态 */ + @ApiModelProperty(name = "商品状态", value = "商品状态") + private String status; + + /** 规格 */ + @ApiModelProperty(name = "规格", value = "规格") + private Long ruleId; + + /** 品牌 */ + @ApiModelProperty(name = "品牌", value = "品牌") + private Long brandId; +} diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/TemplateAttributeModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/TemplateAttributeModel.java index 8cbeb02..ebd44da 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/TemplateAttributeModel.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/TemplateAttributeModel.java @@ -1,6 +1,7 @@ package com.muyu.product.domain.model; import com.muyu.common.core.web.domain.BaseEntity; +import com.muyu.product.domain.AttributeInfo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -33,4 +34,12 @@ public class TemplateAttributeModel extends BaseEntity { * 编码 */ private String code; + + public static TemplateAttributeModel attributeInfoBuild(AttributeInfo attributeInfo){ + return TemplateAttributeModel.builder() + .id(attributeInfo.getId()) + .name(attributeInfo.getName()) + .code(attributeInfo.getCode()) + .build(); + } } diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoEditReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoEditReq.java index f6dc539..4711de1 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoEditReq.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoEditReq.java @@ -33,15 +33,15 @@ public class ProjectInfoEditReq extends BaseEntity { /** 主类型 */ @ApiModelProperty(name = "主类型", value = "主类型") - private String mianType; + private Long mianType; /** 父类型 */ @ApiModelProperty(name = "父类型", value = "父类型") - private String parentType; + private Long parentType; /** 商品类型 */ @ApiModelProperty(name = "商品类型", value = "商品类型") - private String type; + private Long type; /** 商品图片 */ @ApiModelProperty(name = "商品图片", value = "商品图片") diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoQueryReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoQueryReq.java index 72f5185..dd509ac 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoQueryReq.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoQueryReq.java @@ -33,15 +33,15 @@ public class ProjectInfoQueryReq extends BaseEntity { /** 主类型 */ @ApiModelProperty(name = "主类型", value = "主类型") - private String mianType; + private Long mianType; /** 父类型 */ @ApiModelProperty(name = "父类型", value = "父类型") - private String parentType; + private Long parentType; /** 商品类型 */ @ApiModelProperty(name = "商品类型", value = "商品类型") - private String type; + private Long type; /** 商品图片 */ @ApiModelProperty(name = "商品图片", value = "商品图片") diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java index 8907e6d..10e5b0d 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java @@ -1,5 +1,8 @@ package com.muyu.product.domain.req; +import com.muyu.product.domain.model.AttrValueModel; +import com.muyu.product.domain.model.ProductSkuModel; +import com.muyu.product.domain.model.ProjectAddModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -8,6 +11,8 @@ import lombok.experimental.SuperBuilder; import io.swagger.annotations.*; import com.muyu.common.core.web.domain.BaseEntity; +import java.util.List; + /** * 商品信息对象 project_info * @@ -23,59 +28,19 @@ public class ProjectInfoSaveReq extends BaseEntity { private static final long serialVersionUID = 1L; - /** 主键 */ + /** + * 商品添加基本属性 + */ + private ProjectAddModel projectAddModel; - @ApiModelProperty(name = "主键", value = "主键") - private Long id; + /** + * 商品属性 + */ + private List attrValueList; - /** 商品名称 */ - - @ApiModelProperty(name = "商品名称", value = "商品名称") - private String name; - - /** 商品描述 */ - - @ApiModelProperty(name = "商品描述", value = "商品描述") - private String introduction; - - /** 主类型 */ - - @ApiModelProperty(name = "主类型", value = "主类型") - private String mianType; - - /** 父类型 */ - - @ApiModelProperty(name = "父类型", value = "父类型") - private String parentType; - - /** 商品类型 */ - - @ApiModelProperty(name = "商品类型", value = "商品类型") - private String type; - - /** 商品图片 */ - - @ApiModelProperty(name = "商品图片", value = "商品图片") - private String image; - - /** 商品轮播图 */ - - @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") - private String carouselImages; - - /** 商品状态 */ - - @ApiModelProperty(name = "商品状态", value = "商品状态") - private String status; - - /** 规格 */ - - @ApiModelProperty(name = "规格", value = "规格") - private Long ruleId; - - /** 品牌 */ - - @ApiModelProperty(name = "品牌", value = "品牌") - private Long brandId; + /** + * 商品SKu + */ + private List productSkuList; } diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/ProjectDetailResp.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/ProjectDetailResp.java new file mode 100644 index 0000000..045ba09 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/ProjectDetailResp.java @@ -0,0 +1,64 @@ +package com.muyu.product.domain.resp; + +import com.muyu.product.domain.*; +import com.muyu.product.domain.model.RuleAttrAddModel; +import com.muyu.product.domain.model.TemplateAttributeGroupModel; +import com.muyu.product.domain.model.TemplateAttributeModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author DongZl + * @description: 商品详情信息 + * @Date 2024-3-25 上午 10:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProjectDetailResp { + + /** + * 品类集合 + */ + private List categoryInfoList; + + /** + * 商品信息 + */ + private ProjectInfo projectInfo; + + /** + * 品牌信息 + */ + private BrandInfo brandInfo; + + /** + * 商品Sku集合 + */ + private List projectSkuInfoList; + + /** + * 商品和属性集合 + */ + private List productAttributeInfoList; + + /** + * 商品规格 + */ + private List ruleAttrModelList; + + /** + * 属性集合 + */ + private List attributeInfoList; + + /** + * 属性组集合 + */ + private List attributeGroupList; +} diff --git a/muyu-modules/muyu-product/muyu-product-server/pom.xml b/muyu-modules/muyu-product/muyu-product-server/pom.xml index e242fdc..6a49f55 100644 --- a/muyu-modules/muyu-product/muyu-product-server/pom.xml +++ b/muyu-modules/muyu-product/muyu-product-server/pom.xml @@ -18,6 +18,12 @@ + + + com.muyu + muyu-product-cache + + com.muyu @@ -84,6 +90,12 @@ com.muyu muyu-common-swagger + + com.muyu + muyu-product-cache + 3.6.3 + compile + diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java new file mode 100644 index 0000000..d840033 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectInfoDataImpl.java @@ -0,0 +1,30 @@ +package com.muyu.product.cache.impl; + +import com.muyu.product.cache.datasource.ProjectInfoData; +import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.service.ProjectInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author DongZl + * @description: 缓存数据获取 + * @Date 2024-3-27 下午 03:37 + */ +@Service +public class ProjectInfoDataImpl implements ProjectInfoData { + + @Autowired + private ProjectInfoService projectInfoService; + + /** + * 从数据库获取数据 + * + * @param key ID + * @return 缓存对象 + */ + @Override + public ProjectInfo getData (Long key) { + return projectInfoService.getById(key); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java index 6db0a84..bd489a0 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java @@ -45,10 +45,10 @@ public class AttributeGroupController extends BaseController { * 查询属性组列表 */ @ApiOperation("获取属性组列表") - @RequiresPermissions("product:attributeGroup:list") //权限认证,必须具有指定权限才能进入该方法 + @RequiresPermissions("product:attributeGroup:list") @GetMapping("/list") public Result> list(AttributeGroupQueryReq attributeGroupQueryReq) { - startPage(); //设置请求分页数据 + startPage(); TableDataInfo tableDataInfo = attributeGroupService.page(AttributeGroup.queryBuild(attributeGroupQueryReq)); return Result.success(tableDataInfo); diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java index e0fd126..f1e3d62 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java @@ -3,6 +3,8 @@ package com.muyu.product.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.muyu.product.cache.ProjectInfoCache; +import com.muyu.product.domain.resp.ProjectDetailResp; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -39,6 +41,9 @@ public class ProjectInfoController extends BaseController { @Autowired private ProjectInfoService projectInfoService; + @Autowired + private ProjectInfoCache projectInfoCache; + /** * 查询商品信息列表 */ @@ -72,9 +77,31 @@ public class ProjectInfoController extends BaseController { @GetMapping(value = "/{id}") @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) public Result getInfo(@PathVariable("id") Long id) { + return Result.success(projectInfoCache.get(id)); + } + + /** + * 获取商品信息详细信息 + */ + @ApiOperation("获取商品信息详细信息") + @RequiresPermissions("product:info:query") + @GetMapping(value = "/cache/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getCacheInfo(@PathVariable("id") Long id) { return Result.success(projectInfoService.getById(id)); } + /** + * 获取商品信息详细信息 + */ + @ApiOperation("获取商品信息详细信息") + @RequiresPermissions("product:info:query") + @GetMapping(value = "/detail/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getDetailInfo(@PathVariable("id") Long id) { + return Result.success(projectInfoService.getDetailInfo(id)); + } + /** * 新增商品信息 */ @@ -83,7 +110,7 @@ public class ProjectInfoController extends BaseController { @PostMapping @ApiOperation("新增商品信息") public Result add(@RequestBody ProjectInfoSaveReq projectInfoSaveReq) { - return toAjax(projectInfoService.save(ProjectInfo.saveBuild(projectInfoSaveReq))); + return toAjax(projectInfoService.save(projectInfoSaveReq)); } /** diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeInfoService.java index b707177..14d9431 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeInfoService.java @@ -17,7 +17,7 @@ public interface AttributeInfoService extends IService { * @param attributeInfo 商品属性 * @return 商品属性集合 */ - public List list(AttributeInfo attributeInfo); // 商品属性对象 attribute_info | 商品属性对象 attribute_info + public List list(AttributeInfo attributeInfo); /** * 通过groupId查询属性集合 diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java index f2661ae..9b99d9d 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java @@ -67,4 +67,6 @@ public interface CategoryInfoService extends IService { * @return 品类共有属性 */ CategoryCommonElementResp getTemplateAttributeByCateGoryId (Long cateGoryId); + + public List getCommon (Long categoryId, IService iService, IService bsiService); } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java index f4ea950..0924c9e 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java @@ -3,6 +3,8 @@ package com.muyu.product.service; import java.util.List; import com.muyu.product.domain.ProjectInfo; import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.product.domain.req.ProjectInfoSaveReq; +import com.muyu.product.domain.resp.ProjectDetailResp; /** * 商品信息Service接口 @@ -19,4 +21,17 @@ public interface ProjectInfoService extends IService { */ public List list(ProjectInfo projectInfo); + /** + * 保存商品信息 + * @param projectInfoSaveReq 请求对象 + * @return + */ + boolean save (ProjectInfoSaveReq projectInfoSaveReq); + + /** + * 通过商品ID获取商品详情 + * @param id 商品ID + * @return 商品详情 + */ + ProjectDetailResp getDetailInfo (Long id); } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java index 8d9685a..85f52d1 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeGroupServiceImpl.java @@ -48,7 +48,6 @@ public class AttributeGroupServiceImpl extends ServiceImpl page (AttributeGroup attributeGroupQuery) { - // List list = this.list(attributeGroupQuery); List list = this.list(attributeGroupQuery); List pageRespList = list.stream() .map(attributeGroup -> @@ -71,18 +70,18 @@ public class AttributeGroupServiceImpl extends ServiceImpl list (AttributeGroup attributeGroup) { //属性组对象 attribute_group | 属性组对象 attribute_group - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); //属性组对象 attribute_group + public List list (AttributeGroup attributeGroup) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (ObjUtils.notNull(attributeGroup.getName())) { //兼容 charSequence: 如果长度为0, 则认为为空 | 组名称 - queryWrapper.like(AttributeGroup::getName, attributeGroup.getName()); //组名称 | 组名称 + if (ObjUtils.notNull(attributeGroup.getName())) { + queryWrapper.like(AttributeGroup::getName, attributeGroup.getName()); } - if (ObjUtils.notNull(attributeGroup.getStates())) { //兼容CharSequence: 如果长度为0 则认为为空 | 状态 - queryWrapper.eq(AttributeGroup::getStates, attributeGroup.getStates()); // 状态 | 状态 + if (ObjUtils.notNull(attributeGroup.getStates())) { + queryWrapper.eq(AttributeGroup::getStates, attributeGroup.getStates()); } - return list(queryWrapper); //查询列表 + return list(queryWrapper); } /** @@ -95,14 +94,13 @@ public class AttributeGroupServiceImpl extends ServiceImpl attributeIdList = attributeGroupSaveModel.getAttributeIdList(); //属性ID集合 + Long attributeGroupId = attributeGroup.getId(); + List attributeIdList = attributeGroupSaveModel.getAttributeIdList(); - attributeGroupService.saveBatch( //插入(批量) + attributeGroupService.saveBatch( attributeIdList.stream() .map(attributeId -> AsAttributeGroup.buildGroup(attributeGroupId, attributeId)) .toList() diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeInfoServiceImpl.java index 2700831..0da9ac8 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeInfoServiceImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AttributeInfoServiceImpl.java @@ -73,6 +73,5 @@ public class AttributeInfoServiceImpl extends ServiceImpl List getCommon (Long categoryId, IService iService, IService bsiService) { List list = new ArrayList(); QueryWrapper asQueryWrapper = new QueryWrapper<>(); @@ -307,16 +307,18 @@ public class CategoryInfoServiceImpl extends ServiceImpl categoryAttributeGroupList = asCategoryAttributeGroupService.list(asCategoryAttributeGroupLambdaQueryWrapper); List attributeGroupModelList = categoryAttributeGroupList.stream() - .map(asCategoryAttributeGroup -> TemplateAttributeGroupModel.attributeGroupBuild( - attributeGroupService.getById(asCategoryAttributeGroup.getAttributeGroupId()), - attributeGroupId -> { + .map(AsCategoryAttributeGroup::getAttributeGroupId) + .distinct() + .map(attributeGroupId -> TemplateAttributeGroupModel.attributeGroupBuild( + attributeGroupService.getById(attributeGroupId), + applyAttributeGroupId -> { LambdaQueryWrapper asAttributeGroupQueryWrapper = new LambdaQueryWrapper<>() {{ - eq(AsAttributeGroup::getGroupId, asCategoryAttributeGroup.getAttributeGroupId()); + eq(AsAttributeGroup::getGroupId, applyAttributeGroupId); }}; List attributeIdList = asAttributeGroupService.list(asAttributeGroupQueryWrapper).stream() .map(AsAttributeGroup::getAttributeId) .toList(); - if (attributeIdList.isEmpty()){ + if (attributeIdList.isEmpty()) { return new ArrayList<>(); } return attributeInfoService.listByIds(attributeIdList).stream() diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java index 37d05e1..448a3d9 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java @@ -1,13 +1,21 @@ package com.muyu.product.service.impl; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.muyu.common.core.utils.ObjUtils; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.product.domain.*; +import com.muyu.product.domain.model.*; +import com.muyu.product.domain.req.ProjectInfoSaveReq; +import com.muyu.product.domain.resp.CategoryCommonElementResp; +import com.muyu.product.domain.resp.ProjectDetailResp; +import com.muyu.product.service.*; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.muyu.product.mapper.ProjectInfoMapper; -import com.muyu.product.domain.ProjectInfo; -import com.muyu.product.service.ProjectInfoService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -21,6 +29,25 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @Service public class ProjectInfoServiceImpl extends ServiceImpl implements ProjectInfoService { + + @Autowired + private AsProductAttributeInfoService asProductAttributeInfoService; + + @Autowired + private ProjectSkuInfoService projectSkuInfoService; + + @Autowired + private CategoryInfoService categoryInfoService; + + @Autowired + private RuleAttrInfoService ruleAttrInfoService; + + @Autowired + private BrandInfoService brandInfoService; + + @Autowired + private AttributeInfoService attributeInfoService; + /** * 查询商品信息列表 * @@ -78,4 +105,128 @@ public class ProjectInfoServiceImpl extends ServiceImpl attrValueList = projectInfoSaveReq.getAttrValueList(); + List asProductAttributeInfoList = attrValueList.stream() + .map(attrValueModel -> AsProductAttributeInfo.attrValueModelBuild(attrValueModel, projectInfo::getId)) + .toList(); + if (!asProductAttributeInfoList.isEmpty()){ + asProductAttributeInfoService.saveBatch(asProductAttributeInfoList); + } + // sku ProductSkuModel -》 ProjectSkuInfo + List productSkuModelList = projectInfoSaveReq.getProductSkuList(); + List projectSkuInfoList = productSkuModelList.stream().map( + productSkuModel -> ProjectSkuInfo.productSkuModelBuild(productSkuModel, projectInfo::getId) + ).toList(); + if (!projectSkuInfoList.isEmpty()){ + projectSkuInfoService.saveBatch(projectSkuInfoList); + } + } + return save; + } + + /** + * 通过商品ID获取商品详情 + * + * @param id 商品ID + * @return 商品详情 + */ + @Override + public ProjectDetailResp getDetailInfo (Long id) { + // 商品信息获取 + ProjectInfo projectInfo = this.getById(id); + // 品牌信息 + BrandInfo brandInfo = this.brandInfoService.getById(projectInfo.getBrandId()); + // 品类集合 + List categoryInfoList = categoryInfoService.listByIds(new ArrayList<>() {{ + add(projectInfo.getMianType()); + add(projectInfo.getParentType()); + add(projectInfo.getType()); + }}); + // 商品Sku集合 + List projectSkuInfoList = this.projectSkuInfoService.list(new LambdaQueryWrapper<>() {{ + eq(ProjectSkuInfo::getProjectId, id); + }}); + + // 商品和属性集合 + List productAttributeInfoList = this.asProductAttributeInfoService.list(new LambdaQueryWrapper<>() {{ + eq(AsProductAttributeInfo::getProductId, id); + }}); + // 商品规格 + List ruleAttrModelList = ruleAttrInfoService.list(new LambdaQueryWrapper<>() {{ + eq(RuleAttrInfo::getRuleId, projectInfo.getRuleId()); + }}).stream() + .map(RuleAttrAddModel::infoBuild).toList(); + + + CategoryCommonElementResp templateAttribute = this.categoryInfoService.getTemplateAttributeByCateGoryId(projectInfo.getType()); + List templateAttributeGroupList = templateAttribute.getTemplateAttributeGroupList(); + List templateAttributeList = new ArrayList<>(){{ + addAll(templateAttribute.getTemplateAttributeList()); + }}; + // 属性组和商品属性的ID + List notInAttributeIdList = new ArrayList<>(); + List attributeGroupIdList = templateAttributeGroupList.stream() + .flatMap(templateAttributeGroupModel -> templateAttributeGroupModel.getAttributeList().stream()) + .map(TemplateAttributeModel::getId) + .toList(); + List attributeIdList = templateAttributeList.stream() + .map(TemplateAttributeModel::getId) + .toList(); + if (!attributeGroupIdList.isEmpty()){ + notInAttributeIdList.addAll( attributeGroupIdList ); + } + if (!attributeIdList.isEmpty()){ + notInAttributeIdList.addAll( attributeIdList ); + } + // 添加上,商品的自有属性 + List productAttributeList = this.asProductAttributeInfoService.list( + new LambdaQueryWrapper<>() {{ + eq(AsProductAttributeInfo::getProductId, projectInfo.getId()); + notIn(AsProductAttributeInfo::getAttributeId, notInAttributeIdList); + }} + ); + + List projectAttributeList = new ArrayList<>(); + if (!productAttributeList.isEmpty()){ + List attrIdList = productAttributeList.stream() + .map(AsProductAttributeInfo::getAttributeId) + .toList(); + projectAttributeList = attributeInfoService.list( + new LambdaQueryWrapper<>() {{ + in(AttributeInfo::getId, attrIdList); + }} + ).stream() + .map(TemplateAttributeModel::attributeInfoBuild) + .toList(); + } + // 把自有属性添加到商品属性的集合当中,进行合并 + if (!projectAttributeList.isEmpty()){ + templateAttributeList.addAll(projectAttributeList); + } + return ProjectDetailResp.builder() + .projectInfo(projectInfo) + .brandInfo(brandInfo) + .categoryInfoList(categoryInfoList) + .projectSkuInfoList(projectSkuInfoList) + .productAttributeInfoList(productAttributeInfoList) + .ruleAttrModelList(ruleAttrModelList) + .attributeInfoList(templateAttributeList) + .attributeGroupList(templateAttributeGroupList) + .build(); + } } diff --git a/muyu-modules/muyu-product/pom.xml b/muyu-modules/muyu-product/pom.xml index 4294151..8841021 100644 --- a/muyu-modules/muyu-product/pom.xml +++ b/muyu-modules/muyu-product/pom.xml @@ -15,6 +15,7 @@ muyu-product-common muyu-product-remote muyu-product-server + muyu-product-cache diff --git a/muyu-modules/muyu-product/结构 b/muyu-modules/muyu-product/结构 new file mode 100644 index 0000000..f4f14d7 --- /dev/null +++ b/muyu-modules/muyu-product/结构 @@ -0,0 +1,26 @@ +{ 基本信息: { + name: "", + introduction: "", + mianType: "", + parentType: "", + type: "", + image: "", + carouselImages: "", + status: "", + ruleId: "", + branId: "", + remark: "" + }, + 品类属性: [ { + id: "", + value: "", + } ………… + ], + 商品规格: [ { + SKU: "",(所有的规格属性拼接而成) + "images": "", + 库存: "", + 价格: "", + } ………… + ] +} diff --git a/pom.xml b/pom.xml index 9b9655e..e51d237 100644 --- a/pom.xml +++ b/pom.xml @@ -227,12 +227,17 @@ ${muyu.version} - + + + com.muyu + muyu-common-cache + ${muyu.version} + - + muyu-auth muyu-gateway muyu-visual muyu-modules