diff --git a/muyu-common/muyu-common-cache/pom.xml b/muyu-common/muyu-common-cache/pom.xml new file mode 100644 index 0000000..ea149f8 --- /dev/null +++ b/muyu-common/muyu-common-cache/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + com.muyu + muyu-common + 3.6.3 + + + muyu-common-cache + + + 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..d3da0ca --- /dev/null +++ b/muyu-common/muyu-common-cache/src/main/java/com/muyu/common/cache/Cache.java @@ -0,0 +1,62 @@ +package com.muyu.common.cache; + +/** + * @author DongZl + * @description: 缓存接口基类 + * @Date 2024-3-26 下午 03:25 + */ +public interface Cache { + + /** + * key前缀 + * @return key前缀 + */ + public String keyPre(); + + + /** + * 编码 + * @param key ID + * @return 键 + */ + public String encode(K key); + + /** + * 解码 + * @param redisKey 数据库键 + * @return ID + */ + public K decode(String redisKey); + + /** + * 通过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/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-modules/muyu-product/muyu-product-cache/pom.xml b/muyu-modules/muyu-product/muyu-product-cache/pom.xml new file mode 100644 index 0000000..f0df5c0 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/pom.xml @@ -0,0 +1,43 @@ + + + 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 + + + com.muyu + muyu-common-core + + + com.muyu + muyu-product-common + + + + \ No newline at end of file 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..f84afa4 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoCache.java @@ -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.domain.ProjectInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author DongZl + * @description: 商品缓存 + * @Date 2024-3-27 下午 03:30 + */ +@Component +public class ProjectInfoCache extends CacheAbs { + + @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/ProjectInfoData.java b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java new file mode 100644 index 0000000..00a8c57 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-cache/src/main/java/com/muyu/product/cache/ProjectInfoData.java @@ -0,0 +1,18 @@ +package com.muyu.product.cache; + +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/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 6296d83..84ecc2d 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 @@ -54,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 = "商品图片") 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 index 387ef4d..65f0c20 100644 --- 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 @@ -37,15 +37,15 @@ public class ProjectAddModel 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/model/TemplateAttributeModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/TemplateAttributeModel.java index 8cbeb02..7ca70be 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,13 @@ 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/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..870b941 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/ProjectDetailResp.java @@ -0,0 +1,76 @@ +package com.muyu.product.domain.resp;/** + * @Author:yjz + * @Package:com.muyu.product.domain.resp + * @Project:cloud_service + * @name:ProjectDetailResp + * @Date:2024/3/25 17:11 + */ + +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; + +/** + *@ClassName ProjectDetailResp + *@Description 描述 + *@Author JunZhe.Yuan + *@Date 2024/3/25 17:11 + */ +@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-service/src/main/java/com/muyu/product/controller/ProjectInfoController.java b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/controller/ProjectInfoController.java index 5fc1feb..4c83550 100644 --- a/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/controller/ProjectInfoController.java +++ b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/controller/ProjectInfoController.java @@ -11,6 +11,7 @@ import com.muyu.product.domain.ProjectInfo; import com.muyu.product.domain.req.ProjectInfoEditReq; import com.muyu.product.domain.req.ProjectInfoQueryReq; import com.muyu.product.domain.req.ProjectInfoSaveReq; +import com.muyu.product.domain.resp.ProjectDetailResp; import com.muyu.product.service.ProjectInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -70,6 +71,19 @@ public class ProjectInfoController extends BaseController { 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)); + } + + + /** * 新增商品信息 */ diff --git a/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/CategoryInfoService.java b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/CategoryInfoService.java index f48896b..6d5789b 100644 --- a/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/CategoryInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/CategoryInfoService.java @@ -8,6 +8,7 @@ import com.muyu.product.domain.CategoryInfo; import com.muyu.product.domain.model.CategoryInfoSaveModel; import com.muyu.product.domain.resp.CategoryCommonElementResp; import com.muyu.product.domain.resp.CategoryParentCommonElementResp; +import org.apache.poi.ss.formula.functions.T; import java.util.List; @@ -67,4 +68,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-service/src/main/java/com/muyu/product/service/ProjectInfoService.java b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/ProjectInfoService.java index cef9101..650f49c 100644 --- a/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/ProjectInfoService.java +++ b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/ProjectInfoService.java @@ -2,7 +2,9 @@ package com.muyu.product.service; import com.baomidou.mybatisplus.extension.service.IService; import com.muyu.product.domain.ProjectInfo; +import com.muyu.product.domain.req.ProjectInfoEditReq; import com.muyu.product.domain.req.ProjectInfoSaveReq; +import com.muyu.product.domain.resp.ProjectDetailResp; import java.util.List; @@ -24,4 +26,8 @@ public interface ProjectInfoService extends IService { boolean save(ProjectInfoSaveReq projectInfoSaveReq); + + + + ProjectDetailResp getDetailInfo(Long id); } diff --git a/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java index 4a2ebb7..8d56355 100644 --- a/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java +++ b/muyu-modules/muyu-product/muyu-product-service/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java @@ -4,21 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.muyu.common.core.utils.ObjUtils; import com.muyu.common.security.utils.SecurityUtils; -import com.muyu.product.domain.AsProductAttributeInfo; -import com.muyu.product.domain.ProjectInfo; -import com.muyu.product.domain.ProjectSkuInfo; -import com.muyu.product.domain.model.AttrValueModel; -import com.muyu.product.domain.model.ProductSkuModel; -import com.muyu.product.domain.model.ProjectAddModel; +import com.muyu.product.domain.*; +import com.muyu.product.domain.model.*; +import com.muyu.product.domain.req.ProjectInfoEditReq; 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.mapper.ProjectInfoMapper; -import com.muyu.product.service.AsProductAttributeInfoService; -import com.muyu.product.service.ProjectInfoService; -import com.muyu.product.service.ProjectSkuInfoService; +import com.muyu.product.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; /** @@ -37,6 +35,18 @@ public class ProjectInfoServiceImpl extends ServiceImpl 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()); + if (!notInAttributeIdList.isEmpty()){ + 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 d092ab0..8676cd4 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-service + muyu-product-cache diff --git a/pom.xml b/pom.xml index 0dbedb5..bd349cb 100644 --- a/pom.xml +++ b/pom.xml @@ -228,6 +228,7 @@ muyu-visual muyu-modules muyu-common + muyu-common/muyu-common-cache pom