diff --git a/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/domain/Result.java b/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/domain/Result.java index 70faa40..e0319a1 100644 --- a/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/domain/Result.java +++ b/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/domain/Result.java @@ -39,6 +39,10 @@ public class Result implements Serializable { private T data; + public static Result buildCode(int code, String msg, T data){ + return restResult(data, code, msg); + } + public static Result success () { return restResult(null, SUCCESS, null); } @@ -71,8 +75,6 @@ public class Result implements Serializable { return restResult(null, code, msg); } - - public static Result warn () { return restResult(null, WARN, null); } diff --git a/muyu-common/muyu-common-security/src/main/java/com/muyu/common/security/handler/GlobalExceptionHandler.java b/muyu-common/muyu-common-security/src/main/java/com/muyu/common/security/handler/GlobalExceptionHandler.java index 52b43af..9965211 100644 --- a/muyu-common/muyu-common-security/src/main/java/com/muyu/common/security/handler/GlobalExceptionHandler.java +++ b/muyu-common/muyu-common-security/src/main/java/com/muyu/common/security/handler/GlobalExceptionHandler.java @@ -66,7 +66,7 @@ public class GlobalExceptionHandler { public Result handleServiceException (ServiceException e, HttpServletRequest request) { log.error(e.getMessage(), e); Integer code = e.getCode(); - return StringUtils.isNotNull(code) ? Result.error(code, e.getMessage()) : Result.error(e.getMessage()); + return StringUtils.isNotNull(code) ? Result.buildCode(code, e.getMessage(),null) : Result.error(e.getMessage()); } /** diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/pom.xml b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/pom.xml new file mode 100644 index 0000000..f244f01 --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + com.muyu + muyu-shop-cart + 3.6.3 + + + muyu-shop-cart-cache + + + 17 + 17 + UTF-8 + + + + + com.muyu + muyu-shop-cart-common + + + + com.muyu + muyu-common-cache + + + diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/CartCache.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/CartCache.java new file mode 100644 index 0000000..1593482 --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/CartCache.java @@ -0,0 +1,100 @@ +package com.muy.shop.cart.cache; + +import com.muy.shop.cart.cache.key.CartHashKey; +import com.muy.shop.cart.cache.sourcedata.CartData; +import com.muyu.cache.abs.HashCacheAbs; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.core.text.Convert; +import com.muyu.shop.cart.domain.CartInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Map; + +/** + * CartCache + * + * @author DeKangLiu + * on 2024/4/2 + */ +@Component +public class CartCache extends HashCacheAbs { + @Autowired + private CartData cartData; + + /** + * key前缀 + * @return key前缀 + */ + @Override + public String keyPre() { + return "cart:info:"; + } + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + @Override + public Long decode(String redisKey) { + return Convert.toLong(redisKey.replace(keyPre(),"")); + } + + /** + * 编码 + * @param hashKey ID + * @return 键 + */ + @Override + public String encodeHashKey(CartHashKey hashKey){ + return hashKey.getProjectId()+":"+hashKey.getProjectSku(); + } + + /** + * 解码 + * @param redisHashKey 数据库键 + * @return ID + */ + @Override + public CartHashKey decodeHashKey(String redisHashKey) { + String[] split = redisHashKey.split(":"); + return CartHashKey.builder() + .projectId(Convert.toLong(split[0])) + .projectSku(split[1]) + .build(); + } + + /** + * 通过键获取所有的hash数据 + * @param key 键 + * @return + */ + @Override + public Map getData(Long key) { + return cartData.getData(key); + } + + /** + * 通过缓存键和hash键获取hash值 + * @param key 缓存键 + * @param hashKey hash键 + * @return + */ + @Override + public CartInfo getData(Long key, CartHashKey hashKey) { + return cartData.getData(key,hashKey); + } + + @Override + public Map defaultValue() { + throw new ServiceException("购物车无数据", Result.SUCCESS); + } + + @Override + public CartInfo defaultHashValue() { + throw new ServiceException("购物车无数据",Result.SUCCESS); + } + +} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/key/CartHashKey.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/key/CartHashKey.java new file mode 100644 index 0000000..053513b --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/key/CartHashKey.java @@ -0,0 +1,28 @@ +package com.muy.shop.cart.cache.key; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * CartHashKey + * + * @author DeKangLiu + * on 2024/4/2 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CartHashKey { + /** + * 商品ID + */ + private Long projectId; + + /** + * 商品sku + */ + private String projectSku; +} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/sourcedata/CartData.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/sourcedata/CartData.java new file mode 100644 index 0000000..99da235 --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-cache/src/main/java/com/muy/shop/cart/cache/sourcedata/CartData.java @@ -0,0 +1,31 @@ +package com.muy.shop.cart.cache.sourcedata; + +import com.muy.shop.cart.cache.key.CartHashKey; +import com.muyu.shop.cart.domain.CartInfo; + +import java.util.Map; + +/** + * CartData + * + * @author DeKangLiu + * on 2024/4/2 + */ +public interface CartData { + + + /** + * 通过键获取所有的hash数据 + * @param key 键 + * @return + */ + public Map getData(Long key); + + /** + * 通过缓存键和hash键获取1hash值 + * @param key 缓存键 + * @param hashKey hash值 + * @return hash值 + */ + public CartInfo getData(Long key,CartHashKey hashKey); +} diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/pom.xml b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/pom.xml index 4953a2b..ef5a540 100644 --- a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/pom.xml +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/pom.xml @@ -24,6 +24,11 @@ muyu-shop-cart-common ${muyu.version} + + com.muyu + muyu-shop-cart-cache + ${muyu.version} + com.alibaba.cloud diff --git a/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/service/sourcedata/CartDataImpl.java b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/service/sourcedata/CartDataImpl.java new file mode 100644 index 0000000..c49df7d --- /dev/null +++ b/muyu-modules/muyu-shop-cart/muyu-shop-cart-server/src/main/java/com/muyu/shop/cart/service/sourcedata/CartDataImpl.java @@ -0,0 +1,53 @@ +package com.muyu.shop.cart.service.sourcedata; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.muy.shop.cart.cache.key.CartHashKey; +import com.muy.shop.cart.cache.sourcedata.CartData; +import com.muyu.shop.cart.domain.CartInfo; +import com.muyu.shop.cart.service.CartInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * CartDataImpl + * + * @author DeKangLiu + * on 2024/4/2 + */ +@Service +public class CartDataImpl implements CartData{ + @Autowired + private CartInfoService cartInfoService; + + /** + * 通过键获取所有的hash数据 + * @param key 键 + * @return + */ + @Override + public Map getData(Long key) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CartInfo::getUserId, key); + List cartInfoList = cartInfoService.list(queryWrapper); + return cartInfoList.stream() + .collect(Collectors.toMap(cartInfo -> CartHashKey.builder().projectId(cartInfo.getProjectId()).projectSku(cartInfo.getProjectSku()).build(), cartInfo -> cartInfo)); + } + + /** + * 通过缓存键和hash键获取hash值 + * @param key 缓存键 + * @param hashKey hash值 + * @return hash值 + */ + @Override + public CartInfo getData(Long key, CartHashKey hashKey) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(CartInfo::getUserId,key); + queryWrapper.eq(CartInfo::getProjectId,hashKey.getProjectId()); + return cartInfoService.getOne(queryWrapper); + } +} diff --git a/muyu-modules/muyu-shop-cart/pom.xml b/muyu-modules/muyu-shop-cart/pom.xml index d944d40..a3d4074 100644 --- a/muyu-modules/muyu-shop-cart/pom.xml +++ b/muyu-modules/muyu-shop-cart/pom.xml @@ -15,6 +15,7 @@ muyu-shop-cart-common muyu-shop-cart-remote muyu-shop-cart-server + muyu-shop-cart-cache diff --git a/pom.xml b/pom.xml index 8bc2f64..f22d54c 100644 --- a/pom.xml +++ b/pom.xml @@ -243,8 +243,12 @@ muyu-product-remote ${muyu.version} - - + + + com.muyu + muyu-shop-cart + ${muyu.version} +