using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Serialization; using YLErp.Helpers; using YLErp.Modules.SuperviseReportModule.SAC.Common; using static YLErp.DBModels.Consts.ConsReport; namespace YLErp.Modules.SuperviseReportModule.SAC.Model { [XmlRoot(ElementName = "Root", IsNullable = false)] public class ReportRootModel { /// /// 报头 /// [SacDescription("Header", "报头", "", false, "")] public HeaderModel Header { get; set; } /// /// 报文内容 /// [SacDescription("Body", "报文内容", "", false, "")] public BodyModel Body { get; set; } /// /// 文件名 /// [XmlIgnore] [DefaultValue("")] [SacDescription("FileTag", "文件名", "", false, "")] public string FileTag { get { return Header == null ? "" : $"OTC_{Header.SenderCode}_{Header.ReceiverCode}_{Header.SendDate.Replace("-", "")}_{Header.FileNumber}_{Header.BusiDataType}_{Header.OperationType}"; } } /// /// 附件 /// [XmlIgnore] [SacDescription("Annex", "附件", "", false, "")] public List Annex { get; set; } private string _xmlStr; /// /// Xml /// [XmlIgnore] [DefaultValue("")] [SacDescription("XmlStr", "Xml", "", false, "")] public string XmlStr { get { return _xmlStr; } set { _xmlStr = check(value); } } private string check(string xml) { var result = xml; switch (this.Header.BusiDataType) { case DataFlagsEnum.A1016: try { var doc = new System.Xml.XmlDocument(); doc.LoadXml(xml); var body = doc.GetElementsByTagName("SwapEquityPayment"); if (body.Count > 0) { foreach (XmlElement item in body) { var target = item.GetElementsByTagName("DurationEventNO"); var frist = item.GetElementsByTagName("SwapEquityPaymentTuple"); if (target.Count > 0) { item.InsertAfter(target[0], frist[frist.Count - 1]); } } result = XmlHelper.FormatXml(doc.OuterXml); } } #pragma warning disable CS0168 // 声明了变量“ex”,但从未使用过 catch (Exception ex) #pragma warning restore CS0168 // 声明了变量“ex”,但从未使用过 { } break; case DataFlagsEnum.A1004: if (result.Contains("")) { result = result.Replace("", ""); } break; } return result; } } /// /// 请求/应答报文Header模型 /// public class HeaderModel { /// /// 版本号 /// 长度:3 /// 必填:是 /// 说明: /// [SacDescription("Version", "版本号", "3", true, "")] public string Version { get => "001"; set { } } /// /// 文件创建人代码 /// 长度:6 /// 必填:是 /// 说明:报告库分配 /// [CheckStringLength(Length = 6)] [DefaultValue("")] [SacDescription("SenderCode", "文件创建人代码", "6", true, "报告库分配;")] public string SenderCode { get; set; } /// /// 文件接收人代码 /// 长度:6 /// 必填:是 /// 说明:报告库分配 /// [CheckStringLength(Length = 6)] [DefaultValue("")] [SacDescription("ReceiverCode", "文件接收人代码", "6", true, "报告库分配;")] public string ReceiverCode { get; set; } /// /// 报告类型代码 /// 长度:3 /// 必填:是 /// 说明:衍生品业务填写:YSP /// [XmlIgnore] [SacDescription("ReportType", "报告类型代码", "3", true, "衍生品业务填写:YSP;")] public string ReportType { get => "YSP"; } /// /// 文件发送日期 /// 长度:10 /// 必填:是 /// 说明:校验规则:必须是yyyy-MM-dd /// [CheckStringMaxLength(MaxLength = 10, Required = false)] [CheckStringIsDateTimeFormat] [DefaultValue("")] [SacDescription("SendDate", "文件发送日期", "10", true, "校验规则:必须是yyyy-MM-dd;")] public string SendDate { get; set; } /// /// 文件序号 /// 长度:4 /// 必填:是 /// 说明:0001~9999 /// [CheckStringLength(Length = 4)] [DefaultValue("")] [SacDescription("FileNumber", "文件序号", "4", true, "0001~9999;")] public string FileNumber { get; set; } /// /// 接口标识 /// 长度:5 /// 必填:是 /// 说明: /// [CheckStringInMap(Map = new[] { "A1001", "A1002","A1003","A1004", "A1005", "A1006" ,"A1007", "A1008", "A1009","A1010", "A1011", "A1012","A1013","A1014","A1015","A1016","A1017","A1018","A1019" })] [SacDescription("BusiDataType", "接口标识", "5", true, "")] public DataFlagsEnum BusiDataType { get; set; } /// /// 操作标识 /// 长度:1 /// 必填:是 /// 说明: /// [CheckStringInMap(Map = new[] { "A", "U", "D" })] [DefaultValue("")] [SacDescription("OperationType", "操作标识", "1", true, "")] public string OperationType { get; set; } /// /// 响应码 /// 长度:6 /// 必填:是 /// 说明:报送时该字段应为Null /// [XmlElement(IsNullable = false)] [DefaultValue("")] [SacDescription("RetCode", "响应码", "6", true, "报送时该字段应为Null;")] public string RetCode { get; set; } /// /// 响应描述 /// 长度:1000 /// 必填:是 /// 说明:报送时该字段应为Null /// [XmlElement(IsNullable = false)] [DefaultValue("")] [SacDescription("RetMsg", "响应描述", "1000", true, "报送时该字段应为Null;")] public string RetMsg { get; set; } } public class BodyModel { /// /// 主协议信息 /// [XmlElement] [SacDescription("MasterAgrmt", "主协议信息", "", false, "")] public List MasterAgrmt { get; set; } /// /// 主协议关联产品列表 /// [XmlElement] [SacDescription("MasterAgrmtProduct", "主协议关联产品列表", "", false, "")] public List MasterAgrmtProduct { get; set; } /// /// 补充协议列表 /// [XmlElement] [SacDescription("SupAgrmt", "补充协议列表", "", false, "")] public List SupAgrmt { get; set; } /// /// 履约担保协议 /// [XmlElement] [SacDescription("PerformanceGuaranteeAgrmt", "履约担保协议", "", false, "")] public List PerformanceGuaranteeAgrmt { get; set; } /// /// 期权交易确认书列表 /// [XmlElement] [SacDescription("OptionConfirmation", "期权交易确认书列表", "", false, "")] public List OptionConfirmation { get; set; } /// /// 互换交易确认书列表 /// [XmlElement] [SacDescription("SwapConfirmation", "互换交易确认书列表", "", false, "")] public List SwapConfirmation { get; set; } /// /// 收益互换交易权益端支付 /// [XmlElement] [SacDescription("SwapEquityPayment", "收益互换交易权益端支付", "", false, "")] public List SwapEquityPayment { get; set; } /// /// 交易确认书附件 /// [XmlElement] [SacDescription("ConfirmationAtt", "交易确认书附件", "", false, "")] public List ConfirmationAtt { get; set; } /// /// 期权交易存续期管理 /// [XmlElement] [SacDescription("OptionTermination", "期权交易存续期管理", "", false, "")] public List OptionTermination { get; set; } /// /// 收益互换交易存续期管理 /// [XmlElement] [SacDescription("SwapDurationManagement", "收益互换交易存续期管理", "", false, "")] public List SwapDurationManagement { get; set; } /// /// 场外期权合约估值信息 /// [XmlElement] [SacDescription("ValuationInformation", "场外期权合约估值信息", "", false, "")] public List ValuationInformation { get; set; } /// /// 定期报告-SAC模板 /// [XmlElement] [SacDescription("PeriodicReportSAC", "SAC定期报告", "", false, "")] public PeriodicReportSACModel PeriodicReportSAC { get; set; } /// /// 定期报告-NAFMII模板 /// [XmlElement] [SacDescription("PeriodicReportNAFMII", "NAFMII定期报告", "", false, "")] public PeriodicReportNAFMIIModel PeriodicReportNAFMII { get; set; } /// /// 定期报告-ISDA模板 /// [XmlElement] [SacDescription("PeriodicReportISDA", "ISDA定期报告", "", false, "")] public PeriodicReportISDAModel PeriodicReportISDA { get; set; } /// /// 重大事项报告 /// [XmlElement] [SacDescription("EventReport", "重大事项报告", "", false, "")] public EventReportModel EventReport { get; set; } /// /// 其他事项报告 /// [XmlElement] [SacDescription("OtherReport", "其他事项报告", "", false, "")] public OtherReportModel OtherReport { get; set; } /// /// 季度报告/半年报 /// [XmlElement] [SacDescription("PeriodicReportQuarter", "季度报告/半年报", "", false, "")] public PeriodicReportQuarterModel PeriodicReportQuarter { get; set; } /// /// 双方约定编号数据处理 /// [XmlElement] [SacDescription("ContractNumberProcess", "双方约定编号数据处理", "", false, "")] public ContractNumberProcessModel ContractNumberProcess { get; set; } } }