Files
zszq-trs/YLErpDAL/Modules/SuperviseReportModule/CFMMC/Service/SuperviseReportTodayService.cs
T
2024-05-09 14:06:26 +08:00

426 lines
29 KiB
C#

using BaseOUDAL;
using Org.BouncyCastle.Ocsp;
using YLErp.Commons;
using YLErp.Configuration;
using YLErp.DBModels.Consts;
using YLErp.Helpers;
using YLErp.Model;
using YLErp.Modules.SuperviseReportModule.CFMMC.Model;
using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
namespace YLErp.Modules.SuperviseReportModule.CFMMC.Service
{
/// <summary>
/// 日监管报告服务
/// </summary>
public class SuperviseReportTodayService : SuperviseReportBaseService
{
public SuperviseReportTodayService(SuperviseReportReq req, OptUserInfo userInfo) : base(req, userInfo)
{
}
private SearchListResult<SuperviseReportTodayModel> ReportQuery(SuperviseReportReq req)
{
var config = DbContext.valuedate.FirstOrDefault(x => x.State == valuedate.当前使用);
var commodityList = new List<string> { ConsGlobal.InstrumentType.CommodityFutures, ConsGlobal.InstrumentType.CommoditySpot };
var umQuery = DbContext.underlying_manager.AsQueryable();
switch (req.DataSource)
{
case "权益":
umQuery = umQuery.Where(O => !commodityList.Contains(O.UnderlyingInstrumentType));
break;
case "商品":
umQuery = umQuery.Where(O => commodityList.Contains(O.UnderlyingInstrumentType));
break;
case "全量":
default:
break;
}
var action = new List<string>() {
"系统操作-期权费",
"系统操作-平仓费",
"系统操作-行权费",
};
var insidedClientIds = DataCacheProvider.GetClientDataSource().AsQueryable().Where(O => O.IsInsided == 1).Select(O => O.id).ToList();
var query = from tradeCash in (from tCash in DbContext.trade_cash where ((tCash.HappenedDate != null && tCash.HappenedDate == req.ValueDate) || (tCash.HappenedDate == null && tCash.ValueDate == req.ValueDate)) && (action.Contains(tCash.Action) || tCash.IsLastAction) && tCash.ValidState != ConsGlobal.InValid && !tCash.IsDeleted select tCash)
join eodTrade in (from et in DbContext.eod_trade where et.ValueDate == req.ValueDate select et) on tradeCash.TradeId equals eodTrade.TradeId
join trade in (from t in DbContext.trade where t.ValidState != "InValid" && (t.TradeType.Contains("期权") || t.TradeType == "远期" || t.TradeType == "收益互换" || t.TradeType == "自定义交易" || t.TradeType == "气囊结构" || t.IsGroup == 1) && t.IsGroup != 2 && t.TradeType != "场内期权" && t.TradeType != "现金流交易" select t) on tradeCash.TradeId equals trade.id
join um in umQuery on trade.UnderlyingCode equals um.UnderlyingCode
join er in (from tempEr in DbContext.eod_trade_risk where tempEr.ValueDate == req.ValueDate select tempEr) on tradeCash.TradeId equals er.TradeId into tempEr
from er in tempEr.DefaultIfEmpty()
join parentTrade in (from tr in DbContext.trade where tr.ValidState != "InValid" && tr.TradeType == "结构化交易" select tr) on trade.ParentTradeId equals parentTrade.id into parentTrades
from tempParentTrade in parentTrades.DefaultIfEmpty()
join eodPnl in (from ep in DbContext.eod_trade_position where ep.ValueDate == req.ValueDate select ep) on trade.id equals eodPnl.TradeId into eodP
from tempEodPnl in eodP.DefaultIfEmpty()
join tradeSpan in (from ts in DbContext.trade_span where ts.ValueDate == req.ValueDate select ts) on trade.id equals tradeSpan.TradeId into tradeS
from tempTradeSpan in tradeS.DefaultIfEmpty()
join credit in (from c in DbContext.credit where c.ProcessStatus == "已审批" && (!c.CreditDeadLine.HasValue || c.CreditDeadLine >= req.ValueDate) && (!c.CreditStartDate.HasValue || c.CreditStartDate <= req.ValueDate) select c) on trade.ClientId equals credit.ClientId into credits
from tempCredit in credits.DefaultIfEmpty()
join binaryOpt in DbContext.trade_binary_option on eodTrade.TradeId equals binaryOpt.TradeId into bo
from binaryOpt in bo.DefaultIfEmpty()
join cPrice in DbContext.eod_commodity_future_price.Where(O => O.ValueDate == req.ValueDate) on trade.UnderlyingCode equals cPrice.UnderlyingCode into tempCPrice
from cPrice in tempCPrice.DefaultIfEmpty()
join sPrice in DbContext.eod_stock_price.Where(O => O.ValueDate == req.ValueDate) on trade.UnderlyingCode equals sPrice.UnderlyingCode into tempSPrice
from sPrice in tempSPrice.DefaultIfEmpty()
where !insidedClientIds.Contains(trade.ClientId)
select new SuperviseReportTodayModel
{
GroupPercentTradeId = trade.IsGroup == 1 ? trade.id : 0,
TradeJson = eodTrade.TradeJson,
originalTrade = null,
ClosePrice = cPrice != null ? cPrice.ClosePrice : (sPrice != null ? sPrice.ClosePrice : 0),
TradeSpan_WorstCastClientPayable = tempTradeSpan == null ? null : (tempTradeSpan.WorstCastClientPayable == null ? 0 : tempTradeSpan.WorstCastClientPayable),
//OriginalVarietyCode = variety.VarietyCode,
UnwindPercentRate = tradeCash.UnwindPercentRate,
OriginalTradeNumber = eodTrade == null ? trade.TradeNumber : eodTrade.TradeNumber,
TradeCashId = tradeCash.id,
MainName = config.SuperviseMainName,
MainCode = config.SuperviseMainCode,
ClientId = trade.ClientId,
//ClientName = client.Name,
//ClientLicenseCode = client.LicenseCode,
//ProtocalType = client.ProtocolSignVersion,
//ProtocolSignDate = client.ProtocolSignDate,
TradeDate = tradeCash.ValueDate,
IsCredit = tempCredit != null ? "Y" : "N",
Credit = tempCredit != null ? (tempCredit.Credit ?? 0) : 0,
OperationType = tradeCash.Action == "系统操作-行权费" ? "ED" : (tradeCash.Action == "系统操作-期权费" ? "NT" : (tradeCash.UnwindType != null && tradeCash.UnwindType.StartsWith("部分") && !tradeCash.IsLastAction ? "PU" : "FU")),
RealExerciseDate = tradeCash.ExerciseWay == "到期行权" ? (DateTime?)tradeCash.ValueDate : null,
UnWindDate = tradeCash.ExerciseWay != "到期行权" && tradeCash.Action != "系统操作-期权费" ? (DateTime?)tradeCash.ValueDate : null,
TradeType = tempParentTrade == null ? trade.TradeType : tempParentTrade.TradeType,
TradePrice = tradeCash.Amount,
StructureType = tempParentTrade == null ? trade.StructureType : tempParentTrade.StructureType,
PayoffType = binaryOpt != null ? binaryOpt.PayoffType : "",
TradeStatus = eodTrade.TradeStatus,
PriceSymbol = 1,
QuoteCurrency = "CNY",
ForeignCurrencyRate = null,
Pv = tradeCash.Action != "系统操作-期权费" ? (double)(tempEodPnl == null ? 0 : tempEodPnl.Pv) : (tradeCash != null ? tradeCash.Amount : 0),
ParticipateRate = 1,
ValuationMethod = "O",
SettlementMethod = tradeCash.Action == "系统操作-期权费" ? "" : "C",
LastUnWindDate = tradeCash.Action == "系统操作-期权费" ? null : trade.UnWindDate,
SettlementPriceType = tradeCash.Action == "系统操作-期权费" ? null : (int?)9,
FixedPrice = null,
ReferencePrice = tradeCash.Action != "系统操作-期权费" ? tradeCash.FinalPrice ?? 0 : (Nullable<double>)null,
TradeId = trade.id,
ContractCode = tempParentTrade != null ? tempParentTrade.TradeNumber : trade.TradeNumber,
IsAnnualTrade = "N",
_deltaCash = er != null ? (er.Delta * trade.SpotPrice) : 0,
//UnRealizedPnL = tempEodPnl.UnRealizedPnL
};
query = query.OrderByDescending(O => O.TradeStatus).ThenBy(n => n.ContractCode).ThenBy(n => n.OriginalTradeNumber);
var retListResult = query.ToSearchList(_req, false);
var groupTradeList = retListResult.rows.Where(O => O.GroupPercentTradeId > 0);
var tradeIds = groupTradeList.Select(O => O.GroupPercentTradeId);
var exInfoDict = (from t in DbContext.trade
join tc in DbContext.trade_cash on t.id equals tc.TradeId
join ts in DbContext.trade_span on new { TradeId = t.id, req.ValueDate } equals new { ts.TradeId, ts.ValueDate } into tempTs
from ts in tempTs.DefaultIfEmpty()
join ep in DbContext.eod_trade_position on new { TradeId = t.id, req.ValueDate } equals new { ep.TradeId, ep.ValueDate } into tempEp
from ep in tempEp.DefaultIfEmpty()
join er in DbContext.eod_trade_risk on new { TradeId = t.id, req.ValueDate } equals new { er.TradeId, er.ValueDate } into tempEr
from er in tempEr.DefaultIfEmpty()
join binaryOption in DbContext.trade_binary_option on t.id equals binaryOption.TradeId into tempBo
from binaryOption in tempBo.DefaultIfEmpty()
where
tradeIds.Contains(t.ParentTradeId) && t.ValidState != "InValid" &&
(t.TradeType.Contains("期权") || t.TradeType == "远期" || t.TradeType == "气囊结构" ||
t.TradeType == "收益互换" || t.TradeType == "自定义交易") &&
t.TradeType != "场内期权" && t.TradeType != "现金流交易" &&
((tc.HappenedDate != null && tc.HappenedDate == req.ValueDate) ||
(tc.HappenedDate == null && tc.ValueDate == req.ValueDate)) &&
(action.Contains(tc.Action) || tc.IsLastAction) &&
tc.ValidState != ConsGlobal.InValid && !tc.IsDeleted
select new
{
t.ParentTradeId,
WorstCastClientPayable = ts == null ? null : (ts.WorstCastClientPayable == null ? 0 : ts.WorstCastClientPayable),
PayoffType = binaryOption != null ? binaryOption.PayoffType : "",
Pv = tc.Action != "系统操作-期权费" ? (double)(ep == null ? 0 : ep.Pv) : (tc != null ? tc.Amount : 0),
DeltaCash = er.Delta * t.SpotPrice
}).AsEnumerable()
.GroupBy(O => O.ParentTradeId).ToDictionary(K => K.Key, V => V.ToList());
foreach (var item in retListResult.rows)
{
if (exInfoDict.TryGetValue(item.GroupPercentTradeId, out var info))
{
item.TradeSpan_WorstCastClientPayable = info.Sum(O => O.WorstCastClientPayable);
item.PayoffType = info.FirstOrDefault()?.PayoffType;
item.Pv = info.Sum(O => O.Pv);
item._deltaCash = info.Sum(O => O.DeltaCash);
}
item.DeltaCash = item._deltaCash.OtcFormat(OtcFormatFlag.greek);
}
return retListResult;
}
public SearchListResult<SuperviseReportTodayModel> SearchReportList()
{
var retListResult = ReportQuery(_req);
using (var basedb = new ErpBaseContext())
{
var marketCode = _isEquity ? "权益监管市场代码" : "监管市场代码";
var protocalTyp = _isEquity ? "权益类签署版本" : "协议签署版本";
var tcIdArr = retListResult.rows.Select(O => O.TradeCashId);
var clientIdArr = retListResult.rows.Select(O => O.ClientId).ToHashSet();
var varietyTypeList = (from i in basedb.DictionaryItems join d in basedb.Dictionaries on i.DictId equals d.Id where d.Name == "品种类型" select i).ToList();
var assetTypeList = (from i in basedb.DictionaryItems join d in basedb.Dictionaries on i.DictId equals d.Id where d.Name == "资产类型" select i).ToList();
var marketNoList = (from i in basedb.DictionaryItems join d in basedb.Dictionaries on i.DictId equals d.Id where d.Name == marketCode select i).ToList();
var varietySuffixList = (from i in basedb.DictionaryItems join d in basedb.Dictionaries on i.DictId equals d.Id where d.Name == "标的资产后缀" select i).ToList();
var protocalTypeList = (from i in basedb.DictionaryItems join d in basedb.Dictionaries on i.DictId equals d.Id where d.Name == protocalTyp select i).ToDictionary(K => K.Name, V => V.ShortName);
var varietyCodeList = (from i in basedb.DictionaryItems join d in basedb.Dictionaries on i.DictId equals d.Id where d.Name == "标的对应资产品种" select i).ToList();
var clientMetaQuery = DbContextFactory.GetClientDbContext(UserInfo).ClientMeta.Where(O => clientIdArr.Contains(O.ClientId));
var clientEquityInfo = clientMetaQuery.Where(O => O.MetaKey == "RightProtocolSignVersion").ToDictionary(K => K.ClientId, V => V.MetaValue);
var clientReportInfo = clientMetaQuery.Where(O => O.MetaKey == "ReportName").ToDictionary(K => K.ClientId, V => V.MetaValue);
Dictionary<int, string> tcRinfos = new Dictionary<int, string>();
var tmInfos = new Dictionary<int, string>();
switch (PS.Config.Company)
{
case Configuration.CompanyEnum.上期资本:
case Configuration.CompanyEnum.长江:
tcRinfos = DbContext.trade_contract_r.Where(O => tcIdArr.Contains(O.TradeCashId ?? 0) && O.IsValid).Select(O => new { TradeCashId = (O.TradeCashId ?? 0), O.ContractCode }).AsEnumerable().GroupBy(O => O.TradeCashId).ToDictionary(K => K.Key, V => V.First().ContractCode);
break;
case Configuration.CompanyEnum.浙期:
var tIdArr = retListResult.rows.Select(O => O.TradeId);
var ptIdArr = retListResult.rows.Where(O => O.trade.ParentTradeId > 0).Select(O => O.trade.ParentTradeId).ToHashSet();
tmInfos = DbContext.TradeMeta.Where(O => (tIdArr.Contains(O.TradeId) || ptIdArr.Contains(O.TradeId)) && O.MetaKey == ConsTradeMetaKey.ContractCode).ToDictionary(K => K.TradeId, V => V.MetaValue);
break;
default:
break;
}
try
{
foreach (var item in retListResult.rows)
{
var um1 = UnderlyingDataProvider.GetUnderlying(item.trade.UnderlyingCode);
var variety = DataCacheProvider.GetVarietyDataSource().GetData(um1.UnderlyingTypeId);
var dbTradeMeta = DbContext.TradeMeta.Where(O => O.TradeId == item.TradeId && O.MetaKey == "ExchangeRate").OrderByDescending(m => m.CreateTime).FirstOrDefault();
if (!string.IsNullOrEmpty(variety.QuoteCurrency) && variety.QuoteCurrency != "CNY")
{
item.QuoteCurrency = variety.QuoteCurrency;
item.ForeignCurrencyRate = double.TryParse(dbTradeMeta?.MetaValue, out var meta) ? meta : item.ForeignCurrencyRate;// double.TryParse(dbTradeMeta?.MetaValue, out double meta) ? meta : 1;
}
FormatModel(item, varietyTypeList, assetTypeList, varietySuffixList, varietyCodeList, out var syntheticPrice);
if (item.trade.TradeType == "远期" && item.OperationType == "FU" && item.TradeDate.GetValueOrDefault().Date == item.trade.ExerciseDate.GetValueOrDefault().Date && item.EndStockEqvNotional == item.StockEqvNotional)
{
item.RealExerciseDate = item.UnWindDate;
item.UnWindDate = null;
item.OperationType = "ED";
}
List<CompanyEnum> SpecialCompanys = new List<CompanyEnum> { CompanyEnum.润和, CompanyEnum.宏源, CompanyEnum.弘业, CompanyEnum.国投, CompanyEnum.华安, CompanyEnum.国信金阳, CompanyEnum.光大光子, CompanyEnum.伴兴, CompanyEnum.兴证, CompanyEnum.中粮 };
if (SpecialCompanys.Contains(PS.Config.Company) && item.TradeType == "收益互换")
{
item.Strike2 = new List<double>();
var spotprice = item.SpotPrice.Split(',').ToList();
foreach (var x in spotprice)
{
item.Strike2.Add(Convert.ToDouble(x));
}
}
switch (PS.Config.Company)
{
case Configuration.CompanyEnum.上期资本:
case Configuration.CompanyEnum.长江:
tcRinfos.TryGetValue(item.TradeCashId, out var tcValue);
item.ContractCode = tcValue ?? "";
break;
case Configuration.CompanyEnum.浙期:
tmInfos.TryGetValue(item.TradeId, out var tmValue);
tmInfos.TryGetValue(item.trade.ParentTradeId, out var ptmValue);
var ContractCode = item.ContractCode;
item.ContractCode = ptmValue ?? tmValue ?? ContractCode;
if (string.IsNullOrWhiteSpace(item.SettlementMethod))
{ item.SettlementMethod = "C"; }
if (item.OperationType == "NT")
{
item.LastUnWindDate = item.trade.SettlementDate ?? item.trade.ExerciseDate;
var actualExerciseDate = DbContext.TradeMeta.Where(a => a.TradeId == item.TradeId && a.MetaKey == "ActualExerciseDate").FirstOrDefault()?.MetaValue;
if (!string.IsNullOrEmpty(actualExerciseDate) && DateTime.TryParse(actualExerciseDate, out DateTime newActualExerciseDate))
{
item.ExerciseDate = newActualExerciseDate;
}
}
else if (item.trade.TradeType == "累计期权")
{ item.LastUnWindDate = item.TradeDate; }
if (item.SettlementPriceType == null)
{
if (item.trade.TradeType == "亚式期权" ||
(item.trade.TradeType == "远期" &&
item.trade.StructureType == "掉期" &&
ConsGlobal.InstrumentType.GetSpotTypes().Contains(um1.UnderlyingInstrumentType)))
{
item.SettlementPriceType = 3;
}
else
{
item.SettlementPriceType = 9;
}
}
if (item.ReferencePrice == null)
{
item.ReferencePrice = item.ClosePrice;
if (!string.IsNullOrWhiteSpace(item.trade.BasisUnderlyingCode))
{
item.ReferencePrice -= _priceProvider.GetPrice(item.trade.BasisUnderlyingCode);
}
}
break;
default:
break;
}
item.OriginalVarietyCode = um1.CommodityCode;
if (um1.IsSynthetic())
{
var underlyingPrices = syntheticPrice.SuList.ToArray();
var arrMarket = new string[underlyingPrices.Length];
var arrMarketEn = new string[underlyingPrices.Length];
for (var i = 0; i < underlyingPrices.Length; i++)
{
var um = UnderlyingDataProvider.GetUnderlying(underlyingPrices[i].UnderlyingCode);
arrMarket[i] = string.IsNullOrWhiteSpace(um?.MarketName) ? "O" : um?.MarketName;
arrMarketEn[i] = formatDictItem(marketNoList, um?.MarketCode, um?.MarketCode);
}
item.TradingMarket = JoinArr(arrMarket);
item.TradingMarketEn = JoinArr(arrMarketEn);
}
else
{
item.TradingMarket = string.IsNullOrWhiteSpace(um1?.MarketName) ? "O" : um1?.MarketName;
item.TradingMarketEn = formatDictItem(marketNoList, um1?.MarketCode, um1?.MarketCode);
}
var client = DataCacheProvider.GetClientDataSource().GetData(item.ClientId);
if (client != null)
{
item.ClientName = clientReportInfo.TryGetValue(client.id, out var reportName) && !string.IsNullOrWhiteSpace(reportName) ? reportName : client.Name;
item.ClientLicenseCode = client.LicenseCode;
item.ProtocalType = _isEquity ? (clientEquityInfo.TryGetValue(client.id, out var value) ? value : "") : client.ProtocolSignVersion;
item.ProtocolSignDate = _isEquity ? client.RightProtocolSignDate : client.ProtocolSignDate;
}
item.ProtocalType = !string.IsNullOrWhiteSpace(item.ProtocalType)
&& protocalTypeList.TryGetValue(item.ProtocalType, out var protocalType) ? protocalType : "9";
}
}
catch (ServiceException ex)
{
LogFactory.GetLogger("SuperviseReportTodayService").Error(ex, "已知错误");
throw ex;
}
catch (Exception ex)
{
LogFactory.GetLogger("SuperviseReportTodayService").Error(ex, "未知错误");
throw;
}
}
return retListResult;
}
/// <summary>
///
/// </summary>
/// <param name="model"></param>
/// <param name="varietyTypes">标的资产类型</param>
/// <param name="assetTypes">资产类型</param>
/// <param name="varietySuffixs">标的资产品种后缀和标的资产对应合约后缀</param>
/// <param name="syntheticPrice">组合标的价格</param>
/// <exception cref="ServiceException">EodTrade不存在时抛出</exception>
protected override void FormatModel(SuperviseReportBaseModel model, List<DictionaryItem> varietyTypes, List<DictionaryItem> assetTypes, List<DictionaryItem> varietySuffixs, List<DictionaryItem> varietyCodeList, out SyntheticPriceModel syntheticPrice)
{
SuperviseReportTodayModel obj = (SuperviseReportTodayModel)model;
base.FormatModel(obj, varietyTypes, assetTypes, varietySuffixs, varietyCodeList, out syntheticPrice);
double eqv = 0, endEqv = 0;
obj.StartDate = obj.trade.TradeDate;
obj.ExerciseDate = obj.trade.ExerciseDate;
//obj.TradePrice = formatTradePrice(obj);
obj.InitCastClientPayable = formatInitCastClientPayable(obj.trade);
obj.WorstCastClientPayable = formatWorstCastClientPayable(obj.trade, obj.TradeSpan_WorstCastClientPayable);
var annualizeFactor = obj.trade.IsAnnualized ? obj.trade.AnnualizeFactor : 1;
if (syntheticPrice != null && syntheticPrice.SuList.Count() > 0)
{
var underlyingPrices = syntheticPrice.SuList.ToArray();
var arrAmount = new string[underlyingPrices.Length];
var arrEndAmount = new string[underlyingPrices.Length];
var arrSEN = new string[underlyingPrices.Length];
var arrEndSEN = new string[underlyingPrices.Length];
var arrSpotPrice = new string[underlyingPrices.Length];
for (var i = 0; i < underlyingPrices.Length; i++)
{
var originalStockEqvNotional = (underlyingPrices[i].Price * obj.trade.OriginalNotional / annualizeFactor / obj.trade.ParticipationRate * underlyingPrices[i].Coefficient) ?? 0;
eqv = formatEndStockEqvNotionalReal(originalStockEqvNotional, 1);
endEqv = formatEndStockEqvNotionalReal(eqv, (obj.OperationType == "NT" ? 1 : (obj.UnwindPercentRate ?? 0)));
if (obj.ForeignCurrencyRate != null)
{
arrSEN[i] = (eqv * obj.ForeignCurrencyRate).ToString();
arrEndSEN[i] = (endEqv * obj.ForeignCurrencyRate).ToString();
}
else
{
arrSEN[i] = eqv.ToString();
arrEndSEN[i] = endEqv.ToString();
}
arrAmount[i] = formatTradeAmount(eqv / underlyingPrices[i].Price, (underlyingPrices[i].Coefficient > 0 ? 1 : -1));
arrEndAmount[i] = formatTradeAmount(endEqv / underlyingPrices[i].Price, (underlyingPrices[i].Coefficient > 0 ? 1 : -1));
arrSpotPrice[i] = underlyingPrices[i].Price.ToString();
}
obj.StockEqvNotional = string.Join(base._separator, arrSEN);
obj.EndStockEqvNotional = string.Join(base._separator, arrEndSEN);
obj.TradeAmount = string.Join(base._separator, arrAmount);
obj.EndTradeAmount = string.Join(base._separator, arrEndAmount);
obj.SpotPrice = string.Join(base._separator, arrSpotPrice);
}
else
{
var originalStockEqvNotional = (obj.trade.OriginalStockEqvNotional == 0 ? (obj.trade.SpotPrice * obj.trade.OriginalNotional / annualizeFactor / obj.trade.ParticipationRate) : obj.trade.OriginalStockEqvNotional) ?? 0;
eqv = formatEndStockEqvNotionalReal(originalStockEqvNotional, 1);
endEqv = formatEndStockEqvNotionalReal(eqv, (obj.OperationType == "NT" ? 1 : (obj.UnwindPercentRate ?? 0)));
if (obj.ForeignCurrencyRate != null)
{
obj.StockEqvNotional = (eqv * obj.ForeignCurrencyRate).ToString();
obj.EndStockEqvNotional = (endEqv * obj.ForeignCurrencyRate).ToString();
}
else
{
obj.StockEqvNotional = eqv.ToString();
obj.EndStockEqvNotional = endEqv.ToString();
}
obj.TradeAmount = formatTradeAmount(eqv / obj.trade.SpotPrice);
obj.EndTradeAmount = formatTradeAmount(endEqv / obj.trade.SpotPrice);
obj.SpotPrice = OtcFormatHelper.FormatValue(obj.trade.SpotPrice ?? 0, 6).ToString();
}
if (PS.Config.Company == Configuration.CompanyEnum.国投)
{
obj.SpotPrice = OtcFormatHelper.FormatValue(obj.trade.SpotPrice ?? 0, 2).ToString();
}
}
private double formatWorstCastClientPayable(trade t, double? TradeSpan_WorstCastClientPayable)
{
double result = 0;
if (t != null && TradeSpan_WorstCastClientPayable != null)
{
result = TradeSpan_WorstCastClientPayable.Value;
}
return Math.Max(0, result);
}
}
}