package org.dromara.crm.domain; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.tenant.core.TenantEntity; import java.io.Serial; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; /** * CRM合同对象 crm_contract * * @author AI Assistant * @date 2025-10-04 */ @Data @EqualsAndHashCode(callSuper = true) @TableName("crm_contract") public class CrmContract extends TenantEntity { @Serial private static final long serialVersionUID = 1L; /** * 主键ID */ @TableId(value = "id", type = IdType.ASSIGN_ID) private Long id; /** * 合同编号(SX/X-JT+yyyyMMdd+3位流水号,示例:SX/X-JT20250926002) */ private String contractNo; /** * 合同名称 */ private String contractName; /** * 客户ID */ private Long customerId; /** * 客户名称(冗余字段) */ private String customerName; /** * 商机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; /** * 联系人姓名(冗余字段) */ private String contactName; /** * 联系人手机(冗余字段) */ private String contactMobile; /** * 合同类型(sale-销售合同/service-服务合同/lease-租赁合同/other-其他) */ private String contractType; /** * 合同性质(new-新签/renewal-续签/change-变更) */ private String contractNature; /** * 合同金额 */ private BigDecimal amount; /** * 币种(CNY-人民币/USD-美元/EUR-欧元) */ private String currency; /** * 税率(%) */ private BigDecimal taxRate; /** * 含税金额 */ private BigDecimal amountWithTax; /** * 签订日期 */ private LocalDate signDate; /** * 实际签订日期 */ private LocalDate actualSignDate; /** * 开始日期 */ private LocalDate startDate; /** * 结束日期 */ private LocalDate endDate; /** * 合同期限(月) */ private Integer contractPeriod; /** * 合同状态(draft-草稿/approving-审批中/approved-已审批/executing-执行中/finished-已完成/invalid-已作废) */ private String status; /** * 履约状态(normal-正常/delayed-延期/abnormal-异常/completed-已完成) */ private String performanceStatus; /** * 履约完成度(%) */ private BigDecimal performanceRate; /** * 客户满意度(1-5星) */ private Integer customerSatisfaction; /** * 审批状态(pending-待审批/approved-已通过/rejected-已驳回) */ private String approvalStatus; /** * 审批流程ID(关联工作流) */ private Long approvalFlowId; /** * 合同文件路径(扫描件或电子版) */ private String contractFile; /** * 附件文件(多个文件用逗号分隔) */ private String attachmentFiles; /** * 负责人ID */ private Long ownerUserId; /** * 负责人姓名(冗余字段) */ private String ownerUserName; /** * 已回款金额 */ private BigDecimal receivedAmount; /** * 未回款金额 */ private BigDecimal unreceivedAmount; /** * 已开票金额 */ private BigDecimal invoiceAmount; /** * 未开票金额 */ private BigDecimal uninvoiceAmount; /** * 甲方(客户方) */ 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 invalidReason; /** * 作废时间 */ private LocalDateTime invalidTime; /** * 逻辑删除标志(0存在 1删除) */ @TableLogic private Integer delFlag; /** * 版本号 */ @Version private Integer version; /** * 合同模板内容(富文本HTML) */ private String templateContent; /** * 第五条结算方式草稿(按结算方式区分的JSON) */ private String settlementClauseDrafts; /** * 备注 */ private String remark; }