从山证v2.3.0拷贝
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
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>
|
||||
/// 生成追保通知书
|
||||
/// </summary>
|
||||
public class MarginReportGenerateService : YLBaseService
|
||||
{
|
||||
public MarginReportGenerateService(OptUserInfo userInfo) : base(userInfo)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成追保通知书
|
||||
/// </summary>
|
||||
public IEnumerable<TradeDocGenerateResult> Generate(IEnumerable<int> tradeIds, DateTime? valueDate, string docType)
|
||||
{
|
||||
if (tradeIds == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(tradeIds));
|
||||
}
|
||||
|
||||
if (valueDate == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(valueDate));
|
||||
}
|
||||
|
||||
if (docType == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(docType));
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// 获取有效交易
|
||||
//----------------------------------
|
||||
//var tradeQuery = from trade in Table
|
||||
// where tradeIds.Contains(trade.id) && trade.ValidState != "InValid"
|
||||
// select trade;
|
||||
var tradeQuery = new TradeDalService(this).GetTradeOrEodTrade(tradeIds, SystemValueDate);
|
||||
|
||||
var tradeDic = tradeQuery.ToDictionary(n => n.id, n => new trade_contract_group { trade = n });
|
||||
tradeIds = tradeDic.Keys.ToArray();
|
||||
if (tradeDic.Count < 1)
|
||||
{
|
||||
throw new ServiceException("当日没有要结算的记录信息!");
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// 交易确认书数据
|
||||
//----------------------------------
|
||||
var tcrQuery = from aa in DbContext.trade_contract_r
|
||||
where tradeIds.Contains(aa.TradeId) && aa.Type == ContractTypeEnum.Trade && aa.IsValid
|
||||
select aa;
|
||||
var tcrDatas = tcrQuery.ToArray();
|
||||
foreach (var data in tcrDatas)
|
||||
{
|
||||
if (tradeDic.TryGetValue(data.TradeId, out var group))
|
||||
{
|
||||
group.ConfirmContractR = data;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// 交易预付金记录
|
||||
//----------------------------------
|
||||
var tradeSpanQuery = from tradeSpan in DbContext.trade_span
|
||||
where tradeIds.Contains(tradeSpan.TradeId) &&
|
||||
tradeSpan.ValueDate == valueDate
|
||||
select tradeSpan;
|
||||
var tradeSpans = tradeSpanQuery.ToArray();
|
||||
foreach (var data in tradeSpans)
|
||||
{
|
||||
if (tradeDic.TryGetValue(data.TradeId, out var group))
|
||||
{
|
||||
group.trade_span = data;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------
|
||||
// 生成追保通知书
|
||||
//----------------------------------
|
||||
var resultList = new List<TradeDocGenerateResult>();
|
||||
AppManager.TryResolve(out ITradeMarginReportGenerator generator);
|
||||
|
||||
foreach (var tradeContractGroup in tradeDic.Values)
|
||||
{
|
||||
if (generator == null)
|
||||
{
|
||||
resultList.Add(new TradeDocGenerateResult(tradeContractGroup.trade)
|
||||
{
|
||||
ErrorMessage = "此类型报告尚未实现"
|
||||
});
|
||||
}
|
||||
else if (!YLErp.PS.Config.Is光大光子 && tradeContractGroup.ConfirmContractR == null)
|
||||
{
|
||||
resultList.Add(new TradeDocGenerateResult(tradeContractGroup.trade)
|
||||
{
|
||||
ErrorMessage = "缺少交易确认书"
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = GenerateSingle(generator, tradeContractGroup, tradeContractGroup.trade_cash.id, docType);
|
||||
resultList.Add(result);
|
||||
}
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
private TradeDocGenerateResult GenerateSingle(ITradeMarginReportGenerator generator, trade_contract_group tradeContractGroup, int tradeCashId, string docType = "DOCX")
|
||||
{
|
||||
try
|
||||
{
|
||||
var context = new MarginReportGenerateContext(
|
||||
tradeCashId,
|
||||
tradeContractGroup.trade,
|
||||
tradeContractGroup.trade_span,
|
||||
ContractTypeEnum.Margin, OptUser);
|
||||
generator.Initialize(docType, context);
|
||||
return generator.GenerateDocument();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogFactory.GetLogger("MarginReportGenerateService").Error(ex);
|
||||
return new TradeDocGenerateResult(tradeContractGroup.trade)
|
||||
{
|
||||
Exception = ex,
|
||||
ErrorMessage = "出错:" + ex.Message
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user