Files
shanxia2.0/docs/crm-migration/reference/java/quote/domain/bo/CrmQuoteBo.java
T
2026-06-01 08:21:21 +08:00

223 lines
4.5 KiB
Java

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;
}