| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- 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.CrmContractProduct;
- import java.math.BigDecimal;
- import java.time.LocalDate;
- import java.util.List;
- /**
- * CRM合同产品明细业务对象 crm_contract_product
- *
- * @author AI Assistant
- * @date 2025-10-04
- */
- @Data
- @EqualsAndHashCode(callSuper = true)
- @AutoMapper(target = CrmContractProduct.class, reverseConvertGenerate = false)
- public class CrmContractProductBo extends BaseEntity {
- /**
- * 主键ID
- * 注意:编辑合同时,后端会先删除所有旧产品再重新插入,所以不需要校验id
- */
- private Long id;
- /**
- * 合同ID - 新增时由后端自动填充,编辑时也会自动填充
- */
- private Long contractId;
- /**
- * 产品ID(保存合同时可为空,后端会按产品属性自动匹配或新增后回填)
- */
- private Long productId;
- /**
- * 数量
- */
- @NotNull(message = "数量不能为空", groups = { AddGroup.class, EditGroup.class })
- @DecimalMin(value = "0.01", message = "数量必须大于0")
- private BigDecimal quantity;
- /**
- * 单价(框架合同固定为0,由业务层按合同类型校验)
- */
- @NotNull(message = "单价不能为空", groups = { AddGroup.class, EditGroup.class })
- @DecimalMin(value = "0", message = "单价不能为负数")
- private BigDecimal price;
- /**
- * 折扣(百分比)
- */
- @DecimalMin(value = "0", message = "折扣不能小于0")
- @DecimalMax(value = "100", message = "折扣不能大于100")
- private BigDecimal discount;
- /**
- * 税率(%)
- */
- @DecimalMin(value = "0", message = "税率不能小于0")
- @DecimalMax(value = "100", message = "税率不能大于100")
- private BigDecimal taxRate;
- /**
- * 税费金额
- */
- private BigDecimal taxAmount;
- /**
- * 交付日期
- */
- private LocalDate deliveryDate;
- /**
- * 已交付数量
- */
- private Integer deliveredQuantity;
- /**
- * 交付状态(pending-待交付/partial-部分交付/delivered-已交付)
- */
- private String deliveryStatus;
- /**
- * 产品描述
- */
- private String description;
- /**
- * 包装规格
- */
- private String packageSpec;
- /**
- * 送货方式
- */
- private String deliveryMethod;
- /**
- * 排序号
- */
- private Integer sort;
- /**
- * 备注
- */
- private String remark;
- // 查询和显示字段
- private String productName; // 产品名称
- private String productNo; // 产品编号
- private Long categoryId; // 产品分类ID
- private String categoryName; // 产品分类名称
- private String model; // 产品型号
- private String unit; // 计量单位
- private BigDecimal subtotal; // 小计金额
- /**
- * 框架合同:调价区间(不落库到产品表,单独表保存)
- */
- private List<CrmContractProductPriceTierBo> priceTiers;
- }
|