diff --git a/muyu-modules/muyu-product/muyu-product-common/pom.xml b/muyu-modules/muyu-product/muyu-product-common/pom.xml
index a1e6024..6227a6d 100644
--- a/muyu-modules/muyu-product/muyu-product-common/pom.xml
+++ b/muyu-modules/muyu-product/muyu-product-common/pom.xml
@@ -23,5 +23,21 @@
com.muyu
muyu-common-core
+
+ io.springfox
+ springfox-swagger2
+ 3.0.0
+ compile
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ 2.3.4
+
+
+ io.springfox
+ springfox-oas
+ 3.0.0
+
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AttributeGroup.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AttributeGroup.java
index e9450e2..c20632d 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AttributeGroup.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AttributeGroup.java
@@ -49,6 +49,9 @@ public class AttributeGroup extends BaseEntity {
@ApiModelProperty(name = "状态", value = "状态", required = true)
private String states;
+ @ApiModelProperty(name = "备注" ,value = "状态" ,required = true)
+ private String remark;
+
/**
* 查询构造器
@@ -67,6 +70,7 @@ public class AttributeGroup extends BaseEntity {
return AttributeGroup.builder()
.name(attributeGroupSaveReq.getName())
.states(attributeGroupSaveReq.getStates())
+ .remark(attributeGroupSaveReq.getRemark())
.build();
}
@@ -78,6 +82,7 @@ public class AttributeGroup extends BaseEntity {
.id(id)
.name(attributeGroupEditReq.getName())
.states(attributeGroupEditReq.getStates())
+ .remark(attributeGroupEditReq.getRemark())
.build();
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/CategoryInfo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/CategoryInfo.java
index 918b02c..5727fa6 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/CategoryInfo.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/CategoryInfo.java
@@ -17,6 +17,7 @@ import com.muyu.product.domain.req.CategoryInfoEditReq;
import com.muyu.common.core.web.domain.TreeEntity;
import java.util.Date;
+import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;
@@ -62,6 +63,56 @@ public class CategoryInfo extends TreeEntity {
@ApiModelProperty(name = "介绍", value = "介绍")
private String introduction;
+ @ApiModelProperty(name = "备注", value = "备注")
+ private String remark;
+
+ @Override
+ public Long getParentId() {
+ return super.getParentId() != null ? super.getParentId() : 0L;
+ }
+
+ /**
+ * 安全地获取父级ID
+ */
+ public Long getSafeParentId() {
+ return Optional.ofNullable(super.getParentId()).orElse(0L);
+ }
+
+ /**
+ * 判断是否有父级
+ */
+ public boolean hasParent() {
+ Long parentId = getParentId();
+ return parentId != null && parentId != 0;
+ }
+
+ // 修改构造器方法,添加对 parentId 的安全处理
+ public static CategoryInfo saveBuild(CategoryInfoSaveReq categoryInfoSaveReq, Supplier supplier) {
+ return CategoryInfo.builder()
+ .name(categoryInfoSaveReq.getName())
+ .image(categoryInfoSaveReq.getImage())
+ .start(categoryInfoSaveReq.getStart())
+ .remark(categoryInfoSaveReq.getRemark())
+ .introduction(categoryInfoSaveReq.getIntroduction())
+ .parentId(Optional.ofNullable(categoryInfoSaveReq.getParentId()).orElse(0L))
+ .createBy(supplier.get())
+ .createTime(new Date())
+ .build();
+ }
+
+ public static CategoryInfo saveModelBuild(CategoryInfoSaveModel categoryInfoSaveModel) {
+ return CategoryInfo.builder()
+ .name(categoryInfoSaveModel.getName())
+ .image(categoryInfoSaveModel.getImage())
+ .start(categoryInfoSaveModel.getStart())
+ .remark(categoryInfoSaveModel.getRemark())
+ .introduction(categoryInfoSaveModel.getIntroduction())
+ .parentId(Optional.ofNullable(categoryInfoSaveModel.getParentId()).orElse(0L))
+ .createBy(categoryInfoSaveModel.getCreateBy())
+ .createTime(new Date())
+ .build();
+ }
+
/**
* 查询构造器
*/
@@ -74,43 +125,15 @@ public class CategoryInfo extends TreeEntity {
.build();
}
- /**
- * 添加构造器
- */
- public static CategoryInfo saveBuild(CategoryInfoSaveReq categoryInfoSaveReq, Supplier supplier){
- return CategoryInfo.builder()
- .name(categoryInfoSaveReq.getName())
- .image(categoryInfoSaveReq.getImage())
- .start(categoryInfoSaveReq.getStart())
- .introduction(categoryInfoSaveReq.getIntroduction())
- .parentId(categoryInfoSaveReq.getParentId())
- .createBy(supplier.get())
- .createTime(new Date())
- .build();
- }
-
- /**
- * 修改构造器
- */
public static CategoryInfo editBuild(Long id, CategoryInfoEditReq categoryInfoEditReq){
return CategoryInfo.builder()
.id(id)
.name(categoryInfoEditReq.getName())
.image(categoryInfoEditReq.getImage())
+ .remark(categoryInfoEditReq.getRemark())
.start(categoryInfoEditReq.getStart())
.introduction(categoryInfoEditReq.getIntroduction())
.build();
}
- public static CategoryInfo saveModelBuild(CategoryInfoSaveModel categoryInfoSaveModel) {
- return CategoryInfo.builder()
- .name(categoryInfoSaveModel.getName())
- .image(categoryInfoSaveModel.getImage())
- .start(categoryInfoSaveModel.getStart())
- .introduction(categoryInfoSaveModel.getIntroduction())
- .parentId(categoryInfoSaveModel.getParentId())
- .createBy(categoryInfoSaveModel.getCreateBy())
- .createTime(new Date())
- .build();
- }
}
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 c16db37..307b4a5 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
@@ -90,10 +90,10 @@ public class ProjectInfo extends BaseEntity {
@Excel(name = "品牌")
@ApiModelProperty(name = "品牌", value = "品牌")
private Long brandId;
- /** 拼团id */
- @Excel(name = "拼团id")
- @ApiModelProperty(name = "拼团id", value = "拼团id")
- private Long teamId;
+
+ @ApiModelProperty(name = "备注", value = "备注")
+ private String remark;
+
/**
* 查询构造器
@@ -152,4 +152,17 @@ public class ProjectInfo extends BaseEntity {
.build();
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ ProjectInfo that = (ProjectInfo) o;
+ // 需要先判断 id 是否为 null
+ return (id != null && id.equals(that.id));
+ }
+
+ @Override
+ public int hashCode() {
+ return id != null ? id.hashCode() : 0;
+ }
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java
index 9a28465..a0ed24f 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/ProjectSkuInfo.java
@@ -66,22 +66,27 @@ public class ProjectSkuInfo extends BaseEntity {
@ApiModelProperty(name = "规格图片", value = "规格图片", required = true)
private String image;
+ @Excel(name = "规格值")
+ @ApiModelProperty(name = "规格值", value = "规格值")
+ private String specValues;
+
/**
* 查询构造器
*/
- public static ProjectSkuInfo queryBuild( ProjectSkuInfoQueryReq projectSkuInfoQueryReq){
+ public static ProjectSkuInfo queryBuild(ProjectSkuInfoQueryReq projectSkuInfoQueryReq){
return ProjectSkuInfo.builder()
.projectId(projectSkuInfoQueryReq.getProjectId())
.sku(projectSkuInfoQueryReq.getSku())
.stock(projectSkuInfoQueryReq.getStock())
.price(projectSkuInfoQueryReq.getPrice())
.image(projectSkuInfoQueryReq.getImage())
+ .specValues(projectSkuInfoQueryReq.getSpecValues())
.build();
}
/**
- * 添加构造器
- */
+ * 添加构造器
+ */
public static ProjectSkuInfo saveBuild(ProjectSkuInfoSaveReq projectSkuInfoSaveReq){
return ProjectSkuInfo.builder()
.projectId(projectSkuInfoSaveReq.getProjectId())
@@ -89,20 +94,22 @@ public class ProjectSkuInfo extends BaseEntity {
.stock(projectSkuInfoSaveReq.getStock())
.price(projectSkuInfoSaveReq.getPrice())
.image(projectSkuInfoSaveReq.getImage())
+ .specValues(projectSkuInfoSaveReq.getSpecValues())
.build();
}
/**
- * 修改构造器
- */
+ * 修改构造器
+ */
public static ProjectSkuInfo editBuild(Long id, ProjectSkuInfoEditReq projectSkuInfoEditReq){
return ProjectSkuInfo.builder()
- .id(id)
+ .id(id)
.projectId(projectSkuInfoEditReq.getProjectId())
.sku(projectSkuInfoEditReq.getSku())
.stock(projectSkuInfoEditReq.getStock())
.price(projectSkuInfoEditReq.getPrice())
.image(projectSkuInfoEditReq.getImage())
+ .specValues(projectSkuInfoEditReq.getSpecValues())
.build();
}
@@ -113,6 +120,7 @@ public class ProjectSkuInfo extends BaseEntity {
.image(productSkuModel.getImage())
.stock(productSkuModel.getStock())
.price(productSkuModel.getPrice())
+ .specValues(productSkuModel.getSpecValues())
.build();
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/RuleInfo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/RuleInfo.java
index c4d61ca..1bea393 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/RuleInfo.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/RuleInfo.java
@@ -51,11 +51,8 @@ public class RuleInfo extends BaseEntity {
@ApiModelProperty(name = "规格状态", value = "规格状态")
private String status;
- /** 规格状态 */
- @Excel(name = "规格描述")
- @ApiModelProperty(name = "规格描述", value = "规格描述")
+ @ApiModelProperty(name = "备注", value = "备注")
private String remark;
-
/**
* 查询构造器
*/
@@ -63,6 +60,7 @@ public class RuleInfo extends BaseEntity {
return RuleInfo.builder()
.name(ruleInfoQueryReq.getName())
.status(ruleInfoQueryReq.getStatus())
+ .remark(ruleInfoQueryReq.getRemark())
.build();
}
@@ -72,6 +70,7 @@ public class RuleInfo extends BaseEntity {
public static RuleInfo saveBuild(RuleInfoSaveReq ruleInfoSaveReq){
return RuleInfo.builder()
.name(ruleInfoSaveReq.getName())
+ .remark(ruleInfoSaveReq.getRemark())
.status(ruleInfoSaveReq.getStatus())
.build();
}
@@ -84,21 +83,19 @@ public class RuleInfo extends BaseEntity {
.id(id)
.name(ruleInfoEditReq.getName())
.status(ruleInfoEditReq.getStatus())
+ .remark(ruleInfoEditReq.getRemark())
.build();
}
- /**
- *
- * @param ruleInfoAddModel 添加模型
- * @param createBy 创建者
- * @return 规格对象
- */
- public static RuleInfo addModelBuild (RuleInfoAddModel ruleInfoAddModel, Supplier createBy) {
- return RuleInfo.builder()
- .name(ruleInfoAddModel.getName())
- .status(ruleInfoAddModel.getStatus())
- .createBy(createBy.get())
- .createTime(new Date())
- .build();
+ public static RuleInfo addModelBuild(RuleInfoAddModel model, Supplier userNameSupplier) {
+ RuleInfo ruleInfo = new RuleInfo();
+ ruleInfo.setName(model.getName());
+ ruleInfo.setRemark(model.getRemark());
+ ruleInfo.setStatus(model.getStatus()); // 设置状态
+ ruleInfo.setCreateBy(userNameSupplier.get());
+ ruleInfo.setCreateTime(new Date());
+ ruleInfo.setUpdateBy(userNameSupplier.get());
+ ruleInfo.setUpdateTime(new Date());
+ return ruleInfo;
}
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/base/SwaggerConfig.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/base/SwaggerConfig.java
new file mode 100644
index 0000000..0d806ee
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/base/SwaggerConfig.java
@@ -0,0 +1,63 @@
+package com.muyu.product.domain.base;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.oas.annotations.EnableOpenApi;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import java.util.Collections;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * @ClassName SwaggerConfig
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/19 22:02
+ */
+@Configuration
+@EnableOpenApi
+public class SwaggerConfig {
+
+ @Bean
+ public Docket publicApi() {
+ return new Docket(DocumentationType.OAS_30)
+ .groupName("public-api")
+ .apiInfo(apiInfo())
+ .select()
+ .apis(RequestHandlerSelectors.basePackage("com.muyu.controller"))
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ @Bean
+ public Docket adminApi() {
+ return new Docket(DocumentationType.OAS_30)
+ .groupName("admin-api")
+ .apiInfo(adminApiInfo())
+ .select()
+ .apis(RequestHandlerSelectors.basePackage("com.muyu.admin"))
+ .paths(PathSelectors.any())
+ .build();
+ }
+
+ private ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ .title("公共API")
+ .description("公共接口文档")
+ .version("1.0")
+ .build();
+ }
+
+ private ApiInfo adminApiInfo() {
+ return new ApiInfoBuilder()
+ .title("管理API")
+ .description("管理接口文档")
+ .version("1.0")
+ .build();
+ }
+}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/CategoryInfoSaveModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/CategoryInfoSaveModel.java
index 8a77303..2a79464 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/CategoryInfoSaveModel.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/CategoryInfoSaveModel.java
@@ -43,6 +43,8 @@ public class CategoryInfoSaveModel extends TreeEntity {
/** 介绍 */
private String introduction;
+ private String remark;
+
/**
* 商品属性组关联ID
*/
@@ -65,6 +67,7 @@ public class CategoryInfoSaveModel extends TreeEntity {
.name(categoryInfoSaveReq.getName())
.image(categoryInfoSaveReq.getImage())
.start(categoryInfoSaveReq.getStart())
+ .remark(categoryInfoSaveReq.getRemark())
.introduction(categoryInfoSaveReq.getIntroduction())
.parentId(categoryInfoSaveReq.getParentId())
.attributeGroupIdList(categoryInfoSaveReq.getAttributeGroupIdList())
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java
index a9f2d88..34a1f0f 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java
@@ -1,12 +1,17 @@
package com.muyu.product.domain.model;
import com.muyu.common.core.annotation.Excel;
+import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
@@ -18,21 +23,92 @@ import java.math.BigDecimal;
@Builder
@NoArgsConstructor
@AllArgsConstructor
+@ApiModel(value = "商品SKU模型", description = "商品SKU信息")
public class ProductSkuModel {
- /** sku */
- @ApiModelProperty(name = "sku", value = "sku", required = true)
+ /** SKU编码 */
+ @NotBlank(message = "SKU编码不能为空")
+ @Excel(name = "SKU编码")
+ @ApiModelProperty(name = "sku", value = "SKU编码", required = true, example = "SP123456")
private String sku;
/** 商品库存 */
- @ApiModelProperty(name = "商品库存", value = "商品库存", required = true)
+ @NotNull(message = "商品库存不能为空")
+ @Min(value = 0, message = "商品库存不能小于0")
+ @Excel(name = "商品库存")
+ @ApiModelProperty(name = "stock", value = "商品库存", required = true, example = "100")
private Long stock;
- /** 商品价格 */
- @ApiModelProperty(name = "商品价格", value = "商品价格", required = true)
+ /** 销售价格 */
+ @NotNull(message = "销售价格不能为空")
+ @DecimalMin(value = "0.01", message = "销售价格必须大于0")
+ @Excel(name = "销售价格")
+ @ApiModelProperty(name = "price", value = "销售价格", required = true, example = "99.99")
private BigDecimal price;
+ /** 市场价格 */
+ @Excel(name = "市场价格")
+ @ApiModelProperty(name = "marketPrice", value = "市场价格", example = "129.99")
+ private BigDecimal marketPrice;
+
+ /** 成本价格 */
+ @Excel(name = "成本价格")
+ @ApiModelProperty(name = "costPrice", value = "成本价格", example = "59.99")
+ private BigDecimal costPrice;
+
/** 规格图片 */
- @ApiModelProperty(name = "规格图片", value = "规格图片", required = true)
+ @NotBlank(message = "规格图片不能为空")
+ @Excel(name = "规格图片")
+ @ApiModelProperty(name = "image", value = "规格图片", required = true)
private String image;
+
+ /** 规格值JSON */
+ @ApiModelProperty(name = "specValues", value = "规格值JSON", example = "{\"颜色\":\"红色\",\"尺寸\":\"XL\"}")
+ private String specValues;
+
+ /** 商品条形码 */
+ @Excel(name = "商品条形码")
+ @ApiModelProperty(name = "barcode", value = "商品条形码")
+ private String barcode;
+
+ /** 预警库存 */
+ @Min(value = 0, message = "预警库存不能小于0")
+ @Excel(name = "预警库存")
+ @ApiModelProperty(name = "lowStock", value = "预警库存", example = "10")
+ private Integer lowStock;
+
+ /** 锁定库存 */
+ @Excel(name = "锁定库存")
+ @ApiModelProperty(name = "lockStock", value = "锁定库存", example = "0")
+ private Integer lockStock;
+
+ /** 销量 */
+ @Excel(name = "销量")
+ @ApiModelProperty(name = "sales", value = "销量", example = "0")
+ private Integer sales;
+
+ /** 状态(0-禁用 1-启用) */
+ @Excel(name = "状态", readConverterExp = "0=禁用,1=启用")
+ @ApiModelProperty(name = "status", value = "状态(0-禁用 1-启用)", example = "1")
+ private String status;
+
+ /** SKU名称 */
+ @Excel(name = "SKU名称")
+ @ApiModelProperty(name = "skuName", value = "SKU名称")
+ private String skuName;
+
+ /** 重量(克) */
+ @Excel(name = "重量(克)")
+ @ApiModelProperty(name = "weight", value = "重量(克)")
+ private Double weight;
+
+ /** 体积(cm³) */
+ @Excel(name = "体积(cm³)")
+ @ApiModelProperty(name = "volume", value = "体积(cm³)")
+ private Double volume;
+
+ /** 排序号 */
+ @Excel(name = "排序号")
+ @ApiModelProperty(name = "sort", value = "排序号", example = "1")
+ private Integer sort;
}
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 33bc029..01472ae 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
@@ -1,10 +1,16 @@
package com.muyu.product.domain.model;
import com.muyu.common.core.web.domain.BaseEntity;
+import com.muyu.product.domain.ProjectInfo;
+import com.muyu.product.domain.req.ProjectInfoEditReq;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.SuperBuilder;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
/**
* @author DongZl
* @description: 商品添加模型
@@ -17,43 +23,97 @@ import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
public class ProjectAddModel extends BaseEntity {
+ private Long id;
+
/** 商品名称 */
- @ApiModelProperty(name = "商品名称", value = "商品名称")
+ @NotBlank(message = "商品名称不能为空")
+ @ApiModelProperty(name = "name", value = "商品名称", required = true)
private String name;
/** 商品描述 */
- @ApiModelProperty(name = "商品描述", value = "商品描述")
+ @ApiModelProperty(name = "introduction", value = "商品描述")
private String introduction;
/** 主类型 */
- @ApiModelProperty(name = "主类型", value = "主类型")
+ @ApiModelProperty(name = "mianType", value = "主类型")
private Long mianType;
/** 父类型 */
- @ApiModelProperty(name = "父类型", value = "父类型")
+ @ApiModelProperty(name = "parentType", value = "父类型")
private Long parentType;
/** 商品类型 */
- @ApiModelProperty(name = "商品类型", value = "商品类型")
+ @NotNull(message = "商品类型不能为空")
+ @ApiModelProperty(name = "type", value = "商品类型", required = true)
private Long type;
- /** 商品图片 */
- @ApiModelProperty(name = "商品图片", value = "商品图片")
+ /** 商品主图 */
+ @NotBlank(message = "商品主图不能为空")
+ @ApiModelProperty(name = "image", value = "商品主图", required = true)
private String image;
/** 商品轮播图 */
- @ApiModelProperty(name = "商品轮播图", value = "商品轮播图")
+ @ApiModelProperty(name = "carouselImages", value = "商品轮播图(多个图片用逗号分隔)")
private String carouselImages;
- /** 商品状态 */
- @ApiModelProperty(name = "商品状态", value = "商品状态")
+ /** 商品状态(0-下架 1-上架) */
+ @ApiModelProperty(name = "status", value = "商品状态(0-下架 1-上架)")
private String status;
- /** 规格 */
- @ApiModelProperty(name = "规格", value = "规格")
+ /** 规格ID */
+ @ApiModelProperty(name = "ruleId", value = "规格ID")
private Long ruleId;
- /** 品牌 */
- @ApiModelProperty(name = "品牌", value = "品牌")
+ /** 品牌ID */
+ @ApiModelProperty(name = "brandId", value = "品牌ID")
private Long brandId;
+
+ /** SKU列表 */
+ @ApiModelProperty(name = "skuList", value = "SKU列表")
+ private List skuList;
+
+ /** 销售价格 */
+ @ApiModelProperty(name = "salePrice", value = "销售价格")
+ private Double salePrice;
+
+ /** 市场价格 */
+ @ApiModelProperty(name = "marketPrice", value = "市场价格")
+ private Double marketPrice;
+
+ /** 库存数量 */
+ @ApiModelProperty(name = "stock", value = "库存数量")
+ private Integer stock;
+
+ /** 排序号 */
+ @ApiModelProperty(name = "sort", value = "排序号")
+ private Integer sort;
+
+ /** 是否推荐(0-否 1-是) */
+ @ApiModelProperty(name = "isRecommend", value = "是否推荐(0-否 1-是)")
+ private String isRecommend;
+
+ /** 商品详情 */
+ @ApiModelProperty(name = "detail", value = "商品详情")
+ private String detail;
+
+ /** 规格属性JSON */
+ @ApiModelProperty(name = "specJson", value = "规格属性JSON")
+ private String specJson;
+
+
+ public static ProjectInfo editBuild(Long id, ProjectInfoEditReq projectInfoEditReq){
+ return ProjectInfo.builder()
+ .id(id)
+ .name(projectInfoEditReq.getProjectAddModel().getName())
+ .introduction(projectInfoEditReq.getProjectAddModel().getIntroduction())
+ .mianType(projectInfoEditReq.getProjectAddModel().getMianType())
+ .parentType(projectInfoEditReq.getProjectAddModel().getParentType())
+ .type(projectInfoEditReq.getProjectAddModel().getType())
+ .image(projectInfoEditReq.getProjectAddModel().getImage())
+ .carouselImages(projectInfoEditReq.getProjectAddModel().getCarouselImages())
+ .status(projectInfoEditReq.getProjectAddModel().getStatus())
+ .ruleId(projectInfoEditReq.getProjectAddModel().getRuleId())
+ .brandId(projectInfoEditReq.getProjectAddModel().getBrandId())
+ .build();
+ }
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectModel.java
new file mode 100644
index 0000000..cfd99c5
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectModel.java
@@ -0,0 +1,21 @@
+package com.muyu.product.domain.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ClassName ProjectModel
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/19 21:45
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectModel {
+ private Long id;
+ private String value;
+}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectSKUModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectSKUModel.java
new file mode 100644
index 0000000..cd2dcc9
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectSKUModel.java
@@ -0,0 +1,25 @@
+package com.muyu.product.domain.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @ClassName ProjectSKUModel
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/19 21:45
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectSKUModel {
+ private String sku;
+ private Long stock;
+ private BigDecimal price;
+ private String image;
+}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleAttrAddModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleAttrAddModel.java
index e293352..04e2539 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleAttrAddModel.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleAttrAddModel.java
@@ -33,8 +33,16 @@ public class RuleAttrAddModel extends BaseEntity {
/**
* 规格属性值集合
*/
+
+ private String attrValue;
+
+ private String status = "Y";
+
+
private List valueList;
+// private List ruleAttrList;
+
public static RuleAttrAddModel infoBuild (RuleAttrInfo ruleAttrInfo) {
return RuleAttrAddModel.builder()
.name(ruleAttrInfo.getName())
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleAttrAssModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleAttrAssModel.java
new file mode 100644
index 0000000..fd59797
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleAttrAssModel.java
@@ -0,0 +1,36 @@
+package com.muyu.product.domain.model;
+
+import com.muyu.common.core.web.domain.BaseEntity;
+import com.muyu.product.domain.RuleAttrInfo;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @ClassName RuleAttrAssModel
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/14 16:03
+ */
+@Data
+@SuperBuilder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RuleAttrAssModel extends BaseEntity {
+ private String name;
+
+ private List valueList;
+
+ public static RuleAttrAddModel infoBuild (RuleAttrInfo ruleAttrInfo) {
+ return RuleAttrAddModel.builder()
+ .name(ruleAttrInfo.getName())
+ .valueList(Arrays.stream(ruleAttrInfo.getAttrValue().split(",")).toList())
+ .build();
+ }
+}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleInfoAddModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleInfoAddModel.java
index d2742b3..836f022 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleInfoAddModel.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/RuleInfoAddModel.java
@@ -23,12 +23,16 @@ import java.util.List;
@EqualsAndHashCode(callSuper = true)
public class RuleInfoAddModel extends BaseEntity {
+ private Long id;
+
/** 规格名称 */
private String name;
/** 规格状态 */
private String status;
+ private String remark;
+
/**
* 规格属性集合
*/
@@ -38,6 +42,7 @@ public class RuleInfoAddModel extends BaseEntity {
return RuleInfoAddModel.builder()
.name(req.getName())
.status(req.getStatus())
+ .remark(req.getRemark())
.ruleAttrList(req.getRuleAttrList())
.build();
}
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 ebd44da..91433ce 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
@@ -35,6 +35,8 @@ public class TemplateAttributeModel extends BaseEntity {
*/
private String code;
+ private String value;
+
public static TemplateAttributeModel attributeInfoBuild(AttributeInfo attributeInfo){
return TemplateAttributeModel.builder()
.id(attributeInfo.getId())
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java
index 35a1b47..e9b1847 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/AttributeGroupEditReq.java
@@ -1,7 +1,10 @@
package com.muyu.product.domain.req;
import java.util.Date;
+import java.util.List;
+
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.muyu.product.domain.AttributeInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@@ -33,5 +36,10 @@ public class AttributeGroupEditReq extends BaseEntity {
@ApiModelProperty(name = "状态", value = "状态", required = true)
private String states;
+ @ApiModelProperty(name = "备注", value = "备注", required = true)
+ private String remark;
+
+ private List attributeList;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoSaveReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoSaveReq.java
index 21f92fb..f65452b 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoSaveReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/CategoryInfoSaveReq.java
@@ -8,7 +8,6 @@ import lombok.experimental.SuperBuilder;
import io.swagger.annotations.*;
import com.muyu.common.core.web.domain.TreeEntity;
-import javax.validation.constraints.NotNull;
import java.util.List;
/**
@@ -44,7 +43,6 @@ public class CategoryInfoSaveReq extends TreeEntity {
/** 是否启用 */
@ApiModelProperty(name = "是否启用", value = "是否启用", required = true)
- @NotNull()
private String start;
/** 介绍 */
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 4711de1..f70d2c4 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
@@ -1,5 +1,10 @@
package com.muyu.product.domain.req;
+import com.muyu.product.domain.ProjectInfo;
+import com.muyu.product.domain.ProjectSkuInfo;
+import com.muyu.product.domain.model.ProjectAddModel;
+import com.muyu.product.domain.model.ProjectModel;
+import com.muyu.product.domain.model.ProjectSKUModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@@ -8,6 +13,10 @@ import lombok.experimental.SuperBuilder;
import io.swagger.annotations.*;
import com.muyu.common.core.web.domain.BaseEntity;
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* 商品信息对象 project_info
*
@@ -63,4 +72,34 @@ public class ProjectInfoEditReq extends BaseEntity {
@ApiModelProperty(name = "品牌", value = "品牌")
private Long brandId;
+
+ @ApiModelProperty(value = "商品信息", required = true)
+ @NotNull(message = "商品信息不能为空")
+ private ProjectInfo projectInfo;
+
+ @ApiModelProperty("SKU列表")
+ private List skuList;
+
+ // 添加非空校验注解
+ @NotNull(message = "商品信息不能为空")
+ public ProjectInfo getProjectInfo() {
+ return projectInfo;
+ }
+
+ public List getSkuList() {
+ return skuList != null ? skuList : new ArrayList<>();
+ }
+
+ public void setProjectInfo(ProjectInfo projectInfo) {
+ this.projectInfo = projectInfo;
+ }
+
+ public void setSkuList(List skuList) {
+ this.skuList = skuList;
+ }
+
+ private ProjectAddModel projectAddModel;
+ private List attrValueList;
+ private List productSkuList;
+
}
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 dd509ac..2b87f94 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
@@ -1,5 +1,7 @@
package com.muyu.product.domain.req;
+import com.muyu.product.domain.ProjectInfo;
+import com.muyu.product.domain.ProjectSkuInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@@ -8,6 +10,8 @@ import lombok.experimental.SuperBuilder;
import io.swagger.annotations.*;
import com.muyu.common.core.web.domain.BaseEntity;
+import java.util.List;
+
/**
* 商品信息对象 project_info
*
@@ -63,4 +67,10 @@ public class ProjectInfoQueryReq extends BaseEntity {
@ApiModelProperty(name = "品牌", value = "品牌")
private Long brandId;
+ @ApiModelProperty(name = "商品信息", value = "商品信息")
+ private ProjectInfo projectInfo;
+
+ @ApiModelProperty(name = "商品SKU", value = "商品SKU")
+ private List skuList;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java
index 10e5b0d..e277027 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectInfoSaveReq.java
@@ -1,5 +1,7 @@
package com.muyu.product.domain.req;
+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;
@@ -43,4 +45,10 @@ public class ProjectInfoSaveReq extends BaseEntity {
*/
private List productSkuList;
+ @ApiModelProperty(name = "规格值", value = "规格值")
+ private String specValues;
+
+ private ProjectInfo projectInfo;
+ private List skuList;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoEditReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoEditReq.java
index e28d898..14c7401 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoEditReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoEditReq.java
@@ -1,6 +1,10 @@
package com.muyu.product.domain.req;
import java.math.BigDecimal;
+import java.util.List;
+
+import com.muyu.product.domain.ProjectInfo;
+import com.muyu.product.domain.ProjectSkuInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@@ -43,5 +47,10 @@ public class ProjectSkuInfoEditReq extends BaseEntity {
/** 规格图片 */
@ApiModelProperty(name = "规格图片", value = "规格图片", required = true)
private String image;
+ @ApiModelProperty(name = "规格值", value = "规格值")
+ private String specValues;
+
+ private ProjectInfo projectInfo;
+ private List skuList;
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoQueryReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoQueryReq.java
index 48e9f4f..0f227a9 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoQueryReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoQueryReq.java
@@ -44,4 +44,7 @@ public class ProjectSkuInfoQueryReq extends BaseEntity {
@ApiModelProperty(name = "规格图片", value = "规格图片")
private String image;
+ @ApiModelProperty(name = "规格值", value = "规格值")
+ private String specValues;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoSaveReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoSaveReq.java
index 26856fc..4e65c29 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoSaveReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/ProjectSkuInfoSaveReq.java
@@ -54,4 +54,7 @@ public class ProjectSkuInfoSaveReq extends BaseEntity {
@ApiModelProperty(name = "规格图片", value = "规格图片", required = true)
private String image;
+ @ApiModelProperty(name = "规格值", value = "规格值")
+ private String specValues;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleAttrInfoReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleAttrInfoReq.java
new file mode 100644
index 0000000..b6f2413
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleAttrInfoReq.java
@@ -0,0 +1,29 @@
+package com.muyu.product.domain.req;
+
+import com.muyu.product.domain.model.RuleAttrAddModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @ClassName RuleAttrInfoReq
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/14 16:28
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RuleAttrInfoReq {
+
+ private String name;
+
+ private String status;
+
+ private String remark;
+
+
+ private List ruleAttrList;
+}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleAttrInfoSaveReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleAttrInfoSaveReq.java
index d05e745..1e0562a 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleAttrInfoSaveReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleAttrInfoSaveReq.java
@@ -7,6 +7,9 @@ import lombok.AllArgsConstructor;
import lombok.experimental.SuperBuilder;
import io.swagger.annotations.*;
import com.muyu.common.core.web.domain.BaseEntity;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
/**
* 规格详情对象 rule_attr_info
@@ -43,4 +46,8 @@ public class RuleAttrInfoSaveReq extends BaseEntity {
@ApiModelProperty(name = "规格值", value = "规格值")
private String attrValue;
+ @NotBlank(message = "规格名称不能为空")
+ @Length(max = 50, message = "规格名称长度不能超过50个字符")
+ private String attrName;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleGroupUpdResp.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleGroupUpdResp.java
new file mode 100644
index 0000000..31d09b7
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleGroupUpdResp.java
@@ -0,0 +1,31 @@
+package com.muyu.product.domain.req;
+
+import com.muyu.product.domain.RuleAttrInfo;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @ClassName RuleGroupUpdResp
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/13 22:24
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class RuleGroupUpdResp {
+
+ private Long id;
+
+ private String name;
+
+ private String status;
+
+ private List ruleAttrList;
+
+}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java
index 6832722..ea8414d 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/req/RuleInfoEditReq.java
@@ -1,6 +1,5 @@
package com.muyu.product.domain.req;
-import com.muyu.common.core.annotation.Excel;
import com.muyu.product.domain.model.RuleAttrAddModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -35,14 +34,7 @@ public class RuleInfoEditReq extends BaseEntity {
@ApiModelProperty(name = "规格状态", value = "规格状态")
private String status;
- /** 规格状态 */
- @Excel(name = "规格描述")
- @ApiModelProperty(name = "规格描述", value = "规格描述")
- private String remark;
-
- /**
- * 规格属性集合
- */
private List ruleAttrList;
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupPageResp.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupPageResp.java
index 3fa6abf..2fd9cc7 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupPageResp.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupPageResp.java
@@ -35,6 +35,8 @@ public class AttributeGroupPageResp extends BaseEntity {
/** 状态 */
private String states;
+ private String remark;
+
/**
* 属性对象集合
*/
@@ -48,11 +50,11 @@ public class AttributeGroupPageResp extends BaseEntity {
.attributeInfoList(attributeInfos)
.build();
}
-
public static AttributeGroupPageResp groupFunBuild (AttributeGroup attributeGroup, Function > function) {
return AttributeGroupPageResp.builder()
.id(attributeGroup.getId())
.name(attributeGroup.getName())
+ .remark(attributeGroup.getRemark())
.states(attributeGroup.getStates())
.attributeInfoList(function.apply(attributeGroup.getId()))
.build();
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupUpdResp.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupUpdateResp.java
similarity index 65%
rename from muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupUpdResp.java
rename to muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupUpdateResp.java
index 3585e3b..63ecc81 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupUpdResp.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/AttributeGroupUpdateResp.java
@@ -9,14 +9,16 @@ import lombok.NoArgsConstructor;
import java.util.List;
/**
- * 修改回显的详细信息
+ * @ClassName AttributeGroupUpdateResp
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/13 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
-public class AttributeGroupUpdResp {
-
+public class AttributeGroupUpdateResp {
/** 属性组编号 */
private Long id;
@@ -25,9 +27,8 @@ public class AttributeGroupUpdResp {
/** 状态 */
private String states;
+ private String remark;
+
+ private List attributeList;
- /**
- * 属性ID集合
- */
- private List attributeList;
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/CategoryInfoDetailResp.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/CategoryInfoDetailResp.java
new file mode 100644
index 0000000..9761577
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/CategoryInfoDetailResp.java
@@ -0,0 +1,46 @@
+package com.muyu.product.domain.resp;
+
+import com.muyu.common.core.utils.bean.BeanUtils;
+import com.muyu.product.domain.CategoryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * @ClassName CategoryInfoDetailResp
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/14 23:34
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "CategoryInfoDetailResp",description = "品类信息详情响应")
+public class CategoryInfoDetailResp extends CategoryInfo {
+ @ApiModelProperty("关联的属性ID列表")
+ private List attributeIdList;
+
+ @ApiModelProperty("关联的属性组ID列表")
+ private List attributeGroupIdList;
+
+ @ApiModelProperty("关联的品牌ID列表")
+ private List brandIdList;
+
+ @ApiModelProperty("父级品类名称")
+ private String parentName;
+
+ public static CategoryInfoDetailResp of(CategoryInfo categoryInfo, String parentName) {
+ CategoryInfoDetailResp resp = new CategoryInfoDetailResp();
+ // 复制基本属性
+ BeanUtils.copyProperties(categoryInfo, resp);
+ // 设置父级名称
+ resp.setParentName(parentName);
+ return resp;
+ }
+
+ public static CategoryInfoDetailResp of(CategoryInfo categoryInfo) {
+ return of(categoryInfo, null);
+ }
+}
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
index 045ba09..0e0a88c 100644
--- 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
@@ -61,4 +61,6 @@ public class ProjectDetailResp {
* 属性组集合
*/
private List attributeGroupList;
+
+ private List skuList;
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/RuleInfoResp.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/RuleInfoResp.java
index 8596383..d8f2841 100644
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/RuleInfoResp.java
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/RuleInfoResp.java
@@ -32,17 +32,23 @@ public class RuleInfoResp extends BaseEntity {
/** 规格状态 */
private String status;
+ private String remark;
+
/**
* 规格属性集合
*/
private List ruleAttrList;
- public static RuleInfoResp infoBuild (RuleInfo ruleInfo, Function> ruleAttrList) {
+ private Boolean isUsed;
+
+ public static RuleInfoResp infoBuild(RuleInfo ruleInfo, Function> ruleAttrList, Function isUsedFunc) {
return RuleInfoResp.builder()
.id(ruleInfo.getId())
.name(ruleInfo.getName())
+ .remark(ruleInfo.getRemark())
.status(ruleInfo.getStatus())
.ruleAttrList(ruleAttrList.apply(ruleInfo.getId()))
+ .isUsed(isUsedFunc.apply(ruleInfo.getId()))
.build();
}
}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/RuleInfoUpdResp.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/RuleInfoUpdResp.java
deleted file mode 100644
index b9e352d..0000000
--- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/resp/RuleInfoUpdResp.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.muyu.product.domain.resp;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.muyu.common.core.annotation.Excel;
-import com.muyu.product.domain.model.RuleAttrAddModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-
-/**
- * 规格修改响应对象
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class RuleInfoUpdResp {
-
- /** 主键 */
- @TableId(value = "id",type = IdType.AUTO)
- @ApiModelProperty(name = "主键", value = "主键")
- private Long id;
-
- /** 规格名称 */
- @Excel(name = "规格名称")
- @ApiModelProperty(name = "规格名称", value = "规格名称")
- private String name;
-
- /** 规格状态 */
- @Excel(name = "规格状态")
- @ApiModelProperty(name = "规格状态", value = "规格状态")
- private String status;
-
- /** 规格状态 */
- @Excel(name = "规格描述")
- @ApiModelProperty(name = "规格描述", value = "规格描述")
- private String remark;
-
- /**
- * 规格属性集合
- */
- private List ruleAttrList;
-}
diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/vo/ProductVo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/vo/ProductVo.java
new file mode 100644
index 0000000..37c3283
--- /dev/null
+++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/vo/ProductVo.java
@@ -0,0 +1,39 @@
+package com.muyu.product.domain.vo;
+
+import com.muyu.product.domain.AttributeGroup;
+import com.muyu.product.domain.AttributeInfo;
+import com.muyu.product.domain.ProjectSkuInfo;
+import lombok.Data;
+
+import javax.management.Attribute;
+import java.util.List;
+
+/**
+ * @ClassName ProductVo
+ * @Description 描述
+ * @Author zhang
+ * @Date 2024/11/22 16:06
+ */
+@Data
+public class ProductVo {
+ private Long id;
+ private String name; // 商品名称
+ private String introduction; // 商品描述
+ private String mainType; // 主类型
+ private String parentType; // 父类型
+ private String type; // 商品类型
+ private String image; // 商品图片
+ private String carouselImages; // 轮播图
+ private String status; // 商品状态
+ private Long ruleId; // 规格ID
+ private Long brandId; // 品牌ID
+ private String remark; // 备注
+
+ // 属性相关
+ private List templateAttributeGroupList; // 属性组列表
+ private List templateAttributeList; // 模板属性
+ private List attributeList; // 自定义属性
+
+ // SKU相关
+ private List skuList; // SKU列表
+}
diff --git a/muyu-modules/muyu-product/muyu-product-server/pom.xml b/muyu-modules/muyu-product/muyu-product-server/pom.xml
index 5d82eaf..1c83864 100644
--- a/muyu-modules/muyu-product/muyu-product-server/pom.xml
+++ b/muyu-modules/muyu-product/muyu-product-server/pom.xml
@@ -90,6 +90,11 @@
com.muyu
muyu-common-swagger
+
+ org.springdoc
+ springdoc-openapi-ui
+ 1.6.15
+
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/MuYuProductApplication.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/MuYuProductApplication.java
index 84b6d80..d597f42 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/MuYuProductApplication.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/MuYuProductApplication.java
@@ -5,12 +5,14 @@ import com.muyu.common.security.annotation.EnableMyFeignClients;
import com.muyu.common.swagger.annotation.EnableCustomSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import springfox.documentation.oas.annotations.EnableOpenApi;
/**
* @author DongZl
* @description: 商品启动类
* @Date 2024-2-26 下午 04:07
*/
+@EnableOpenApi
@EnableCustomConfig
@EnableCustomSwagger2
@EnableMyFeignClients
@@ -21,3 +23,4 @@ public class MuYuProductApplication {
}
}
+
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java
index 71e0b2b..dc3165f 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/AttributeGroupController.java
@@ -5,7 +5,7 @@ import javax.servlet.http.HttpServletResponse;
import com.muyu.product.domain.model.AttributeGroupSaveModel;
import com.muyu.product.domain.resp.AttributeGroupPageResp;
-import com.muyu.product.domain.resp.AttributeGroupUpdResp;
+import com.muyu.product.domain.resp.AttributeGroupUpdateResp;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -75,8 +75,8 @@ public class AttributeGroupController extends BaseController {
@RequiresPermissions("product:attributeGroup:query")
@GetMapping(value = "/{id}")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
- public Result getInfo(@PathVariable("id") Long id) {
- return Result.success(attributeGroupService.getUpdById(id));
+ public Result getInfo(@PathVariable("id") Long id) {
+ return Result.success(attributeGroupService.getUpdateById(id));
}
/**
@@ -100,9 +100,11 @@ public class AttributeGroupController extends BaseController {
@PutMapping("/{id}")
@ApiOperation("修改属性组")
public Result edit(@PathVariable Long id, @RequestBody AttributeGroupEditReq attributeGroupEditReq) {
- return toAjax(attributeGroupService.updateById(AttributeGroup.editBuild(id,attributeGroupEditReq)));
+// return toAjax(attributeGroupService.updateAttributeGroup(id,attributeGroupEditReq));
+ return attributeGroupService.updateAttributeGroup2(id,attributeGroupEditReq);
}
+
/**
* 删除属性组
*/
@@ -114,4 +116,23 @@ public class AttributeGroupController extends BaseController {
public Result remove(@PathVariable List ids) {
return toAjax(attributeGroupService.removeBatchByIds(ids));
}
+
+
+ /**
+ * 修改状态
+ */
+ @PutMapping("/{id}/status/{status}")
+ @ApiOperation("修改规格状态")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "id", value = "规格id", required = true, dataType = "Long", paramType = "path"),
+ @ApiImplicitParam(name = "status", value = "状态(Y/N)", required = true, dataType = "String", paramType = "path")
+ })
+ public Result UpdateStatus(@PathVariable("id") Long id, @PathVariable("status") String status) {
+ AttributeGroup attributeGroup = new AttributeGroup();
+ attributeGroup.setId(id);
+ attributeGroup.setStates(status);
+ return toAjax(attributeGroupService.updateById(attributeGroup));
+ }
+
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java
index 55dbaef..e47f3b0 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/CategoryInfoController.java
@@ -1,6 +1,7 @@
package com.muyu.product.controller;
import java.util.List;
+import java.util.Optional;
import java.util.function.Supplier;
import javax.servlet.http.HttpServletResponse;
@@ -10,6 +11,7 @@ import com.muyu.product.domain.AttributeInfo;
import com.muyu.product.domain.BrandInfo;
import com.muyu.product.domain.model.CategoryInfoSaveModel;
import com.muyu.product.domain.resp.CategoryCommonElementResp;
+import com.muyu.product.domain.resp.CategoryInfoDetailResp;
import com.muyu.product.domain.resp.CategoryParentCommonElementResp;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
@@ -52,33 +54,39 @@ public class CategoryInfoController extends BaseController {
@ApiOperation("获取品类信息列表")
@RequiresPermissions("product:category:list")
@GetMapping("/list")
- public Result> list(CategoryInfo categoryInfo) {
- List list = categoryInfoService.list(categoryInfo);
- return Result.success(list);
+ public Result> list(CategoryInfo categoryInfo) {
+ try {
+ categoryInfo = Optional.ofNullable(categoryInfo).orElse(new CategoryInfo());
+ List list = categoryInfoService.listWithParent(categoryInfo);
+ return Result.success(list);
+ } catch (Exception e) {
+ return Result.error(e.getMessage());
+ }
}
+
/**
* 导出品类信息列表
*/
- @ApiOperation("导出品类信息列表")
- @RequiresPermissions("product:category:export")
- @Log(title = "品类信息", businessType = BusinessType.EXPORT)
- @PostMapping("/export")
- public void export(HttpServletResponse response, CategoryInfo categoryInfo) {
- List list = categoryInfoService.list(categoryInfo);
- ExcelUtil util = new ExcelUtil(CategoryInfo.class);
- util.exportExcel(response, list, "品类信息数据");
- }
+// @ApiOperation("导出品类信息列表")
+// @RequiresPermissions("product:category:export")
+// @Log(title = "品类信息", businessType = BusinessType.EXPORT)
+// @PostMapping("/export")
+// public void export(HttpServletResponse response, CategoryInfo categoryInfo) {
+// List list = categoryInfoService.list(categoryInfo);
+// ExcelUtil util = new ExcelUtil(CategoryInfo.class);
+// util.exportExcel(response, list, "品类信息数据");
+// }
/**
* 获取品类信息详细信息
*/
+ @GetMapping(value = "/{id}")
@ApiOperation("获取品类信息详细信息")
@RequiresPermissions("product:category:query")
- @GetMapping(value = "/{id}")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
- public Result getInfo(@PathVariable("id") Long id) {
- return Result.success(categoryInfoService.getById(id));
+ public Result getInfo(@PathVariable("id") Long id) {
+ return Result.success(categoryInfoService.getDetailById(id));
}
/**
@@ -108,26 +116,37 @@ public class CategoryInfoController extends BaseController {
/**
* 修改品类信息
*/
- @RequiresPermissions("product:category:edit")
- @Log(title = "品类信息", businessType = BusinessType.UPDATE)
@PutMapping("/{id}")
@ApiOperation("修改品类信息")
- public Result edit(@PathVariable Long id, @RequestBody CategoryInfoEditReq categoryInfoEditReq) {
- return toAjax(categoryInfoService.updateById(CategoryInfo.editBuild(id,categoryInfoEditReq)));
+ @RequiresPermissions("product:category:edit")
+ @Log(title = "品类信息", businessType = BusinessType.UPDATE)
+ public Result edit(@PathVariable Long id, @RequestBody CategoryInfoSaveModel updateModel) {
+ return toAjax(categoryInfoService.updateCategoryInfo(id, updateModel));
}
/**
* 删除品类信息
*/
+// @RequiresPermissions("product:category:remove")
+// @Log(title = "品类信息", businessType = BusinessType.DELETE)
+// @DeleteMapping("/{ids}")
+// @ApiOperation("删除品类信息")
+// @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
+// public Result remove(@PathVariable List ids) {
+// return toAjax(categoryInfoService.removeBatchByIds(ids));
+// }
@RequiresPermissions("product:category:remove")
@Log(title = "品类信息", businessType = BusinessType.DELETE)
- @DeleteMapping("/{ids}")
+ @DeleteMapping("/{ids}")
@ApiOperation("删除品类信息")
- @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
+ @ApiImplicitParam(name = "ids", value = "品类ID列表", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
public Result remove(@PathVariable List ids) {
- return toAjax(categoryInfoService.removeBatchByIds(ids));
+ try {
+ return toAjax(categoryInfoService.removeCategories(ids));
+ } catch (RuntimeException e) {
+ return Result.error(e.getMessage());
+ }
}
-
/**
* 通过品类ID获取父级以上的属性、属性组、品牌集合
* @param categoryId 品类ID
@@ -141,4 +160,5 @@ public class CategoryInfoController extends BaseController {
) {
return Result.success(categoryInfoService.parentCommonElement(categoryId));
}
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java
index f1e3d62..1415287 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/controller/ProjectInfoController.java
@@ -27,6 +27,7 @@ import com.muyu.product.domain.req.ProjectInfoSaveReq;
import com.muyu.product.domain.req.ProjectInfoEditReq;
import com.muyu.product.service.ProjectInfoService;
import com.muyu.common.core.web.page.TableDataInfo;
+import springfox.documentation.annotations.ApiIgnore;
/**
* 商品信息Controller
@@ -41,21 +42,20 @@ public class ProjectInfoController extends BaseController {
@Autowired
private ProjectInfoService projectInfoService;
- @Autowired
- private ProjectInfoCache projectInfoCache;
-
/**
* 查询商品信息列表
*/
- @ApiOperation("获取商品信息列表")
+ @ApiOperation(value = "获取商品信息列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectInfoQueryReq", value = "查询参数", paramType = "query", dataTypeClass = ProjectInfoQueryReq.class)
+ })
@RequiresPermissions("product:info:list")
@GetMapping("/list")
- public Result> list(ProjectInfoQueryReq projectInfoQueryReq) {
+ public Result> list(@ApiIgnore ProjectInfoQueryReq projectInfoQueryReq) {
startPage();
List list = projectInfoService.list(ProjectInfo.queryBuild(projectInfoQueryReq));
return getDataTable(list);
}
-
/**
* 导出商品信息列表
*/
@@ -77,7 +77,8 @@ public class ProjectInfoController extends BaseController {
@GetMapping(value = "/{id}")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
public Result getInfo(@PathVariable("id") Long id) {
- return Result.success(projectInfoCache.get(id));
+ ProjectInfo byId = projectInfoService.getById(id);
+ return Result.success(byId);
}
/**
@@ -121,7 +122,9 @@ public class ProjectInfoController extends BaseController {
@PutMapping("/{id}")
@ApiOperation("修改商品信息")
public Result edit(@PathVariable Long id, @RequestBody ProjectInfoEditReq projectInfoEditReq) {
- return toAjax(projectInfoService.updateById(ProjectInfo.editBuild(id,projectInfoEditReq)));
+ System.out.println("---------"+projectInfoEditReq);
+// return toAjax(projectInfoService.updateById(ProjectInfo.editBuild(id,projectInfoEditReq)));
+ return projectInfoService.UpdProjectInfo(id,projectInfoEditReq);
}
/**
@@ -129,10 +132,13 @@ public class ProjectInfoController extends BaseController {
*/
@RequiresPermissions("product:info:remove")
@Log(title = "商品信息", businessType = BusinessType.DELETE)
- @DeleteMapping("/{ids}")
+ @DeleteMapping("/{ids}")
@ApiOperation("删除商品信息")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4")
public Result remove(@PathVariable List ids) {
return toAjax(projectInfoService.removeBatchByIds(ids));
}
+
+
+
}
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 9fec49d..a3aafbe 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
@@ -4,9 +4,10 @@ import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.muyu.common.core.text.Convert;
+import com.muyu.product.domain.RuleAttrInfo;
import com.muyu.product.domain.model.RuleInfoAddModel;
+import com.muyu.product.domain.req.*;
import com.muyu.product.domain.resp.RuleInfoResp;
-import com.muyu.product.domain.resp.RuleInfoUpdResp;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -24,9 +25,6 @@ import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.product.domain.RuleInfo;
-import com.muyu.product.domain.req.RuleInfoQueryReq;
-import com.muyu.product.domain.req.RuleInfoSaveReq;
-import com.muyu.product.domain.req.RuleInfoEditReq;
import com.muyu.product.service.RuleInfoService;
import com.muyu.common.core.web.page.TableDataInfo;
@@ -78,7 +76,7 @@ public class RuleInfoController extends BaseController {
@RequiresPermissions("product:rule:query")
@GetMapping(value = "/{id}")
@ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class)
- public Result getInfo(@PathVariable("id") Long id) {
+ public Result getInfo(@PathVariable("id") Long id) {
return Result.success(ruleInfoService.getUpdById(id));
}
@@ -100,9 +98,10 @@ public class RuleInfoController extends BaseController {
@Log(title = "商品规格", businessType = BusinessType.UPDATE)
@PutMapping("/{id}")
@ApiOperation("修改商品规格")
- public Result edit(@PathVariable Long id, @RequestBody RuleInfoEditReq ruleInfoEditReq) {
+ public Result edit(@PathVariable Long id, @RequestBody RuleAttrInfoReq ruleInfoEditReq) {
// return toAjax(ruleInfoService.updateById(RuleInfo.editBuild(id,ruleInfoEditReq)));
- return toAjax(ruleInfoService.updateById(id, ruleInfoEditReq));
+ ruleInfoService.edit3(id,ruleInfoEditReq);
+ return Result.success();
}
/**
@@ -116,4 +115,19 @@ public class RuleInfoController extends BaseController {
public Result remove(@PathVariable List ids) {
return toAjax(ruleInfoService.removeBatchByIds(ids));
}
+
+
+ @PutMapping("/{id}/status/{status}")
+ @ApiOperation("修改规格状态")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "id", value = "规格ID", required = true, dataType = "Long", paramType = "path"),
+ @ApiImplicitParam(name = "status", value = "状态(Y/N)", required = true, dataType = "String", paramType = "path")
+ })
+ public Result updateStatus(@PathVariable("id") Long id, @PathVariable("status") String status) {
+ RuleInfo ruleInfo = new RuleInfo();
+ ruleInfo.setId(id);
+ ruleInfo.setStatus(status);
+ return toAjax(ruleInfoService.updateById(ruleInfo));
+ }
}
+
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AsAttributeGroupMapper.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AsAttributeGroupMapper.java
index 1b420df..46d5396 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AsAttributeGroupMapper.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AsAttributeGroupMapper.java
@@ -3,6 +3,8 @@ package com.muyu.product.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.product.domain.AsAttributeGroup;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
/**
* 属性与组中间Mapper接口
@@ -10,6 +12,11 @@ import com.muyu.product.domain.AsAttributeGroup;
* @author DongZeLiang
* @date 2024-02-27
*/
+@Mapper
public interface AsAttributeGroupMapper extends BaseMapper {
+ void shanchu(Long id);
+
+ void insertBatch(@Param("id") Long id, @Param("id1") Long id1);
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AttributeGroupMapper.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AttributeGroupMapper.java
index 9f1acd3..4a9dbbd 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AttributeGroupMapper.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/AttributeGroupMapper.java
@@ -3,6 +3,7 @@ package com.muyu.product.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.product.domain.AttributeGroup;
+import org.apache.ibatis.annotations.Param;
/**
* 属性组Mapper接口
@@ -12,4 +13,5 @@ import com.muyu.product.domain.AttributeGroup;
*/
public interface AttributeGroupMapper extends BaseMapper {
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectInfoMapper.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectInfoMapper.java
index 2eb6558..5f3b002 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectInfoMapper.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectInfoMapper.java
@@ -3,6 +3,7 @@ package com.muyu.product.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.product.domain.ProjectInfo;
+import org.apache.ibatis.annotations.Mapper;
/**
* 商品信息Mapper接口
@@ -10,6 +11,7 @@ import com.muyu.product.domain.ProjectInfo;
* @author DongZeLiang
* @date 2024-02-27
*/
+@Mapper
public interface ProjectInfoMapper extends BaseMapper {
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectSkuInfoMapper.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectSkuInfoMapper.java
index 040cb21..88cf2c0 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectSkuInfoMapper.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/ProjectSkuInfoMapper.java
@@ -3,6 +3,7 @@ package com.muyu.product.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.product.domain.ProjectSkuInfo;
+import org.apache.ibatis.annotations.Mapper;
/**
* 商品SKUMapper接口
@@ -10,6 +11,7 @@ import com.muyu.product.domain.ProjectSkuInfo;
* @author DongZeLiang
* @date 2024-02-27
*/
+@Mapper
public interface ProjectSkuInfoMapper extends BaseMapper {
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/RuleAttrInfoMapper.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/RuleAttrInfoMapper.java
index b51378c..3b78d3e 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/RuleAttrInfoMapper.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/mapper/RuleAttrInfoMapper.java
@@ -3,6 +3,12 @@ package com.muyu.product.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.muyu.product.domain.RuleAttrInfo;
+import com.muyu.product.domain.model.RuleAttrAddModel;
+import com.muyu.product.domain.req.RuleAttrInfoReq;
+import com.muyu.product.domain.req.RuleInfoEditReq;
+import com.muyu.product.domain.resp.RuleInfoResp;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
/**
* 规格详情Mapper接口
@@ -10,6 +16,15 @@ import com.muyu.product.domain.RuleAttrInfo;
* @author DongZeLiang
* @date 2024-02-27
*/
+@Mapper
public interface RuleAttrInfoMapper extends BaseMapper {
+ void updRule(@Param("id") Long id,@Param("req") RuleAttrInfoReq req);
+
+ void deleteRule(@Param("id") Long id);
+
+ List getRuleAttrInfo(@Param("id") Long id);
+ RuleInfoResp getRuleAttrInfo2(@Param("id") Long id);
+
+ void addRuleAttrModel(@Param("id")Long id,@Param("name")String name,@Param("valueData") String substring);
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AsAttributeGroupService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AsAttributeGroupService.java
index db672c4..240f648 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AsAttributeGroupService.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AsAttributeGroupService.java
@@ -19,4 +19,16 @@ public interface AsAttributeGroupService extends IService {
*/
public List list(AsAttributeGroup asAttributeGroup);
+ /**
+ * 删除属性与组中间
+ * @param id
+ */
+ void delete(Long id);
+
+ /**
+ * 添加中间表
+ * @param id
+ * @param id1
+ */
+ void insertBath(Long id,Long id1);
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeGroupService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeGroupService.java
index 5e50f89..2514542 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeGroupService.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/AttributeGroupService.java
@@ -2,13 +2,15 @@ package com.muyu.product.service;
import java.util.List;
+import com.muyu.common.core.domain.Result;
import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.product.domain.AttributeGroup;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.product.domain.AttributeInfo;
import com.muyu.product.domain.model.AttributeGroupSaveModel;
+import com.muyu.product.domain.req.AttributeGroupEditReq;
import com.muyu.product.domain.resp.AttributeGroupPageResp;
-import com.muyu.product.domain.resp.AttributeGroupUpdResp;
+import com.muyu.product.domain.resp.AttributeGroupUpdateResp;
/**
* 属性组Service接口
@@ -41,9 +43,14 @@ public interface AttributeGroupService extends IService {
public Boolean save(AttributeGroupSaveModel attributeGroupSaveModel);
/**
- * 根据ID查询属性组的修改
+ * 根据id查询属性组的修改
* @param id
* @return
*/
- AttributeGroupUpdResp getUpdById(Long id);
+ AttributeGroupUpdateResp getUpdateById(Long id);
+
+// public Boolean updateAttributeGroup(Long id, AttributeGroupEditReq editReq);
+
+
+ Result updateAttributeGroup2(Long id, AttributeGroupEditReq attributeGroupEditReq);
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java
index 9b99d9d..5d388ab 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/CategoryInfoService.java
@@ -9,6 +9,7 @@ import com.muyu.product.domain.CategoryInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.product.domain.model.CategoryInfoSaveModel;
import com.muyu.product.domain.resp.CategoryCommonElementResp;
+import com.muyu.product.domain.resp.CategoryInfoDetailResp;
import com.muyu.product.domain.resp.CategoryParentCommonElementResp;
/**
@@ -24,7 +25,8 @@ public interface CategoryInfoService extends IService {
* @param categoryInfo 品类信息
* @return 品类信息集合
*/
- public List list(CategoryInfo categoryInfo);
+ List listWithParent(CategoryInfo categoryInfo);
+// public List list(CategoryInfo categoryInfo);
/**
* 保存
@@ -69,4 +71,12 @@ public interface CategoryInfoService extends IService {
CategoryCommonElementResp getTemplateAttributeByCateGoryId (Long cateGoryId);
public List getCommon (Long categoryId, IService iService, IService bsiService);
+
+
+ // 添加新方法
+ CategoryInfoDetailResp getDetailById(Long id);
+
+ boolean updateCategoryInfo(Long id, CategoryInfoSaveModel updateModel);
+
+ boolean removeCategories(List ids);
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java
index fe4e82f..246e834 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/ProjectInfoService.java
@@ -1,8 +1,11 @@
package com.muyu.product.service;
import java.util.List;
+
+import com.muyu.common.core.domain.Result;
import com.muyu.product.domain.ProjectInfo;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.product.domain.req.ProjectInfoEditReq;
import com.muyu.product.domain.req.ProjectInfoSaveReq;
import com.muyu.product.domain.resp.ProjectDetailResp;
@@ -35,4 +38,6 @@ public interface ProjectInfoService extends IService {
*/
ProjectDetailResp getDetailInfo (Long id);
+
+ Result UpdProjectInfo(Long id, ProjectInfoEditReq projectInfoEditReq);
}
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 98e0611..adbaf28 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
@@ -33,4 +33,13 @@ public interface ProjectSkuInfoService extends IService {
* @return 商品SKU信息
*/
List listByProjectId (Long projectId);
+
+
+ boolean updateBatch(List skuList);
+
+ boolean updateStock(Long id, Long stock);
+
+ boolean deleteById(Long id);
+
+ boolean deleteBatch(List ids);
}
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 2623202..222dcb6 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
@@ -3,6 +3,7 @@ package com.muyu.product.service;
import java.util.List;
import com.muyu.product.domain.RuleAttrInfo;
import com.baomidou.mybatisplus.extension.service.IService;
+import com.muyu.product.domain.model.RuleAttrAddModel;
/**
* 规格详情Service接口
@@ -25,4 +26,6 @@ public interface RuleAttrInfoService extends IService {
* @return 规格详情集合
*/
List getInfoByRuleId (Long ruleId);
+
+ List getRuleAttrInfo(Long id);
}
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 6c5933d..a38d8b8 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,13 +3,15 @@ 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.RuleAttrInfoReq;
+import com.muyu.product.domain.req.RuleGroupUpdResp;
import com.muyu.product.domain.req.RuleInfoEditReq;
import com.muyu.product.domain.req.RuleInfoQueryReq;
import com.muyu.product.domain.resp.RuleInfoResp;
-import com.muyu.product.domain.resp.RuleInfoUpdResp;
/**
* 商品规格Service接口
@@ -35,18 +37,15 @@ public interface RuleInfoService extends IService {
TableDataInfo queryList (RuleInfoQueryReq ruleInfoQueryReq);
- /**
- * 通过规格ID获取规格修改详细信息
- * @param id 规格ID
- * @return
- */
- RuleInfoUpdResp getUpdById(Long id);
+ RuleInfoResp getUpdById(Long id);
- /**
- * 通过ID修改规格属性
- * @param id ID
- * @param ruleInfoEditReq 请求对象
- * @return
- */
- boolean updateById(Long id, RuleInfoEditReq ruleInfoEditReq);
+ RuleInfoResp getUpdById2(Long id);
+
+ RuleInfoResp getUpdById3(Long id);
+
+ void edit(Long id, RuleAttrInfoReq ruleInfoEditReq);
+ void edit2(Long id, RuleAttrInfoReq ruleInfoEditReq);
+ void edit3(Long id, RuleAttrInfoReq ruleInfoEditReq);
}
+
+
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsAttributeGroupServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsAttributeGroupServiceImpl.java
index 7e2e186..dda7f69 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsAttributeGroupServiceImpl.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/AsAttributeGroupServiceImpl.java
@@ -4,6 +4,7 @@ import java.util.List;
import com.muyu.common.core.utils.ObjUtils;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.muyu.product.mapper.AsAttributeGroupMapper;
import com.muyu.product.domain.AsAttributeGroup;
@@ -21,6 +22,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@Service
public class AsAttributeGroupServiceImpl extends ServiceImpl implements AsAttributeGroupService {
+ @Autowired
+ private AsAttributeGroupMapper mapper;
+
+
/**
* 查询属性与组中间列表
*
@@ -42,4 +47,14 @@ public class AsAttributeGroupServiceImpl extends ServiceImpl implements AttributeGroupService {
+ @Autowired
+ private AsAttributeGroupService attributeGroupService;
+
@Autowired
private AsAttributeGroupService asAttributeGroupService;
@@ -49,11 +57,15 @@ public class AttributeGroupServiceImpl extends ServiceImpl page (AttributeGroup attributeGroupQuery) {
List list = this.list(attributeGroupQuery);
List pageRespList = list.stream()
- .map(attributeGroup ->
- AttributeGroupPageResp.groupFunBuild(
- attributeGroup, groupId -> attributeInfoService.attributeListByGroupId(groupId)
- )
- )
+ .map(attributeGroup -> {
+ AttributeGroupPageResp resp = AttributeGroupPageResp.groupFunBuild(
+ attributeGroup,
+ groupId -> attributeInfoService.attributeListByGroupId(groupId)
+ );
+ // 确保设置备注字段
+ resp.setRemark(attributeGroup.getRemark());
+ return resp;
+ })
.toList();
return TableDataInfo.builder()
.total(new PageInfo(list).getTotal())
@@ -99,7 +111,7 @@ public class AttributeGroupServiceImpl extends ServiceImpl attributeIdList = attributeGroupSaveModel.getAttributeIdList();
- asAttributeGroupService.saveBatch(
+ attributeGroupService.saveBatch(
attributeIdList.stream()
.map(attributeId -> AsAttributeGroup.buildGroup(attributeGroupId, attributeId))
.toList()
@@ -108,22 +120,108 @@ public class AttributeGroupServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AsAttributeGroup::getGroupId, id);
List asAttributeGroupList = asAttributeGroupService.list(queryWrapper);
- List attributeIdList = asAttributeGroupList.stream()
+
+ List idlist = asAttributeGroupList.stream()
.map(AsAttributeGroup::getAttributeId)
.toList();
- List attributeInfoList = attributeInfoService.listByIds(attributeIdList);
- return AttributeGroupUpdResp.builder()
- .id(attributeGroup.getId())
+ List infoList = attributeInfoService.listByIds(idlist);
+
+
+ return AttributeGroupUpdateResp.builder().id(attributeGroup.getId())
.name(attributeGroup.getName())
.states(attributeGroup.getStates())
- .attributeList(attributeInfoList)
+ .attributeList(infoList)
+ .remark(attributeGroup.getRemark())
.build();
}
+
+ @Override
+ public Result updateAttributeGroup2(Long id, AttributeGroupEditReq attributeGroupEditReq) {
+
+
+ AttributeGroup attributeGroup = AttributeGroup.editBuild(id, attributeGroupEditReq);
+ this.updateById(attributeGroup);
+
+ attributeGroupService.delete(id);
+
+ List attributeList = attributeGroupEditReq.getAttributeList();
+ for (AttributeInfoSaveReq attributeInfoSaveReq : attributeList) {
+ attributeGroupService.insertBath(attributeInfoSaveReq.getId(),id);
+ }
+
+ return Result.success();
+ }
+
+
+// @Override
+// @Transactional
+// public Boolean updateAttributeGroup(Long id, AttributeGroupEditReq editReq) {
+// // 更新基本信息
+// AttributeGroup attributeGroup = AttributeGroup.editBuild(id, editReq);
+// boolean updated = this.updateById(attributeGroup);
+//
+// if (updated && editReq.getAttributeIds() != null) {
+// // 删除原有关联
+// LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>();
+// deleteWrapper.eq(AsAttributeGroup::getGroupId, id);
+// asAttributeGroupService.remove(deleteWrapper);
+//
+// // 添加新的关联
+// List newRelations = editReq.getAttributeIds().stream()
+// .map(attributeId -> AsAttributeGroup.buildGroup(id, attributeId))
+// .toList();
+//
+// if (!newRelations.isEmpty()) {
+// asAttributeGroupService.saveBatch(newRelations);
+// }
+// }
+//
+// return updated;
+// }
+
+// @Override
+// @Transactional
+// public Boolean updateAttributeGroup(Long id, AttributeGroupEditReq editReq) {
+// // 更新基本信息
+//
+// }
+
+
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java
index 2d6b4d5..97bf2e2 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/CategoryInfoServiceImpl.java
@@ -1,29 +1,31 @@
package com.muyu.product.service.impl;
+import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.utils.ObjUtils;
+import com.muyu.common.core.utils.StringUtils;
import com.muyu.product.domain.*;
import com.muyu.product.domain.base.CategoryBase;
import com.muyu.product.domain.model.CategoryInfoSaveModel;
import com.muyu.product.domain.model.TemplateAttributeGroupModel;
import com.muyu.product.domain.model.TemplateAttributeModel;
import com.muyu.product.domain.resp.CategoryCommonElementResp;
+import com.muyu.product.domain.resp.CategoryInfoDetailResp;
import com.muyu.product.domain.resp.CategoryParentCommonElementResp;
import com.muyu.product.mapper.CategoryInfoMapper;
import com.muyu.product.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import java.util.function.Function;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@@ -58,6 +60,62 @@ public class CategoryInfoServiceImpl extends ServiceImpl listWithParent(CategoryInfo categoryInfo) {
+ // 1. 添加空值检查, 改为使用Optional
+ categoryInfo = Optional.ofNullable(categoryInfo).orElse(new CategoryInfo());
+
+ // 2. 查询品类列表
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ if (StringUtils.isNotEmpty(categoryInfo.getName())) {
+ queryWrapper.like(CategoryInfo::getName, categoryInfo.getName());
+ }
+ // ... 其他查询条件
+
+ List categoryList = list(queryWrapper);
+ if (CollectionUtils.isEmpty(categoryList)) {
+ return new ArrayList<>();
+ }
+
+ // 3. 获取所有父级ID时添加空值检查
+ Set parentIds = categoryList.stream()
+ .map(CategoryInfo::getParentId)
+ .filter(Objects::nonNull) // 添加非空过滤
+ .filter(id -> id != 0)
+ .collect(Collectors.toSet());
+
+ // 4. 批量查询父级品类
+ Map parentNameMap = new HashMap<>();
+ if (!parentIds.isEmpty()) {
+ List parentCategories = listByIds(parentIds);
+ parentNameMap = parentCategories.stream()
+ .collect(Collectors.toMap(
+ CategoryInfo::getId,
+ CategoryInfo::getName,
+ (k1, k2) -> k1
+ ));
+ }
+
+ // 5. 转换为响应对象
+ Map finalParentNameMap = parentNameMap;
+ return categoryList.stream()
+ .map(category -> {
+ String parentName = null;
+ if (category.getParentId() != null && category.getParentId() != 0) {
+ parentName = finalParentNameMap.get(category.getParentId());
+ }
+ return CategoryInfoDetailResp.of(category, parentName);
+ })
+ .collect(Collectors.toList());
+ }
+
/**
* 查询品类信息列表
*
@@ -65,33 +123,55 @@ public class CategoryInfoServiceImpl extends ServiceImpl list (CategoryInfo categoryInfo) {
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
-
-
- if (ObjUtils.notNull(categoryInfo.getName())) {
- queryWrapper.like(CategoryInfo::getName, categoryInfo.getName());
- }
-
- if (ObjUtils.notNull(categoryInfo.getImage())) {
- queryWrapper.eq(CategoryInfo::getImage, categoryInfo.getImage());
- }
-
- if (ObjUtils.notNull(categoryInfo.getParentId())) {
- queryWrapper.eq(CategoryInfo::getParentId, categoryInfo.getParentId());
- }
-
- if (ObjUtils.notNull(categoryInfo.getStart())) {
- queryWrapper.eq(CategoryInfo::getStart, categoryInfo.getStart());
- }
-
- if (ObjUtils.notNull(categoryInfo.getIntroduction())) {
- queryWrapper.eq(CategoryInfo::getIntroduction, categoryInfo.getIntroduction());
- }
-
- return list(queryWrapper);
- }
+// @Override
+// public List list(CategoryInfo categoryInfo) {
+// // 1. 查询品类列表
+// LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+// if (ObjUtils.notNull(categoryInfo.getName())) {
+// queryWrapper.like(CategoryInfo::getName, categoryInfo.getName());
+// }
+// if (ObjUtils.notNull(categoryInfo.getImage())) {
+// queryWrapper.eq(CategoryInfo::getImage, categoryInfo.getImage());
+// }
+// if (ObjUtils.notNull(categoryInfo.getParentId())) {
+// queryWrapper.eq(CategoryInfo::getParentId, categoryInfo.getParentId());
+// }
+// if (ObjUtils.notNull(categoryInfo.getStart())) {
+// queryWrapper.eq(CategoryInfo::getStart, categoryInfo.getStart());
+// }
+// if (ObjUtils.notNull(categoryInfo.getIntroduction())) {
+// queryWrapper.eq(CategoryInfo::getIntroduction, categoryInfo.getIntroduction());
+// }
+//
+// List categoryList = list(queryWrapper);
+//
+// // 2. 获取所有父级ID
+// Set parentIds = categoryList.stream()
+// .map(CategoryInfo::getParentId)
+// .filter(id -> id != 0)
+// .collect(Collectors.toSet());
+//
+// // 3. 批量查询父级品类
+// Map parentNameMap = new HashMap<>();
+// if (!parentIds.isEmpty()) {
+// List parentCategories = listByIds(parentIds);
+// parentNameMap = parentCategories.stream()
+// .collect(Collectors.toMap(
+// CategoryInfo::getId,
+// CategoryInfo::getName
+// ));
+// }
+//
+// // 4. 转换为响应对象
+// Map finalParentNameMap = parentNameMap;
+// return categoryList.stream()
+// .map(category -> {
+// String parentName = category.getParentId() != 0 ?
+// finalParentNameMap.get(category.getParentId()) : null;
+// return CategoryInfoDetailResp.of(category, parentName);
+// })
+// .collect(Collectors.toList());
+// }
/**
* 保存商品品类
@@ -140,22 +220,41 @@ public class CategoryInfoServiceImpl extends ServiceImpl getAttributeGroup (Long categoryId) {
+ // 1. 空值检查
+ if (categoryId == null) {
+ return new ArrayList<>();
+ }
+
List attributeGroupList = new ArrayList<>();
+ CategoryInfo categoryInfo = this.getById(categoryId);
+
+ // 2. 添加空值检查
+ if (categoryInfo == null) {
+ return attributeGroupList;
+ }
+
+ // 3. 查询当前品类关联的属性组
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AsCategoryAttributeGroup::getCategoryId, categoryId);
List asCategoryAttributeGroupList = asCategoryAttributeGroupService.list(queryWrapper);
+
+ // 4. 获取并添加当前品类的属性组
if (asCategoryAttributeGroupList != null && !asCategoryAttributeGroupList.isEmpty()) {
List attributeGroupIdList = asCategoryAttributeGroupList.stream()
.map(AsCategoryAttributeGroup::getAttributeGroupId)
- .toList();
+ .collect(Collectors.toList());
attributeGroupList.addAll(attributeGroupService.listByIds(attributeGroupIdList));
}
- CategoryInfo categoryInfo = this.getById(categoryId);
- if (categoryInfo.getParentId() != 0) {
+
+ // 5. 递归获取父级品类的属性组
+ CategoryInfo categoryInfo1 = this.getById(categoryId);
+ if (categoryInfo1.getParentId() != 0) {
if (attributeGroupList.isEmpty()) {
- attributeGroupList.addAll(getAttributeGroup(categoryInfo.getParentId()));
+ // 如果当前没有属性组,直接添加父级的所有属性组
+ attributeGroupList.addAll(getAttributeGroup(categoryInfo1.getParentId()));
} else {
- List attributeGroups = getAttributeGroup(categoryInfo.getParentId());
+ // 如果当前有属性组,只添加不重复的父级属性组
+ List attributeGroups = getAttributeGroup(categoryInfo1.getParentId());
attributeGroups.forEach(attributeGroup -> {
if (!attributeGroupList.contains(attributeGroup)) {
attributeGroupList.add(attributeGroup);
@@ -163,6 +262,7 @@ public class CategoryInfoServiceImpl extends ServiceImpl getAttribute (Long categoryId) {
+ // 1. 入参校验
+ if (categoryId == null || categoryId == 0) {
+ return new ArrayList<>();
+ }
+
List attributeInfoList = new ArrayList<>();
+
+ // 2. 获取当前分类信息,使用Optional安全处理
+ CategoryInfo categoryInfo = this.getById(categoryId);
+ if (categoryInfo == null) {
+ return attributeInfoList;
+ }
+
+ // 3. 查询当前分类关联的属性
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AsCategoryAttribute::getCategoryId, categoryId);
List asCategoryAttributeList = asCategoryAttributeService.list(queryWrapper);
- if (asCategoryAttributeList != null && !asCategoryAttributeList.isEmpty()) {
+
+ // 4. 获取当前分类的属性
+ if (CollectionUtils.isEmpty(asCategoryAttributeList)) {
List attributeIdList = asCategoryAttributeList.stream()
.map(AsCategoryAttribute::getAttributeId)
- .toList();
- attributeInfoList.addAll(attributeInfoService.listByIds(attributeIdList));
- }
- CategoryInfo categoryInfo = this.getById(categoryId);
- if (categoryInfo.getParentId() != 0) {
- if (attributeInfoList.isEmpty()) {
- attributeInfoList.addAll(getAttribute(categoryInfo.getParentId()));
- } else {
- List attributeInfos = getAttribute(categoryInfo.getParentId());
- attributeInfos.forEach(attributeInfoQuery -> {
- if (!attributeInfoList.contains(attributeInfoQuery)) {
- attributeInfoList.add(attributeInfoQuery);
- }
- });
+ .collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(attributeIdList)) {
+ attributeInfoList.addAll(attributeInfoService.listByIds(attributeIdList));
}
}
+
+ // 5. 处理父级属性,使用安全的parentId获取方式
+ Long parentId = categoryInfo.getSafeParentId(); // 使用我们之前添加的安全获取方法
+ if (parentId != 0) {
+ CategoryInfo parentCategory = this.getById(parentId);
+ if (parentCategory != null) {
+ if (attributeInfoList.isEmpty()) {
+ // 如果当前没有属性,直接添加父级的所有属性
+ attributeInfoList.addAll(getAttribute(parentId));
+ } else {
+ // 如果当前有属性,只添加不重复的父级属性
+ List parentAttributes = getAttribute(parentId);
+ if (CollectionUtils.isEmpty(parentAttributes)) {
+ for (AttributeInfo attributeInfo : parentAttributes) {
+ if (!attributeInfoList.contains(attributeInfo)) {
+ attributeInfoList.add(attributeInfo);
+ }
+ }
+ }
+ }
+ }
+ }
+
return attributeInfoList;
}
@@ -308,13 +435,10 @@ public class CategoryInfoServiceImpl extends ServiceImpl asCategoryAttributeGroupLambdaQueryWrapper = new LambdaQueryWrapper<>(){{
- in(AsCategoryAttributeGroup::getCategoryId, cateGoryIdList);
- }};
+ in(AsCategoryAttributeGroup::getCategoryId, cateGoryIdList);}};
List categoryAttributeGroupList = asCategoryAttributeGroupService.list(asCategoryAttributeGroupLambdaQueryWrapper);
List attributeGroupModelList = categoryAttributeGroupList.stream()
- .map(AsCategoryAttributeGroup::getAttributeGroupId)
- .distinct()
- .map(attributeGroupId -> TemplateAttributeGroupModel.attributeGroupBuild(
+ .map(AsCategoryAttributeGroup::getAttributeGroupId).distinct().map(attributeGroupId -> TemplateAttributeGroupModel.attributeGroupBuild(
attributeGroupService.getById(attributeGroupId),
applyAttributeGroupId -> {
LambdaQueryWrapper asAttributeGroupQueryWrapper = new LambdaQueryWrapper<>() {{
@@ -344,7 +468,6 @@ public class CategoryInfoServiceImpl extends ServiceImpl templateAttributeModelList = new ArrayList<>();
LambdaQueryWrapper categoryAttributeQueryWrapper = new LambdaQueryWrapper<>();
categoryAttributeQueryWrapper.in(AsCategoryAttribute::getCategoryId, cateGoryIdList);
@@ -360,21 +483,195 @@ public class CategoryInfoServiceImpl extends ServiceImpl attributeModelList = new ArrayList<>();
-
if (!templateAttributeModelList.isEmpty()){
attributeIdSet.addAll(
templateAttributeModelList.stream().map(TemplateAttributeModel::getId).toList()
);
}
+
LambdaQueryWrapper attributeInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
attributeInfoLambdaQueryWrapper.notIn(!attributeIdSet.isEmpty(), AttributeInfo::getId, attributeIdSet);
attributeModelList = attributeInfoService.list(attributeInfoLambdaQueryWrapper).stream().map(AttributeInfo::buildTemplateModel).toList();
+
+
+ attributeGroupModelList.forEach(TemplateAttributeGroupModel->{
+ TemplateAttributeGroupModel.getAttributeList().forEach(TemplateAttributeModel->{
+ Long id = TemplateAttributeModel.getId();
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(AsProductAttributeInfo::getAttributeId,id);
+ List list = this.asProductAttributeInfoService.list(queryWrapper);
+ list.forEach(AsProductAttributeInfo->{
+ TemplateAttributeModel.setValue(AsProductAttributeInfo.getValue());
+ });
+ });
+ });
+
+ templateAttributeModelList.forEach(TemplateAttributeModel ->{
+ Long id = TemplateAttributeModel.getId();
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(AsProductAttributeInfo::getAttributeId,id);
+ List list = this.asProductAttributeInfoService.list(lambdaQueryWrapper);
+ list.forEach(asProductAttributeInfo -> {
+ TemplateAttributeModel.setValue(asProductAttributeInfo.getValue());
+ });
+ });
+
+ attributeModelList.forEach(templateAttributeModel -> {
+ Long id = templateAttributeModel.getId();
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(AsProductAttributeInfo::getAttributeId,id);
+ List list = this.asProductAttributeInfoService.list(lambdaQueryWrapper);
+ list.forEach(asProductAttributeInfo -> {
+ templateAttributeModel.setValue(asProductAttributeInfo.getValue());
+ });
+ });
return CategoryCommonElementResp.builder()
.templateAttributeGroupList(attributeGroupModelList)
.templateAttributeList(templateAttributeModelList)
.attributeList(attributeModelList)
.build();
}
+
+ @Override
+ public CategoryInfoDetailResp getDetailById(Long id) {
+ // 获取基本信息
+ CategoryInfo categoryInfo = this.getById(id);
+ if (categoryInfo == null) {
+ return null;
+ }
+
+ CategoryInfoDetailResp resp = CategoryInfoDetailResp.of(categoryInfo);
+
+ // 获取关联的属性ID列表
+ LambdaQueryWrapper attrWrapper = new LambdaQueryWrapper<>();
+ attrWrapper.eq(AsCategoryAttribute::getCategoryId, id);
+ List categoryAttributes = asCategoryAttributeService.list(attrWrapper);
+ List attributeIds = categoryAttributes.stream()
+ .map(AsCategoryAttribute::getAttributeId)
+ .collect(Collectors.toList());
+ resp.setAttributeIdList(attributeIds);
+
+ // 获取关联的属性组ID列表
+ LambdaQueryWrapper groupWrapper = new LambdaQueryWrapper<>();
+ groupWrapper.eq(AsCategoryAttributeGroup::getCategoryId, id);
+ List categoryGroups = asCategoryAttributeGroupService.list(groupWrapper);
+ List groupIds = categoryGroups.stream()
+ .map(AsCategoryAttributeGroup::getAttributeGroupId)
+ .collect(Collectors.toList());
+ resp.setAttributeGroupIdList(groupIds);
+
+ // 获取关联的品牌ID列表
+ LambdaQueryWrapper brandWrapper = new LambdaQueryWrapper<>();
+ brandWrapper.eq(AsCategoryBrand::getCategoryId, id);
+ List categoryBrands = asCategoryBrandService.list(brandWrapper);
+ List brandIds = categoryBrands.stream()
+ .map(AsCategoryBrand::getBrandId)
+ .collect(Collectors.toList());
+ resp.setBrandIdList(brandIds);
+
+ return resp;
+ }
+
+
+
+ @Override
+ @Transactional
+ public boolean updateCategoryInfo(Long id, CategoryInfoSaveModel updateModel) {
+ // 更新基本信息
+ CategoryInfo categoryInfo = CategoryInfo.saveModelBuild(updateModel);
+ categoryInfo.setId(id);
+ this.updateById(categoryInfo);
+
+ // 更新关联属性
+ updateAssociations(id,
+ updateModel.getAttributeIdList(),
+ updateModel.getAttributeGroupIdList(),
+ updateModel.getBrandIdList()
+ );
+
+ return true;
+ }
+
+ @Override
+ public boolean removeCategories(List ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return false;
+ }
+ // 删除品类关联数据
+ for (Long categoryId : ids) {
+ //检查是否有子类目
+ LambdaQueryWrapper childWrapper = new LambdaQueryWrapper<>();
+ childWrapper.eq(CategoryInfo::getParentId,categoryId);
+ long count = this.count(childWrapper);
+ if (count > 0){
+ CategoryInfo category = this.getById(categoryId);
+ throw new RuntimeException("品类【"+category.getName()+"】存在子类目 ,不能删除");
+ }
+ //检查最后一级是否关联商品
+ LambdaQueryWrapper projectWrapper = new LambdaQueryWrapper<>();
+ projectWrapper.eq(ProjectInfo::getMianType,categoryId)
+ .or()
+ .eq(ProjectInfo::getParentType,categoryId)
+ .or()
+ .eq(ProjectInfo::getType,categoryId);
+ long projectCount = projectInfoService.count(projectWrapper);
+ if (projectCount > 0){
+ CategoryInfo category = this.getById(categoryId);
+ throw new RuntimeException("品类【"+category.getName()+"】已关联项目,不能删除");
+ }
+
+
+ // 删除品类-属性关联
+ LambdaQueryWrapper attrWrapper = new LambdaQueryWrapper<>();
+ attrWrapper.eq(AsCategoryAttribute::getCategoryId, categoryId);
+ asCategoryAttributeService.remove(attrWrapper);
+
+ // 删除品类-属性组关联
+ LambdaQueryWrapper groupWrapper = new LambdaQueryWrapper<>();
+ groupWrapper.eq(AsCategoryAttributeGroup::getCategoryId, categoryId);
+ asCategoryAttributeGroupService.remove(groupWrapper);
+
+ // 删除品类-品牌关联
+ LambdaQueryWrapper brandWrapper = new LambdaQueryWrapper<>();
+ brandWrapper.eq(AsCategoryBrand::getCategoryId, categoryId);
+ asCategoryBrandService.remove(brandWrapper);
+ }
+
+ // 删除品类
+ return this.removeBatchByIds(ids);
+ }
+ private void updateAssociations(Long categoryId,
+ List attributeIds,
+ List groupIds,
+ List brandIds) {
+ // 删除原有关联
+ asCategoryAttributeService.remove(new LambdaQueryWrapper()
+ .eq(AsCategoryAttribute::getCategoryId, categoryId));
+ asCategoryAttributeGroupService.remove(new LambdaQueryWrapper()
+ .eq(AsCategoryAttributeGroup::getCategoryId, categoryId));
+ asCategoryBrandService.remove(new LambdaQueryWrapper()
+ .eq(AsCategoryBrand::getCategoryId, categoryId));
+
+ // 保存新关联
+ if (!CollectionUtils.isEmpty(attributeIds)) {
+ asCategoryAttributeService.saveBatch(attributeIds.stream()
+ .map(attrId -> AsCategoryAttribute.categoryBuild(categoryId, attrId))
+ .collect(Collectors.toList()));
+ }
+
+ if (!CollectionUtils.isEmpty(groupIds)) {
+ asCategoryAttributeGroupService.saveBatch(groupIds.stream()
+ .map(groupId -> AsCategoryAttributeGroup.categoryBuild(categoryId, groupId))
+ .collect(Collectors.toList()));
+ }
+
+ if (!CollectionUtils.isEmpty(brandIds)) {
+ asCategoryBrandService.saveBatch(brandIds.stream()
+ .map(brandId -> AsCategoryBrand.categoryBuild(categoryId, brandId))
+ .collect(Collectors.toList()));
+ }
+ }
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java
index 448a3d9..01e03bf 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/java/com/muyu/product/service/impl/ProjectInfoServiceImpl.java
@@ -4,10 +4,15 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import com.alibaba.nacos.common.utils.CollectionUtils;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.ObjUtils;
+import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.security.utils.SecurityUtils;
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;
@@ -18,6 +23,7 @@ import org.springframework.stereotype.Service;
import com.muyu.product.mapper.ProjectInfoMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.transaction.annotation.Transactional;
/**
* 商品信息Service业务层处理
@@ -99,10 +105,6 @@ public class ProjectInfoServiceImpl extends ServiceImpl() {{
- in(AttributeInfo::getId, attrIdList);
- }}
- ).stream()
- .map(TemplateAttributeModel::attributeInfoBuild)
- .toList();
+ new LambdaQueryWrapper<>() {{
+ in(AttributeInfo::getId, attrIdList);
+ }}
+ ).stream()
+ .map(TemplateAttributeModel::attributeInfoBuild)
+ .toList();
}
// 把自有属性添加到商品属性的集合当中,进行合并
if (!projectAttributeList.isEmpty()){
@@ -229,4 +231,89 @@ public class ProjectInfoServiceImpl extends ServiceImpl attributeInfos = projectInfoEditReq.getAttrValueList().stream().filter(projectModel -> !StringUtils.isBlank(projectModel.getValue())).map(item->{
+ AttributeInfo attributeInfo =AttributeInfo.builder().id(item.getId()).name(item.getValue()).build();
+ return attributeInfo;
+ }).toList();
+ //批量修改属性信息
+ attributeInfoService.updateBatchById(attributeInfos);
+ }
+ //检查产品的SKU列表是否为空
+ if(!CollectionUtils.isEmpty(projectInfoEditReq.getProductSkuList())){
+ //构建 ProjectSkuInfo 对象列表
+ List skuInfoList = projectInfoEditReq.getProductSkuList().stream().map(projectSkuInfoModel-> {
+ ProjectSkuInfo projectSkuInfo = ProjectSkuInfo.builder().sku(projectSkuInfoModel.getSku())
+ .image(projectSkuInfoModel.getImage())
+ .stock(projectSkuInfoModel.getStock())
+ .price(projectSkuInfoModel.getPrice())
+ .build();
+ return projectSkuInfo;
+ }).toList();
+ //循环遍历 SKU 列表 循环修改
+ skuInfoList.forEach(projectSkuInfoModel->{
+ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
+ //如果图片不为空,则修改图片字段
+ if(!StringUtils.isBlank(projectSkuInfoModel.getImage())){
+ wrapper.set(ProjectSkuInfo::getImage,projectSkuInfoModel.getImage());
+ }
+ //修改库存和价格字段
+ wrapper.set(ProjectSkuInfo::getStock,projectSkuInfoModel.getStock());
+ wrapper.set(ProjectSkuInfo::getPrice,projectSkuInfoModel.getPrice());
+ //修改条件 为SKU字段
+ wrapper.eq(ProjectSkuInfo::getSku,projectSkuInfoModel.getSku());
+ //执行更新操作
+ projectSkuInfoService.update(null,wrapper);
+ });
+ }
+ return Result.success(null,"修改");
+ }
+
+// @Override
+// public Result UpdProjectInfo(Long id, ProjectInfoEditReq projectInfoEditReq) {
+// this.updateById(ProjectAddModel.editBuild(id,projectInfoEditReq));
+// if(!CollectionUtils.isEmpty(projectInfoEditReq.getAttrValueList())){
+// List attributeInfoList= projectInfoEditReq.getAttrValueList().stream().filter(attributeInfoUpdModel->!StringUtils.isBlank(attributeInfoUpdModel.getValue()))
+// .map(item->{
+// AttributeInfo attributeInfo = AttributeInfo.builder().id(item.getId()).name(item.getValue()).build();
+// return attributeInfo;
+// }).toList();
+// attributeInfoService.updateBatchById(attributeInfoList);
+// }
+//
+// if(!CollectionUtils.isEmpty(projectInfoEditReq.getProductSkuList())){
+// List skuInfoList =projectInfoEditReq.getProductSkuList().stream().map(projectSKUModel -> {
+// ProjectSkuInfo projectSkuInfo = ProjectSkuInfo.builder()
+// .sku(projectSKUModel.getSku())
+// .image(projectSKUModel.getImage())
+// .stock(projectSKUModel.getStock())
+// .price(projectSKUModel.getPrice())
+// .build();
+// return projectSkuInfo;
+// }).toList();
+// skuInfoList.forEach(projectSkuInfo -> {
+// LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
+// if(!StringUtils.isBlank(projectSkuInfo.getImage())){
+// wrapper.set(ProjectSkuInfo::getImage,projectSkuInfo.getImage());
+// }
+// wrapper.set(ProjectSkuInfo::getStock,projectSkuInfo.getStock());
+// wrapper.set(ProjectSkuInfo::getPrice,projectSkuInfo.getPrice());
+// wrapper.eq(ProjectSkuInfo::getSku, projectSkuInfo.getSku());
+// projectSkuInfoService.update(null,wrapper);
+// });
+//
+// }
+// return Result.success("修改成功");
+// }
+
+
+
+
}
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 05c8b16..7b9eb61 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
@@ -10,6 +10,7 @@ import com.muyu.product.domain.ProjectSkuInfo;
import com.muyu.product.service.ProjectSkuInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.transaction.annotation.Transactional;
/**
* 商品SKUService业务层处理
@@ -88,4 +89,34 @@ public class ProjectSkuInfoServiceImpl extends ServiceImpl skuList) {
+ return this.updateBatchById(skuList);
+ }
+
+ @Override
+ public boolean updateStock(Long id, Long stock) {
+ ProjectSkuInfo skuInfo = new ProjectSkuInfo();
+ skuInfo.setId(id);
+ skuInfo.setStock(stock);
+ return this.updateById(skuInfo);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean deleteById(Long id) {
+ return this.removeById(id);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean deleteBatch(List ids) {
+ return this.removeByIds(ids);
+ }
+
+
}
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 4b7b712..9b8a047 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
@@ -3,7 +3,9 @@ package com.muyu.product.service.impl;
import java.util.List;
import com.muyu.common.core.utils.ObjUtils;
+import com.muyu.product.domain.model.RuleAttrAddModel;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.muyu.product.mapper.RuleAttrInfoMapper;
import com.muyu.product.domain.RuleAttrInfo;
@@ -21,6 +23,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@Service
public class RuleAttrInfoServiceImpl extends ServiceImpl implements RuleAttrInfoService {
+ @Autowired
+ private RuleAttrInfoMapper ruleAttrInfoMapper;
+
+
/**
* 查询规格详情列表
*
@@ -64,4 +70,10 @@ public class RuleAttrInfoServiceImpl extends ServiceImpl getRuleAttrInfo(Long id) {
+ List ruleAttrInfoList= ruleAttrInfoMapper.getRuleAttrInfo(id);
+ return ruleAttrInfoList;
+ }
}
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 6ed2ae3..c13b297 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
@@ -1,27 +1,33 @@
package com.muyu.product.service.impl;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.function.Function;
-import java.util.function.Supplier;
import java.util.stream.Collectors;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.muyu.common.core.text.Convert;
import com.muyu.common.core.utils.ObjUtils;
+import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.common.security.utils.SecurityUtils;
+import com.muyu.product.domain.ProjectInfo;
import com.muyu.product.domain.RuleAttrInfo;
import com.muyu.product.domain.model.RuleAttrAddModel;
import com.muyu.product.domain.model.RuleInfoAddModel;
+import com.muyu.product.domain.req.RuleAttrInfoReq;
+import com.muyu.product.domain.req.RuleGroupUpdResp;
import com.muyu.product.domain.req.RuleInfoEditReq;
import com.muyu.product.domain.req.RuleInfoQueryReq;
import com.muyu.product.domain.resp.RuleInfoResp;
-import com.muyu.product.domain.resp.RuleInfoUpdResp;
+import com.muyu.product.mapper.ProjectInfoMapper;
+import com.muyu.product.mapper.RuleAttrInfoMapper;
import com.muyu.product.service.RuleAttrInfoService;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.math3.stat.descriptive.summary.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.muyu.product.mapper.RuleInfoMapper;
@@ -43,6 +49,12 @@ public class RuleInfoServiceImpl extends ServiceImpl
@Autowired
private RuleAttrInfoService ruleAttrInfoService;
+ @Autowired
+ private RuleAttrInfoMapper attrInfoMapper;
+
+ @Autowired
+ private ProjectInfoMapper projectInfoMapper;
+
/**
* 查询商品规格列表
*
@@ -62,6 +74,10 @@ public class RuleInfoServiceImpl extends ServiceImpl
queryWrapper.eq(RuleInfo::getStatus, ruleInfo.getStatus());
}
+ if (ObjUtils.notNull(ruleInfo.getRemark())){
+ queryWrapper.eq(RuleInfo::getRemark,ruleInfo.getRemark());
+ }
+
@@ -78,13 +94,27 @@ public class RuleInfoServiceImpl extends ServiceImpl
*/
@Override
public boolean save (RuleInfoAddModel ruleInfoAddModel) {
+ // 验证状态值
+ if (!Arrays.asList("Y", "N").contains(ruleInfoAddModel.getStatus())) {
+ throw new RuntimeException("状态值无效,必须是 'Y' 或 'N'");
+ }
+
RuleInfo ruleInfo = RuleInfo.addModelBuild(ruleInfoAddModel, SecurityUtils::getUsername);
boolean save = this.save(ruleInfo);
- ruleAttrInfoService.saveBatch(
- ruleInfoAddModel.getRuleAttrList().stream()
- .map(ruleAttrAddModel -> RuleAttrInfo.addModelBuild(ruleAttrAddModel, ruleInfo::getId, SecurityUtils::getUsername))
- .toList()
- );
+
+ // 保存规格属性
+ if (!ruleInfoAddModel.getRuleAttrList().isEmpty()) {
+ ruleAttrInfoService.saveBatch(
+ ruleInfoAddModel.getRuleAttrList().stream()
+ .map(ruleAttrAddModel -> RuleAttrInfo.addModelBuild(
+ ruleAttrAddModel,
+ ruleInfo::getId,
+ SecurityUtils::getUsername
+ ))
+ .toList()
+ );
+ }
+
return save;
}
@@ -97,13 +127,20 @@ public class RuleInfoServiceImpl extends ServiceImpl
public TableDataInfo queryList (RuleInfoQueryReq ruleInfoQueryReq) {
List list = this.list(RuleInfo.queryBuild(ruleInfoQueryReq));
List ruleInfoRespList = list.stream()
- .map(ruleInfo -> RuleInfoResp.infoBuild(ruleInfo, ruleId -> {
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(RuleAttrInfo::getRuleId, ruleId);
- return ruleAttrInfoService.list(queryWrapper).stream().map(RuleAttrAddModel::infoBuild).toList();
- }))
+ .map(ruleInfo -> RuleInfoResp.infoBuild(
+ ruleInfo,
+ ruleId -> {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(RuleAttrInfo::getRuleId, ruleId);
+ return ruleAttrInfoService.list(queryWrapper).stream()
+ .map(RuleAttrAddModel::infoBuild)
+ .toList();
+ },
+ this::checkRuleIsUsed // 添加检查规格使用状态的方法
+ ))
.toList();
- boolean isPage = ruleInfoQueryReq.getParams().get("isPage") == null || Convert.toBool(ruleInfoQueryReq.getParams().get("isPage"), true);
+ boolean isPage = ruleInfoQueryReq.getParams().get("isPage") == null
+ || Convert.toBool(ruleInfoQueryReq.getParams().get("isPage"), true);
return TableDataInfo.builder()
.rows(ruleInfoRespList)
@@ -111,34 +148,243 @@ public class RuleInfoServiceImpl extends ServiceImpl
.build();
}
+ private Boolean checkRuleIsUsed(Long ruleId) {
+ // 检查商品信息表中是否存在使用该规格的商品
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(ProjectInfo::getRuleId, ruleId);
+ return projectInfoMapper.exists(queryWrapper);
+ }
+
+// @Override
+// public RuleInfoAddModel getUpdById(Long id) {
+//
+// RuleInfo ruleInfo = this.getById(id);
+// if (ruleInfo==null){
+// throw new RuntimeException("没有这个商品规格");
+// }
+//
+// List ruleAttrInfos = ruleAttrInfoService.getRuleAttrInfo(ruleInfo.getId());
+// ArrayList arrayList = new ArrayList<>();
+//
+// RuleAttrAddModel ruleAttrAddModel = new RuleAttrAddModel();
+//
+// for (RuleAttrAddModel ruleAttrInfo : ruleAttrInfos) {
+// ruleAttrAddModel.setName(ruleAttrInfo.getName());
+// }
+//
+//// List list = ruleAttrInfos.stream().map((RuleAttrAddModel t) -> RuleAttrInfo.getAttrValue(t)).toList();
+//
+// ruleAttrAddModel.setValueList(list);
+// arrayList.add(ruleAttrAddModel);
+//
+// RuleInfoAddModel resp = new RuleInfoAddModel();
+// resp.setId(ruleInfo.getId());
+// resp.setName(ruleInfo.getName());
+// resp.setStatus(ruleInfo.getStatus());
+// resp.setRuleAttrList(arrayList);
+//
+// return resp;
+// }
+
+
@Override
- public RuleInfoUpdResp getUpdById(Long id) {
+ public RuleInfoResp getUpdById(Long id){
+// RuleInfoResp getRuleById = attrInfoMapper.getRuleAttrInfo2(id);
+// List ruleAttrList = getRuleById.getRuleAttrList();
+//
+// for (RuleAttrAddModel ruleAttrAddModel : ruleAttrList) {
+// String attrValue = ruleAttrAddModel.getAttrValue();
+// String[] split = attrValue.split(",");
+// ruleAttrAddModel.setValueList(List.of(split));
+// }
+// return getRuleById;
RuleInfo ruleInfo = this.getById(id);
+ if (ruleInfo == null) {
+ throw new RuntimeException("商品规格不存在");
+ }
+
+ // 2. 查询规格属性信息
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(RuleAttrInfo::getRuleId, id);
- List ruleAttrInfoList = this.ruleAttrInfoService.list(queryWrapper);
- return RuleInfoUpdResp.builder()
+ List attrInfoList = ruleAttrInfoService.list(queryWrapper);
+
+ // 3. 转换属性信息
+ List ruleAttrList = attrInfoList.stream()
+ .map(attrInfo -> {
+ RuleAttrAddModel model = new RuleAttrAddModel();
+ model.setName(attrInfo.getName());
+ // 处理属性值列表
+ if (StringUtils.isNotEmpty(attrInfo.getAttrValue())) {
+ List valueList = Arrays.asList(attrInfo.getAttrValue().split(","));
+ // 去除空值和空白字符
+ valueList = valueList.stream()
+ .filter(StringUtils::isNotEmpty)
+ .map(String::trim)
+ .collect(Collectors.toList());
+ model.setValueList(valueList);
+ }
+ return model;
+ })
+ .collect(Collectors.toList());
+
+ // 4. 构建返回对象
+ return RuleInfoResp.builder()
.id(ruleInfo.getId())
.name(ruleInfo.getName())
.status(ruleInfo.getStatus())
.remark(ruleInfo.getRemark())
- .ruleAttrList(ruleAttrInfoList.stream().map(RuleAttrAddModel::infoBuild).toList())
+ .ruleAttrList(ruleAttrList)
+ .createTime(ruleInfo.getCreateTime())
+ .updateTime(ruleInfo.getUpdateTime())
.build();
}
@Override
- public boolean updateById(Long id, RuleInfoEditReq ruleInfoEditReq) {
- boolean update = this.updateById(RuleInfo.editBuild(id, ruleInfoEditReq));
- if (update) {
- LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(RuleAttrInfo::getRuleId, id);
- this.ruleAttrInfoService.remove(queryWrapper);
- ruleAttrInfoService.saveBatch(
- ruleInfoEditReq.getRuleAttrList().stream()
- .map(ruleAttrAddModel -> RuleAttrInfo.addModelBuild(ruleAttrAddModel, () -> id, SecurityUtils::getUsername))
- .toList()
- );
+ public RuleInfoResp getUpdById2(Long id) {
+ // 1. 查询基础规格信息
+ RuleInfo ruleInfo = this.getById(id);
+ if (ruleInfo == null) {
+ throw new RuntimeException("商品规格不存在");
}
- return update;
+
+ // 2. 查询规格属性信息并转换
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(RuleAttrInfo::getRuleId, id);
+ List ruleAttrList = ruleAttrInfoService.list(queryWrapper).stream()
+ .map(attrInfo -> {
+ RuleAttrAddModel model = new RuleAttrAddModel();
+ model.setName(attrInfo.getName());
+ model.setValueList(Arrays.asList(attrInfo.getAttrValue().split(",")));
+ return model;
+ })
+ .collect(Collectors.toList());
+
+ // 3. 构建返回对象
+ return RuleInfoResp.builder()
+ .id(ruleInfo.getId())
+ .name(ruleInfo.getName())
+ .status(ruleInfo.getStatus())
+ .ruleAttrList(ruleAttrList)
+ .build();
}
+
+ @Override
+ public RuleInfoResp getUpdById3(Long id) {
+ RuleInfo ruleInfo = this.getById(id);
+ if (ruleInfo==null){
+ throw new RuntimeException("商品规格不存在");
+ }
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(RuleAttrInfo::getRuleId,id);
+ List ruleAttrList = ruleAttrInfoService.list(queryWrapper).stream()
+ .map(attrInfo -> {
+ RuleAttrAddModel model = new RuleAttrAddModel();
+ model.setName(attrInfo.getName());
+ model.setValueList(Arrays.asList(attrInfo.getAttrValue().split(",")));
+ return model;
+ })
+ .collect(Collectors.toList());
+
+ return RuleInfoResp.builder()
+ .id(ruleInfo.getId())
+ .name(ruleInfo.getName())
+ .status(ruleInfo.getStatus())
+ .ruleAttrList(ruleAttrList)
+ .build();
+ }
+
+
+ @Override
+ public void edit(Long id, RuleAttrInfoReq req) {
+ attrInfoMapper.updRule(id,req);
+ attrInfoMapper.deleteRule(id);
+
+ List ruleAttrList = req.getRuleAttrList();
+ for (RuleAttrAddModel ruleAttrAddModel : ruleAttrList) {
+ List valueList = ruleAttrAddModel.getValueList();
+ String value="";
+ String valueData=null;
+ for (String s : valueList) {
+ valueData = value + "," +s ;
+ }
+ String substring = valueData.substring(1);
+ System.out.println(substring);
+ attrInfoMapper.addRuleAttrModel(id,ruleAttrAddModel.getName(),substring);
+ }
+
+
+ }
+
+ @Override
+ public void edit2(Long id, RuleAttrInfoReq req) {
+ RuleInfo ruleInfo = RuleInfo.builder()
+ .id(id)
+ .name(req.getName())
+ .status(req.getStatus())
+ .updateTime(new Date())
+ .updateBy(SecurityUtils.getUsername())
+ .build();
+ this.updateById(ruleInfo);
+
+ // 2. 删除原有的规格属性
+ LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper<>();
+ deleteWrapper.eq(RuleAttrInfo::getRuleId, id);
+ ruleAttrInfoService.remove(deleteWrapper);
+
+ // 3. 批量新增规格属性
+ if (ObjUtils.notNull(req.getRuleAttrList())) {
+ List attrInfoList = req.getRuleAttrList().stream()
+ .map(attr -> {
+ // 处理属性值列表转换为逗号分隔的字符串
+ String attrValue = attr.getValueList().stream()
+ .filter(StringUtils::isNotEmpty)
+ .map(String::trim)
+ .collect(Collectors.joining(","));
+
+ return RuleAttrInfo.builder()
+ .ruleId(id)
+ .name(attr.getName())
+ .attrValue(attrValue)
+ .createTime(new Date())
+ .updateTime(new Date())
+ .createBy(SecurityUtils.getUsername())
+ .updateBy(SecurityUtils.getUsername())
+ .build();
+ })
+ .collect(Collectors.toList());
+
+ ruleAttrInfoService.saveBatch(attrInfoList);
+ }
+ }
+
+ @Override
+ public void edit3(Long id, RuleAttrInfoReq req) {
+ // 更新规格基本信息
+ updateById(RuleInfo.builder()
+ .id(id)
+ .name(req.getName())
+ .remark(req.getRemark())
+ .status(req.getStatus())
+ .updateTime(new Date())
+ .build());
+
+ // 删除并新增规格属性
+ ruleAttrInfoService.remove(new LambdaQueryWrapper()
+ .eq(RuleAttrInfo::getRuleId, id));
+
+ if (ObjUtils.notNull(req.getRuleAttrList())) {
+ ruleAttrInfoService.saveBatch(req.getRuleAttrList().stream()
+ .map(attr -> RuleAttrInfo.builder()
+ .ruleId(id)
+ .name(attr.getName())
+ .attrValue(String.join(",", attr.getValueList()))
+ .createTime(new Date())
+ .updateTime(new Date())
+ .createBy(SecurityUtils.getUsername())
+ .build())
+ .collect(Collectors.toList()));
+ }
+ }
+
+
}
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/bootstrap.yml b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/bootstrap.yml
index 0d50570..4105ee8 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/bootstrap.yml
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/bootstrap.yml
@@ -4,6 +4,14 @@ server:
# Spring
spring:
+ mvc:
+ pathmatch:
+ matching-strategy: ant_path_matcher
+ swagger:
+ enable: true
+ application-name: ${spring.application.name}
+ application-version: 1.0
+ application-description: 商品服务接口文档
application:
# 应用名称
name: muyu-product
@@ -26,3 +34,9 @@ spring:
logging:
level:
com.muyu.product.mapper: DEBUG
+springdoc:
+ api-docs:
+ enabled: true
+ swagger-ui:
+ path: /swagger-ui.html
+ disable-swagger-default-url: true
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AsAttributeGroupMapper.xml b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AsAttributeGroupMapper.xml
index 05c468d..83ef3ec 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AsAttributeGroupMapper.xml
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AsAttributeGroupMapper.xml
@@ -18,4 +18,14 @@
select id, group_id, attribute_id, remark, create_by, create_time, update_by, update_time from as_attribute_group
+
+
+ select id, name, states, create_by, create_time, updata_by, updata_time, remark from attribute_group
+
+
+ insert into as_attribute_group(group_id,attribute_id) values (#{id1},#{id})
+
+
+ delete from as_attribute_group where group_id=#{id}
+
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AttributeGroupMapper.xml b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AttributeGroupMapper.xml
index 5edd11f..83539ff 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AttributeGroupMapper.xml
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/AttributeGroupMapper.xml
@@ -15,7 +15,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
- select id, name, states, create_by, create_time, updata_by, updata_time, remark from attribute_group
-
+
diff --git a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/RuleAttrInfoMapper.xml b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/RuleAttrInfoMapper.xml
index 3186330..3c5309c 100644
--- a/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/RuleAttrInfoMapper.xml
+++ b/muyu-modules/muyu-product/muyu-product-server/src/main/resources/mapper/product/RuleAttrInfoMapper.xml
@@ -19,4 +19,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select id, rule_id, name, attr_value, remark, create_by, create_time, update_by, update_time from rule_attr_info
+
+ insert into rule_attr_info (`rule_id`,`name`,`attr_value`,create_by,`create_time`) values (#{id},#{name},#{valueData},'admin',now())
+
+
+ update `rule_info` set `name` = #{req.name} ,
+ `status` = #{req.status} ,
+ `update_time` = now() where `id`= #{id}
+
+
+
+
+
+
+
+ delete from rule_attr_info where rule_id=#{id}
+
+
+
+
+
+
+