using Newtonsoft.Json; using System.ComponentModel.DataAnnotations.Schema; using YLErp.Commons; using YLErp.DBModels.Attributes; using YLErp.DBModels.Enums; using YLErp.DBModels.Helpers; using YLErp.Enums; using YLErp.Helpers; using YLErp.Models; namespace YLErp.DBModels { /// /// 这个类做为Trade表基础类 /// 不要添加NotMapped属性 /// 可以添加属性转换方法 /// public class OtcTradeBase : DBModelBase, IDBModelWithCreator { [DisplayName("结构类型")] [TradeAuditChangeMsg] [DataChange] public string TradeType { get => tradeType; set => tradeType = value ?? ""; } /// /// 交易本身的对冲波动率 /// [DisplayName("对冲波动率")] [DataChange] public double? TradeSavedVol { get; set; } /// /// 创建人ID /// [DisplayName("操作人")] public int? CreatorId { set; get; } /// /// 创建人名称 /// [DisplayName("操作人")] public string CreatorName { set; get; } [DisplayName("创建时间")] [DataChange(true)] public DateTime? CreateDate { get; set; } /// /// 匹配的交易 /// public string PairTrade { get => pairTrade; set => pairTrade = value ?? ""; } //[DisplayName("修改记录")] //[TradeAuditExclude] //public string ChangeMsg //{ // get => changeMsg; // set => changeMsg = value ?? ""; //} /// /// 单份 期权价格 /// [DisplayName("权利金"), TradeAuditChangeMsg] [DataChange] public double? TradeSinglePrice { get; set; } [DisplayName("组信息")] public int? GroupId { get; set; } [DisplayName("组名")] public string GroupName { get => groupName; set => groupName = value ?? ""; } [DisplayName("平滑过渡天数"), TradeAuditChangeMsg] [DataChange] public int? NumOfSmoothingDays { get; set; } [DisplayName("结构化交易父ID")] public int ParentTradeId { get; set; } [DisplayName("目标波动率"), TradeAuditChangeMsg] [DataChange] public double? TradeCloseVolatility { get; set; } [DisplayName("成交波动率"), TradeAuditChangeMsg] [DataChange] public double? TradeOpenVolatility { get; set; } /// /// 平仓/执行 到期日期 /// [DisplayName("平仓/执行日期")] public DateTime? UnWindDate { get; set; } [DisplayName("平仓份额")] public double? UnWindNotional { get; set; } /// /// 1代表开仓已复核 /// 2代表平仓已复核 /// 3代表行权已复核 /// 0代表待复核 /// [TradeAuditExclude] [DataChange(true)] public int? CheckStatus { get; set; } [TradeAuditExclude] [DataChange(true)] public int? CheckTradeUpdate { get; set; } private double? originalStockEqvNotional; private string tradeType; private string pairTrade; private string groupName; private string tradeUnit; /// /// 期权标的期初价格 /// [NotMapped] public double? InitialSpotPrice { get => SpotPrice; set => SpotPrice = value; } [DisplayName("相对行权价"), TradeAuditChangeMsg] [DataChange] public string IsMoneynessOption { get; set; } /// /// 该字段显示的是交易的最新数量,和TradeOriginalAmount的差别在于部分平仓时,需要减掉已部分平仓部分数据 /// [DisplayName("持仓数量"), TradeAuditChangeMsg] [DataChange] public double TradeAmount { get; set; } /// /// 关联varity表的冗余字段 /// 这个字段没啥用处,需要删掉 /// [DisplayName("交易单位")] [TradeAuditExclude] [DataChange(true)] public string TradeUnit { get => tradeUnit; set => tradeUnit = value ?? ""; } /// /// 名义本金 /// 远期 掉期 基差价差 名义本金 取 最大 /// [DisplayName("名义本金"), TradeAuditChangeMsg] [DataChange] public double StockEqvNotional { get; set; } [DisplayName("最大名义本金(组合标的)")] [DataChange] /// /// 最大名义本金(组合标的) /// public double? StockEqvNotionalMax { get; set; } /// /// 有效名义本金 /// [DisplayName("有效名义本金"), TradeAuditChangeMsg] [DataChange] public double StockEqvNotionalReal { get; set; } [DisplayName("波动率类型"), TradeAuditExclude] [DataChange(true)] public string VolType { get; set; } /// /// 标的资产类型 期货期权都是CommodityFutures,股票是Stock,远期是 期货期权都是CommodityFutures /// [DisplayName("标的资产类型")] [TradeAuditExclude] [DataChange(true)] public string UnderlyingInstrumentType { get; set; } /// /// 之前是行权日,后名字改为到期日 /// [DisplayName("到期日期"), TradeAuditChangeMsg] [DataChange] public DateTime? ExerciseDate { get; set; } [DisplayName("交易员")] [TradeAuditChangeMsg] [DataChange] public string TraderName { get; set; } [DisplayName("交易员")] public int TraderId { get; set; } [DataChange] [DisplayName("波动率")] public double? Vol { get; set; } /// /// 目前东证专有 vol pv - midvol pv 数据库存在 TradeMeta /// [NotMapped] public double? Day1Pnl { get; set; } /// /// 目前东证专有 数据库存在 TradeMeta /// [NotMapped] public double? MidVol { get; set; } /// /// 汇率 /// [NotMapped] public double? ExchangeRate { get; set; } [DisplayName("执行价格"), TradeAuditChangeMsg] [DataChange] public double? Strike { get; set; } [DisplayName("标的代码")] [DataChange(true)] public int UnderlyingId { get; set; } [DisplayName("基差挂钩标的代码")] [DataChange(true)] public int? BasisUnderlyingId { get; set; } [DisplayName("基差挂钩标的代码")] public string BasisUnderlyingCode { get; set; } [DisplayName("基差")] public double? BasisGap { get; set; } /// /// 场内期权代码才有,对应exchangelistoption表 /// 3.9版本场内期权交易迁移到exchange_trade表 /// [NotMapped] public string ExchangeOptionCode { get; set; } //也是不应该要的冗余字段 [DisplayName("簿记账户")] [TradeAuditChangeMsg] public string AssetBookName { get; set; } [DisplayName("簿记账户")] public int AssetId { get; set; } /// /// 该字段显示的是交易的最新份额,和OriginalNotional的差别在于部分平仓时,需要减掉已部分平仓部分数据 /// [DisplayName("持仓份额"), TradeAuditChangeMsg] [DataChange] public double Notional { get; set; } /// /// 看涨看跌 /// [DisplayName("看涨看跌"), TradeAuditChangeMsg] [DataChange] public string OptionType { get; set; } [DisplayName("定价模型")] public string PricingModel { get; set; } /// /// 行权方式 /// [DisplayName("行权方式")] [DataChange] public string ExerciseMode { get; set; } [DisplayName("无风险利率")] [DataChange] public double? NoRiskRate { get; set; } /// /// 商品期货期权标的期初价格 /// [DisplayName("标的价格"), TradeAuditChangeMsg] [DataChange] public double? SpotPrice { get; set; } /// /// 交易编号 /// [DisplayName("交易编号")] public string TradeNumber { get; set; } ///// ///// 合同编号 ///// //[DisplayName("合同编号")] //public string ContractNo { get; set; } /// /// 客户信息 /// [DisplayName("客户名称")] public int ClientId { get; set; } /// /// 客户名称 /// [DisplayName("客户名称")] [TradeAuditChangeMsg] [DataChange] public string ClientName { get; set; } /// /// 标的代码 /// [DisplayName("标的代码")] [TradeAuditChangeMsg] [DataChange] public string UnderlyingCode { get; set; } /// /// 标的类型, /// 没什么用,等待删除 /// [DisplayName("标的类型")] [TradeAuditExclude] [DataChange(true)] public string UnderlyingAssetClass { get; set; } /// /// 成交日期 /// [DisplayName("成交日期"), TradeAuditChangeMsg] [DataChange] public DateTime? TradeDate { get; set; } /// /// 买卖方向 /// [DisplayName("买卖方向")] [TradeAuditChangeMsg] [DataChange] public string BuySell { get; set; } /// /// 开始日期 目前没什么用 /// [DisplayName("开始日期")] public DateTime? StartDate { get; set; } /// /// 标的到期日(也没什么意义的一个字段吧,反而和ExerciseDate混淆,导致交易确认书等取错字段) /// [DisplayName("标的到期日"), TradeAuditExclude] [DataChange(true)] public DateTime? MaturityDate { get; set; } /// /// 仅用于自定义交易存储观察日列表的Json字符串 /// [DisplayName("观察日")] public string ObservationDateStr { get; set; } private double? _tradePrice; /// /// 交易价格 /// 远期:代表交易员资金方向,存储的数据和页面填写的一致,正代表交易员收,负代表交易员支付,不需要再考虑买卖方向 /// 期权:代表期权价值,如果需要判断是交易员收取还是支付,需要配合买卖方向处理 /// [DisplayName("成交总额"), TradeAuditChangeMsg] [DataChange] public double? TradePrice { set => _tradePrice = OtcFormatHelper.GetTradePriceDouble(value ?? 0); get => _tradePrice; } [NotMapped] public double? AccurateTradePrice { get; set; } /// /// 交易状态 /// [DisplayName("交易状态")] public string TradeStatus { get; set; } [TradeAuditExclude] [DataChange(true)] public string ProcessStatus { get; set; } [TradeAuditExclude] [DataChange(true)] public int ProcessOrderId { get; set; } /// /// 审批流程分支 /// [TradeAuditExclude] [DataChange(true)] public int ProcessOrderBranch { get; set; } [TradeAuditExclude] [DataChange(true)] public DateTime? ProcessOptDate { get; set; } /// /// 结算方式(0:收盘价,1:结算价,2:参考价) /// [DisplayName("收益结算")] public SettlementTypeEnum SettlementType { get; set; } /// /// 是否有效_validstate /// [DisplayName("是否有效")] public string ValidState { get; set; } [DisplayName("备注"), TradeAuditChangeMsg] public string Comments { get; set; } [TradeAuditExclude] [DataChange(true)] public int? SentMailCount { get; set; } /// /// 期货手数,期权期货一致 /// [DisplayName("手数")] [TradeAuditExclude] [DataChange(true)] public double? Lots { get; set; } ///// ///// 结算收益(已经去掉了权利金,且以交易员方向看的) ///// //[DisplayName("结算收益")] //[TradeAuditExclude] //public double? NetSettlement { get; set; } [DisplayName("是否存在部分平仓")] [TradeAuditExclude] [DataChange(true)] public int? HasPartialUnWind { get; set; } [DisplayName("成交份额")] [TradeAuditExclude] [DataChange(true)] public double? OriginalNotional { get; set; } /// /// 交易来源 /// [DisplayName("交易来源")] [TradeAuditExclude] [DataChange(true)] public string TradeSource { get; set; } /// /// 期初名义本金 /// [DisplayName("期初名义本金")] [TradeAuditExclude] [DataChange(true)] public double? OriginalStockEqvNotional { get => originalStockEqvNotional; set => originalStockEqvNotional = Math.Abs(value ?? 0); } /// /// 支持多标的组合名义本金取最大值 /// 必须增加这个字段了,(OriginalStockEqvNotional会用于计算但有些公司在多标的名义本金的处理上有差异) /// [TradeAuditExclude] [DataChange(true)] public double? OriginalStockEqvNotionalV2 => PS.Config.ErpElement.UseStockEqvNotionalMax && StockEqvNotionalMax > 0 ? StockEqvNotionalMax : originalStockEqvNotional; /// /// 是否通过期权费率设置权利金 /// [DisplayName("成交方式")] public bool? IsUsePremiumRate { get; set; } /// /// 是否为总额成交方式,默认false /// [DisplayName("总额成交")] public bool IsTradePricePayType { get; set; } /// /// 是否为期权年化,默认false /// [DisplayName("期权年化")] [DataChange] public bool IsAnnualized { get; set; } [DisplayName("年化系数")] [DataChange] public double? AnnualizeFactor { get; set; } /// /// 分红率 /// [DisplayName("分红率")] [DataChange] public double? DividendRate { get; set; } private double _participationRate = 1; /// /// 参与率 /// [DisplayName("参与率")] [DataChange] public double? ParticipationRate { get => _participationRate; set { if (value == null || value == 0) { _participationRate = 1; } else { _participationRate = value.Value; } } } /// /// 保底收益率 /// [DisplayName("单笔保底收益")] [DataChange] public double? PrincipalRate { get; set; } [DisplayName("保底收益总额")] [TradeAuditChangeMsg] [DataChange] public double? OriginalPrincipalSum { get; set; } [DisplayName("保底收益")] [DataChange] public double? PrincipalRateWrite { get; set; } [DisplayName("保底收益")] [DataChange] public double? SinglePrincipalWrite { get; set; } /// /// 结算日期 -- 互换交易历史数据 SettlementDate 为 null /// [DisplayName("结算日期")] public DateTime? SettlementDate { get; set; } /// /// 结算标识(0:正常结算,1:延期结算) /// [DisplayName("结算标识")] public int SettlementFlag { get; set; } [NotMapped] public string SettlementFlagStr { get { return SettlementFlag == 1 ? "是" : "否"; } } /// /// 结算标识修改时间 /// [DisplayName("结算标识修改时间")] public DateTime? SettlementFlagDate { get; set; } /// /// 结算标识修改人 /// [DisplayName("结算标识修改人")] public int? SettlementFlagOptId { get; set; } [NotMapped] public string SettlementFlagOptName { get; set; } /// /// 计算标识(0:全部,1:IgnoreMargin(忽略预付金计算使用初始预付金)) /// public int CalcFlag { get; set; } [DisplayName("是否单笔交易确认书")] public int? IsSingleContract { get; set; } [DisplayName("权利金应付日"), TradeAuditChangeMsg] [DataChange] public DateTime? PremiumPayDate { get; set; } //[DisplayName("交易指令"), TradeAuditChangeMsg] //[DataChange] //public string TradeInstruction { get; set; } [DisplayName("期权费率"), TradeAuditChangeMsg] [DataChange] public double? PremiumRate { get; set; } //删除UnderlyingAssetName [DisplayName("标的名称"), TradeAuditExclude] [DataChange(true)] public string UnderlyingAssetName { get; set; } [DisplayName("标的品种")] [NotMapped] public string UnderlyingVariety { get; set; } [DisplayName("协议版本号")] public string ContractVersion { get; set; } [DisplayName("标的到期价格")] public double? FinalPrice { get; set; } [DisplayName("对手方角色")] public string OpponentRole { get; set; } /// /// 存续天数(默认为0,和银行业务有关时用到) /// [DisplayName("存续天数")] public short? DurationDays { get; set; } private string _structureType; /// /// 期权结构类型 /// [DisplayName("期权结构类型")] [DataChange] public string StructureType { get => _structureType; set => _structureType = string.IsNullOrWhiteSpace(value) ? null : value; } /// /// 初始预付金 /// [DisplayName("初始预付金")] [DataChange] public double? InitialMargin { get; set; } /// /// 结构说明 /// [DisplayName("结构说明")] [TradeAuditExclude] public string StructureIntroduction { get; set; } /// /// 预付金模板 /// [DisplayName("预付金模板")] [TradeAuditExclude] public string MarginTemplateName { get; set; } /// /// 预付金算法 /// [DisplayName("预付金算法")] [TradeAuditChangeMsg] public MarginTypeEnum MarginType { get; set; } /// /// 预付金率(固定及按浮动盈亏算时的初始预付金率) /// [DisplayName("预付金率")] [TradeAuditChangeMsg] public double MarginRate { get; set; } /// /// 持仓预付金率(固定预付金率算法的时候会用到) /// [DisplayName("持仓预付金率")] [TradeAuditChangeMsg] public double PositionMarginRate { get; set; } /// /// 计价货币 /// [DisplayName("计价货币")] [TradeAuditChangeMsg] public string QuoteCurrency { get; set; } /// /// 结算货币 /// [DisplayName("结算货币")] [TradeAuditChangeMsg] public string SettlementCurrency { get; set; } /// /// 是否为组合交易 /// 0:非分组交易 /// 1:分组交易父亲交易 /// 2:分组交易子交易 /// public int IsGroup { get; set; } /// /// 扩展字段,以json格式存储 /// public string ExtendInfo { get; set; } /// /// 是否夜盘 /// [DisplayName("是否夜盘")] public bool IsNight { get; set; } /// /// 自定义结构扩展字段缓存 /// private string _extendInfoCache; private List _propertys; /// /// 自定义结构扩展字段 /// [NotMapped] public List Propertys { get { if (string.IsNullOrWhiteSpace(ExtendInfo)) { _propertys = new List(); } else if (ExtendInfo != _extendInfoCache) { try { _extendInfoCache = ExtendInfo; _propertys = JsonConvert.DeserializeObject>(ExtendInfo); } catch { _propertys = new List(); } } return _propertys; } } /// /// 扩展字段看涨看跌属性 /// [NotMapped] public string ExtendOptionTypeInfo { get; set; } /// /// 累计id /// [NotMapped] public string AccumulatorOptionId { get; set; } /// /// 操作人ID /// [DisplayName("操作人")] [TradeAuditExclude] public int OptId { get; set; } /// /// 操作人名称 /// [DisplayName("操作人")] [TradeAuditExclude] public string OptName { get; set; } /// /// 操作时间 /// [DisplayName("操作时间")] [TradeAuditExclude] [DataChange(true)] public DateTime? OptDate { get; set; } /// /// 是否走审批 分组了结时用 /// [DisplayName("是否走审批")] [TradeAuditExclude] [DataChange(true)] public bool IsApproval { get; set; } /// /// 是否自动簿记 /// [DisplayName("是否走审批")] public bool? IsAutoGenerate { get; set; } /// /// 衡泰交易状态 /// public int? HTStatus { get; set; } /// /// 用来标记该交易在修改时是否应提示操作人员注意 /// [NotMapped] public bool Warning => DividendDate >= TradeDate; public DateTime DividendDate { get; set; } = new DateTime(2000, 1, 1); /// /// 成交份额和数量的乘积因子(份额=数量*CountRatio) /// 这个字段赋值主要用于交易列表中成交(持仓)数量的计算 /// public int? CountRatio { get; set; } [NotMapped] public string CallPut => TradeHelper.GetCallPut(OptionType); /// /// 是否是期初价格状态 : 是 /// [NotMapped] public bool IsMoneynessOptionData => (IsOption() || TradeType == "结构化交易" || TradeType == "远期" || TradeType == "自定义交易") && IsMoneynessOption == "是"; public override string ToString() { return $"{id},{UnderlyingCode},{TradeType}"; } /// /// 是否期权 /// public bool IsOption() { var tradeTypeName = TradeType ?? ""; return tradeTypeName.IndexOf("期权") >= 0 || tradeTypeName.EndsWith("结构"); } public string GetSettlementTypeDesc() { return EnumHelper.GetDescriptionByName(SettlementType); } public string GetExerciseModeCn() { return TradeHelper.GetExerciseModeCn(ExerciseMode); } public string GetStrikeString() { return (IsMoneynessOptionData ? (SpotPrice ?? 0) * (Strike ?? 0) : (Strike ?? 0)).OtcFormatUmPrice(); } public string GetTradeSinglePriceString() { if (IsUsePremiumRate == true) { return (PremiumRate ?? 0).OtcFormat(OtcFormatFlag.premiumRateP); } else { return (TradeSinglePrice ?? 0).OtcFormat(OtcFormatFlag.tradeSinglePrice); } } Dictionary _metaDic; /// /// 扩展元数据字典(特别增加这个字段为了这个类的扩展性) /// 以后不要轻易动这个字段了,前端和模板经常用到 /// [NotMapped] public Dictionary MetaDic { get => _metaDic ??= new Dictionary(StringComparer.OrdinalIgnoreCase); set => _metaDic = value; } private string _tradeExtendJson; /// /// 奇异信息 /// 使用时应调用GetExtendObj方法 /// [NotMapped] public string TradeExtendJson { get { return _tradeExtendJson; } set { if (_tradeExtendJson != value) { _tradeExtendJson = value; _extendInfo = null; } } } private TradeExtendBase _extendInfo = null; public T GetExtendObj() where T : TradeExtendBase, new() { if (_extendInfo == null && string.IsNullOrWhiteSpace(this.TradeExtendJson)) { _extendInfo = JsonHelper.ToObject(this.TradeExtendJson); } return (T)_extendInfo; } /// /// 交易类型综合描述(也是个必须的基础属性) /// [NotMapped] public string TradeMultipleType { get { if (TradeType == "自定义交易") { return (string.IsNullOrEmpty(StructureType) ? TradeType : StructureType) + (OptionType ?? ""); } if (string.IsNullOrEmpty(TradeType) || TradeType == "自定义交易" || TradeType == "雪球期权" || TradeType == "凤凰期权") { return TradeType; } if (TradeType == "收益互换") { return TradeType + (OptionType ?? ""); } if (TradeType == "远期" && !string.IsNullOrWhiteSpace(OptionType)) { return (string.IsNullOrEmpty(StructureType) ? TradeType : StructureType) + (OptionType == "看涨" ? "多头" : "空头"); } if (TradeType == "结构化交易" || TradeType == "组合交易") { return StructureType; } if (PS.Config.Is瑞达 && TradeType == "香草期权") { return TradeHelper.GetExerciseModeCn(ExerciseMode) + OptionType; } return TradeHelper.GetExerciseModeCn(ExerciseMode) + TradeType.Replace("期权", string.Empty) + OptionType; } } public bool HasUnderlying() { return TradeType != "现金流交易"; } /// /// 设置交易的完全了结状态(更新交易了结日期,交易状态,持仓份额,持仓名义本金),一般在savecash之后调用 /// /// 了结日期 /// 了结状态 public void SetFullClosedStatus(DateTime unwindDate, string closedStatus) { UnWindDate = unwindDate; TradeStatus = closedStatus; Notional = 0; TradeAmount = 0; StockEqvNotional = 0; } /// /// 持仓保底收益总额 /// public double PrincipalSum() => OriginalStockEqvNotional == 0 ? 0 : (OriginalPrincipalSum * StockEqvNotional / OriginalStockEqvNotional) ?? 0; /// /// 采集价格字符串 /// [NotMapped] public string Fixing { get; set; } } /// /// 用作trade表模型的基类 /// public abstract class OtcTrade : OtcTradeBase { [NotMapped] public TradeSaveExt SaveExt { get; set; } public abstract IEnumerable GetSubTrades(); public abstract T Get() where T : TradeExtendBase; public abstract void Set(T data) where T : TradeExtendBase; } /// /// 成交数量方式枚举 /// public enum TradingNotionalFlag { None = 0, /// /// 实际名义本金 /// StockEqvNotionalReal, /// /// 名义本金 /// StockEqvNotional, /// /// 交易份额 /// Notional, /// /// 交易数量 /// TradeAmount } /// /// 成交权利金枚举 /// public enum TradingPremiumFlag { None = 0, /// /// 权利金总额 /// TradePrice, /// /// 权利金单价 /// TradeSinglePrice, /// /// 权利金费率 /// PremiumRate, /// /// 全部是0 /// AllZero } /// /// 保存时用的扩展数据 /// public class TradeSaveExt { /// /// 数量处理方式枚举 /// public TradingNotionalFlag NotionalFlag { get; set; } /// /// 期权费处理方式枚举 /// public TradingPremiumFlag PremiumFlag { get; set; } /// /// 最大标的价格(适用于组合标的) /// public double? MaxSpotPrice { get; set; } } /// /// /// public class OtcTradeDto : OtcTradeBase { /// /// 最新标的价格 /// public double? UnderlyingPrice { get; set; } /// /// 成交溢价 /// public double? TradePremium { get; set; } = 0; /// /// 销售提成 /// public TradeSalesCommissionInfo SalesCommission { get; set; } } /// /// 交易扩展基类 /// public class TradeExtendBase : DBModelWithOperator { [TradeAuditExclude] [DataChange(true)] public override int id { get; set; } /// /// 交易信息 /// [DisplayName("交易信息")] [TradeAuditExclude] [DataChange(true)] public virtual int TradeId { get; set; } } public class ExtendInfoModel { /// /// 更新时间 /// 用于标记Dto是否需要更新 /// [JsonIgnore] public DateTime changeTime = DateTime.MinValue; private string _name; /// /// 字段名 /// public string name { get => _name; set { _name = value; changeTime = DateTime.Now; } } private string _value; /// /// 字段值 /// public string value { get => _value; set { _value = value; changeTime = DateTime.Now; } } } public class ExtendInfoDto : ExtendInfoModel { /// /// 字段配置信息 /// public Structure_Details CustomInfo { get; private set; } /// /// 设置字段配置信息 /// /// public void SetCustomInfo(Structure_Details detailInfo) { if (detailInfo?.ColumnType == StructureColumnTypeEnum.COMBO_BOX_SINGLE) { var options = detailInfo.ColumnOptions.Split(','); if (!options.Contains(value)) { detailInfo = null; } } CustomInfo = detailInfo ?? new Structure_Details() { ColumnType = StructureColumnTypeEnum.TEXT, ColumnName = name, ColumnDefaultValue = value }; } public ExtendInfoDto(ExtendInfoModel obj) { name = obj.name; value = obj.value; } } }