保证金算法&资金计算
This commit is contained in:
@@ -165,76 +165,44 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
var nextSettleDate = QdpCalendarHelper.GetNonHoliday(settleDate.AddDays(1));
|
||||
var days = (nextSettleDate - settleDate).Days;
|
||||
logger.Info("settleDate:" + settleDate.ToString("yyyy-MM-dd") + " nextSettleDate:" + nextSettleDate + " days:" + days);
|
||||
for (var i=0; i< days; i++)
|
||||
for (var i = 0; i < days; i++)
|
||||
{
|
||||
var yesterday= settleDate.AddDays(i-1);
|
||||
var today= settleDate.AddDays(i);
|
||||
var yesterday = settleDate.AddDays(i - 1);
|
||||
var today = settleDate.AddDays(i);
|
||||
new SwapEodPositionService(OptUser).SwapPositionCompose(today, yesterday, clientIds);
|
||||
CalculateMargin(today, yesterday, clientIds);
|
||||
new SwapEodPositionService(OptUser).SwapEodCompose(today, yesterday, clientIds);
|
||||
}
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 追加预付金腿利息归档
|
||||
/// </summary>
|
||||
public void ExceuteEodSwapMarginPosi()
|
||||
{
|
||||
var settleDate = _context.SettleDate;
|
||||
var clientIds = _context.Request.ClientIds;
|
||||
var nextSettleDate = QdpCalendarHelper.GetNonHoliday(settleDate.AddDays(1));
|
||||
var days = (nextSettleDate - settleDate).Days;
|
||||
for (var i = 0; i < days; i++)
|
||||
{
|
||||
var yesterday = settleDate.AddDays(i - 1);
|
||||
var today = settleDate.AddDays(i);
|
||||
new SwapEodPositionService(OptUser).SwapEodCompose(today, yesterday, clientIds);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 框架合约汇总
|
||||
/// </summary>
|
||||
/// <param name="setTaskStep"></param>
|
||||
public void ExecuteEodSwap()
|
||||
{
|
||||
var settleDate = _context.SettleDate;
|
||||
var clientIds = _context.Request.ClientIds;
|
||||
var nextSettleDate = QdpCalendarHelper.GetNonHoliday(settleDate.AddDays(1));
|
||||
var days = (nextSettleDate - settleDate).Days;
|
||||
for (var i = 0; i < days; i++)
|
||||
{
|
||||
var yesterday = settleDate.AddDays(i - 1);
|
||||
var today = settleDate.AddDays(i);
|
||||
new SwapEodPositionService(OptUser).SwapEodCompose(today, yesterday, clientIds);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 计算互换预付金
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool CalculateMargin()
|
||||
public bool CalculateMargin(DateTime settleDate, DateTime preSettleDate, IEnumerable<int> ClientIds)
|
||||
{
|
||||
var balanceDate = _context.SettleDate;
|
||||
var preSettleDate = _context.PreSettleDate;
|
||||
var reqClientIds = _context.Request.ClientIds;
|
||||
// 构建请求对象
|
||||
CalculateMarginRequest request = new CalculateMarginRequest()
|
||||
{
|
||||
currentDate = balanceDate.ToString("yyyy-MM-dd"),
|
||||
clientIds = reqClientIds,
|
||||
preSettleDate= preSettleDate.ToString("yyyy-MM-dd")
|
||||
currentDate = settleDate.ToString("yyyy-MM-dd"),
|
||||
clientIds = ClientIds,
|
||||
preSettleDate = preSettleDate.ToString("yyyy-MM-dd")
|
||||
};
|
||||
var baseUrl = Environment.GetEnvironmentVariable("BondOmsInterface_BaseUrl");
|
||||
var calculateMarginUrl = "/marginAlgorithm/triggerMarginCalc";
|
||||
|
||||
if (!string.IsNullOrEmpty(baseUrl))
|
||||
{
|
||||
var httpHelper = new HttpHelper(baseUrl, null);
|
||||
// http 请求 Web项目接口
|
||||
var result = httpHelper.PostRequestNoAuth<CalculateMarginRequest, CalculateMarginResponse>(calculateMarginUrl, request).Result;
|
||||
if (result!=null&&!result.success)
|
||||
|
||||
if (result != null && !result.success)
|
||||
{
|
||||
throw new ServiceException($"互换预付金计算失败:{result.message}");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace YLErp.Modules.EodModule.SettlementModule
|
||||
{
|
||||
/// <summary>
|
||||
/// 检查日终流水
|
||||
/// </summary>
|
||||
public class EodCheckSwapFlow : EodSettleServiceBaseV2
|
||||
{
|
||||
public const string Step = "检查流水";
|
||||
|
||||
public EodCheckSwapFlow(EodSettlementContextV2 context) : base(context)
|
||||
{
|
||||
ResetDbContext();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查结算汇率
|
||||
/// </summary>
|
||||
public void Execute()
|
||||
{
|
||||
var settleDate = _context.SettleDate;
|
||||
var swapFlowList = DbContext.swap_flow.Where(x=>x.OccurTime==settleDate&&x.DataState==(int)SwapFlowDateStateEnum.等待完成);
|
||||
|
||||
if (swapFlowList.Any())
|
||||
{
|
||||
_context.RaiseError(Step, $"{settleDate:yyyy-MM-dd}有未簿记的流水未处理");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using YieldChain.Helpers;
|
||||
using YLErp.BLL;
|
||||
using YLErp.BLL.MarginCalculation;
|
||||
using YLErp.Configuration;
|
||||
using YLErp.DBModels.Enums;
|
||||
using YLErp.Helpers;
|
||||
using YLErp.Model;
|
||||
using YLErp.Model.Enum;
|
||||
@@ -202,7 +203,9 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
foreach (var currencyCode in currencyCodes)
|
||||
{
|
||||
fundObject.InFund.Add(currencyCode, 0);
|
||||
fundObject.VmInFund.Add(currencyCode, 0);
|
||||
fundObject.OutFund.Add(currencyCode, 0);
|
||||
fundObject.VmOutFund.Add(currencyCode, 0);
|
||||
fundObject.NetFund.Add(currencyCode, 0);
|
||||
fundObject.InFundOther.Add(currencyCode, 0);
|
||||
fundObject.OutFundOther.Add(currencyCode, 0);
|
||||
@@ -212,8 +215,10 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
}
|
||||
//入金
|
||||
var inFund = 0.0;
|
||||
var vmInFund = 0.0;
|
||||
//出金
|
||||
var outFund = 0.0;
|
||||
var vmOutFund = 0.0;
|
||||
//其他收入
|
||||
var inFundOther = 0.0;
|
||||
//其他支出
|
||||
@@ -340,9 +345,13 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
throw new Exception("客户:" + client.Name + "未配置结算币种");
|
||||
}
|
||||
clientbalancedailyPre.FundObject.InFund.Add(client.SettlementCurrency, clientbalancedailyPre.InFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmInFund.Add(client.SettlementCurrency, clientbalancedailyPre.vm_in_fund ?? 0);
|
||||
clientbalancedailyPre.FundObject.InFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.InFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmInFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.vm_in_fund_sum ?? 0);
|
||||
clientbalancedailyPre.FundObject.OutFund.Add(client.SettlementCurrency, clientbalancedailyPre.OutFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmOutFund.Add(client.SettlementCurrency, clientbalancedailyPre.vm_out_fund ?? 0);
|
||||
clientbalancedailyPre.FundObject.OutFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.OutFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmOutFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.vm_out_fund_sum ?? 0);
|
||||
clientbalancedailyPre.FundObject.NetFund.Add(client.SettlementCurrency, clientbalancedailyPre.NetFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.NetFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.NetFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.OtherFund.Add(client.SettlementCurrency, clientbalancedailyPre.OtherFund ?? 0);
|
||||
@@ -364,9 +373,13 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
if (currencyCodes.Count() == 1 && currencyCodes.FirstOrDefault() == string.Empty)
|
||||
{
|
||||
clientbalancedailyPre.FundObject.InFund.Add(string.Empty, clientbalancedailyPre.InFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmInFund.Add(string.Empty, clientbalancedailyPre.vm_in_fund ?? 0);
|
||||
clientbalancedailyPre.FundObject.InFundSum.Add(string.Empty, clientbalancedailyPre.InFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmInFundSum.Add(string.Empty, clientbalancedailyPre.vm_in_fund_sum ?? 0);
|
||||
clientbalancedailyPre.FundObject.OutFund.Add(string.Empty, clientbalancedailyPre.OutFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmOutFund.Add(string.Empty, clientbalancedailyPre.vm_out_fund ?? 0);
|
||||
clientbalancedailyPre.FundObject.OutFundSum.Add(string.Empty, clientbalancedailyPre.OutFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmOutFundSum.Add(string.Empty, clientbalancedailyPre.vm_out_fund_sum ?? 0);
|
||||
clientbalancedailyPre.FundObject.NetFund.Add(string.Empty, clientbalancedailyPre.NetFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.NetFundSum.Add(string.Empty, clientbalancedailyPre.NetFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.OtherFund.Add(string.Empty, clientbalancedailyPre.OtherFund ?? 0);
|
||||
@@ -376,9 +389,13 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
else
|
||||
{
|
||||
clientbalancedailyPre.FundObject.InFund.Add(client.SettlementCurrency, clientbalancedailyPre.InFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmInFund.Add(client.SettlementCurrency, clientbalancedailyPre.vm_in_fund ?? 0);
|
||||
clientbalancedailyPre.FundObject.InFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.InFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmInFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.vm_in_fund_sum ?? 0);
|
||||
clientbalancedailyPre.FundObject.OutFund.Add(client.SettlementCurrency, clientbalancedailyPre.OutFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmOutFund.Add(client.SettlementCurrency, clientbalancedailyPre.vm_out_fund ?? 0);
|
||||
clientbalancedailyPre.FundObject.OutFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.OutFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.VmOutFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.vm_out_fund_sum ?? 0);
|
||||
clientbalancedailyPre.FundObject.NetFund.Add(client.SettlementCurrency, clientbalancedailyPre.NetFund ?? 0);
|
||||
clientbalancedailyPre.FundObject.NetFundSum.Add(client.SettlementCurrency, clientbalancedailyPre.NetFundSum ?? 0);
|
||||
clientbalancedailyPre.FundObject.OtherFund.Add(client.SettlementCurrency, clientbalancedailyPre.OtherFund ?? 0);
|
||||
@@ -429,44 +446,35 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
|
||||
if (clientEntryexit.Direction.Equals("入金"))
|
||||
{
|
||||
if (fundObject.InFund.ContainsKey(clientEntryexit.CurrencyCode))
|
||||
// 根据 cash_type 判断资金进入哪个部分
|
||||
if (clientEntryexit.cash_type == CashTypeEnum.初保账户.ToString())
|
||||
{
|
||||
fundObject.InFund[clientEntryexit.CurrencyCode] += clientEntryexit.Money ?? 0;
|
||||
AddToFund(fundObject.InFund, clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
// 更新 NetFund
|
||||
AddToFund(fundObject.NetFund, clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.InFund.Add(clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
AddToFund(fundObject.VmInFund, clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
}
|
||||
|
||||
if (fundObject.NetFund.ContainsKey(clientEntryexit.CurrencyCode))
|
||||
{
|
||||
fundObject.NetFund[clientEntryexit.CurrencyCode] += clientEntryexit.Money ?? 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.NetFund.Add(clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
}
|
||||
|
||||
}
|
||||
else if (clientEntryexit.Direction.Equals("出金"))
|
||||
{
|
||||
if (fundObject.OutFund.ContainsKey(clientEntryexit.CurrencyCode))
|
||||
// 根据 cash_type 判断资金退出到哪个部分
|
||||
if (clientEntryexit.cash_type == CashTypeEnum.初保账户.ToString())
|
||||
{
|
||||
fundObject.OutFund[clientEntryexit.CurrencyCode] += clientEntryexit.Money ?? 0;
|
||||
AddToFund(fundObject.OutFund, clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
// 更新 NetFund
|
||||
AddToFund(fundObject.NetFund, clientEntryexit.CurrencyCode, -(clientEntryexit.Money ?? 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.OutFund.Add(clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
AddToFund(fundObject.VmOutFund, clientEntryexit.CurrencyCode, clientEntryexit.Money ?? 0);
|
||||
}
|
||||
|
||||
|
||||
if (fundObject.NetFund.ContainsKey(clientEntryexit.CurrencyCode))
|
||||
{
|
||||
fundObject.NetFund[clientEntryexit.CurrencyCode] -= clientEntryexit.Money ?? 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.NetFund.Add(clientEntryexit.CurrencyCode, -clientEntryexit.Money ?? 0);
|
||||
}
|
||||
}
|
||||
else if (clientEntryexit.Direction.Equals("其他收入"))
|
||||
{
|
||||
@@ -613,84 +621,15 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
if (balanceDate >= new DateTime(2021, 6, 25) && PS.Config.Company == CompanyEnum.中金)
|
||||
{
|
||||
var clientCashInCashOutHistorys = DbContext.clientcashincashout_history.Where(x => x.ClientId == client.id && x.HappenDate == balanceDate).ToList();
|
||||
if (balanceDate == new DateTime(2021, 6, 25))
|
||||
{
|
||||
clientCashInCashOutHistorys = DbContext.clientcashincashout_history.Where(x => x.ClientId == client.id && x.HappenDate <= new DateTime(2021, 6, 25)).ToList();
|
||||
}
|
||||
|
||||
clientCashInCashOutHistorys.ForEach(item =>
|
||||
{
|
||||
if (item.Action.Equals("入金"))
|
||||
{
|
||||
if (fundObject.InFund.ContainsKey("CNY"))
|
||||
{
|
||||
fundObject.InFund["CNY"] += item.Amount ?? 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.InFund.Add("CNY", item.Amount ?? 0);
|
||||
}
|
||||
|
||||
if (fundObject.NetFund.ContainsKey("CNY"))
|
||||
{
|
||||
fundObject.NetFund["CNY"] += item.Amount ?? 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.NetFund.Add("CNY", item.Amount ?? 0);
|
||||
}
|
||||
}
|
||||
else if (item.Action.Equals("出金"))
|
||||
{
|
||||
if (fundObject.OutFund.ContainsKey("CNY"))
|
||||
{
|
||||
fundObject.OutFund["CNY"] += Math.Abs(item.Amount ?? 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.OutFund.Add("CNY", Math.Abs(item.Amount ?? 0));
|
||||
}
|
||||
|
||||
//出金历史记录为负数,包含方向了
|
||||
if (fundObject.NetFund.ContainsKey("CNY"))
|
||||
{
|
||||
fundObject.NetFund["CNY"] += item.Amount ?? 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.NetFund.Add("CNY", item.Amount ?? 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item.Action.Equals("期权费"))
|
||||
{
|
||||
CurrChangeAmount += item.Amount ?? 0.0;
|
||||
OptionPremium += item.Amount ?? 0.0;
|
||||
}
|
||||
else if (item.Action.Equals("结算金额"))
|
||||
{
|
||||
CurrChangeAmount += item.Amount ?? 0.0;
|
||||
SettlementBalance += item.Amount ?? 0.0;
|
||||
UnwindBalance += item.Amount ?? 0.0;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
foreach (var item in currencyCodes)
|
||||
{
|
||||
if (fundObject.TodayRemainFund.ContainsKey(item))
|
||||
{
|
||||
fundObject.TodayRemainFund[item] = (fundObject.LastDayRemainFund.ContainsKey(item) ? fundObject.LastDayRemainFund[item] : 0) + (fundObject.NetFund.ContainsKey(item) ? fundObject.NetFund[item] : 0) + (fundObject.OtherFund.ContainsKey(item) ? fundObject.OtherFund[item] : 0);
|
||||
fundObject.TodayRemainFund[item] = (fundObject.LastDayRemainFund.ContainsKey(item) ? fundObject.LastDayRemainFund[item] : 0) + (fundObject.NetFund.ContainsKey(item) ? fundObject.NetFund[item] : 0) + (fundObject.VmInFund.ContainsKey(item) ? fundObject.VmInFund[item] : 0) - (fundObject.VmOutFund.ContainsKey(item) ? fundObject.VmOutFund[item] : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
fundObject.TodayRemainFund.Add(item, (fundObject.LastDayRemainFund.ContainsKey(item) ? fundObject.LastDayRemainFund[item] : 0) + (fundObject.NetFund.ContainsKey(item) ? fundObject.NetFund[item] : 0) + (fundObject.OtherFund.ContainsKey(item) ? fundObject.OtherFund[item] : 0));
|
||||
fundObject.TodayRemainFund.Add(item, (fundObject.LastDayRemainFund.ContainsKey(item) ? fundObject.LastDayRemainFund[item] : 0) + (fundObject.NetFund.ContainsKey(item) ? fundObject.NetFund[item] : 0) + (fundObject.VmInFund.ContainsKey(item) ? fundObject.VmInFund[item] : 0) - (fundObject.VmOutFund.ContainsKey(item) ? fundObject.VmOutFund[item] : 0));
|
||||
}
|
||||
|
||||
if ((client.SettlementCurrency ?? "CNY") == item || item == "")
|
||||
@@ -719,7 +658,9 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
CurrAvailAmount += fundObject.TodayRemainFund[item] * rateObj.Rate;
|
||||
LastDayAvailAmount += fundObject.LastDayRemainFund[item] * rateObj.Rate;
|
||||
inFund += fundObject.InFund[item] * rateObj.Rate;
|
||||
vmInFund += fundObject.VmInFund[item] * rateObj.Rate;
|
||||
outFund += fundObject.OutFund[item] * rateObj.Rate;
|
||||
vmOutFund += fundObject.VmOutFund[item] * rateObj.Rate;
|
||||
NetFund += fundObject.NetFund[item] * rateObj.Rate;
|
||||
inFundOther += fundObject.InFundOther[item] * rateObj.Rate;
|
||||
outFundOther += fundObject.OutFundOther[item] * rateObj.Rate;
|
||||
@@ -1019,33 +960,6 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 国君收益互换--导入持仓
|
||||
|
||||
//获取客户导入的所有持仓信息 -- 收益互换(国君)
|
||||
var clientEodPositionSwapMannual = EodPositionSwapMannual.Where(x => x.ClientId == client.id).ToList();
|
||||
if (clientEodPositionSwapMannual.Any())
|
||||
{
|
||||
double swapMargin = 0.0;
|
||||
double swappv = 0.0;
|
||||
double swappnl = 0.0;
|
||||
clientEodPositionSwapMannual.ForEach(x =>
|
||||
{
|
||||
var underly = underlyDataSource.GetData(x.UnderlyingCode);
|
||||
var variety = varietyDataSource.GetData(underly.UnderlyingTypeId);
|
||||
currencyProvider.TryGetCurrencyRate(variety.QuoteCurrency, client.SettlementCurrency, out var rateObj);
|
||||
//预付金导入是客户方向,其他值是交易员方向
|
||||
swapMargin += (x.Margin) * rateObj.Rate;
|
||||
swappv += (-x.PositionPnl + x.TotalFee) * rateObj.Rate;
|
||||
swappnl += (-x.PositionPnl * rateObj.Rate);
|
||||
});
|
||||
PayableMargin -= swapMargin;
|
||||
clientPv = (clientPv ?? 0) + swappv;
|
||||
roundedClientPv = (roundedClientPv ?? 0) + swappv;
|
||||
PositionPnl += swappnl;
|
||||
RoundedPositionPnl += swappnl;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ClientBalacedaily ClientBalace对象赋值
|
||||
if (client.BoundSide == BoundSideEnum.南向 && clientSpan != null)
|
||||
@@ -1091,7 +1005,9 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
clientbalancedaily.FrozenRedeemFunds = clientFrozenFund.RedeemFunds;
|
||||
clientbalancedaily.MarginBalance = MarginBalance;
|
||||
clientbalancedaily.InFund = inFund;
|
||||
clientbalancedaily.vm_in_fund = vmInFund;
|
||||
clientbalancedaily.OutFund = outFund;
|
||||
clientbalancedaily.vm_out_fund = vmOutFund;
|
||||
clientbalancedaily.NetFund = NetFund;
|
||||
clientbalancedaily.OtherFund = OtherFund;
|
||||
clientbalancedaily.IsTradeCredit = IsTradeCredit;
|
||||
@@ -1216,14 +1132,22 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
clientbalancedaily.NetFundSum += clientbalancedaily.FundObject.NetFundSum[item] * rateObj.Rate;
|
||||
|
||||
clientbalancedailyPre.FundObject.InFundSum.TryGetValue(item, out var preInFundSum);
|
||||
clientbalancedailyPre.FundObject.VmInFundSum.TryGetValue(item, out var vmpreInFundSum);
|
||||
clientbalancedaily.FundObject.InFund.TryGetValue(item, out var inFundToday);
|
||||
clientbalancedaily.FundObject.VmInFund.TryGetValue(item, out var vminFundToday);
|
||||
clientbalancedaily.FundObject.InFundSum[item] = preInFundSum + inFundToday;
|
||||
clientbalancedaily.FundObject.VmInFundSum[item] = vmpreInFundSum + vminFundToday;
|
||||
clientbalancedaily.InFundSum += clientbalancedaily.FundObject.InFundSum[item] * rateObj.Rate;
|
||||
clientbalancedaily.vm_in_fund_sum += clientbalancedaily.FundObject.VmInFundSum[item] * rateObj.Rate;
|
||||
|
||||
clientbalancedailyPre.FundObject.OutFundSum.TryGetValue(item, out var preOutFundSum);
|
||||
clientbalancedaily.FundObject.OutFund.TryGetValue(item, out var outFundToday);
|
||||
clientbalancedailyPre.FundObject.VmOutFundSum.TryGetValue(item, out var vmpreOutFundSum);
|
||||
clientbalancedaily.FundObject.VmOutFund.TryGetValue(item, out var vmoutFundToday);
|
||||
clientbalancedaily.FundObject.OutFundSum[item] = preOutFundSum + outFundToday;
|
||||
clientbalancedaily.FundObject.VmOutFundSum[item] = vmpreOutFundSum + vmoutFundToday;
|
||||
clientbalancedaily.OutFundSum += clientbalancedaily.FundObject.OutFundSum[item] * rateObj.Rate;
|
||||
clientbalancedaily.vm_out_fund_sum += clientbalancedaily.FundObject.VmOutFundSum[item] * rateObj.Rate;
|
||||
|
||||
clientbalancedailyPre.FundObject.OtherFundSum.TryGetValue(item, out var preOtherFundSum);
|
||||
clientbalancedaily.FundObject.OtherFund.TryGetValue(item, out var otherFundToday);
|
||||
@@ -1246,11 +1170,15 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
clientbalancedaily.FundObject.NetFundSum = clientbalancedaily.FundObject.NetFund;
|
||||
clientbalancedaily.FundObject.InFundSum = clientbalancedaily.FundObject.InFund;
|
||||
clientbalancedaily.FundObject.OutFundSum = clientbalancedaily.FundObject.OutFund;
|
||||
clientbalancedaily.FundObject.VmInFundSum = clientbalancedaily.FundObject.VmInFund;
|
||||
clientbalancedaily.FundObject.VmOutFundSum = clientbalancedaily.FundObject.VmOutFund;
|
||||
clientbalancedaily.FundObject.OtherFundSum = clientbalancedaily.FundObject.OtherFund;
|
||||
|
||||
clientbalancedaily.NetFundSum = clientbalancedaily.NetFund;
|
||||
clientbalancedaily.InFundSum = clientbalancedaily.InFund;
|
||||
clientbalancedaily.vm_in_fund_sum= clientbalancedaily.vm_in_fund;
|
||||
clientbalancedaily.OutFundSum = clientbalancedaily.OutFund;
|
||||
clientbalancedaily.vm_out_fund_sum = clientbalancedaily.vm_out_fund;
|
||||
clientbalancedaily.OtherFundSum = clientbalancedaily.OtherFund;
|
||||
}
|
||||
|
||||
@@ -1375,5 +1303,16 @@ namespace YLErp.Modules.EodModule.SettlementModule
|
||||
|
||||
return true;
|
||||
}
|
||||
private void AddToFund(Dictionary<string, double> fundDictionary, string currencyCode, double amount)
|
||||
{
|
||||
if (fundDictionary.ContainsKey(currencyCode))
|
||||
{
|
||||
fundDictionary[currencyCode] += amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
fundDictionary.Add(currencyCode, amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -489,7 +489,8 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
|
||||
{
|
||||
new EodCheckCurrency(_context).Execute();
|
||||
}
|
||||
|
||||
SetTaskStep("检查日终流水");
|
||||
new EodCheckSwapFlow(_context).Execute();
|
||||
tasks = new Task[3];
|
||||
|
||||
tasks[0] = Task.Run(() =>
|
||||
@@ -497,9 +498,6 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
|
||||
SetTaskStep("检查标的到期日");
|
||||
new EodCheckMaturityDate(_context).Execute();//t
|
||||
|
||||
SetTaskStep("合成篮子标的价格");
|
||||
new EodBasketPriceSaveService(_context).Execute();//t
|
||||
|
||||
if (PS.Config.ErpElement.SupportMultiCalendar)
|
||||
{
|
||||
SetTaskStep("为处于节假日的交易标的复制上日收盘价");
|
||||
@@ -508,121 +506,17 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
|
||||
|
||||
SetTaskStep("检查标的结算价格缺失");
|
||||
new EodCheckSettlePrice(_context).Execute();//t
|
||||
|
||||
if (PS.Config.Is厦门象屿)
|
||||
{
|
||||
SetTaskStep("检查标的参考价格缺失");
|
||||
new EodCheckReferencePrice(_context).Execute();//t
|
||||
}
|
||||
});
|
||||
|
||||
if (_request.IsSettleOtcTrades)
|
||||
{
|
||||
tasks[1] = Task.Run(() =>
|
||||
{
|
||||
//SetTaskStep("合成多空组合流水");
|
||||
//new EodHandleSwapFlowService(_context).Execute();
|
||||
|
||||
SetTaskStep("检查当日交易");
|
||||
new EodCheckNewTrade(_context).Execute();//t
|
||||
|
||||
SetTaskStep("日终结算检查");
|
||||
new EodCheckVolService(_context).Execute();//t
|
||||
|
||||
SetTaskStep("合成互换交易");
|
||||
new TradeSwapFlowMoreCheck(_context).Execute();//t
|
||||
});
|
||||
}
|
||||
|
||||
if (_request.IsSettleOtcTrades)
|
||||
{
|
||||
tasks[2] = Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("汇率收盘结算");
|
||||
new EodCurrencyRateService(_request.UserInfo).HandleAmountByCurrencyRate(_context.SettleDate, _context.Request.ClientIds);//t
|
||||
});
|
||||
}
|
||||
|
||||
WaitTasks(tasks);
|
||||
if (_request.IsSettleOtcTrades)
|
||||
{
|
||||
tasks = new[]
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("检查期权观察状态1");
|
||||
new EodCheckMonitoredTrade(_context).ExecuteTask1(SetTaskStep);//t
|
||||
}),
|
||||
Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("检查期权观察状态2");
|
||||
new EodCheckMonitoredTrade(_context).ExecuteTask2(SetTaskStep);//t
|
||||
}),
|
||||
// Task.Run(() =>
|
||||
//{
|
||||
// SetTaskStep("定期结算互换收益");
|
||||
// new EodCheckMonitoredTrade(_context).ExecuteBalanceSwapProfit(SetTaskStep);//t
|
||||
//})
|
||||
Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("定期归档收益互换");
|
||||
new EodCheckMonitoredTrade(_context).ExecuteEodSwapPosition(SetTaskStep);//t
|
||||
})
|
||||
};
|
||||
|
||||
WaitTasks(tasks);
|
||||
|
||||
SetTaskStep("自动延期结算");
|
||||
new EodDelaySettlementTrade(_context).Execute(_report.SetErrorTips);//t
|
||||
|
||||
SetTaskStep("检查当日交易");
|
||||
new EodCheckNewTrade(_context).Execute();//t
|
||||
SetTaskStep("检查当日到期交易");
|
||||
new EodCheckMaturityTrade(_context).Execute();//t
|
||||
SetTaskStep("定期归档收益互换");
|
||||
new EodCheckMonitoredTrade(_context).ExecuteEodSwapPosition(SetTaskStep);//t
|
||||
}
|
||||
new EodCheckMonitoredTrade(_context).CalculateMargin();
|
||||
new EodCheckMonitoredTrade(_context).ExecuteEodSwap();
|
||||
tasks = new Task[4];
|
||||
|
||||
if (_request.IsSettleExchangeTrades)
|
||||
{
|
||||
//tasks[0] = Task.Run(() =>
|
||||
//{
|
||||
// if (_context.Request.ClientIds == null)
|
||||
// {
|
||||
// SetTaskStep("场内期权结算");
|
||||
// new ExchangeOptionSettlementService(_context.UserInfo).Execute(_context.SettleDate); //t
|
||||
// }
|
||||
//});
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (_request.IsSettleOtcTrades)
|
||||
{
|
||||
tasks[0] = Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("备份场外交易");
|
||||
SaveEodTrade(_context, _cancellationTokenSource.Token);//t
|
||||
});
|
||||
tasks[1] = Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("检查权利金应付日");
|
||||
new EodCheckPremiumPayDate(_context).Execute();//t
|
||||
});
|
||||
|
||||
if (_context.SettlementConfig.CalcForwradMargin)
|
||||
{
|
||||
tasks[2] = Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("远期预付金成本结算");
|
||||
new EodForwardMarginSettlement(_context).Execute();//t
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
//敏感数据计算
|
||||
|
||||
|
||||
WaitTasks(tasks);
|
||||
}
|
||||
|
||||
SetTaskStep("日终持仓结算");
|
||||
@@ -648,61 +542,7 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
|
||||
|
||||
SetTaskStep("结算客户资金");
|
||||
new EodClientBalanceCalc(_context).ClientBalanceCalc();
|
||||
|
||||
//客户资金买卖权分开算
|
||||
if (_context.SettlementConfig.CalcBuySell)
|
||||
{
|
||||
new EodClientBalanceCalcBS(_context.UserInfo).ClientBalanceByDay(_context.SettleDate, null);
|
||||
}
|
||||
_context.LogInfo("结束任务:结算客户资金");
|
||||
|
||||
if (PS.Config.ErpElement.UseSettleDataAcquisition)
|
||||
{
|
||||
SetTaskStep("配合数据采集,限额监控数据落地");
|
||||
var service = new QuotaMonitorService(_context.UserInfo);
|
||||
if (_context.IsCurrentDay)
|
||||
{
|
||||
service.EodSettlementExecute(_context.SettleDate);
|
||||
}
|
||||
|
||||
service.EodSensitiveDataCalc(_context);
|
||||
|
||||
_context.LogInfo("结束任务:限额监控数据落地");
|
||||
}
|
||||
|
||||
//todo:客户日终结算完成发送行权到期邮件提醒
|
||||
|
||||
tasks = new Task[2];
|
||||
|
||||
if (_request.IsSettleExchangeTrades)
|
||||
{
|
||||
tasks[0] = Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("准备次日数据");
|
||||
new EodDividenService(_context).Execute(eodPositionService.EodTradePositions);//t
|
||||
});
|
||||
}
|
||||
|
||||
if (_request.IsSettleOtcTrades)
|
||||
{
|
||||
tasks[1] = Task.Run(() =>
|
||||
{
|
||||
SetTaskStep("除权除息");
|
||||
var otcTrades = _context.OtcTrades.Where(t => !ConsTrade.TradeCompleteStatus.Contains(t.TradeStatus)).ToList();
|
||||
var tradeIds = otcTrades.Select(O => O.id);
|
||||
var parentTradeIds = otcTrades.Where(O => O.ParentTradeId > 0 && !tradeIds.Contains(O.ParentTradeId)).Select(O => O.ParentTradeId).ToHashSet();
|
||||
if (parentTradeIds.Any())
|
||||
{
|
||||
using var db = DbContextFactory.GetYLDbContext();
|
||||
var parentTrades = new TradeDalService(_context.UserInfo).GetTradeOrEodTrade(parentTradeIds, _context.SettleDate);
|
||||
otcTrades.AddRange(parentTrades);
|
||||
}
|
||||
new EodDividenService(_context).Execute(otcTrades);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
WaitTasks(tasks);
|
||||
}
|
||||
|
||||
_cancellationTokenSource.Token.ThrowIfCancellationRequested();
|
||||
@@ -711,32 +551,6 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
|
||||
//{
|
||||
AddOrUpdateEodStatus(_request);
|
||||
//}
|
||||
|
||||
//兴证日终持仓数据上传数据中心的FTP服务器
|
||||
if (PS.Config.Company == CompanyEnum.兴证 && _context.IsCurrentDay)
|
||||
{
|
||||
Task.Run(() => XingZhengService.EodExecute(_context));
|
||||
}
|
||||
|
||||
//日终数据采集
|
||||
if (PS.Config.Company == CompanyEnum.长江)
|
||||
{
|
||||
Task.Run(() => ChangJiangService.EodExecute(_context, _request.VolType, _request.UseClosePrice ? "收盘价" : "结算价"));
|
||||
}
|
||||
|
||||
//东证
|
||||
if (PS.Config.Company == CompanyEnum.润和)
|
||||
{
|
||||
Task.Run(() => DongZhengService.EodExecute(_context));
|
||||
}
|
||||
|
||||
|
||||
//广发商贸
|
||||
if (PS.Config.Company == CompanyEnum.广发商贸 && _request.VolType == "对冲" && _request.UseClosePrice)
|
||||
{
|
||||
Task.Run(() => GuangFaService.EodExecute(_context));
|
||||
}
|
||||
|
||||
sw.Stop();
|
||||
|
||||
elapsedMilliseconds = sw.ElapsedMilliseconds;
|
||||
|
||||
Reference in New Issue
Block a user