从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
using NPOI.SS.Formula.Functions;
|
||||
using Org.BouncyCastle.Ocsp;
|
||||
using System.Diagnostics;
|
||||
using YLErp.DBModels.Consts;
|
||||
using YLErp.Models;
|
||||
using YLErp.Plugins.TradeDocGenerator.Abstracts;
|
||||
|
||||
namespace YLErp.Modules.TradeModule.DocGenerateModule
|
||||
{
|
||||
public class TransactionGenerateService : BatchSettlementBillGenerateService
|
||||
{
|
||||
public TransactionGenerateService(OptUserInfo userInfo) : base(userInfo)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成确认书
|
||||
/// </summary>
|
||||
/// <param name="clientID">要生成确认书的客户Id</param>
|
||||
/// <param name="docType">生成的确认书文件类型</param>
|
||||
/// <param name="errors">错误信息</param>
|
||||
/// <param name="files">生成的确认书文件路径</param>
|
||||
/// <param name="startDate">持仓日期区间-开始日期</param>
|
||||
/// <param name="endDate">持仓日期区间-结束日期</param>
|
||||
/// <param name="TradeTypes">要包含的交易类型</param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<TradeDocGenerateResult> Generate(int[] clientIds, string docType, DateTime startDate, DateTime endDate, string[] TradeTypes, List<int> sealResults)
|
||||
{
|
||||
var idquery = from tc in DbContext.trade_cash
|
||||
join t in DbContext.trade
|
||||
on tc.TradeId equals t.id
|
||||
where t.TradeType == "累计期权"
|
||||
&& t.ValidState != ConsGlobal.InValid
|
||||
&& ConsTrade.TradeCompleteStatus.Contains(t.TradeStatus)
|
||||
&& tc.Action != "系统操作-期权费"
|
||||
&& tc.ValidState != ConsGlobal.InValid
|
||||
&& tc.IsDeleted != true
|
||||
group tc by tc.TradeId into g
|
||||
select new
|
||||
{
|
||||
Key = g.Key,
|
||||
list = g.ToList()
|
||||
};
|
||||
|
||||
var ids = idquery.ToList().Select(x => x.list.OrderByDescending(i => i.ValueDate).FirstOrDefault()).Where(t => t.ValueDate >= startDate
|
||||
&& t.ValueDate <= endDate).Select(x => x.id).ToList();
|
||||
|
||||
var tid2 = DbContext.trade.Where(x => x.TradeType == "累计期权" && x.ValidState != ConsGlobal.InValid && x.TradeDate >= startDate && x.TradeDate <= endDate).Select(x => x.id).ToList();
|
||||
var tcid2 = DbContext.trade_cash.Where(x => x.Action == "系统操作-期权费" && x.ValidState != ConsGlobal.InValid
|
||||
&& x.IsDeleted != true && tid2.Contains(x.TradeId)).AsEnumerable().GroupBy(x => x.TradeId).Select(x => x.FirstOrDefault().id).ToList();
|
||||
|
||||
var tcid = ids.Union(tcid2);
|
||||
|
||||
var query1 = (from tc in DbContext.trade_cash
|
||||
join t in DbContext.trade
|
||||
on tc.TradeId equals t.id
|
||||
where
|
||||
TradeTypes.Contains(t.TradeType)
|
||||
&& tcid.Contains(tc.id)
|
||||
select new { t, tc });
|
||||
|
||||
var query2 = (from tc in DbContext.trade_cash
|
||||
join t in DbContext.trade
|
||||
on tc.TradeId equals t.id
|
||||
where
|
||||
t.ValidState != ConsGlobal.InValid
|
||||
&& tc.ValidState != ConsGlobal.InValid
|
||||
&& tc.IsDeleted != true
|
||||
&& tc.ValueDate >= startDate
|
||||
&& tc.ValueDate <= endDate
|
||||
&& TradeTypes.Contains(t.TradeType)
|
||||
&& t.TradeType != "累计期权"
|
||||
select new { t, tc });
|
||||
|
||||
var dict = query1.Union(query2);
|
||||
|
||||
if (sealResults != null && sealResults.Count > 0)
|
||||
{
|
||||
var docQuery = from dic in dict
|
||||
join tcr in (from aa in DbContext.trade_contract_r
|
||||
where aa.Type == ContractTypeEnum.Clearing && aa.IsValid
|
||||
select aa) on dic.t.id equals tcr.TradeId into tcr1
|
||||
from tcr in tcr1.DefaultIfEmpty()
|
||||
join doc in DbContext.trade_contract_document
|
||||
on tcr.ContractCode equals doc.Code into tempDoc
|
||||
from doc in tempDoc.DefaultIfEmpty()
|
||||
select new
|
||||
{
|
||||
t = dic.t,
|
||||
tc = dic.tc,
|
||||
doc
|
||||
};
|
||||
|
||||
|
||||
|
||||
if (sealResults.Contains(2))
|
||||
{
|
||||
docQuery = docQuery.Where(t => sealResults.Contains((int)t.doc.SealResult) || t.doc.SealResult == null);
|
||||
}
|
||||
else
|
||||
{
|
||||
docQuery = docQuery.Where(t => sealResults.Contains((int)t.doc.SealResult));
|
||||
}
|
||||
|
||||
dict = docQuery.Select(d => new { d.t, d.tc });
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (clientIds != null && clientIds.Any())
|
||||
{
|
||||
dict = dict.Where(x => clientIds.Contains(x.t.ClientId));
|
||||
}
|
||||
|
||||
var tradelist = dict.ToList();
|
||||
|
||||
foreach (var trade in tradelist)
|
||||
{
|
||||
if (trade.t != null && trade.tc != null && trade.t.TradeType == "累计期权" && trade.tc.Action != "系统操作-期权费")
|
||||
{
|
||||
trade.tc.UnwindNotional = trade.t.OriginalNotional;
|
||||
var amount = DbContext.trade_cash.Where(x => x.Action != "系统操作-期权费" && x.ValidState != ConsGlobal.InValid
|
||||
&& x.IsDeleted != true && trade.t.id == x.TradeId).Sum(x => x.Amount);
|
||||
trade.tc.Amount = amount;
|
||||
}
|
||||
}
|
||||
|
||||
var list = tradelist.Select(O => { O.t.trade_cash = O.tc.Clone(); return O.t.Clone(); }).GroupBy(O => new { O.trade_cash.ValueDate, O.ClientId })
|
||||
.ToDictionary(K => K.Key, V => V.ToList());
|
||||
|
||||
AppManager.TryResolve(out ITradeSettleBillGenerator generatorV2);
|
||||
var resultList = new List<TradeDocGenerateResult>();
|
||||
foreach (var item in list)
|
||||
{
|
||||
if (generatorV2 != null)
|
||||
{
|
||||
var tcIds = item.Value.Select(x => x.trade_cash.id).Distinct().ToList();
|
||||
var results = base.GenerateSingleV2(generatorV2, item.Value.ToList(), tcIds, docType, startDate, endDate);
|
||||
resultList.Add(results);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ServiceException("确认书插件不存在");
|
||||
}
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user