namespace YLErp.Modules.TradeModule.AccumulatorOptionModule { /// /// /// public static class TradeAccumulatorHelper { #region----换月---- public static IEnumerable GetChangeDatas(IEnumerable actions) { if (actions == null) { return Enumerable.Empty(); } return actions.Where(x => x.ActionType == TradeActionType.AccumulatorChange) .Select(x => JsonHelper.Deserialize(x.ActionData)).ToArray(); } /// /// 获取默认的换月数据 /// public static TData GetDefaultChangeData(DateTime valueDate, OtcTradeBase td, trade_accumulator_option tdAcc) where TData : TradeAccumulatorChangeData, new() { return new TData { ValueDate = valueDate.OtcFormatDate(), KOBarrier = tdAcc.KOBarrier, KOObservationDates = tdAcc.KOObservationDates, KOObservationSettleDates = tdAcc.KOObservationSettleDates, Strike = td.Strike ?? 0, UnderlyingCode = td.UnderlyingCode }; } /// /// 使用换月数据还原交易数据 /// public static void RestoreAccumulatorChangeData(OtcOptionTradeFull td, string changeDataJson, underlying_manager um = null) { if (td is null) { throw new ArgumentNullException(nameof(td)); } if (string.IsNullOrWhiteSpace(changeDataJson)) { throw new ServiceException("换月设置数据为空,请检查数据是否损坏!"); } var changeData = JsonHelper.Deserialize(changeDataJson); if (um == null) { um = DataCacheProvider.GetUnderlyingDataSource().GetData(changeData.UnderlyingCode); if (um == null) { throw new ServiceException("找不到标的信息:" + changeData.UnderlyingCode); } } td.UnderlyingId = um.id; td.UnderlyingCode = changeData.UnderlyingCode; td.UnderlyingAssetClass = um.UnderlyingType; td.UnderlyingAssetName = um.UnderlyingName; td.UnderlyingInstrumentType = um.UnderlyingInstrumentType; td.Strike = changeData.Strike; td.KOBarrier = changeData.KOBarrier; td.KOObservationDates = changeData.KOObservationDates; td.KOObservationSettleDates = changeData.KOObservationSettleDates; } /// /// 使用换月数据还原交易数据 /// public static void RestoreAccumulatorChangeData(trade td, string changeDataJson, underlying_manager um = null) { if (td is null) { throw new ArgumentNullException(nameof(td)); } if (string.IsNullOrWhiteSpace(changeDataJson)) { throw new ServiceException("换月设置数据为空,请检查数据是否损坏!"); } var changeData = JsonHelper.Deserialize(changeDataJson); RestoreAccumulatorChangeData(td, td.trade_accumulator_option, changeData, um); } /// /// 使用换月数据还原交易数据 /// public static void RestoreAccumulatorChangeData(OtcTradeBase td, trade_accumulator_option tdAcc, TradeAccumulatorChangeData changeData, underlying_manager um = null) { if (td is null) { throw new ArgumentNullException(nameof(td)); } if (changeData is null) { throw new ArgumentNullException(nameof(changeData)); } if (um == null) { um = DataCacheProvider.GetUnderlyingDataSource().GetData(changeData.UnderlyingCode); if (um == null) { throw new ServiceException("找不到标的信息:" + changeData.UnderlyingCode); } } td.UnderlyingId = um.id; td.UnderlyingCode = changeData.UnderlyingCode; td.UnderlyingAssetClass = um.UnderlyingType; td.UnderlyingAssetName = um.UnderlyingName; td.UnderlyingInstrumentType = um.UnderlyingInstrumentType; td.MaturityDate = um.MaturityDate; td.Strike = changeData.Strike; if (tdAcc != null) { tdAcc.KOBarrier = changeData.KOBarrier; tdAcc.KOObservationDates = changeData.KOObservationDates; tdAcc.KOObservationSettleDates = changeData.KOObservationSettleDates; } } /// /// 使用换月数据还原交易数据 /// public static void RestoreAccumulatorChangeData(OtcTradeBase td, trade_accumulator_option tdAcc, string changeDataJson, underlying_manager um = null) { if (string.IsNullOrWhiteSpace(changeDataJson)) { return; } var changeData = JsonHelper.Deserialize(changeDataJson); RestoreAccumulatorChangeData(td, tdAcc, changeData, um); } #endregion } }