diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java index 49f25a8..853c477 100644 --- a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/AsProductAttributeInfo.java @@ -1,10 +1,13 @@ package com.muyu.product.domain; import java.util.Date; +import java.util.function.Supplier; + import com.fasterxml.jackson.annotation.JsonFormat; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.product.domain.model.AttrValueModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -51,4 +54,11 @@ public class AsProductAttributeInfo extends BaseEntity { @ApiModelProperty(name = "属性值", value = "属性值", required = true) private String value; + public static AsProductAttributeInfo attrValueModelBuild(AttrValueModel attrValueModel, Supplier projectId){ + return AsProductAttributeInfo.builder() + .productId(projectId.get()) + .attributeId(attrValueModel.getId()) + .value(attrValueModel.getValue()) + .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 2688652..9cd7003 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 @@ -3,6 +3,7 @@ package com.muyu.product.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.product.domain.model.ProjectAddModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -15,6 +16,9 @@ import com.muyu.product.domain.req.ProjectInfoSaveReq; import com.muyu.product.domain.req.ProjectInfoEditReq; import com.muyu.common.core.web.domain.BaseEntity; +import java.util.Date; +import java.util.function.Supplier; + /** * 商品信息对象 project_info * @@ -108,18 +112,20 @@ public class ProjectInfo extends BaseEntity { /** * 添加构造器 */ - public static ProjectInfo saveBuild(ProjectInfoSaveReq projectInfoSaveReq){ + public static ProjectInfo saveModelBuild(ProjectAddModel projectAddModel, Supplier createBy){ return ProjectInfo.builder() - .name(projectInfoSaveReq.getName()) - .introduction(projectInfoSaveReq.getIntroduction()) - .mianType(projectInfoSaveReq.getMianType()) - .parentType(projectInfoSaveReq.getParentType()) - .type(projectInfoSaveReq.getType()) - .image(projectInfoSaveReq.getImage()) - .carouselImages(projectInfoSaveReq.getCarouselImages()) - .status(projectInfoSaveReq.getStatus()) - .ruleId(projectInfoSaveReq.getRuleId()) - .brandId(projectInfoSaveReq.getBrandId()) + .name(projectAddModel.getName()) + .introduction(projectAddModel.getIntroduction()) + .mianType(projectAddModel.getMianType()) + .parentType(projectAddModel.getParentType()) + .type(projectAddModel.getType()) + .image(projectAddModel.getImage()) + .carouselImages(projectAddModel.getCarouselImages()) + .status(projectAddModel.getStatus()) + .ruleId(projectAddModel.getRuleId()) + .brandId(projectAddModel.getBrandId()) + .createBy(createBy.get()) + .createTime(new Date()) .build(); } 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 3ea0dcb..9a28465 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 @@ -1,9 +1,12 @@ package com.muyu.product.domain; import java.math.BigDecimal; +import java.util.function.Supplier; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.product.domain.model.ProductSkuModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -103,4 +106,14 @@ public class ProjectSkuInfo extends BaseEntity { .build(); } + public static ProjectSkuInfo productSkuModelBuild(ProductSkuModel productSkuModel, Supplier projectId){ + return ProjectSkuInfo.builder() + .projectId(projectId.get()) + .sku(productSkuModel.getSku()) + .image(productSkuModel.getImage()) + .stock(productSkuModel.getStock()) + .price(productSkuModel.getPrice()) + .build(); + } + } diff --git a/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttrValueModel.java b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttrValueModel.java new file mode 100644 index 0000000..303f010 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/AttrValueModel.java @@ -0,0 +1,29 @@ +package com.muyu.product.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author DongZl + * @description: 商品属性 + * @Date 2024-3-22 上午 10:53 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AttrValueModel { + + /** + * ID + */ + private Long id; + + /** + * 值 + */ + private String value; +} 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 new file mode 100644 index 0000000..a9f2d88 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProductSkuModel.java @@ -0,0 +1,38 @@ +package com.muyu.product.domain.model; + +import com.muyu.common.core.annotation.Excel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @author DongZl + * @description: 商品Sku + * @Date 2024-3-22 上午 10:54 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProductSkuModel { + + /** sku */ + @ApiModelProperty(name = "sku", value = "sku", required = true) + private String sku; + + /** 商品库存 */ + @ApiModelProperty(name = "商品库存", value = "商品库存", required = true) + private Long stock; + + /** 商品价格 */ + @ApiModelProperty(name = "商品价格", value = "商品价格", required = true) + private BigDecimal price; + + /** 规格图片 */ + @ApiModelProperty(name = "规格图片", value = "规格图片", required = true) + private String image; +} 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 new file mode 100644 index 0000000..b56e801 --- /dev/null +++ b/muyu-modules/muyu-product/muyu-product-common/src/main/java/com/muyu/product/domain/model/ProjectAddModel.java @@ -0,0 +1,59 @@ +package com.muyu.product.domain.model; + +import com.muyu.common.core.web.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import lombok.experimental.SuperBuilder; + +/** + * @author DongZl + * @description: 商品添加模型 + * @Date 2024-3-22 上午 10:50 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class ProjectAddModel extends BaseEntity { + + /** 商品名称 */ + @ApiModelProperty(name = "商品名称", value = "商品名称") + private String name; + + /** 商品描述 */ + @ApiModelProperty(name = "商品描述", value = "商品描述") + private String introduction; + + /** 主类型 */ + @ApiModelProperty(name = "主类型", value = "主类型") + private String mianType; + + /** 父类型 */ + @ApiModelProperty(name = "父类型", value = "父类型") + private String parentType; + + /** 商品类型 */ + @ApiModelProperty(name = "商品类型", value = "商品类型") + private String type; + + /** 商品图片 */ + @ApiModelProperty(name = "商品图片", value = "商品图片") + private String image; + + /** 商品轮播图 */ + @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") + private String carouselImages; + + /** 商品状态 */ + @ApiModelProperty(name = "商品状态", value = "商品状态") + private String status; + + /** 规格 */ + @ApiModelProperty(name = "规格", value = "规格") + private Long ruleId; + + /** 品牌 */ + @ApiModelProperty(name = "品牌", value = "品牌") + private Long brandId; +} 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 8907e6d..10e5b0d 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,8 @@ package com.muyu.product.domain.req; +import com.muyu.product.domain.model.AttrValueModel; +import com.muyu.product.domain.model.ProductSkuModel; +import com.muyu.product.domain.model.ProjectAddModel; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -8,6 +11,8 @@ import lombok.experimental.SuperBuilder; import io.swagger.annotations.*; import com.muyu.common.core.web.domain.BaseEntity; +import java.util.List; + /** * 商品信息对象 project_info * @@ -23,59 +28,19 @@ public class ProjectInfoSaveReq extends BaseEntity { private static final long serialVersionUID = 1L; - /** 主键 */ + /** + * 商品添加基本属性 + */ + private ProjectAddModel projectAddModel; - @ApiModelProperty(name = "主键", value = "主键") - private Long id; + /** + * 商品属性 + */ + private List attrValueList; - /** 商品名称 */ - - @ApiModelProperty(name = "商品名称", value = "商品名称") - private String name; - - /** 商品描述 */ - - @ApiModelProperty(name = "商品描述", value = "商品描述") - private String introduction; - - /** 主类型 */ - - @ApiModelProperty(name = "主类型", value = "主类型") - private String mianType; - - /** 父类型 */ - - @ApiModelProperty(name = "父类型", value = "父类型") - private String parentType; - - /** 商品类型 */ - - @ApiModelProperty(name = "商品类型", value = "商品类型") - private String type; - - /** 商品图片 */ - - @ApiModelProperty(name = "商品图片", value = "商品图片") - private String image; - - /** 商品轮播图 */ - - @ApiModelProperty(name = "商品轮播图", value = "商品轮播图") - private String carouselImages; - - /** 商品状态 */ - - @ApiModelProperty(name = "商品状态", value = "商品状态") - private String status; - - /** 规格 */ - - @ApiModelProperty(name = "规格", value = "规格") - private Long ruleId; - - /** 品牌 */ - - @ApiModelProperty(name = "品牌", value = "品牌") - private Long brandId; + /** + * 商品SKu + */ + private List productSkuList; } 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 e0fd126..647e056 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 @@ -83,7 +83,7 @@ public class ProjectInfoController extends BaseController { @PostMapping @ApiOperation("新增商品信息") public Result add(@RequestBody ProjectInfoSaveReq projectInfoSaveReq) { - return toAjax(projectInfoService.save(ProjectInfo.saveBuild(projectInfoSaveReq))); + return toAjax(projectInfoService.save(projectInfoSaveReq)); } /** 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 f4ea950..bb0e287 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 @@ -3,6 +3,7 @@ package com.muyu.product.service; import java.util.List; import com.muyu.product.domain.ProjectInfo; import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.product.domain.req.ProjectInfoSaveReq; /** * 商品信息Service接口 @@ -19,4 +20,10 @@ public interface ProjectInfoService extends IService { */ public List list(ProjectInfo projectInfo); + /** + * 保存商品信息 + * @param projectInfoSaveReq 请求对象 + * @return + */ + boolean save (ProjectInfoSaveReq projectInfoSaveReq); } 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 37d05e1..fb48531 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 @@ -3,7 +3,17 @@ package com.muyu.product.service.impl; import java.util.List; import com.muyu.common.core.utils.ObjUtils; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.product.domain.AsProductAttributeInfo; +import com.muyu.product.domain.ProjectSkuInfo; +import com.muyu.product.domain.model.AttrValueModel; +import com.muyu.product.domain.model.ProductSkuModel; +import com.muyu.product.domain.model.ProjectAddModel; +import com.muyu.product.domain.req.ProjectInfoSaveReq; +import com.muyu.product.service.AsProductAttributeInfoService; +import com.muyu.product.service.ProjectSkuInfoService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.muyu.product.mapper.ProjectInfoMapper; import com.muyu.product.domain.ProjectInfo; @@ -21,6 +31,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @Service public class ProjectInfoServiceImpl extends ServiceImpl implements ProjectInfoService { + + @Autowired + private AsProductAttributeInfoService asProductAttributeInfoService; + + @Autowired + private ProjectSkuInfoService projectSkuInfoService; /** * 查询商品信息列表 * @@ -78,4 +94,37 @@ public class ProjectInfoServiceImpl extends ServiceImpl attrValueList = projectInfoSaveReq.getAttrValueList(); + List asProductAttributeInfoList = attrValueList.stream() + .map(attrValueModel -> AsProductAttributeInfo.attrValueModelBuild(attrValueModel, projectInfo::getId)) + .toList(); + if (!asProductAttributeInfoList.isEmpty()){ + asProductAttributeInfoService.saveBatch(asProductAttributeInfoList); + } + // sku ProductSkuModel -》 ProjectSkuInfo + List productSkuModelList = projectInfoSaveReq.getProductSkuList(); + List projectSkuInfoList = productSkuModelList.stream().map( + productSkuModel -> ProjectSkuInfo.productSkuModelBuild(productSkuModel, projectInfo::getId) + ).toList(); + if (!projectSkuInfoList.isEmpty()){ + projectSkuInfoService.saveBatch(projectSkuInfoList); + } + } + return save; + } }