CrmQuoteBo.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package org.dromara.crm.domain.bo;
  2. import io.github.linpeilie.annotations.AutoMapper;
  3. import jakarta.validation.constraints.*;
  4. import lombok.Data;
  5. import lombok.EqualsAndHashCode;
  6. import org.dromara.common.core.validate.AddGroup;
  7. import org.dromara.common.core.validate.EditGroup;
  8. import org.dromara.common.mybatis.core.domain.BaseEntity;
  9. import org.dromara.crm.domain.CrmQuote;
  10. import java.math.BigDecimal;
  11. import java.time.LocalDate;
  12. import java.util.List;
  13. /**
  14. * 报价单业务对象 crm_quote
  15. *
  16. * @author 系统管理员
  17. * @date 2025-01-03
  18. */
  19. @Data
  20. @EqualsAndHashCode(callSuper = true)
  21. @AutoMapper(target = CrmQuote.class, reverseConvertGenerate = false)
  22. public class CrmQuoteBo extends BaseEntity {
  23. /**
  24. * 主键ID
  25. */
  26. @NotNull(message = "主键不能为空", groups = { EditGroup.class })
  27. private Long id;
  28. /**
  29. * 报价单编号(系统自动生成)
  30. */
  31. private String quoteNo;
  32. /**
  33. * 报价单标题(可不填,系统自动生成)
  34. */
  35. private String quoteTitle;
  36. /**
  37. * 报价单类型(sales-销售/purchase-采购)
  38. */
  39. @NotBlank(message = "报价单类型不能为空", groups = { AddGroup.class, EditGroup.class })
  40. @Pattern(regexp = "sales|purchase", message = "报价单类型只能为销售或采购", groups = { AddGroup.class, EditGroup.class })
  41. private String quoteType;
  42. /**
  43. * 客户ID
  44. */
  45. @NotNull(message = "客户ID不能为空", groups = { AddGroup.class, EditGroup.class })
  46. private Long customerId;
  47. /**
  48. * 客户名称(冗余字段)
  49. */
  50. private String customerName;
  51. /**
  52. * 快速检索关键字(用于报价主题/客户名称模糊检索)
  53. */
  54. private String keyword;
  55. /**
  56. * 商机ID
  57. */
  58. private Long opportunityId;
  59. /**
  60. * 联系人ID
  61. */
  62. private Long contactId;
  63. /**
  64. * 联系人姓名(冗余字段)
  65. */
  66. private String contactName;
  67. /**
  68. * 联系人手机(冗余字段)
  69. */
  70. private String contactMobile;
  71. /**
  72. * 联系人邮箱(冗余字段)
  73. */
  74. private String contactEmail;
  75. /**
  76. * 版本号(如V1.0,V1.1,V2.0)
  77. */
  78. private String version;
  79. /**
  80. * 父版本ID
  81. */
  82. private Long parentId;
  83. /**
  84. * 是否最新版本(0否 1是)
  85. */
  86. private Integer isLatest;
  87. /**
  88. * 整单折扣率(百分比)
  89. */
  90. @DecimalMin(value = "0.00", message = "折扣率不能为负数")
  91. @DecimalMax(value = "100.00", message = "折扣率不能超过100")
  92. private BigDecimal discountRate;
  93. /**
  94. * 有效期(天数)
  95. */
  96. @Min(value = 1, message = "有效期必须大于0")
  97. private Integer validityDays;
  98. /**
  99. * 报价日期
  100. */
  101. private LocalDate quoteDate;
  102. /**
  103. * 报价日期开始
  104. */
  105. private String quoteDateBegin;
  106. /**
  107. * 报价日期结束
  108. */
  109. private String quoteDateEnd;
  110. /**
  111. * 到期日期
  112. */
  113. private LocalDate expireDate;
  114. /**
  115. * 状态
  116. */
  117. private String status;
  118. /**
  119. * 拒绝原因
  120. */
  121. private String rejectReason;
  122. /**
  123. * 负责人ID
  124. */
  125. private Long ownerUserId;
  126. /**
  127. * 负责人姓名(冗余字段)
  128. */
  129. private String ownerUserName;
  130. /**
  131. * 报价主体ID(关联crm_supplier_info表)
  132. */
  133. @NotNull(message = "报价主体不能为空", groups = { AddGroup.class, EditGroup.class })
  134. private Long supplierId;
  135. /**
  136. * 报价主体名称(冗余字段)
  137. */
  138. private String supplierName;
  139. /**
  140. * 关联合同ID
  141. */
  142. private Long contractId;
  143. /**
  144. * 付款条款
  145. */
  146. private String paymentTerms;
  147. /**
  148. * 交付条款
  149. */
  150. private String deliveryTerms;
  151. /**
  152. * 运费(元)
  153. */
  154. @DecimalMin(value = "0.00", message = "运费不能为负数")
  155. private BigDecimal freight;
  156. /**
  157. * 附件(多个用逗号分隔)
  158. */
  159. private String attachments;
  160. /**
  161. * 报价单模板内容(富文本HTML)
  162. */
  163. private String templateContent;
  164. /**
  165. * 备注
  166. */
  167. private String remark;
  168. /**
  169. * 产品列表
  170. */
  171. @NotEmpty(message = "产品列表不能为空", groups = { AddGroup.class })
  172. private List<CrmQuoteProductBo> products;
  173. /**
  174. * 审批人ID(用于查询某个用户已审批过的报价单)
  175. */
  176. private Long approvedByUserId;
  177. /**
  178. * 排除的状态(用于默认排除已作废的记录)
  179. */
  180. private String excludeStatus;
  181. }