从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user