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

348 lines
6.8 KiB
Java

package org.dromara.crm.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.Valid;
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.CrmContract;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* CRM合同业务对象 crm_contract
*
* @author AI Assistant
* @date 2025-10-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = CrmContract.class, reverseConvertGenerate = false)
public class CrmContractBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
private Long id;
/**
* 合同编号(CON+yyyyMMdd+4位流水号) - 新增时系统自动生成
*/
@NotBlank(message = "合同编号不能为空", groups = { EditGroup.class })
private String contractNo;
/**
* 合同名称(可不填,系统自动生成)
*/
private String contractName;
/**
* 客户ID
*/
@NotNull(message = "客户ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long customerId;
/**
* 商机ID
*/
private Long opportunityId;
/**
* 报价单ID
*/
private Long quoteId;
/**
* 原合同ID(续签时关联)
*/
private Long parentContractId;
/**
* 续签次数
*/
private Integer renewalCount;
/**
* 合同模板ID
*/
private Long templateId;
/**
* 合同模版(shanxia-山峡模版/customer-客户模版)
*/
private String contractTemplate;
/**
* 联系人ID
*/
private Long contactId;
/**
* 合同类型(sale-销售合同/service-服务合同/lease-租赁合同/other-其他)
*/
@NotBlank(message = "合同类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String contractType;
/**
* 合同性质(new-新签/renewal-续签/change-变更)
*/
private String contractNature;
/**
* 合同金额
*/
@NotNull(message = "合同金额不能为空", groups = { AddGroup.class, EditGroup.class })
@DecimalMin(value = "0", message = "合同金额不能为负数")
private BigDecimal amount;
/**
* 币种(CNY-人民币/USD-美元/EUR-欧元)
*/
private String currency;
/**
* 税率(%)
*/
private BigDecimal taxRate;
/**
* 含税金额
*/
private BigDecimal amountWithTax;
/**
* 签订日期
*/
private LocalDate signDate;
/**
* 签订日期开始
*/
private String signDateBegin;
/**
* 签订日期结束
*/
private String signDateEnd;
/**
* 实际签订日期
*/
private LocalDate actualSignDate;
/**
* 开始日期
*/
private LocalDate startDate;
/**
* 结束日期
*/
private LocalDate endDate;
/**
* 合同期限(月)
*/
private Integer contractPeriod;
/**
* 履约状态(normal-正常/delayed-延期/abnormal-异常/completed-已完成)
*/
private String performanceStatus;
/**
* 履约完成度(%)
*/
private BigDecimal performanceRate;
/**
* 客户满意度(1-5星)
*/
@Min(value = 1, message = "客户满意度最小值为1")
@Max(value = 5, message = "客户满意度最大值为5")
private Integer customerSatisfaction;
/**
* 负责人ID
*/
private Long ownerUserId;
/**
* 甲方(客户方)
*/
private String partyA;
/**
* 甲方地址
*/
private String partyAAddress;
/**
* 甲方联系人
*/
private String partyAContact;
/**
* 甲方联系电话
*/
private String partyAMobile;
/**
* 甲方法定代表人
*/
private String partyALegalPerson;
/**
* 甲方代理人
*/
private String partyAAgent;
/**
* 甲方电话/传真
*/
private String partyAPhoneFax;
/**
* 甲方开户银行
*/
private String partyABank;
/**
* 甲方银行账号
*/
private String partyAAccount;
/**
* 供方主体ID(关联crm_supplier_info表)
*/
private Long supplierId;
/**
* 结算方式(arrive_payment-货到付款/advance_payment-款到发货)
*/
private String settlementMethod;
/**
* 乙方(我方)
*/
private String partyB;
/**
* 乙方地址
*/
private String partyBAddress;
/**
* 乙方联系人
*/
private String partyBContact;
/**
* 乙方联系电话
*/
private String partyBMobile;
/**
* 乙方法定代表人
*/
private String partyBLegalPerson;
/**
* 乙方代理人
*/
private String partyBAgent;
/**
* 乙方电话/传真
*/
private String partyBPhoneFax;
/**
* 乙方开户银行
*/
private String partyBBank;
/**
* 乙方银行账号
*/
private String partyBAccount;
/**
* 付款条款
*/
private String paymentTerms;
/**
* 交付条款
*/
private String deliveryTerms;
/**
* 合同条款
*/
private String contractTerms;
/**
* 合同文件路径(扫描件或电子版)
*/
private String contractFile;
/**
* 附件文件(多个文件用逗号分隔)
*/
private String attachmentFiles;
/**
* 产品列表(销售合同和采购合同必填,其他合同类型可选)
*/
@Valid
private List<CrmContractProductBo> products;
/**
* 回款计划列表
*/
@Valid
private List<CrmPaymentPlanBo> paymentPlans;
/**
* 作废原因
*/
private String invalidReason;
/**
* 审批人ID列表
*/
private List<Long> approverIds;
/**
* 合同模板内容(富文本HTML)
*/
private String templateContent;
/**
* 第五条结算方式草稿(按结算方式区分的JSON)
*/
private String settlementClauseDrafts;
/**
* 备注
*/
private String remark;
// 查询条件字段
private String customerName; // 客户名称
private String contactName; // 联系人名称
private String ownerUserName; // 负责人姓名
private String status; // 合同状态
private String approvalStatus; // 审批状态
private Long approvedByUserId; // 审批人ID(用于查询某个用户已审批过的合同)
private Long pendingApprovalUserId; // 待审批人ID(用于查询某个用户待审批的合同)
private String excludeStatus; // 排除的状态(用于默认排除已作废的记录)
}