package com.ecep.contract.model;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.proxy.HibernateProxy;
import com.ecep.contract.ContractPayWay;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.Lob;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.Version;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* 合同类
*/
@Getter
@Setter
@Entity
@Table(name = "CONTRACT", schema = "supplier_ms")
@ToString
public class Contract implements IdentityEntity, NamedEntity, BasedEntity, CompanyBasedEntity, Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Integer id;
/**
* GUID,合同在U8系统中的唯一标识
*/
@Column(name = "GUID")
private String guid;
@Column(name = "PAY_WAY")
@Enumerated(EnumType.ORDINAL)
private ContractPayWay payWay;
/**
* 合同编号,合同编号由录入员在U8系统中录入,同步导入,合同编号规则参考制度文件
*/
@Column(name = "CODE")
private String code;
/**
* 合同名称,合同名称由录入员在U8系统中录入,同步导入
*/
@Column(name = "NAME")
private String name;
/**
* 合同状态,U8 系统中的合同状态,目前含义未知
*
* 各个状态值的统计情况如下,数据样本日期:2025-02-08
* | State | Count |
* | null | 3891 |
* | A | 9 |
* | B | 6499 |
* | C | 79 |
*
*/
@Column(name = "STATE")
private String state;
/**
* 合同分组
*/
// @ManyToOne(fetch = FetchType.EAGER)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "GROUP_ID")
private ContractGroup group;
/**
* 分类
*/
// @ManyToOne(fetch = FetchType.EAGER)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TYPE_ID")
private ContractType type;
/**
* 性质
*/
// @ManyToOne(fetch = FetchType.EAGER)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "KIND_ID")
private ContractKind kind;
/**
* 主合同编号,一般未销售合同,子合同未采购合同(服务合同、分包合同)
*/
@Column(name = "PARENT_CODE")
private String parentCode;
/**
* 签订日期
*/
@Column(name = "ORDER_DATE")
private LocalDate orderDate;
/**
* 合同起始日期
*/
@Column(name = "START_DATE")
private LocalDate startDate;
/**
* 合同截止日期
*/
@Column(name = "END_DATE")
private LocalDate endDate;
/**
* 创建人
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SETUP_PERSON_ID")
@ToString.Exclude
private Employee setupPerson;
/**
* 提交日期
*/
@Column(name = "SETUP_DATE")
private LocalDate setupDate;
/**
* 生效人
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "INURE_PERSON_ID")
@ToString.Exclude
private Employee inurePerson;
/**
* 生效日期
*/
@Column(name = "INURE_DATE")
private LocalDate inureDate;
/**
* 修改人
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "VARY_PERSON_ID")
@ToString.Exclude
private Employee varyPerson;
@Column(name = "VARY_DATE")
private LocalDate varyDate;
/**
* 文件夹路径
*/
@Column(name = "PATH")
private String path;
@Lob
@Column(name = "DESCRIPTION", columnDefinition = "TEXT")
private String description;
/**
* 创建时间
*/
@Column(name = "CREATED")
private LocalDateTime created;
/**
* 所属公司
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "COMPANY_ID")
@ToString.Exclude
private Company company;
/**
* 业务员
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "BM_EMPLOYEE_ID")
@ToString.Exclude
private Employee employee;
/**
* 经办人
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "BM_HANDLER_ID")
@ToString.Exclude
private Employee handler;
/**
* 关联项目
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PROJECT_ID")
@ToString.Exclude
private Project project;
/**
* 合同金额
*/
@Column(name = "AMOUNT")
private Double amount;
/**
* 是否标准付款方式
*/
@ColumnDefault("0")
@Column(name = "STANDARD_PAY_WAY", nullable = false)
private boolean standardPayWay;
/**
* 是否标准合同文本
*/
@ColumnDefault("0")
@Column(name = "STANDARD_CONTRACT_TEXT", nullable = false)
private boolean standardPContractText;
@Version
@ColumnDefault("0")
@Column(name = "VERSION", nullable = false)
private int version;
/**
* 总数量
*/
@Column(name = "TOTAL_QUANTITY")
private double totalQuantity;
/**
* 总金额
*/
@Column(name = "TOTAL_AMOUNT")
private double totalAmount;
/**
* 总不含税金额
*/
@Column(name = "TOTAL_UNTAX_AMOUNT")
private double totalUnTaxAmount;
/**
* 已经执行数量
*/
@Column(name = "EXEC_QUANTITY")
private double execQuantity;
/**
* 已经执行金额
*/
@Column(name = "EXEC_AMOUNT")
private double execAmount;
/**
* 已经执行不含税金额
*/
@Column(name = "EXEC_UNTAX_AMOUNT")
private double execUnTaxAmount;
@Override
public String toPrettyString() {
return getCode() + " " + getName();
}
@Override
public final boolean equals(Object object) {
if (this == object) return true;
if (object == null) return false;
Class> oEffectiveClass = object instanceof HibernateProxy ? ((HibernateProxy) object).getHibernateLazyInitializer().getPersistentClass() : object.getClass();
Class> thisEffectiveClass = this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass() : this.getClass();
if (thisEffectiveClass != oEffectiveClass) return false;
Contract contract = (Contract) object;
return getId() != null && Objects.equals(getId(), contract.getId());
}
@Override
public final int hashCode() {
return this instanceof HibernateProxy ? ((HibernateProxy) this).getHibernateLazyInitializer().getPersistentClass().hashCode() : getClass().hashCode();
}
}