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; }
}
}