商品添加
parent
cd0304954a
commit
09a2da4f04
|
@ -1,10 +1,13 @@
|
||||||
package com.muyu.product.domain;
|
package com.muyu.product.domain;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.muyu.product.domain.model.AttrValueModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
@ -51,4 +54,11 @@ public class AsProductAttributeInfo extends BaseEntity {
|
||||||
@ApiModelProperty(name = "属性值", value = "属性值", required = true)
|
@ApiModelProperty(name = "属性值", value = "属性值", required = true)
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
|
public static AsProductAttributeInfo attrValueModelBuild(AttrValueModel attrValueModel, Supplier<Long> projectId){
|
||||||
|
return AsProductAttributeInfo.builder()
|
||||||
|
.productId(projectId.get())
|
||||||
|
.attributeId(attrValueModel.getId())
|
||||||
|
.value(attrValueModel.getValue())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.muyu.product.domain;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.muyu.product.domain.model.ProjectAddModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
@ -15,6 +16,9 @@ import com.muyu.product.domain.req.ProjectInfoSaveReq;
|
||||||
import com.muyu.product.domain.req.ProjectInfoEditReq;
|
import com.muyu.product.domain.req.ProjectInfoEditReq;
|
||||||
import com.muyu.common.core.web.domain.BaseEntity;
|
import com.muyu.common.core.web.domain.BaseEntity;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品信息对象 project_info
|
* 商品信息对象 project_info
|
||||||
*
|
*
|
||||||
|
@ -108,18 +112,20 @@ public class ProjectInfo extends BaseEntity {
|
||||||
/**
|
/**
|
||||||
* 添加构造器
|
* 添加构造器
|
||||||
*/
|
*/
|
||||||
public static ProjectInfo saveBuild(ProjectInfoSaveReq projectInfoSaveReq){
|
public static ProjectInfo saveModelBuild(ProjectAddModel projectAddModel, Supplier<String> createBy){
|
||||||
return ProjectInfo.builder()
|
return ProjectInfo.builder()
|
||||||
.name(projectInfoSaveReq.getName())
|
.name(projectAddModel.getName())
|
||||||
.introduction(projectInfoSaveReq.getIntroduction())
|
.introduction(projectAddModel.getIntroduction())
|
||||||
.mianType(projectInfoSaveReq.getMianType())
|
.mianType(projectAddModel.getMianType())
|
||||||
.parentType(projectInfoSaveReq.getParentType())
|
.parentType(projectAddModel.getParentType())
|
||||||
.type(projectInfoSaveReq.getType())
|
.type(projectAddModel.getType())
|
||||||
.image(projectInfoSaveReq.getImage())
|
.image(projectAddModel.getImage())
|
||||||
.carouselImages(projectInfoSaveReq.getCarouselImages())
|
.carouselImages(projectAddModel.getCarouselImages())
|
||||||
.status(projectInfoSaveReq.getStatus())
|
.status(projectAddModel.getStatus())
|
||||||
.ruleId(projectInfoSaveReq.getRuleId())
|
.ruleId(projectAddModel.getRuleId())
|
||||||
.brandId(projectInfoSaveReq.getBrandId())
|
.brandId(projectAddModel.getBrandId())
|
||||||
|
.createBy(createBy.get())
|
||||||
|
.createTime(new Date())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
package com.muyu.product.domain;
|
package com.muyu.product.domain;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.muyu.product.domain.model.ProductSkuModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
@ -103,4 +106,14 @@ public class ProjectSkuInfo extends BaseEntity {
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ProjectSkuInfo productSkuModelBuild(ProductSkuModel productSkuModel, Supplier<Long> projectId){
|
||||||
|
return ProjectSkuInfo.builder()
|
||||||
|
.projectId(projectId.get())
|
||||||
|
.sku(productSkuModel.getSku())
|
||||||
|
.image(productSkuModel.getImage())
|
||||||
|
.stock(productSkuModel.getStock())
|
||||||
|
.price(productSkuModel.getPrice())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
|
@ -1,5 +1,8 @@
|
||||||
package com.muyu.product.domain.req;
|
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.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
@ -8,6 +11,8 @@ import lombok.experimental.SuperBuilder;
|
||||||
import io.swagger.annotations.*;
|
import io.swagger.annotations.*;
|
||||||
import com.muyu.common.core.web.domain.BaseEntity;
|
import com.muyu.common.core.web.domain.BaseEntity;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品信息对象 project_info
|
* 商品信息对象 project_info
|
||||||
*
|
*
|
||||||
|
@ -23,59 +28,19 @@ public class ProjectInfoSaveReq extends BaseEntity {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 主键 */
|
/**
|
||||||
|
* 商品添加基本属性
|
||||||
|
*/
|
||||||
|
private ProjectAddModel projectAddModel;
|
||||||
|
|
||||||
@ApiModelProperty(name = "主键", value = "主键")
|
/**
|
||||||
private Long id;
|
* 商品属性
|
||||||
|
*/
|
||||||
|
private List<AttrValueModel> attrValueList;
|
||||||
|
|
||||||
/** 商品名称 */
|
/**
|
||||||
|
* 商品SKu
|
||||||
@ApiModelProperty(name = "商品名称", value = "商品名称")
|
*/
|
||||||
private String name;
|
private List<ProductSkuModel> productSkuList;
|
||||||
|
|
||||||
/** 商品描述 */
|
|
||||||
|
|
||||||
@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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,7 +83,7 @@ public class ProjectInfoController extends BaseController {
|
||||||
@PostMapping
|
@PostMapping
|
||||||
@ApiOperation("新增商品信息")
|
@ApiOperation("新增商品信息")
|
||||||
public Result<String> add(@RequestBody ProjectInfoSaveReq projectInfoSaveReq) {
|
public Result<String> add(@RequestBody ProjectInfoSaveReq projectInfoSaveReq) {
|
||||||
return toAjax(projectInfoService.save(ProjectInfo.saveBuild(projectInfoSaveReq)));
|
return toAjax(projectInfoService.save(projectInfoSaveReq));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.muyu.product.service;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.muyu.product.domain.ProjectInfo;
|
import com.muyu.product.domain.ProjectInfo;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.muyu.product.domain.req.ProjectInfoSaveReq;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 商品信息Service接口
|
* 商品信息Service接口
|
||||||
|
@ -19,4 +20,10 @@ public interface ProjectInfoService extends IService<ProjectInfo> {
|
||||||
*/
|
*/
|
||||||
public List<ProjectInfo> list(ProjectInfo projectInfo);
|
public List<ProjectInfo> list(ProjectInfo projectInfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存商品信息
|
||||||
|
* @param projectInfoSaveReq 请求对象
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean save (ProjectInfoSaveReq projectInfoSaveReq);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,17 @@ package com.muyu.product.service.impl;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.muyu.common.core.utils.ObjUtils;
|
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 lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.muyu.product.mapper.ProjectInfoMapper;
|
import com.muyu.product.mapper.ProjectInfoMapper;
|
||||||
import com.muyu.product.domain.ProjectInfo;
|
import com.muyu.product.domain.ProjectInfo;
|
||||||
|
@ -21,6 +31,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
@Service
|
@Service
|
||||||
public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements ProjectInfoService {
|
public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, ProjectInfo> implements ProjectInfoService {
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AsProductAttributeInfoService asProductAttributeInfoService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ProjectSkuInfoService projectSkuInfoService;
|
||||||
/**
|
/**
|
||||||
* 查询商品信息列表
|
* 查询商品信息列表
|
||||||
*
|
*
|
||||||
|
@ -78,4 +94,37 @@ public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, Proje
|
||||||
|
|
||||||
return list(queryWrapper);
|
return list(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存商品信息
|
||||||
|
*
|
||||||
|
* @param projectInfoSaveReq 请求对象
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean save (ProjectInfoSaveReq projectInfoSaveReq) {
|
||||||
|
ProjectAddModel projectAddModel = projectInfoSaveReq.getProjectAddModel();
|
||||||
|
ProjectInfo projectInfo = ProjectInfo.saveModelBuild(projectAddModel, SecurityUtils::getUsername);
|
||||||
|
boolean save = this.save(projectInfo);
|
||||||
|
if (save){
|
||||||
|
// 属性值
|
||||||
|
List<AttrValueModel> attrValueList = projectInfoSaveReq.getAttrValueList();
|
||||||
|
List<AsProductAttributeInfo> asProductAttributeInfoList = attrValueList.stream()
|
||||||
|
.map(attrValueModel -> AsProductAttributeInfo.attrValueModelBuild(attrValueModel, projectInfo::getId))
|
||||||
|
.toList();
|
||||||
|
if (!asProductAttributeInfoList.isEmpty()){
|
||||||
|
asProductAttributeInfoService.saveBatch(asProductAttributeInfoList);
|
||||||
|
}
|
||||||
|
// sku ProductSkuModel -》 ProjectSkuInfo
|
||||||
|
List<ProductSkuModel> productSkuModelList = projectInfoSaveReq.getProductSkuList();
|
||||||
|
List<ProjectSkuInfo> projectSkuInfoList = productSkuModelList.stream().map(
|
||||||
|
productSkuModel -> ProjectSkuInfo.productSkuModelBuild(productSkuModel, projectInfo::getId)
|
||||||
|
).toList();
|
||||||
|
if (!projectSkuInfoList.isEmpty()){
|
||||||
|
projectSkuInfoService.saveBatch(projectSkuInfoList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return save;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue