package com.by4cloud.platformx.business.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.by4cloud.platformx.common.data.mybatis.BaseModel; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Table; import jakarta.persistence.Transient; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.util.Date; import java.util.List; /** * @author cd * @description 合同管理 * @date 2026/4/29 10:51 **/ @Data @Entity @Table(name = "contract") @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class Contract extends BaseModel { @Schema(description = "合同编号") @Column(columnDefinition = "VARCHAR(64) comment '合同编号'") private String contractNo; @Schema(description = "合同名称") @Column(columnDefinition = "VARCHAR(200) comment '合同名称'") private String contractName; @Schema(description = "甲方id") @Column(name = "party_a_id",columnDefinition = "bigint comment '甲方id'") private Long partyAId; @Schema(description = "甲方名称") @Column(name = "party_a",columnDefinition = "VARCHAR(100) comment '甲方名称'") private String partyA; @Schema(description = "乙方id") @Column(name = "party_b_id",columnDefinition = "bigint comment '乙方id'") private Long partyBId; @Schema(description = "乙方名称") @Column(name = "party_b",columnDefinition = "VARCHAR(100) comment '乙方名称'") private String partyB; @Schema(description = "合同金额") @Column(columnDefinition = "decimal(10,2) comment '合同金额'") private BigDecimal amount; @Schema(description = "币种(CNY/USD等)") @Column(columnDefinition = "VARCHAR(10) default 'CNY' comment '币种'") private String currency; @Schema(description = "合同类型(0-生成式 1-备案式)") @Column(columnDefinition = "tinyint(2) default 0 comment '合同类型'") private Integer contractType; @Schema(description = "供应属性 0-成品 1-备件 2-大修 3-其他") @Column(columnDefinition = "tinyint(2) default 0 comment '供应属性 0-成品 1-备件 2-大修 3-其他'") private Integer supplyAttribute; @Schema(description = "合同状态(0-草稿 1-已生效 2-已终止 3-已过期)") @Column(columnDefinition = "tinyint(2) default 0 comment '合同状态'") private Integer contractStatus; @Schema(description = "合同服务属性(0-产品销售 1-无形服务)") @Column(columnDefinition = "tinyint(2) default 0 comment '合同服务属性'") private Integer contractAttribute; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "签署日期") @Column(columnDefinition = "date comment '签署日期'") private Date signDate; @Schema(description = "签订地点") @Column(columnDefinition = "VARCHAR(255) comment '签订地点'") private String signPlace; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "生效日期") @Column(columnDefinition = "date comment '生效日期'") private Date effectiveDate; @Schema(description = "交付周期") @Column(columnDefinition = "int default 0 comment '交付周期'") private Integer deliveryCycle; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @Schema(description = "到期日期") @Column(columnDefinition = "date comment '到期日期'") private Date expirationDate; @Schema(description = "合同附件URL") @Column(columnDefinition = "VARCHAR(500) comment '合同附件URL'") private String attachmentUrl; @Schema(description = "备注") @Column(columnDefinition = "TEXT comment '备注'") private String remark; @Schema(description = "关联父合同id(用于合同变更时指向原合同)") @Column(columnDefinition = "bigint comment '关联父合同id'") private Long parentId; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") @JsonFormat(pattern = "yyyy-MM-dd HH:mm") @Schema(description = "审批时间") @Column(columnDefinition = "datetime comment '审批时间'") private Date approveTime; @Schema(description = "到货节点ID") @Column(columnDefinition = "bigint comment '到货节点ID'") private Long arrivalScheduleId; @Schema(description = "验收节点ID") @Column(columnDefinition = "bigint comment '验收节点ID'") private Long acceptScheduleId; @Schema(description = "erp推送标识") @Column(columnDefinition = "char comment 'erp推送标识 0 未推 1 已推'") private String erpPushFlag; @Schema(description = "开票状态") @Column(columnDefinition = "char comment '开票状态 0 不能开票 1 部分可开 2 待开 3 已开'") private String billingStatus; @Schema(description = "已开票金额") @Column(columnDefinition = "decimal(10,2) comment '已开票金额'") private BigDecimal billingAmout; @Schema(description = "下一阶段") @Column(columnDefinition = "VARCHAR(128) comment '下一阶段'") private String nextScheduleName; @Schema(description = "模版ID") @Column(columnDefinition = "bigint comment '模版ID'") private Long templateId; @Schema(description = "销售模式") @Column(columnDefinition = "VARCHAR(16) comment '销售模式 1 按单生产 2 先产后销 3 代储代销'") private String salesModel; @Schema(description = "已付款金额") @Column(columnDefinition = "decimal(10,2) comment '已付款金额'") private BigDecimal paidAmount; @Schema(description = "合同分类") @Column(columnDefinition = "VARCHAR(64) comment '合同分类 water_house 水电房屋租赁'") private String contractCategory; @Schema(description = "执行周期") @Column(columnDefinition = "char comment '执行周期 1/周 2/月 3/季度 4/半年 5/年'") private String execFrequency; @Schema(description = "执行次数") @Column(columnDefinition = "int comment '执行次数'") private Integer execTimes; @Schema(description = "执行日期后多少天生成应收") @Column(columnDefinition = "int comment '执行日期后多少天生成应收'") private Integer execDay; @Schema(description = "环境") @Column(columnDefinition = "VARCHAR(128) comment '环境 一煤机采购合同用'") private String environment; @Schema(description = "标准") @Column(columnDefinition = "VARCHAR(128) comment '标准 一煤机采购合同用'") private String standard; @Schema(description = "质保期 使用月数") @Column(columnDefinition = "decimal(10,0) comment '质保期 使用月数 一煤机采购合同用'") private BigDecimal useMonth; @Schema(description = "质保期 发货后月数") @Column(columnDefinition = "decimal(10,0) comment '质保期 发货后月数 一煤机采购合同用'") private BigDecimal afterShipMonth; @Schema(description = "货运方式") @Column(columnDefinition = "VARCHAR(128) comment '货运方式 一煤机采购合同用'") private String shipMethod; @Schema(description = "货运地址") @Column(columnDefinition = "VARCHAR(128) comment '货运地址 一煤机采购合同用'") private String shipAddress; @Schema(description = "包装") @Column(columnDefinition = "VARCHAR(128) comment '包装 一煤机采购合同用'") private String packaging; @Schema(description = "维修或换货期限") @Column(columnDefinition = "decimal(10,0) comment '维修或换货期限 一煤机采购合同用'") private BigDecimal repairPeriod; @Schema(description = "维修或换货 违约金") @Column(columnDefinition = "decimal(10,2) comment '维修或换货 违约金 一煤机采购合同用'") private BigDecimal repairBreachAmount; @Schema(description = "货物数量不足 补货天数") @Column(columnDefinition = "decimal(10,0) comment '货物数量不足 补货天数 一煤机采购合同用'") private BigDecimal goodsShort; @Schema(description = "货物数量不足 违约金") @Column(columnDefinition = "decimal(10,2) comment '货物数量不足 补货天数 一煤机采购合同用'") private BigDecimal goodsShortBreachAmount; @Schema(description = "每逾期一日,承担本合同总额 违约金") @Column(columnDefinition = "decimal(10,2) comment '每逾期一日,承担本合同总额违约金 补货天数 一煤机采购合同用'") private BigDecimal overdueBreachAmount; @Schema(description = "逾期 日以上的,甲方有权解除合同") @Column(columnDefinition = "decimal(10,0) comment '逾期 日以上的,甲方有权解除合同 一煤机采购合同用'") private BigDecimal terminateContract; @Schema(description = "双方均可向 人民法院") @Column(columnDefinition = "VARCHAR(128) comment '双方均可向 人民法院 一煤机采购合同用'") private String court; @Schema(description = "本合同附件包括:") @Column(columnDefinition = "VARCHAR(128) comment '本合同附件包括: 一煤机采购合同用'") private String contractAttchment; @Schema(description = "合同签订市") @Column(columnDefinition = "VARCHAR(128) comment '合同签订市 一煤机采购合同用'") private String city; @Schema(description = "合同签订区") @Column(columnDefinition = "VARCHAR(128) comment '合同签订区 一煤机采购合同用'") private String region; @Schema(description = "开票通知在 个工作日内") @Column(columnDefinition = "decimal(10,0) comment '开票通知在 个工作日内 一煤机采购合同用'") private BigDecimal invoiceNotice; @Schema(description = "合同总价税率") @Column(columnDefinition = "decimal(10,2) comment '开票通知在 个工作日内 一煤机采购合同用'") private BigDecimal contractTax; }