Files
zszq-trs/YLErpDAL/Modules/TradeModule/DocGenerateModule/RDBatchEndBillGenerateService.cs
T
2024-05-09 14:06:26 +08:00

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;
}
}
}