using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; using YLErp.Helpers; namespace YLErp.DBModels { /// /// 框架合约交易要素簿记表 /// [Table("trade_extend")] public class trade_extend { /// /// 交易id 主键 /// [Key,DatabaseGenerated(DatabaseGeneratedOption.None)] [DisplayName("交易id")] [DataChange] public int TradeId { get; set; } /// /// 交易扩展元素JSON /// [DisplayName("交易扩展元素JSON")] [DataChange] public string ExtendJson { get; set; } /// /// 用于公司定制的扩展JSON /// [DisplayName("用于公司定制的扩展JSON")] [DataChange] public string CompanyJson { get; set; } /// /// 交易要素扩展对象 /// [NotMapped] public TradeExtendJson ExtendObj { get { if (string.IsNullOrEmpty(ExtendJson)) { return new TradeExtendJson(); } return JsonConvert.DeserializeObject(ExtendJson); } } public trade_extend Clone() { return (trade_extend)MemberwiseClone(); } } /// /// 交易要素扩展Json /// public class TradeExtendJson { /// /// 流水簿记模式 0:否,1:先进先出,2:加权平均 /// public int FlowBookMode { get; set; } /// /// 浮动收益年化 /// public bool FloatingPnlAnnualized { get; set; } /// /// 是否收取开仓费 /// public bool NeedOpenFee { get; set; } /// /// 收费类型 0:按手数收费,1:按份数收费 /// public int OpenFeeType { get; set; } /// /// 年化天数 /// public int AnnualDays { get; set; } = 365; /// /// 计息方式 00:不算头不算尾,01:不算头算尾,10:算头不算尾,11:算头算尾,缺省值:11 /// public string InterestCalcMode { get; set; } = "11"; /// 算头:InterestCalcMode 首位为 1;null/缺省视为算头。收口原 GetInterests/InitInterestDate/EOD三处 StartsWith 解析。 [JsonIgnore] public bool CalcFirst => InterestCalcMode?.StartsWith("1") ?? true; /// 算尾:InterestCalcMode 末位为 1;null/缺省视为算尾(EQD-6968 取价依赖判定的核心开关之一)。 [JsonIgnore] public bool CalcLast => InterestCalcMode?.EndsWith("1") ?? true; /// /// 是否罚息(EQD-6977):提前终止平仓时利息端按持有至到期计息的簿记默认值。 /// 平仓页默认带出此值、可修改,以平仓时选择为准(当次选择经 UnwindData.IsPenaltyInterest 走请求,不回写)。 /// 存量 JSON 无此键 → 反序列化默认 false("否"),零回填。 /// public bool IsPenaltyInterest { get; set; } /// ///多空组合浮动端 收取方向 1:收取,2:支付 /// public int Direction { get; set; } /// /// 结算规则 0 T+0 1 T+1 /// public int SettlementRules { get; set; } = 0; /// /// 派息金额支付日 0到期结算日 1派息日+0 2派息日+1 3派息日+2 /// public int DividendPayDate { get; set; } = 1; } }