120 lines
5.1 KiB
C#
120 lines
5.1 KiB
C#
using YLErp.BLL;
|
|
using YLErp.DBModels.Consts;
|
|
using YLErp.Model;
|
|
using YLErp.Models;
|
|
using YLErp.Modules.TradeDalModule;
|
|
using YLErp.Plugins.TradeDocGenerator.Abstracts;
|
|
|
|
namespace YLErp.Modules.TradeModule.DocGenerateModule
|
|
{
|
|
/// <summary>
|
|
/// 根据传入的TradeCashIds生成文档,不检查TradeCash状态
|
|
/// </summary>
|
|
public class RDBatchEndBillGenerateService : BatchUnwindReportGenerateService
|
|
{
|
|
public RDBatchEndBillGenerateService(OptUserInfo userInfo) : base(userInfo)
|
|
{
|
|
|
|
}
|
|
public IEnumerable<TradeDocGenerateResult> Generate(IEnumerable<int> tradeCashIds, IEnumerable<int> tradeIds, string docType, int userId, string userName, DateTime? startDate = null, DateTime? endDate = null)
|
|
{
|
|
if (tradeCashIds != null && tradeCashIds.Any())
|
|
{
|
|
tradeIds = DbContext.trade_cash.Where(x => tradeCashIds.Contains(x.id) && !x.IsDeleted).Select(x => x.TradeId).Distinct();
|
|
}
|
|
if (tradeIds == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(tradeIds));
|
|
}
|
|
|
|
if (docType == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(docType));
|
|
}
|
|
|
|
var valueDate = valuedateBLL.ValueDate;
|
|
var tradeCashStatus = new string[] { ClientCashInCashOut.系统操作_行权费, ClientCashInCashOut.系统操作_平仓费, ClientCashInCashOut.系统操作_互换, ClientCashInCashOut.系统操作_票息 };
|
|
|
|
//----------------------------------
|
|
// 获取当日行权 平仓 到期的有效交易
|
|
//----------------------------------
|
|
TradeDalService service = new TradeDalService(this);
|
|
var allTrade = service
|
|
.GetTradeOrEodTrade(tradeIds, valueDate)
|
|
.Where(O =>
|
|
(O.UnWindDate <= valueDate || O.UnWindDate == null)
|
|
&& O.ClientId != 0).ToList();
|
|
|
|
if (!allTrade.Any())
|
|
{
|
|
throw new ServiceException("当日没有要结算的记录信息!");
|
|
}
|
|
var tradeList = allTrade/*.Where(O => O.ParentTradeId == 0)*/;
|
|
|
|
tradeIds = allTrade.Select(O => O.id).ToArray();
|
|
//var parentTradeIds = allTrade.Where(O => O.ParentTradeId != 0).Distinct().ToDictionary(K => K.id, V => V.ParentTradeId);
|
|
//var parentTrades = service
|
|
// .GetTradeOrEodTrade(parentTradeIds.Values, valueDate)
|
|
// .Where(O =>
|
|
// O.UnWindDate <= valueDate
|
|
// && O.ClientId != 0);
|
|
var tradeDic = tradeList./*Concat(parentTrades).*/ToDictionary(n => n.id, n => new trade_contract_group { trade = n });
|
|
|
|
//----------------------------------
|
|
// 交易确认书数据
|
|
//----------------------------------
|
|
var tcrQuery = from aa in DbContext.trade_contract_r
|
|
where (tradeIds.Contains(aa.TradeId) && aa.IsValid
|
|
//|| parentTradeIds.Values.Contains(aa.TradeId)
|
|
)
|
|
&& aa.Type == ContractTypeEnum.Trade
|
|
select aa;
|
|
var tcrDatas = tcrQuery.ToDictionary(K => K.TradeId, V => V);
|
|
foreach (var data in tradeDic)
|
|
{
|
|
int id = data.Key;
|
|
if (data.Value.trade.ParentTradeId != 0)
|
|
{ id = data.Value.trade.ParentTradeId; }
|
|
if (tcrDatas.TryGetValue(id, out var tcr))
|
|
{ data.Value.ConfirmContractR = tcr; }
|
|
}
|
|
|
|
//----------------------------------
|
|
// 找到TradeCashId对应的TradeCash
|
|
//----------------------------------
|
|
var cashQuery = from tradeCash in DbContext.trade_cash
|
|
where tradeCashIds.Contains(tradeCash.id) &&
|
|
tradeCash.ValidState != ConsGlobal.InValid && !tradeCash.IsDeleted
|
|
&& tradeCashStatus.Contains(tradeCash.Action)
|
|
select tradeCash;
|
|
//var cashDatas = cashQuery.GroupBy(O => O.TradeId).ToDictionary(K => K.Key, V => V);
|
|
List<trade> tradelist = new List<trade>();
|
|
foreach (var data in cashQuery)
|
|
{
|
|
trade t = tradeDic[data.TradeId].trade.Clone();
|
|
t.trade_cash = data;
|
|
tradelist.Add(t);
|
|
}
|
|
|
|
var resultList = new List<TradeDocGenerateResult>();
|
|
|
|
AppManager.TryResolve(out ITradeUnwindReportGenerator generatorV2);
|
|
if (generatorV2 != null)
|
|
{
|
|
|
|
var result = base.GenerateSingleV2(generatorV2, tradelist, tradeCashIds, docType, startDate, endDate);
|
|
resultList.Add(result);
|
|
}
|
|
else
|
|
{
|
|
foreach (var item in tradeDic)
|
|
{
|
|
resultList.Add(base.GenerateSingleV1(item.Value, OptUser.UserId, OptUser.UserName, docType));
|
|
}
|
|
}
|
|
|
|
return resultList;
|
|
}
|
|
}
|
|
}
|