购物车
parent
132ea274f2
commit
945df9659b
|
@ -25,10 +25,10 @@
|
||||||
<artifactId>muyu-common-cache</artifactId>
|
<artifactId>muyu-common-cache</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- 商品模块 common 依赖 -->
|
<!-- 商品模块 远程调用 依赖 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.muyu</groupId>
|
<groupId>com.muyu</groupId>
|
||||||
<artifactId>muyu-product-common</artifactId>
|
<artifactId>muyu-product-remote</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
@ -21,18 +21,6 @@ import java.util.function.Function;
|
||||||
@Component
|
@Component
|
||||||
public class ProjectInfoCache extends CacheAbs<Long, ProjectInfo> {
|
public class ProjectInfoCache extends CacheAbs<Long, ProjectInfo> {
|
||||||
|
|
||||||
public static void main (String[] args) {
|
|
||||||
Long projectId = 10L;
|
|
||||||
HashCache<Long, Long, ProjectSkuInfo> hashCache = null;
|
|
||||||
List<ProjectSkuInfo> 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
|
@Autowired
|
||||||
private ProjectInfoData projectInfoData;
|
private ProjectInfoData projectInfoData;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格缓存
|
||||||
|
* @Date 2024/4/7 下午8:29
|
||||||
|
*/
|
||||||
|
public class RuleInfoCache extends CacheAbs<Long, RuleCacheModel> {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuleCacheData ruleCacheData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key前缀
|
||||||
|
*
|
||||||
|
* @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(), ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从数据库获取数据
|
||||||
|
*
|
||||||
|
* @param key ID
|
||||||
|
*
|
||||||
|
* @return 缓存对象
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public RuleCacheModel getData (Long key) {
|
||||||
|
return ruleCacheData.getRuleCacheModel(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认值
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public RuleCacheModel defaultValue () {
|
||||||
|
return new RuleCacheModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.muyu.product.cache.datasource;
|
||||||
|
|
||||||
|
import com.muyu.product.cache.model.RuleCacheModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格缓存数据获取
|
||||||
|
* @Date 2024/4/7 下午8:31
|
||||||
|
*/
|
||||||
|
public interface RuleCacheData {
|
||||||
|
|
||||||
|
public RuleCacheModel getRuleCacheModel(Long ruleId);
|
||||||
|
}
|
|
@ -1,7 +1,9 @@
|
||||||
package com.muyu.shop.cart.cache.impl;
|
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.ProjectInfoData;
|
||||||
import com.muyu.product.domain.ProjectInfo;
|
import com.muyu.product.domain.ProjectInfo;
|
||||||
|
import com.muyu.product.remote.RemoteProjectInfoService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -13,6 +15,9 @@ import org.springframework.stereotype.Service;
|
||||||
@Service
|
@Service
|
||||||
public class ProjectInfoDataImpl implements ProjectInfoData {
|
public class ProjectInfoDataImpl implements ProjectInfoData {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RemoteProjectInfoService remoteProjectInfoService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从数据库获取数据
|
* 从数据库获取数据
|
||||||
* @param key ID
|
* @param key ID
|
||||||
|
@ -20,6 +25,10 @@ public class ProjectInfoDataImpl implements ProjectInfoData {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ProjectInfo getData (Long key) {
|
public ProjectInfo getData (Long key) {
|
||||||
return new ProjectInfo();
|
Result<ProjectInfo> projectInfoResult = remoteProjectInfoService.getInfo(key);
|
||||||
|
if (Result.isError(projectInfoResult)){
|
||||||
|
return new ProjectInfo();
|
||||||
|
}
|
||||||
|
return projectInfoResult.getData();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,15 +1,11 @@
|
||||||
package com.muyu.shop.cart.cache.impl;
|
package com.muyu.product.cache.datasource.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import com.muyu.product.cache.datasource.ProjectSkuData;
|
import com.muyu.product.cache.datasource.ProjectSkuData;
|
||||||
import com.muyu.product.domain.ProjectSkuInfo;
|
import com.muyu.product.domain.ProjectSkuInfo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author DongZl
|
* @author DongZl
|
|
@ -1,4 +1,4 @@
|
||||||
package com.muyu.shop.cart.cache.impl;
|
package com.muyu.product.cache.datasource.impl;
|
||||||
|
|
||||||
import com.muyu.common.core.domain.Result;
|
import com.muyu.common.core.domain.Result;
|
||||||
import com.muyu.product.cache.datasource.ProjectSkuStockData;
|
import com.muyu.product.cache.datasource.ProjectSkuStockData;
|
|
@ -0,0 +1,45 @@
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格数据获取实现层 默认就读取远程调用
|
||||||
|
* @Date 2024/4/7 下午8:32
|
||||||
|
*/
|
||||||
|
public class RuleCacheDataImpl implements RuleCacheData {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RemoteRuleService remoteRuleService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RemoteRuleAttrService remoteRuleAttrService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RuleCacheModel getRuleCacheModel (Long ruleId) {
|
||||||
|
Result<RuleInfo> ruleInfoResult = remoteRuleService.getInfo(ruleId);
|
||||||
|
Result<List<RuleAttrInfo>> ruleAttrResult = remoteRuleAttrService.getInfoByRuleId(ruleId);
|
||||||
|
if (Result.isError(ruleInfoResult) || Result.isError(ruleAttrResult)) {
|
||||||
|
return new RuleCacheModel();
|
||||||
|
}
|
||||||
|
RuleInfo ruleInfo = ruleInfoResult.getData();
|
||||||
|
List<RuleAttrInfo> ruleAttrInfoList = ruleAttrResult.getData();
|
||||||
|
List<RuleAttrCacheModel> attrCacheModelList = ruleAttrInfoList.stream()
|
||||||
|
.map(RuleAttrCacheModel::ruleAttrBuild)
|
||||||
|
.toList();
|
||||||
|
return RuleCacheModel.builder()
|
||||||
|
.ruleName(ruleInfo.getName())
|
||||||
|
.ruleAttrModelList(attrCacheModelList)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
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 DongZl
|
||||||
|
* @description: 规格类型缓存模型
|
||||||
|
* @Date 2024/4/7 下午8:41
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class RuleAttrCacheModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类目名称
|
||||||
|
*/
|
||||||
|
private String attrName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规格值
|
||||||
|
*/
|
||||||
|
private List<String> attrValueList;
|
||||||
|
|
||||||
|
public static RuleAttrCacheModel ruleAttrBuild (RuleAttrInfo ruleAttrInfo) {
|
||||||
|
return RuleAttrCacheModel.builder()
|
||||||
|
.attrName(ruleAttrInfo.getName())
|
||||||
|
.attrValueList(Arrays.stream(ruleAttrInfo.getAttrValue().split(",")).toList())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.muyu.product.cache.model;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格缓存模型
|
||||||
|
* @Date 2024/4/7 下午8:27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class RuleCacheModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规格名称
|
||||||
|
*/
|
||||||
|
private String ruleName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规格缓存模型
|
||||||
|
*/
|
||||||
|
private List<RuleAttrCacheModel> ruleAttrModelList;
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
com.muyu.product.cache.ProjectInfoCache
|
com.muyu.product.cache.ProjectInfoCache
|
||||||
com.muyu.product.cache.ProjectSkuCache
|
com.muyu.product.cache.ProjectSkuCache
|
||||||
com.muyu.product.cache.ProjectSkuStockCache
|
com.muyu.product.cache.ProjectSkuStockCache
|
||||||
|
com.muyu.product.cache.RuleInfoCache
|
||||||
|
com.muyu.product.cache.datasource.impl.RuleCacheDataImpl
|
||||||
|
|
|
@ -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.ProjectInfo;
|
||||||
|
import com.muyu.product.remote.factory.RemoteProjectInfoFactory;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格远程调用业务层
|
||||||
|
* @Date 2024-4-7 上午 10:58
|
||||||
|
*/
|
||||||
|
@FeignClient(
|
||||||
|
contextId = "remoteProjectInfoService",
|
||||||
|
value = ServiceNameConstants.PRODUCT_SERVICE,
|
||||||
|
fallbackFactory = RemoteProjectInfoFactory.class,
|
||||||
|
path = "/info"
|
||||||
|
)
|
||||||
|
public interface RemoteProjectInfoService {
|
||||||
|
/**
|
||||||
|
* 获取商品信息详细信息
|
||||||
|
*/
|
||||||
|
@GetMapping(value = "/{id}")
|
||||||
|
public Result<ProjectInfo> getInfo(@PathVariable("id") Long id) ;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
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.domain.RuleAttrInfo;
|
||||||
|
import com.muyu.product.remote.factory.RemoteProjectSkuFactory;
|
||||||
|
import com.muyu.product.remote.factory.RemoteRuleAttrFactory;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
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 DongZl
|
||||||
|
* @description: 规格信息远程调用业务层
|
||||||
|
* @Date 2024-4-7 上午 10:58
|
||||||
|
*/
|
||||||
|
@FeignClient(
|
||||||
|
contextId = "remoteRuleAttrService",
|
||||||
|
value = ServiceNameConstants.PRODUCT_SERVICE,
|
||||||
|
fallbackFactory = RemoteRuleAttrFactory.class,
|
||||||
|
path = "/ruleAttr"
|
||||||
|
)
|
||||||
|
public interface RemoteRuleAttrService {
|
||||||
|
/**
|
||||||
|
* 获取规格详情详细信息
|
||||||
|
*/
|
||||||
|
@GetMapping(value = "/list/ruleId/{ruleId}")
|
||||||
|
public Result<List<RuleAttrInfo>> getInfoByRuleId(@PathVariable("ruleId") Long id);
|
||||||
|
}
|
|
@ -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.ProjectSkuInfo;
|
||||||
|
import com.muyu.product.domain.RuleInfo;
|
||||||
|
import com.muyu.product.remote.factory.RemoteProjectSkuFactory;
|
||||||
|
import com.muyu.product.remote.factory.RemoteRuleFactory;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格远程调用业务层
|
||||||
|
* @Date 2024-4-7 上午 10:58
|
||||||
|
*/
|
||||||
|
@FeignClient(
|
||||||
|
contextId = "remoteRuleService",
|
||||||
|
value = ServiceNameConstants.PRODUCT_SERVICE,
|
||||||
|
fallbackFactory = RemoteRuleFactory.class,
|
||||||
|
path = "/rule"
|
||||||
|
)
|
||||||
|
public interface RemoteRuleService {
|
||||||
|
/**
|
||||||
|
* 获取商品规格详细信息
|
||||||
|
*/
|
||||||
|
@GetMapping(value = "/{id}")
|
||||||
|
public Result<RuleInfo> getInfo(@PathVariable("id") Long id);
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.muyu.product.remote.factory;
|
||||||
|
|
||||||
|
import com.muyu.common.core.domain.Result;
|
||||||
|
import com.muyu.product.domain.ProjectInfo;
|
||||||
|
import com.muyu.product.domain.RuleInfo;
|
||||||
|
import com.muyu.product.remote.RemoteProjectInfoService;
|
||||||
|
import com.muyu.product.remote.RemoteRuleService;
|
||||||
|
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格远程调熔断器
|
||||||
|
* @Date 2024-4-7 上午 10:59
|
||||||
|
*/
|
||||||
|
public class RemoteProjectInfoFactory implements FallbackFactory<RemoteProjectInfoService> {
|
||||||
|
@Override
|
||||||
|
public RemoteProjectInfoService create (Throwable cause) {
|
||||||
|
return new RemoteProjectInfoService() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取商品规格详细信息
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Result<ProjectInfo> getInfo (Long id) {
|
||||||
|
return Result.error(cause.getMessage());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.muyu.product.remote.factory;
|
||||||
|
|
||||||
|
import com.muyu.common.core.domain.Result;
|
||||||
|
import com.muyu.product.domain.ProjectSkuInfo;
|
||||||
|
import com.muyu.product.domain.RuleAttrInfo;
|
||||||
|
import com.muyu.product.remote.RemoteProjectSkuService;
|
||||||
|
import com.muyu.product.remote.RemoteRuleAttrService;
|
||||||
|
import com.muyu.product.remote.RemoteRuleService;
|
||||||
|
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格详情远程调熔断器
|
||||||
|
* @Date 2024-4-7 上午 10:59
|
||||||
|
*/
|
||||||
|
public class RemoteRuleAttrFactory implements FallbackFactory<RemoteRuleAttrService> {
|
||||||
|
@Override
|
||||||
|
public RemoteRuleAttrService create (Throwable cause) {
|
||||||
|
return new RemoteRuleAttrService() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取规格详情详细信息
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Result<List<RuleAttrInfo>> getInfoByRuleId (Long id) {
|
||||||
|
return Result.error(cause.getMessage());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.muyu.product.remote.factory;
|
||||||
|
|
||||||
|
import com.muyu.common.core.domain.Result;
|
||||||
|
import com.muyu.product.domain.ProjectSkuInfo;
|
||||||
|
import com.muyu.product.domain.RuleInfo;
|
||||||
|
import com.muyu.product.remote.RemoteProjectSkuService;
|
||||||
|
import com.muyu.product.remote.RemoteRuleService;
|
||||||
|
import org.springframework.cloud.openfeign.FallbackFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DongZl
|
||||||
|
* @description: 规格远程调熔断器
|
||||||
|
* @Date 2024-4-7 上午 10:59
|
||||||
|
*/
|
||||||
|
public class RemoteRuleFactory implements FallbackFactory<RemoteRuleService> {
|
||||||
|
@Override
|
||||||
|
public RemoteRuleService create (Throwable cause) {
|
||||||
|
return new RemoteRuleService() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取商品规格详细信息
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Result<RuleInfo> getInfo (Long id) {
|
||||||
|
return Result.error(cause.getMessage());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +1,4 @@
|
||||||
com.muyu.product.remote.factory.RemoteProjectSkuFactory
|
com.muyu.product.remote.factory.RemoteProjectSkuFactory
|
||||||
|
com.muyu.product.remote.factory.RemoteRuleAttrFactory
|
||||||
|
com.muyu.product.remote.factory.RemoteRuleFactory
|
||||||
|
com.muyu.product.remote.factory.RemoteProjectInfoFactory
|
||||||
|
|
|
@ -75,6 +75,14 @@ public class RuleAttrInfoController extends BaseController {
|
||||||
return Result.success(ruleAttrInfoService.getById(id));
|
return Result.success(ruleAttrInfoService.getById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取规格详情详细信息
|
||||||
|
*/
|
||||||
|
@GetMapping(value = "/list/ruleId/{ruleId}")
|
||||||
|
public Result<List<RuleAttrInfo>> getInfoByRuleId(@PathVariable("ruleId") Long ruleId){
|
||||||
|
return Result.success(ruleAttrInfoService.getInfoByRuleId(ruleId));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增规格详情
|
* 新增规格详情
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -19,4 +19,10 @@ public interface RuleAttrInfoService extends IService<RuleAttrInfo> {
|
||||||
*/
|
*/
|
||||||
public List<RuleAttrInfo> list(RuleAttrInfo ruleAttrInfo);
|
public List<RuleAttrInfo> list(RuleAttrInfo ruleAttrInfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过ruleId获取规格详情
|
||||||
|
* @param ruleId 规格ID
|
||||||
|
* @return 规格详情集合
|
||||||
|
*/
|
||||||
|
List<RuleAttrInfo> getInfoByRuleId (Long ruleId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,4 +50,18 @@ public class RuleAttrInfoServiceImpl extends ServiceImpl<RuleAttrInfoMapper, Rul
|
||||||
|
|
||||||
return list(queryWrapper);
|
return list(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过ruleId获取规格详情
|
||||||
|
*
|
||||||
|
* @param ruleId 规格ID
|
||||||
|
*
|
||||||
|
* @return 规格详情集合
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<RuleAttrInfo> getInfoByRuleId (Long ruleId) {
|
||||||
|
LambdaQueryWrapper<RuleAttrInfo> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(RuleAttrInfo::getRuleId, ruleId);
|
||||||
|
return this.list(queryWrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,12 +13,16 @@ import com.muyu.common.security.utils.SecurityUtils;
|
||||||
import com.muyu.product.cache.ProjectInfoCache;
|
import com.muyu.product.cache.ProjectInfoCache;
|
||||||
import com.muyu.product.cache.ProjectSkuCache;
|
import com.muyu.product.cache.ProjectSkuCache;
|
||||||
import com.muyu.product.cache.ProjectSkuStockCache;
|
import com.muyu.product.cache.ProjectSkuStockCache;
|
||||||
|
import com.muyu.product.cache.RuleInfoCache;
|
||||||
import com.muyu.product.cache.key.SkuStockKey;
|
import com.muyu.product.cache.key.SkuStockKey;
|
||||||
|
import com.muyu.product.cache.model.RuleAttrCacheModel;
|
||||||
|
import com.muyu.product.cache.model.RuleCacheModel;
|
||||||
import com.muyu.product.domain.ProjectInfo;
|
import com.muyu.product.domain.ProjectInfo;
|
||||||
import com.muyu.product.domain.ProjectSkuInfo;
|
import com.muyu.product.domain.ProjectSkuInfo;
|
||||||
import com.muyu.shop.cart.cache.CartCache;
|
import com.muyu.shop.cart.cache.CartCache;
|
||||||
import com.muyu.shop.cart.cache.key.CartHashKey;
|
import com.muyu.shop.cart.cache.key.CartHashKey;
|
||||||
import com.muyu.shop.cart.domain.model.CartSkuModel;
|
import com.muyu.shop.cart.domain.model.CartSkuModel;
|
||||||
|
import com.muyu.shop.cart.domain.model.SkuRuleModel;
|
||||||
import com.muyu.shop.cart.domain.model.StatisticsCartModel;
|
import com.muyu.shop.cart.domain.model.StatisticsCartModel;
|
||||||
import com.muyu.shop.cart.domain.resp.CartDetailResp;
|
import com.muyu.shop.cart.domain.resp.CartDetailResp;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
@ -52,6 +56,9 @@ public class CartInfoServiceImpl extends ServiceImpl<CartInfoMapper, CartInfo>
|
||||||
@Autowired
|
@Autowired
|
||||||
private ProjectSkuStockCache projectSkuStockCache;
|
private ProjectSkuStockCache projectSkuStockCache;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuleInfoCache ruleInfoCache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询购物车列表
|
* 查询购物车列表
|
||||||
*
|
*
|
||||||
|
@ -155,11 +162,25 @@ public class CartInfoServiceImpl extends ServiceImpl<CartInfoMapper, CartInfo>
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
// RuleCache
|
// RuleCache
|
||||||
|
RuleCacheModel ruleInfoCacheModel = ruleInfoCache.getData(projectInfo.getRuleId());
|
||||||
|
List<RuleAttrCacheModel> ruleAttrModelList = ruleInfoCacheModel.getRuleAttrModelList();
|
||||||
|
List<SkuRuleModel> ruleModelList = new ArrayList<>();
|
||||||
|
String projectSku = cartInfo.getProjectSku();
|
||||||
|
String[] skuArr = projectSku.split("-");
|
||||||
|
for (int index = 0 ; index < skuArr.length ; index++) {
|
||||||
|
ruleModelList.add(
|
||||||
|
SkuRuleModel.builder()
|
||||||
|
.ruleName(ruleAttrModelList.get(index).getAttrName())
|
||||||
|
.ruleValue(skuArr[index])
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
return CartSkuModel.builder()
|
return CartSkuModel.builder()
|
||||||
.projectId(cartInfo.getProjectId())
|
.projectId(cartInfo.getProjectId())
|
||||||
.name(projectInfo.getName())
|
.name(projectInfo.getName())
|
||||||
.image(projectSkuInfo.getImage())
|
.image(projectSkuInfo.getImage())
|
||||||
.stock(stock)
|
.stock(stock)
|
||||||
|
.skuRuleList(ruleModelList)
|
||||||
.price(projectSkuInfo.getPrice())
|
.price(projectSkuInfo.getPrice())
|
||||||
.cartInfoId(cartInfo.getId())
|
.cartInfoId(cartInfo.getId())
|
||||||
.num(cartInfo.getNum())
|
.num(cartInfo.getNum())
|
||||||
|
@ -168,7 +189,6 @@ public class CartInfoServiceImpl extends ServiceImpl<CartInfoMapper, CartInfo>
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
|
|
||||||
List<CartSkuModel> cartSkuList = new ArrayList<>();
|
|
||||||
StatisticsCartModel statisticsCartModel = StatisticsCartModel.builder()
|
StatisticsCartModel statisticsCartModel = StatisticsCartModel.builder()
|
||||||
.total(0L)
|
.total(0L)
|
||||||
.selectTotal(0L)
|
.selectTotal(0L)
|
||||||
|
@ -176,7 +196,7 @@ public class CartInfoServiceImpl extends ServiceImpl<CartInfoMapper, CartInfo>
|
||||||
.actualTotal(BigDecimal.ZERO)
|
.actualTotal(BigDecimal.ZERO)
|
||||||
.build();
|
.build();
|
||||||
return CartDetailResp.builder()
|
return CartDetailResp.builder()
|
||||||
.cartSkuList(cartSkuList)
|
.cartSkuList(cartSkuModelList)
|
||||||
.statisticsCart(statisticsCartModel)
|
.statisticsCart(statisticsCartModel)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue