diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/RuleInfoCache.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/RuleInfoCache.java new file mode 100644 index 0000000..4fdaa60 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/RuleInfoCache.java @@ -0,0 +1,58 @@ +package com.muyu.product.cache; + +import com.muyu.common.cache.abs.CacheAbs; +import com.muyu.common.core.text.Convert; +import com.muyu.product.cache.datasource.RuleCacheData; +import com.muyu.product.cache.model.RuleCacheModel; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * 规格缓存 RuleInfoCache + * + * @author LeYang + * on 2024/4/8 + */ + +public class RuleInfoCache extends CacheAbs { + @Autowired + private RuleCacheData ruleCacheData; + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + @Override + public RuleCacheModel getData(Long key) { + return ruleCacheData.getRulerCacheModel(key); + } + + /** + * 默认值 + * @return + */ + @Override + public RuleCacheModel defaultValue() { + return new RuleCacheModel(); + } + + /** + * 前缀 + * @return key 前缀 + */ + + @Override + public String keyPre() { + return "rule:info"; + } + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + @Override + public Long decode(String redisKey) { + return Convert.toLong(redisKey.replace(keyPre(), "")); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/aaa b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/aaa new file mode 100644 index 0000000..22a91ce --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/aaa @@ -0,0 +1,10 @@ +[ + { + image:"" + 商品信息:{} + sku:"" + 价格:"" + 数量:"" + 小计:"" + } +] diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/RuleCacheData.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/RuleCacheData.java new file mode 100644 index 0000000..4ac6683 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/RuleCacheData.java @@ -0,0 +1,16 @@ +package com.muyu.product.cache.datasource; + +import com.muyu.product.cache.model.RuleCacheModel; + +/** + * 规格缓存数据获取 RuleCacheData + * + * @author LeYang + * on 2024/4/8 + */ + +public interface RuleCacheData { + +public RuleCacheModel getRulerCacheModel(Long ruleId); + +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectInfoDataRemoteImpl.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectInfoDataRemoteImpl.java new file mode 100644 index 0000000..4665b97 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectInfoDataRemoteImpl.java @@ -0,0 +1,44 @@ +package com.muyu.product.cache.datasource.impl; + + +import com.muyu.common.core.domain.Result; + +import com.muyu.product.cache.datasource.ProjectInfoData; +import com.muyu.product.cache.datasource.ProjectSkuData; +import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.domain.ProjectSkuInfo; +import com.muyu.product.remote.RemoteProjectInfoService; +import com.muyu.product.remote.RemoteProjectSkuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author yangle + * @description: 缓存数据获取 + * @Date 2024-3-27 下午 03:37 + */ +@Service +public class ProjectInfoDataRemoteImpl implements ProjectInfoData { + + @Autowired + private RemoteProjectInfoService remoteProjectInfoService; + + /** + * 从数据库获取数据 + * @param key ID + * @return 缓存对象 + */ + @Override + public ProjectInfo getData (Long key) { + Result projectInfoResult = remoteProjectInfoService.getInfo(key); + if (Result.isError(projectInfoResult)){ + return new ProjectInfo(); + } + return projectInfoResult.getData(); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectSkuDataRemoteImpl.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectSkuDataRemoteImpl.java new file mode 100644 index 0000000..f5e162d --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectSkuDataRemoteImpl.java @@ -0,0 +1,65 @@ +package com.muyu.product.cache.datasource.impl; + + +import com.muyu.common.core.domain.Result; +import com.muyu.product.cache.datasource.ProjectInfoData; +import com.muyu.product.cache.datasource.ProjectSkuData; +import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.domain.ProjectSkuInfo; +import com.muyu.product.remote.RemoteProjectInfoService; +import com.muyu.product.remote.RemoteProjectSkuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author yangle + * @description: 商品SKU实现类 + * @Date 2024-4-1 上午 11:38 + */ +@Service +public class ProjectSkuDataRemoteImpl implements ProjectSkuData { + + @Autowired + private RemoteProjectSkuService remoteProjectSkuService; + + /** + * 通过键获取所有的hash数据 + * @param projectId 商品ID + * @return + */ + @Override + public Map getData (Long projectId) { + Result> projectListResult + = remoteProjectSkuService.listByProjectId(projectId); + if (Result.isError(projectListResult)){ + return new HashMap<>(); + } + + List projectSkuInfoList = projectListResult.getData(); + return projectSkuInfoList.stream() + .collect(Collectors.toMap(ProjectSkuInfo::getSku, projectSkuInfo -> projectSkuInfo)); + + } + + /** + * 通过缓存键和hash键获取hash值 + * @param projectId 商品ID + * @param projectSku 商品SKU + * @return hash值 + */ + @Override + public ProjectSkuInfo getData (Long projectId, String projectSku) { + Result projectSkuInfoResult = remoteProjectSkuService.getInfoByProjectIdAndSku( + projectId, projectSku + ); + if (Result.isError(projectSkuInfoResult)){ + return new ProjectSkuInfo(); + } + return projectSkuInfoResult.getData(); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectSkuStockDataRemoteImpl.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectSkuStockDataRemoteImpl.java new file mode 100644 index 0000000..05b3bce --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/ProjectSkuStockDataRemoteImpl.java @@ -0,0 +1,37 @@ +package com.muyu.product.cache.datasource.impl; + + +import com.muyu.common.core.domain.Result; +import com.muyu.product.cache.datasource.ProjectSkuStockData; +import com.muyu.product.cache.key.SkuStockKey; +import com.muyu.product.domain.ProjectSkuInfo; +import com.muyu.product.remote.RemoteProjectSkuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + * @author yangle + * @description: sku库存实现类 + * @Date 2024-4-2 上午 10:53 + */ +@Service +public class ProjectSkuStockDataRemoteImpl implements ProjectSkuStockData { + + @Autowired + private RemoteProjectSkuService remoteProjectSkuService; + + @Override + public Long getData (SkuStockKey key) { + Result result + = remoteProjectSkuService.getInfoByProjectIdAndSku(key.getProjectId(), key.getSku()); + if (Result.isSuccess(result)){ + ProjectSkuInfo projectSkuInfo = result.getData(); + if (!Objects.isNull(projectSkuInfo)){ + return projectSkuInfo.getStock(); + } + } + return 0L; + } +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/RuleCacheDataRemoteImpl.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/RuleCacheDataRemoteImpl.java new file mode 100644 index 0000000..a514540 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/datasource/impl/RuleCacheDataRemoteImpl.java @@ -0,0 +1,48 @@ +package com.muyu.product.cache.datasource.impl; + +import com.muyu.common.core.domain.Result; +import com.muyu.product.cache.datasource.RuleCacheData; +import com.muyu.product.cache.model.RuleAttrCacheModel; +import com.muyu.product.cache.model.RuleCacheModel; +import com.muyu.product.domain.RuleAttrInfo; +import com.muyu.product.domain.RuleInfo; +import com.muyu.product.remote.RemoteRuleAttrService; +import com.muyu.product.remote.RemoteRuleService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +/** + * 规格数据获取实现层 默认就读远程调用 RuleCacheDataImpl + * + * @author LeYang + * on 2024/4/8 + */ +public class RuleCacheDataRemoteImpl implements RuleCacheData { + + @Autowired + private RemoteRuleService remoteRuleService; + + @Autowired + private RemoteRuleAttrService remoteRuleAttrService; + + + + @Override + public RuleCacheModel getRulerCacheModel(Long ruleId) { + Result ruleInfoResult = remoteRuleService.getInfo(ruleId); + Result> ruleAttrResult = remoteRuleAttrService.getInfoByRuleId(ruleId); + if (Result.isError(ruleInfoResult) || Result.isError(ruleAttrResult)) { + return new RuleCacheModel(); + } + RuleInfo ruleInfo = ruleInfoResult.getData(); + List ruleAttrInfoList = ruleAttrResult.getData(); + List attrCacheModelList = ruleAttrInfoList.stream() + .map(RuleAttrCacheModel::ruleAttrBuild) + .toList(); + return RuleCacheModel.builder() + .ruleName(ruleInfo.getName()) + .ruleAttrModelList(attrCacheModelList) + .build(); + } +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/model/RuleAttrCacheModel.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/model/RuleAttrCacheModel.java new file mode 100644 index 0000000..bad1a79 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/model/RuleAttrCacheModel.java @@ -0,0 +1,42 @@ +package com.muyu.product.cache.model; + +import com.muyu.product.domain.RuleAttrInfo; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Arrays; +import java.util.List; + +/** + * 规格类型缓存模型 + * + * @author LeYang + * on 2024/4/8 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RuleAttrCacheModel { + /** + * 类目名称 + */ + private String attrName; + + /** + * 规格值 + */ + private List attrValueList; + + public static RuleAttrCacheModel ruleAttrBuild(RuleAttrInfo ruleAttrInfo){ + return RuleAttrCacheModel.builder() + .attrName(ruleAttrInfo.getName()) + .attrValueList(Arrays.stream(ruleAttrInfo.getAttrValue().split(",")).toList()) + .build(); + } + + + +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/model/RuleCacheModel.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/model/RuleCacheModel.java new file mode 100644 index 0000000..cba2204 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/model/RuleCacheModel.java @@ -0,0 +1,29 @@ +package com.muyu.product.cache.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 规格缓存模型 RuleCacheModel + * + * @author LeYang + * on 2024/4/8 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RuleCacheModel { + /** + * 规格名称 + */ + private String ruleName; + /** + * 规格缓存模型 + */ + private List ruleAttrModelList; +} diff --git a/muyu-modules/muyu-product/muyu-product-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-modules/muyu-product/muyu-product-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..1eaf3f8 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,9 @@ +com.muyu.product.cache.ProjectInfoCache +com.muyu.product.cache.ProjectSkuCache +com.muyu.product.cache.ProjectSkuStockCache +com.muyu.product.cache.RuleInfoCache +com.muyu.product.cache.datasource.impl.RuleCacheDataRemoteImpl +com.muyu.product.cache.datasource.impl.ProjectInfoDataRemoteImpl +com.muyu.product.cache.datasource.impl.ProjectSkuDataRemoteImpl +com.muyu.product.cache.datasource.impl.ProjectSkuStockDataRemoteImpl + diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteProjectInfoService.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteProjectInfoService.java new file mode 100644 index 0000000..2b0a354 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteProjectInfoService.java @@ -0,0 +1,32 @@ +package com.muyu.product.remote; + +import com.muyu.common.core.constant.ServiceNameConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.remote.factory.RemoteProjectInfoFactory; +import com.muyu.product.remote.factory.RemoteProjectSkuFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +/** + * 规格远程调用业务层 + * + * @author LeYang + * on 2024/4/8 + */ + +@FeignClient( + contextId = "remoteProjectInfoService", + value = ServiceNameConstants.PRODUCT_SERVICE, + fallbackFactory = RemoteProjectInfoFactory.class, + path = "/info" +) +public interface RemoteProjectInfoService { + /** + * 获取商品信息详细信息 + */ + @GetMapping(value = "/{id}") + public Result getInfo(@PathVariable("id") Long id); + +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteProjectSkuService.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteProjectSkuService.java new file mode 100644 index 0000000..3cb051b --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteProjectSkuService.java @@ -0,0 +1,43 @@ +package com.muyu.product.remote; + +import com.muyu.common.core.constant.ServiceNameConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.ProjectSkuInfo; +import com.muyu.product.remote.factory.RemoteProjectSkuFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; + +/** + * 远程调用业务层 RemoteProjectSkuService + * + * @author LeYang + * on 2024/4/7 + */ +@FeignClient( + contextId = "remoteProjectSkuService", + value = ServiceNameConstants.PRODUCT_SERVICE, + fallbackFactory = RemoteProjectSkuFactory.class, + path = "/sku" +) +public interface RemoteProjectSkuService { + /** + * 通过商品ID和sku获取sku信息 + * @param projectId 商品id + * @param projectSku 商品sku + * @return 商品sku信息 + */ + @GetMapping("/info/{projectId}/{projectSku}") + public Result getInfoByProjectIdAndSku(@PathVariable("projectId") Long projectId, + @PathVariable("projectSku") String projectSku); + + /** + * 通过商品ID获取SKU集合 + * @param projectId 商品ID + * @return 商品SKU信息 + */ + @GetMapping("/list/{projectId}") + public Result> listByProjectId(@PathVariable("projectId")Long projectId); +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteRuleAttrService.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteRuleAttrService.java new file mode 100644 index 0000000..90a4e0f --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteRuleAttrService.java @@ -0,0 +1,28 @@ +package com.muyu.product.remote; + +import com.muyu.common.core.constant.ServiceNameConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.RuleAttrInfo; +import com.muyu.product.remote.factory.RemoteRuleAttrFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; + +/** + * 规格信息远程调用业务层 + * + * @author LeYang + * on 2024/4/8 + */ +@FeignClient( + contextId = "remoteRuleAttrService", + value = ServiceNameConstants.PRODUCT_SERVICE, + fallbackFactory = RemoteRuleAttrFactory.class, + path = "/ruleAttr" +) +public interface RemoteRuleAttrService { + @GetMapping(value = "/list/ruleId/{ruleId}") + public Result> getInfoByRuleId(@PathVariable("id") Long id); +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteRuleService.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteRuleService.java new file mode 100644 index 0000000..2f001cd --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/RemoteRuleService.java @@ -0,0 +1,29 @@ +package com.muyu.product.remote; + +import com.muyu.common.core.constant.ServiceNameConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.RuleInfo; +import com.muyu.product.remote.factory.RemoteRuleFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +/** + * 规格远程调用业务层 + * + * @author LeYang + * on 2024/4/8 + */ +@FeignClient( + contextId = "remoteRuleService", + value = ServiceNameConstants.PRODUCT_SERVICE, + fallbackFactory = RemoteRuleFactory.class, + path = "/rule" +) +public interface RemoteRuleService { + /** + * 获取商品规格详情信息 + */ + @GetMapping(value = "/{id}") + public Result getInfo(@PathVariable("id") Long id ); +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectInfoFactory.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectInfoFactory.java new file mode 100644 index 0000000..65534d1 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectInfoFactory.java @@ -0,0 +1,30 @@ +package com.muyu.product.remote.factory; + +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.remote.RemoteProjectInfoService; +import org.springframework.cloud.openfeign.FallbackFactory; + +/** + * 规格远程调用熔断器 RemoteProjectInfoFactory + * + * @author LeYang + * on 2024/4/8 + */ + +public class RemoteProjectInfoFactory implements FallbackFactory { + @Override + public RemoteProjectInfoService create(Throwable cause) { + return new RemoteProjectInfoService() { + /** + * 获取商品详情信息 + * @param id + * @return + */ + @Override + public Result getInfo(Long id) { + return Result.error(cause.getMessage()); + } + }; + } +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectSkuFactory.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectSkuFactory.java new file mode 100644 index 0000000..592c760 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteProjectSkuFactory.java @@ -0,0 +1,37 @@ +package com.muyu.product.remote.factory; + +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.ProjectSkuInfo; +import com.muyu.product.remote.RemoteProjectSkuService; +import org.springframework.cloud.openfeign.FallbackFactory; + +import java.rmi.Remote; +import java.util.List; + +/** + * 远城调熔断器 RemoteProjectSkuFactory + * + * @author LeYang + * on 2024/4/7 + */ +public class RemoteProjectSkuFactory implements FallbackFactory { + @Override + public RemoteProjectSkuService create(Throwable cause) { + return new RemoteProjectSkuService() { + @Override + public Result getInfoByProjectIdAndSku(Long projectId, String projectSku) { + return Result.error(cause.getMessage()); + } + + /** + * 通过商品ID和sku获取sku信息 + * @param projectId 商品ID + * @return 商品sku信息 + */ + @Override + public Result> listByProjectId(Long projectId) { + return Result.error(cause.getMessage()); + } + }; + } +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleAttrFactory.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleAttrFactory.java new file mode 100644 index 0000000..bf179c6 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleAttrFactory.java @@ -0,0 +1,31 @@ +package com.muyu.product.remote.factory; + +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.RuleAttrInfo; +import com.muyu.product.remote.RemoteRuleAttrService; +import org.springframework.cloud.openfeign.FallbackFactory; + +import java.util.List; + +/** + * 规格详情远程调用熔断器 RemoteRuleAttrFactory + * + * @author LeYang + * on 2024/4/8 + */ +public class RemoteRuleAttrFactory implements FallbackFactory { + @Override + public RemoteRuleAttrService create(Throwable cause) { + return new RemoteRuleAttrService() { + /** + * 获取规格详情信息 + * @param id + * @return + */ + @Override + public Result> getInfoByRuleId(Long id) { + return Result.error(cause.getMessage()); + } + }; + } +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleFactory.java b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleFactory.java new file mode 100644 index 0000000..a23cd6d --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/java/com/muyu/product/remote/factory/RemoteRuleFactory.java @@ -0,0 +1,30 @@ +package com.muyu.product.remote.factory; + +import com.muyu.common.core.domain.Result; +import com.muyu.product.domain.RuleInfo; +import com.muyu.product.remote.RemoteRuleService; +import org.springframework.cloud.openfeign.FallbackFactory; + +/** + * 规格远程调用熔断器 + * + * @author LeYang + * on 2024/4/8 + */ + +public class RemoteRuleFactory implements FallbackFactory { + @Override + public RemoteRuleService create(Throwable cause) { + return new RemoteRuleService() { + /** + * 获取商品规格详情信息 + * @param id + * @return + */ + @Override + public Result getInfo(Long id) { + return Result.error(cause.getMessage()); + } + }; + } +} diff --git a/muyu-modules/muyu-product/muyu-product-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-modules/muyu-product/muyu-product-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..66f880f --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-remote/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,4 @@ +com.muyu.product.remote.factory.RemoteRuleFactory +com.muyu.product.remote.factory.RemoteRuleAttrFactory +com.muyu.product.remote.factory.RemoteProjectInfoFactory +com.muyu.product.remote.factory.RemoteProjectSkuFactory diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/ExecutorBuilder.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/ExecutorBuilder.java new file mode 100644 index 0000000..8e71b18 --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/ExecutorBuilder.java @@ -0,0 +1,79 @@ +package com.muyu.shop.cart.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.common.core.web.domain.BaseEntity; +import com.muyu.shop.cart.domain.model.SkuRuleModel; +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 练习builder Executor + * + * @author LeYang + * on 2024/4/8 + */ + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class ExecutorBuilder extends BaseEntity { + + + /** + * 购物车ID + */ + private Long cartInfoId; + /** + * 图片 + */ + private String image; + /** + * 商品ID + */ + private Long projectId; + /** + * 商品名称 + */ + private String name; + + /** + * 商品sku价格 + */ + private BigDecimal price; + /** + * sku规格集合 + */ + private List skuRuleList; + /** + * 购物车数量 + */ + private Long num; + /** + * 库存 + */ + private Long stock; + /** + * 购物车小计 + */ + private BigDecimal subtotal; + + /** + * 是否选中 + */ + private String isSelected; + + public static ExecutorBuilder create() { + return ExecutorBuilder.builder() + .cartInfoId(new CartInfo().getId()) + .build(); + } +} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/CartSkuModel.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/CartSkuModel.java new file mode 100644 index 0000000..32894f4 --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/CartSkuModel.java @@ -0,0 +1,66 @@ +package com.muyu.shop.cart.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 购物车品类信息 CartSkuModel + * + * @author LeYang + * on 2024/4/7 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CartSkuModel { + + /** + * 购物车ID + */ + private Long cartInfoId; + /** + * 图片 + */ + private String image; + /** + * 商品ID + */ + private Long projectId; + /** + * 商品名称 + */ + private String name; + + /** + * 商品sku价格 + */ + private BigDecimal price; + /** + * sku规格集合 + */ + private List skuRuleList; + /** + * 购物车数量 + */ + private Long num; + /** + * 库存 + */ + private Long stock; + /** + * 购物车小计 + */ + private BigDecimal subtotal; + + /** + * 是否选中 + */ + private String isSelected; + +} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/SkuRuleModel.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/SkuRuleModel.java new file mode 100644 index 0000000..c9e8dae --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/SkuRuleModel.java @@ -0,0 +1,29 @@ +package com.muyu.shop.cart.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * sku规格 SkuRuleModel + * + * @author LeYang + * on 2024/4/7 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SkuRuleModel { + + /** + * 规格名称 + */ + private String ruleName; + + /** + * 规格属性 + */ + private String ruleValue; +} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/StatisticsCartModel.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/StatisticsCartModel.java new file mode 100644 index 0000000..799525c --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/model/StatisticsCartModel.java @@ -0,0 +1,38 @@ +package com.muyu.shop.cart.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * 购物车统计 StaticsCartModel + * + * @author LeYang + * on 2024/4/7 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class StatisticsCartModel { + /** + * 商品总数 + */ + private Long total; + + /** + * 选择总数 + */ + private Long selectTotal; + /** + * 商品总价 + */ + private BigDecimal priceTotal; + /** + * 实际总价 + */ + private BigDecimal actualTotal; +} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/req/CartDetailResp.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/req/CartDetailResp.java new file mode 100644 index 0000000..8bbd668 --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-common/src/main/java/com/muyu/shop/cart/domain/req/CartDetailResp.java @@ -0,0 +1,34 @@ +package com.muyu.shop.cart.domain.req; + +import com.muyu.shop.cart.domain.model.CartSkuModel; +import com.muyu.shop.cart.domain.model.StatisticsCartModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 商品详情返回结果集 CartDetailResp + * + * @author LeYang + * on 2024/4/7 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CartDetailResp { + /** + * 购物车商品集合 + */ + private List cartSkuList; + + /** + * 购物车统计 + */ + private StatisticsCartModel statisticsCart; + + +}