从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
using BaseOUDAL;
|
||||
|
||||
namespace YLErp.Modules.ClientModule
|
||||
{
|
||||
public class ClientCreditRiskService : YLBaseService
|
||||
{
|
||||
public ClientCreditRiskService(OptUserInfo userInfo) : base(userInfo)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public SearchListResult<ClientCreditRiskInfo> clientCreditRisksQuery(ClientCreditRiskReq req)
|
||||
{
|
||||
//客户 vm im -- clientsapn
|
||||
//预付金授信额度 预付金占用 追保额度pfe pfe授信额度 后付交易费用
|
||||
var clientQuery = DbContextFactory.GetClientDbContext(OptUser).client.AsQueryable().Where(a=> req.CurUserClientIds.Contains(a.id));
|
||||
|
||||
if (req.ClientIds != null && req.ClientIds.Count > 0)
|
||||
{
|
||||
clientQuery = clientQuery.Where(o => req.ClientIds.Contains(o.id));
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(req.BoundSide))
|
||||
{
|
||||
clientQuery = clientQuery.Where(o => o.BoundSide == (req.BoundSide == "0" ? DBModels.BoundSideEnum.北向 : DBModels.BoundSideEnum.南向));
|
||||
}
|
||||
var clients = clientQuery.ToList();
|
||||
if (clients == null || clients.Count() < 1)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var ids = clients.Select(o => o.id);
|
||||
var query = from span in DbContext.client_span
|
||||
where span.ValueDate == req.ValueDate && ids.Contains(span.ClientId)
|
||||
|
||||
join clientbalances in DbContext.ClientBalanceDaily.Where(o => o.BalanceDate == req.ValueDate)
|
||||
on span.ClientId equals clientbalances.ClientId
|
||||
into clientbalances
|
||||
from clientbalance in clientbalances.DefaultIfEmpty()
|
||||
|
||||
join credits in DbContext.credit.Where(o => o.CreditStartDate <= req.ValueDate && o.CreditDeadLine >= req.ValueDate && o.ProcessOrderId == -2)
|
||||
on span.ClientId equals credits.ClientId
|
||||
into credits
|
||||
from credit in credits.DefaultIfEmpty()
|
||||
|
||||
select new ClientCreditRiskInfo
|
||||
{
|
||||
clientId = span.ClientId,
|
||||
clientName = clientbalance.ClientName,
|
||||
clientNumber = clientbalance.ClientNumber,
|
||||
VM = span.VM,
|
||||
IM = span.IM,
|
||||
PFE = span.PFE,
|
||||
MarginLimit = credit.MarginLimit,
|
||||
Credit = credit.Credit,
|
||||
PFECredit = credit.PFECredit,
|
||||
PFEMargin = span.IM,
|
||||
Commission = -span.Commission,
|
||||
Margin = -clientbalance.Margin,
|
||||
MarginUsed = -clientbalance.PayableMargin,
|
||||
CashRemain = clientbalance.ToDayRemainFund,
|
||||
AvailableFund = (clientbalance.MarginBalance ?? 0.0) + (clientbalance.PayableMargin ?? 0.0) - (clientbalance.FrozenMarginMoney ?? 0.0) - (clientbalance.TodayRemianFundProduct ?? 0.0)
|
||||
};
|
||||
|
||||
var querylist = query.ToList();
|
||||
foreach (var item in querylist)
|
||||
{
|
||||
var client = clients.FirstOrDefault(o => o.id == item.clientId);
|
||||
if (item.MarginLimit == null)
|
||||
{
|
||||
if (client.BoundSide == BoundSideEnum.南向)
|
||||
{
|
||||
item.MarginLimit = 50000;
|
||||
}
|
||||
if (client.BoundSide == BoundSideEnum.北向)
|
||||
{
|
||||
item.MarginLimit = 10000;
|
||||
}
|
||||
}
|
||||
item.boundSide = client.BoundSide;
|
||||
item.CurrencyCode = client.SettlementCurrency;
|
||||
item.MarginUsed = Math.Max(item.MarginUsed ?? 0, 0);
|
||||
}
|
||||
if (req.NeedMarginCall ?? false)
|
||||
{
|
||||
querylist = querylist.Where(o => o.Margin >= o.MarginLimit).ToList();
|
||||
}
|
||||
//是否需要追保
|
||||
var searchList = querylist.AsQueryable().ToSearchList(req);
|
||||
return searchList;
|
||||
}
|
||||
|
||||
public bool ClientNeedMarginCall(int clientId, DateTime endDate, out string ClientName)
|
||||
{
|
||||
var info = (from cb in DbContext.ClientBalanceDaily
|
||||
join credits in DbContext.credit
|
||||
on cb.ClientId equals credits.ClientId
|
||||
into credits
|
||||
from credit in credits.Where(o => o.CreditStartDate <= endDate && o.CreditDeadLine >= endDate && o.ProcessOrderId == -2).DefaultIfEmpty()
|
||||
where cb.ClientId == clientId && cb.BalanceDate == endDate
|
||||
select new MarginInfo
|
||||
{
|
||||
ClientName = cb.ClientName,
|
||||
Margin = cb.Margin,
|
||||
Credit = credit == null ? null : credit.Credit,
|
||||
MarginLimit = credit == null ? null : credit.MarginLimit,
|
||||
}).FirstOrDefault();
|
||||
if (info.MarginLimit == null)
|
||||
{
|
||||
var client = DataCacheProvider.GetClientDataSource().GetData(clientId);
|
||||
if (client.BoundSide == BoundSideEnum.南向)
|
||||
{
|
||||
info.MarginLimit = 50000;
|
||||
}
|
||||
if (client.BoundSide == BoundSideEnum.北向)
|
||||
{
|
||||
info.MarginLimit = 10000;
|
||||
}
|
||||
}
|
||||
ClientName = info.ClientName;
|
||||
return -info.Margin > info.MarginLimit;
|
||||
}
|
||||
|
||||
public string GetTemplateName(int clientId)
|
||||
{
|
||||
var client = DataCacheProvider.GetClientDataSource().GetData(clientId);
|
||||
var templateName = new ClientConfirmTemplateService(OptUser).GetTemplateName(clientId, "邮件模板");
|
||||
if (string.IsNullOrWhiteSpace(templateName))
|
||||
{
|
||||
templateName = client.BoundSide == BoundSideEnum.南向 ? "南向" : "北向";
|
||||
}
|
||||
return templateName;
|
||||
}
|
||||
}
|
||||
|
||||
public class ClientCreditRiskReq : BaseSearchReq
|
||||
{
|
||||
public List<int> ClientIds { get; set; }
|
||||
|
||||
public string BoundSide { get; set; }
|
||||
|
||||
public bool? NeedMarginCall { get; set; }
|
||||
|
||||
public DateTime? ValueDate { get; set; }
|
||||
|
||||
public List<int> CurUserClientIds { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class ClientCreditRiskInfo
|
||||
{
|
||||
public int clientId { get; set; }
|
||||
public string clientNumber { get; set; }
|
||||
|
||||
public string clientName { get; set; }
|
||||
|
||||
public BoundSideEnum boundSide { get; set; }
|
||||
|
||||
public string CurrencyCode { get; set; }
|
||||
//VM
|
||||
public double? VM { get; set; }
|
||||
//IM
|
||||
public double? IM { get; set; }
|
||||
//预付金额度?
|
||||
public double? Credit { get; set; }
|
||||
//后付手续费
|
||||
public double? Commission { get; set; }
|
||||
//预付金占用
|
||||
public double? MarginUsed { get; set; }
|
||||
//追保金额
|
||||
public double? Margin { get; set; }
|
||||
//合格履约品价值
|
||||
|
||||
public double? CashRemain { get; set; }
|
||||
//可用履约品价值
|
||||
|
||||
public double? AvailableFund { get; set; }
|
||||
//最小转账金额
|
||||
|
||||
public double? MarginLimit { get; set; }
|
||||
|
||||
public double? PFE { get; set; }
|
||||
//追保金额pfe
|
||||
public double? PFEMargin { get; set; }
|
||||
//pfe授信额度
|
||||
public double? PFECredit { get; set; }
|
||||
}
|
||||
|
||||
public class MarginInfo
|
||||
{
|
||||
public string ClientName { get; set; }
|
||||
|
||||
public double? Margin { get; set; }
|
||||
|
||||
public double? Credit { get; set; }
|
||||
|
||||
public double? MarginLimit { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user