CrmContractProductBo.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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.CrmContractProduct;
  10. import java.math.BigDecimal;
  11. import java.time.LocalDate;
  12. import java.util.List;
  13. /**
  14. * CRM合同产品明细业务对象 crm_contract_product
  15. *
  16. * @author AI Assistant
  17. * @date 2025-10-04
  18. */
  19. @Data
  20. @EqualsAndHashCode(callSuper = true)
  21. @AutoMapper(target = CrmContractProduct.class, reverseConvertGenerate = false)
  22. public class CrmContractProductBo extends BaseEntity {
  23. /**
  24. * 主键ID
  25. * 注意:编辑合同时,后端会先删除所有旧产品再重新插入,所以不需要校验id
  26. */
  27. private Long id;
  28. /**
  29. * 合同ID - 新增时由后端自动填充,编辑时也会自动填充
  30. */
  31. private Long contractId;
  32. /**
  33. * 产品ID(保存合同时可为空,后端会按产品属性自动匹配或新增后回填)
  34. */
  35. private Long productId;
  36. /**
  37. * 数量
  38. */
  39. @NotNull(message = "数量不能为空", groups = { AddGroup.class, EditGroup.class })
  40. @DecimalMin(value = "0.01", message = "数量必须大于0")
  41. private BigDecimal quantity;
  42. /**
  43. * 单价(框架合同固定为0,由业务层按合同类型校验)
  44. */
  45. @NotNull(message = "单价不能为空", groups = { AddGroup.class, EditGroup.class })
  46. @DecimalMin(value = "0", message = "单价不能为负数")
  47. private BigDecimal price;
  48. /**
  49. * 折扣(百分比)
  50. */
  51. @DecimalMin(value = "0", message = "折扣不能小于0")
  52. @DecimalMax(value = "100", message = "折扣不能大于100")
  53. private BigDecimal discount;
  54. /**
  55. * 税率(%)
  56. */
  57. @DecimalMin(value = "0", message = "税率不能小于0")
  58. @DecimalMax(value = "100", message = "税率不能大于100")
  59. private BigDecimal taxRate;
  60. /**
  61. * 税费金额
  62. */
  63. private BigDecimal taxAmount;
  64. /**
  65. * 交付日期
  66. */
  67. private LocalDate deliveryDate;
  68. /**
  69. * 已交付数量
  70. */
  71. private Integer deliveredQuantity;
  72. /**
  73. * 交付状态(pending-待交付/partial-部分交付/delivered-已交付)
  74. */
  75. private String deliveryStatus;
  76. /**
  77. * 产品描述
  78. */
  79. private String description;
  80. /**
  81. * 包装规格
  82. */
  83. private String packageSpec;
  84. /**
  85. * 送货方式
  86. */
  87. private String deliveryMethod;
  88. /**
  89. * 排序号
  90. */
  91. private Integer sort;
  92. /**
  93. * 备注
  94. */
  95. private String remark;
  96. // 查询和显示字段
  97. private String productName; // 产品名称
  98. private String productNo; // 产品编号
  99. private Long categoryId; // 产品分类ID
  100. private String categoryName; // 产品分类名称
  101. private String model; // 产品型号
  102. private String unit; // 计量单位
  103. private BigDecimal subtotal; // 小计金额
  104. /**
  105. * 框架合同:调价区间(不落库到产品表,单独表保存)
  106. */
  107. private List<CrmContractProductPriceTierBo> priceTiers;
  108. }