diff --git a/muyu-modules/muyu-product/muyu-product-cache/pom.xml b/muyu-modules/muyu-product/muyu-product-cache/pom.xml index a0e70a3..036d70d 100644 --- a/muyu-modules/muyu-product/muyu-product-cache/pom.xml +++ b/muyu-modules/muyu-product/muyu-product-cache/pom.xml @@ -25,10 +25,10 @@ muyu-common-cache - + com.muyu - muyu-product-common + muyu-product-remote 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 index b1375f1..2858a21 100644 --- 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 @@ -4,6 +4,7 @@ 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.context.annotation.Primary; import org.springframework.stereotype.Service; /** @@ -12,6 +13,7 @@ import org.springframework.stereotype.Service; * @Date 2024-3-27 下午 03:37 */ @Service +@Primary public class ProjectInfoDataImpl implements ProjectInfoData { @Autowired diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuDataImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuDataImpl.java index 902ef52..25fb233 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuDataImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuDataImpl.java @@ -5,6 +5,7 @@ import com.muyu.product.cache.datasource.ProjectSkuData; import com.muyu.product.domain.ProjectSkuInfo; import com.muyu.product.service.ProjectSkuInfoService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import java.util.List; @@ -17,6 +18,7 @@ import java.util.stream.Collectors; * @Date 2024-4-1 上午 11:38 */ @Service +@Primary public class ProjectSkuDataImpl implements ProjectSkuData { @Autowired diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuStockDataImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuStockDataImpl.java index 40331fb..2cde9db 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuStockDataImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/cache/impl/ProjectSkuStockDataImpl.java @@ -1,11 +1,11 @@ package com.muyu.product.cache.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.muyu.product.cache.datasource.ProjectSkuStockData; import com.muyu.product.cache.key.SkuStockKey; import com.muyu.product.domain.ProjectSkuInfo; import com.muyu.product.service.ProjectSkuInfoService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; /** @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; * @Date 2024-4-2 上午 10:53 */ @Service +@Primary public class ProjectSkuStockDataImpl implements ProjectSkuStockData { @Autowired @@ -21,7 +22,7 @@ public class ProjectSkuStockDataImpl implements ProjectSkuStockData { @Override public Long getData (SkuStockKey key) { - ProjectSkuInfo projectSkuInfo = projectSkuInfoService.getInfoByProjectAndSku(key.getProjectId(), key.getSku()); + ProjectSkuInfo projectSkuInfo = projectSkuInfoService.getInfoByProjectIdAndSku(key.getProjectId(), key.getSku()); return projectSkuInfo.getStock(); } } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectSkuInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectSkuInfoController.java index 8955ed6..39144ee 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectSkuInfoController.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectSkuInfoController.java @@ -52,6 +52,15 @@ public class ProjectSkuInfoController extends BaseController { return getDataTable(list); } + /** + * 通过商品ID获取SKU集合 + * @param projectId 商品ID + * @return 商品SKU信息 + */ + @GetMapping("/list/{projectId}") + public Result> listByProjectId(@PathVariable("projectId")Long projectId){ + return Result.success(projectSkuInfoService.listByProjectId(projectId)); + } /** * 导出商品SKU列表 */ @@ -85,7 +94,7 @@ public class ProjectSkuInfoController extends BaseController { @GetMapping("/info/{projectId}/{projectSku}") public Result getInfoByProjectIdAndSku(@PathVariable("projectId")Long projectId, @PathVariable("projectSku") String projectSku){ - return Result.success(projectSkuInfoService.getInfoByProjectAndSku(projectId, projectSku)); + return Result.success(projectSkuInfoService.getInfoByProjectIdAndSku(projectId, projectSku)); }; /** * 新增商品SKU diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java index a5f9599..001d8f7 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/RuleInfoController.java @@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletResponse; import com.muyu.common.core.text.Convert; import com.muyu.product.domain.model.RuleInfoAddModel; import com.muyu.product.domain.resp.RuleInfoResp; +import com.muyu.product.service.RuleAttrInfoService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -81,6 +82,9 @@ public class RuleInfoController extends BaseController { return Result.success(ruleInfoService.getById(id)); } + @Autowired + private RuleAttrInfoService ruleAttrInfoService; + /** * 新增商品规格 */ diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectSkuInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectSkuInfoService.java index 1b8c375..214b515 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectSkuInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectSkuInfoService.java @@ -19,6 +19,13 @@ public interface ProjectSkuInfoService extends IService { */ public List list(ProjectSkuInfo projectSkuInfo); - ProjectSkuInfo getInfoByProjectAndSku(Long projectId,String projectSku); + ProjectSkuInfo getInfoByProjectIdAndSku(Long projectId,String projectSku); + + /** + * 通过商品Id获取sku集合 + * @param projectId 商品Id + * @return 商品SKU信息 + */ + List listByProjectId(Long projectId); } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleAttrInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleAttrInfoService.java index b1c498e..561aae7 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleAttrInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleAttrInfoService.java @@ -19,4 +19,10 @@ public interface RuleAttrInfoService extends IService { */ public List list(RuleAttrInfo ruleAttrInfo); + /** + * 通过ruleId获取规格详情 + * @param ruleId 规格Id + * @return 规格详情id + */ + List getInfoByRuleId(Long ruleId); } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java index cce3398..9e342a7 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/RuleInfoService.java @@ -3,11 +3,13 @@ package com.muyu.product.service; import java.util.List; import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.product.domain.RuleAttrInfo; import com.muyu.product.domain.RuleInfo; import com.baomidou.mybatisplus.extension.service.IService; import com.muyu.product.domain.model.RuleInfoAddModel; import com.muyu.product.domain.req.RuleInfoQueryReq; import com.muyu.product.domain.resp.RuleInfoResp; +import org.apache.tomcat.util.digester.Rule; /** * 商品规格Service接口 @@ -32,4 +34,5 @@ public interface RuleInfoService extends IService { public boolean save(RuleInfoAddModel ruleInfoAddModel); TableDataInfo queryList (RuleInfoQueryReq ruleInfoQueryReq); + } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectSkuInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectSkuInfoServiceImpl.java index e4837ab..bce98ac 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectSkuInfoServiceImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectSkuInfoServiceImpl.java @@ -66,10 +66,17 @@ public class ProjectSkuInfoServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ProjectSkuInfo::getProjectId, projectId); queryWrapper.eq(ProjectSkuInfo::getSku, projectSku); return this.getOne(queryWrapper); } + + @Override + public List listByProjectId(Long projectId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProjectSkuInfo::getProjectId, projectId); + return this.list(queryWrapper); + } } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleAttrInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleAttrInfoServiceImpl.java index 938c505..5bb3420 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleAttrInfoServiceImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleAttrInfoServiceImpl.java @@ -44,10 +44,13 @@ public class RuleAttrInfoServiceImpl extends ServiceImpl getInfoByRuleId(Long ruleId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(RuleAttrInfo::getRuleId, ruleId); + return this.list(queryWrapper); + } } diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java index d4db750..c8d3c6e 100644 --- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java +++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/RuleInfoServiceImpl.java @@ -102,4 +102,6 @@ public class RuleInfoServiceImpl extends ServiceImpl .total(isPage ? new PageInfo<>(list).getTotal() : 0) .build(); } + + } diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectInfoDataImpl.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectInfoDataImpl.java deleted file mode 100644 index a83f370..0000000 --- a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectInfoDataImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.muyu.shop.cart.cache.impl; - - -import com.muyu.product.cache.datasource.ProjectInfoData; -import com.muyu.product.domain.ProjectInfo; -import org.springframework.stereotype.Service; - -/** - * @author yangle - * @description: 缓存数据获取 - * @Date 2024-3-27 下午 03:37 - */ -@Service -public class ProjectInfoDataImpl implements ProjectInfoData { - - - /** - * 从数据库获取数据 - * @param key ID - * @return 缓存对象 - */ - @Override - public ProjectInfo getData (Long key) { - return new ProjectInfo(); - } - -} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectSkuDataImpl.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectSkuDataImpl.java deleted file mode 100644 index 4d8a93f..0000000 --- a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectSkuDataImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.muyu.shop.cart.cache.impl; - - -import com.muyu.product.cache.datasource.ProjectSkuData; -import com.muyu.product.domain.ProjectSkuInfo; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author yangle - * @description: 商品SKU实现类 - * @Date 2024-4-1 上午 11:38 - */ -@Service -public class ProjectSkuDataImpl implements ProjectSkuData { - - /** - * 通过键获取所有的hash数据 - * @param projectId 商品ID - * @return - */ - @Override - public Map getData (Long projectId) { - return new HashMap<>(); } - - /** - * 通过缓存键和hash键获取hash值 - * @param projectId 商品ID - * @param projectSku 商品SKU - * @return hash值 - */ - @Override - public ProjectSkuInfo getData (Long projectId, String projectSku) { - return new ProjectSkuInfo(); - } -} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectSkuStockDataImpl.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectSkuStockDataImpl.java deleted file mode 100644 index 3f6edae..0000000 --- a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/cache/impl/ProjectSkuStockDataImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.muyu.shop.cart.cache.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 ProjectSkuStockDataImpl 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-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/controller/CartInfoController.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/controller/CartInfoController.java index 844af82..7265fa4 100644 --- a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/controller/CartInfoController.java +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/controller/CartInfoController.java @@ -3,6 +3,7 @@ package com.muyu.shop.cart.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.muyu.product.domain.ProjectSkuInfo; import com.muyu.shop.cart.domain.req.CartDetailResp; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/service/impl/CartInfoServiceImpl.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/service/impl/CartInfoServiceImpl.java index 8c801e0..c84d91a 100644 --- a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/service/impl/CartInfoServiceImpl.java +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/service/impl/CartInfoServiceImpl.java @@ -1,5 +1,7 @@ package com.muyu.shop.cart.service.impl; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -7,11 +9,20 @@ import com.muyu.common.core.exception.ServiceException; import com.muyu.common.core.text.Convert; import com.muyu.common.core.utils.ObjUtils; import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.product.cache.ProjectInfoCache; +import com.muyu.product.cache.ProjectSkuCache; import com.muyu.product.cache.ProjectSkuStockCache; +import com.muyu.product.cache.RuleInfoCache; 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.ProjectSkuInfo; import com.muyu.shop.cart.cache.CartCache; -import com.muyu.shop.cart.cache.impl.ProjectSkuStockDataImpl; import com.muyu.shop.cart.cache.key.CartHashKey; +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.req.CartDetailResp; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.SystemUtils; @@ -112,13 +123,82 @@ private ProjectSkuStockCache projectSkuStockCache; } return true; } - +@Autowired +private ProjectSkuCache projectSkuCache; + @Autowired + private ProjectInfoCache projectInfoCache; + @Autowired + private RuleInfoCache ruleInfoCache; @Override public CartDetailResp detail() { Long userId = SecurityUtils.getUserId(); - this.cartCache.get(userId ); + List cacheToList = this.cartCache.getToList(userId); - return null; + List cartSkuModelList = cacheToList.stream() + .map(cartInfo -> { + ProjectSkuInfo projectSkuInfo = + projectSkuCache.get(cartInfo.getProjectId(), cartInfo.getProjectSku()); + ProjectInfo projectInfo = projectInfoCache.get(cartInfo.getProjectId()); + Long stock = projectSkuStockCache.get( + SkuStockKey.builder() + .projectId(cartInfo.getProjectId()) + .sku(cartInfo.getProjectSku()) + .build() + ); + RuleCacheModel ruleInfoCacheData = ruleInfoCache.getData(projectInfo.getRuleId()); + List ruleAttrModelList = ruleInfoCacheData.getRuleAttrModelList(); + List 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() + .projectId(cartInfo.getProjectId()) + .name(projectInfo.getName()) + .image(projectSkuInfo.getImage()) + .stock(stock) + .subtotal(projectSkuInfo.getPrice().multiply(new BigDecimal(cartInfo.getNum()))) + .skuRuleList(ruleModelList) + .price(projectSkuInfo.getPrice()) + .cartInfoId(cartInfo.getId()) + .num(cartInfo.getNum()) + .isSelected(cartInfo.getIsSelected()) + .build(); + }).toList(); + List cartSkuList = new ArrayList<>(); + StatisticsCartModel statisticsCartModel = StatisticsCartModel.builder() + .total(cartSkuModelList.stream() + .mapToLong(CartSkuModel::getNum) + .sum() + ) + .selectTotal( + cartSkuModelList.stream() + .filter(cartSkuModel -> "Y".equals(cartSkuModel.getIsSelected())) + .mapToLong(CartSkuModel::getNum) + .sum() + ) + .priceTotal( + cartSkuModelList.stream() + .filter(cartSkuModel -> "Y".equals(cartSkuModel.getIsSelected())) + .map(CartSkuModel::getSubtotal) + .reduce(BigDecimal.ZERO, BigDecimal::add) + ) + .actualTotal( + cartSkuModelList.stream() + .filter(cartSkuModel -> "Y".equals(cartSkuModel.getIsSelected())) + .map(CartSkuModel::getSubtotal) + .reduce(BigDecimal.ZERO, BigDecimal::add) + ).build(); + return CartDetailResp.builder() + .cartSkuList(cartSkuModelList) + .statisticsCart(statisticsCartModel) + .build(); }