package org.dromara.crm.domain.bo; import io.github.linpeilie.annotations.AutoMapper; import jakarta.validation.constraints.*; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.crm.domain.CrmQuoteProduct; import java.math.BigDecimal; /** * 报价单产品业务对象 crm_quote_product * * @author 系统管理员 * @date 2025-01-03 */ @Data @EqualsAndHashCode(callSuper = true) @AutoMapper(target = CrmQuoteProduct.class, reverseConvertGenerate = false) public class CrmQuoteProductBo extends BaseEntity { /** * 主键ID */ @NotNull(message = "主键不能为空", groups = { EditGroup.class }) private Long id; /** * 报价单ID */ private Long quoteId; /** * 产品ID(保存报价单时可为空,后端会按产品属性自动匹配或新增后回填) */ private Long productId; /** * 产品名称 */ private String productName; /** * 产品编号 */ private String productNo; /** * 产品分类ID */ private Long categoryId; /** * 产品分类名称 */ private String categoryName; /** * 规格型号 */ private String model; /** * 单位 */ private String unit; /** * 数量 */ @NotNull(message = "数量不能为空", groups = { AddGroup.class, EditGroup.class }) @DecimalMin(value = "0.01", message = "数量必须大于0") private BigDecimal quantity; /** * 含税单价/元 */ @NotNull(message = "含税单价不能为空", groups = { AddGroup.class, EditGroup.class }) @DecimalMin(value = "0.00", message = "含税单价不能为负数") private BigDecimal price; /** * 折扣(百分比) */ @DecimalMin(value = "0.00", message = "折扣不能为负数") @DecimalMax(value = "100.00", message = "折扣不能超过100") private BigDecimal discount; /** * 含税总价/元 */ private BigDecimal subtotal; /** * 税费/元 */ @DecimalMin(value = "0.00", message = "税费不能为负数") private BigDecimal taxAmount; /** * 税率(%) */ @DecimalMin(value = "0.00", message = "税率不能为负数") @DecimalMax(value = "100.00", message = "税率不能超过100") private BigDecimal taxRate; /** * 包装规格 */ private String packageSpec; /** * 送货方式 */ private String deliveryMethod; /** * 产品描述 */ private String description; /** * 排序号 */ private Integer sort; /** * 备注 */ private String remark; }