| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- 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.CrmQuote;
- import java.math.BigDecimal;
- import java.time.LocalDate;
- import java.util.List;
- /**
- * 报价单业务对象 crm_quote
- *
- * @author 系统管理员
- * @date 2025-01-03
- */
- @Data
- @EqualsAndHashCode(callSuper = true)
- @AutoMapper(target = CrmQuote.class, reverseConvertGenerate = false)
- public class CrmQuoteBo extends BaseEntity {
- /**
- * 主键ID
- */
- @NotNull(message = "主键不能为空", groups = { EditGroup.class })
- private Long id;
- /**
- * 报价单编号(系统自动生成)
- */
- private String quoteNo;
- /**
- * 报价单标题(可不填,系统自动生成)
- */
- private String quoteTitle;
- /**
- * 报价单类型(sales-销售/purchase-采购)
- */
- @NotBlank(message = "报价单类型不能为空", groups = { AddGroup.class, EditGroup.class })
- @Pattern(regexp = "sales|purchase", message = "报价单类型只能为销售或采购", groups = { AddGroup.class, EditGroup.class })
- private String quoteType;
- /**
- * 客户ID
- */
- @NotNull(message = "客户ID不能为空", groups = { AddGroup.class, EditGroup.class })
- private Long customerId;
- /**
- * 客户名称(冗余字段)
- */
- private String customerName;
- /**
- * 快速检索关键字(用于报价主题/客户名称模糊检索)
- */
- private String keyword;
- /**
- * 商机ID
- */
- private Long opportunityId;
- /**
- * 联系人ID
- */
- private Long contactId;
- /**
- * 联系人姓名(冗余字段)
- */
- private String contactName;
- /**
- * 联系人手机(冗余字段)
- */
- private String contactMobile;
- /**
- * 联系人邮箱(冗余字段)
- */
- private String contactEmail;
- /**
- * 版本号(如V1.0,V1.1,V2.0)
- */
- private String version;
- /**
- * 父版本ID
- */
- private Long parentId;
- /**
- * 是否最新版本(0否 1是)
- */
- private Integer isLatest;
- /**
- * 整单折扣率(百分比)
- */
- @DecimalMin(value = "0.00", message = "折扣率不能为负数")
- @DecimalMax(value = "100.00", message = "折扣率不能超过100")
- private BigDecimal discountRate;
- /**
- * 有效期(天数)
- */
- @Min(value = 1, message = "有效期必须大于0")
- private Integer validityDays;
- /**
- * 报价日期
- */
- private LocalDate quoteDate;
- /**
- * 报价日期开始
- */
- private String quoteDateBegin;
- /**
- * 报价日期结束
- */
- private String quoteDateEnd;
- /**
- * 到期日期
- */
- private LocalDate expireDate;
- /**
- * 状态
- */
- private String status;
- /**
- * 拒绝原因
- */
- private String rejectReason;
- /**
- * 负责人ID
- */
- private Long ownerUserId;
- /**
- * 负责人姓名(冗余字段)
- */
- private String ownerUserName;
- /**
- * 报价主体ID(关联crm_supplier_info表)
- */
- @NotNull(message = "报价主体不能为空", groups = { AddGroup.class, EditGroup.class })
- private Long supplierId;
- /**
- * 报价主体名称(冗余字段)
- */
- private String supplierName;
- /**
- * 关联合同ID
- */
- private Long contractId;
- /**
- * 付款条款
- */
- private String paymentTerms;
- /**
- * 交付条款
- */
- private String deliveryTerms;
- /**
- * 运费(元)
- */
- @DecimalMin(value = "0.00", message = "运费不能为负数")
- private BigDecimal freight;
- /**
- * 附件(多个用逗号分隔)
- */
- private String attachments;
- /**
- * 报价单模板内容(富文本HTML)
- */
- private String templateContent;
- /**
- * 备注
- */
- private String remark;
- /**
- * 产品列表
- */
- @NotEmpty(message = "产品列表不能为空", groups = { AddGroup.class })
- private List<CrmQuoteProductBo> products;
- /**
- * 审批人ID(用于查询某个用户已审批过的报价单)
- */
- private Long approvedByUserId;
- /**
- * 排除的状态(用于默认排除已作废的记录)
- */
- private String excludeStatus;
- }
|