package cn.iocoder.yudao.module.product.controller.admin.spu.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; import java.util.List; @Schema(description = "管理后台 - 商品 SPU 新增/更新 Request VO") @Data public class ProductSpuSaveReqVO { @Schema(description = "商品编号", example = "1") private Long id; @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "清凉小短袖") @NotEmpty(message = "商品名称不能为空") private String name; @Schema(description = "关键字", requiredMode = Schema.RequiredMode.REQUIRED, example = "清凉丝滑不出汗") @NotEmpty(message = "商品关键字不能为空") private String keyword; @Schema(description = "商品简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "清凉小短袖简介") @NotEmpty(message = "商品简介不能为空") private String introduction; @Schema(description = "商品详情", requiredMode = Schema.RequiredMode.REQUIRED, example = "清凉小短袖详情") @NotEmpty(message = "商品详情不能为空") private String description; @Schema(description = "商品分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "商品分类不能为空") private Long categoryId; @Schema(description = "商品品牌编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "商品品牌不能为空") private Long brandId; @Schema(description = "商品封面图", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xx.png") @NotEmpty(message = "商品封面图不能为空") private String picUrl; @Schema(description = "商品轮播图", requiredMode = Schema.RequiredMode.REQUIRED, example = "[https://www.iocoder.cn/xx.png, https://www.iocoder.cn/xxx.png]") private List sliderPicUrls; @Schema(description = "排序字段", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "商品排序字段不能为空") private Integer sort; // ========== SKU 相关字段 ========= @Schema(description = "规格类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") @NotNull(message = "商品规格类型不能为空") private Boolean specType; // ========== 物流相关字段 ========= @Schema(description = "配送方式数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotEmpty(message = "配送方式不能为空") private List deliveryTypes; @Schema(description = "物流配置模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "111") private Long deliveryTemplateId; // ========== 营销相关字段 ========= @Schema(description = "赠送积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "111") @NotNull(message = "商品赠送积分不能为空") private Integer giveIntegral; @Schema(description = "分销类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") @NotNull(message = "商品分销类型不能为空") private Boolean subCommissionType; // ========== 统计相关字段 ========= @Schema(description = "虚拟销量", example = "66") private Integer virtualSalesCount; @Schema(description = "商品销量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1999") private Integer salesCount; @Schema(description = "浏览量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1999") private Integer browseCount; // ========== SKU 相关字段 ========= @Schema(description = "SKU 数组") @Valid private List skus; }