Files
zszq-trs/Framework/YLErp.Core/DBModels/TradeExtend.cs
T
hjhan 0418d9f3d3 refactor(swap): InterestCalcMode 算头算尾解析收口至 TradeExtendJson.CalcFirst/CalcLast
三处重复的 StartsWith/EndsWith 字符串解析(GetInterests / InitInterestDate /
SwapEodPositionService EOD平仓后结息)收口为 TradeExtendJson 计算属性:
- [JsonIgnore] 保证 ExtendJson 序列化字节不变;
- InitInterestDate 原写法在 InterestCalcMode 为显式 null 时会 NRE,
  收口后与其他两处 null-安全语义对齐(缺省=算头算尾,实际不可达,属性缺省 11)。
EQD-6968 三判定之一的"算不算尾"至此单点可查。

验证:内存套件 102/102 全绿(GLMS20260817Fr007 23 + Cache 7 + CloseInterest/
InterestScenario/TailSnapshot/EntrySemantics 72)
2026-08-19 09:31:38 +08:00

117 lines
3.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
{
/// <summary>
/// 框架合约交易要素簿记表
/// </summary>
[Table("trade_extend")]
public class trade_extend
{
/// <summary>
/// 交易id 主键
/// </summary>
[Key,DatabaseGenerated(DatabaseGeneratedOption.None)]
[DisplayName("交易id")]
[DataChange]
public int TradeId { get; set; }
/// <summary>
/// 交易扩展元素JSON
/// </summary>
[DisplayName("交易扩展元素JSON")]
[DataChange]
public string ExtendJson { get; set; }
/// <summary>
/// 用于公司定制的扩展JSON
/// </summary>
[DisplayName("用于公司定制的扩展JSON")]
[DataChange]
public string CompanyJson { get; set; }
/// <summary>
/// 交易要素扩展对象
/// </summary>
[NotMapped]
public TradeExtendJson ExtendObj
{
get
{
if (string.IsNullOrEmpty(ExtendJson))
{
return new TradeExtendJson();
}
return JsonConvert.DeserializeObject<TradeExtendJson>(ExtendJson);
}
}
public trade_extend Clone()
{
return (trade_extend)MemberwiseClone();
}
}
/// <summary>
/// 交易要素扩展Json
/// </summary>
public class TradeExtendJson
{
/// <summary>
/// 流水簿记模式 0:否,1:先进先出,2:加权平均
/// </summary>
public int FlowBookMode { get; set; }
/// <summary>
/// 浮动收益年化
/// </summary>
public bool FloatingPnlAnnualized { get; set; }
/// <summary>
/// 是否收取开仓费
/// </summary>
public bool NeedOpenFee { get; set; }
/// <summary>
/// 收费类型 0:按手数收费,1:按份数收费
/// </summary>
public int OpenFeeType { get; set; }
/// <summary>
/// 年化天数
/// </summary>
public int AnnualDays { get; set; } = 365;
/// <summary>
/// 计息方式 00:不算头不算尾,01:不算头算尾,10:算头不算尾,11:算头算尾,缺省值:11
/// </summary>
public string InterestCalcMode { get; set; } = "11";
/// <summary>算头:InterestCalcMode 首位为 1null/缺省视为算头。收口原 GetInterests/InitInterestDate/EOD三处 StartsWith 解析。</summary>
[JsonIgnore]
public bool CalcFirst => InterestCalcMode?.StartsWith("1") ?? true;
/// <summary>算尾:InterestCalcMode 末位为 1null/缺省视为算尾(EQD-6968 取价依赖判定的核心开关之一)。</summary>
[JsonIgnore]
public bool CalcLast => InterestCalcMode?.EndsWith("1") ?? true;
/// <summary>
///多空组合浮动端 收取方向 1:收取,2:支付
/// </summary>
public int Direction { get; set; }
/// <summary>
/// 结算规则 0 T+0 1 T+1
/// </summary>
public int SettlementRules { get; set; } = 0;
/// <summary>
/// 派息金额支付日 0到期结算日 1派息日+0 2派息日+1 3派息日+2
/// </summary>
public int DividendPayDate { get; set; } = 1;
}
}