feat(trade): 添加确认书生成服务的日志记录功能
- 在 GJGenerateConfirmBook 方法中添加详细的日志记录 - 记录交易ID数量、文档类型、开始结束日期等关键参数 - 添加浙商生成确认书流程的日志记录 - 记录 tradeIds 为空或未找到交易记录的情况 - 添加查询交易记录、客户ID、持仓记录的统计日志 - 记录分组处理过程中的详细信息 - 为 groupGenerateHandle_Date 和 groupGenerateHandle 方法添加日志记录 - 记录交易处理、补充协议日期、单双章确认书生成过程 - 添加最终生成结果的统计日志
This commit is contained in:
@@ -195,6 +195,9 @@ namespace YLErp.Modules.TradeModule.DealModule
|
||||
public bool GJGenerateConfirmBook(List<int> tradeIds, string docType,
|
||||
out IEnumerable<string> errors, out IEnumerable<string> files, DateTime? startDate = null, DateTime? endDate = null)
|
||||
{
|
||||
var logger = LogFactory.GetLogger("生成确认书");
|
||||
logger.Info($"[GJGenerateConfirmBook] 开始生成确认书 - tradeIds.Count: {tradeIds?.Count ?? 0}, docType: {docType}, startDate: {startDate}, endDate: {endDate}");
|
||||
|
||||
Func<int, string> getUnderlyingInstrumentType = new Func<int, string>((underlyingId) =>
|
||||
{
|
||||
return DataCacheProvider.GetUnderlyingDataSource().GetData(underlyingId)?.UnderlyingInstrumentType;
|
||||
@@ -204,9 +207,30 @@ namespace YLErp.Modules.TradeModule.DealModule
|
||||
List<string> file = new List<string>();
|
||||
if (PS.Config.Company == CompanyEnum.浙商)
|
||||
{
|
||||
LogFactory.GetLogger("生成确认书").Error("浙商生成确认书");
|
||||
logger.Info("[GJGenerateConfirmBook] 生成确认书流程");
|
||||
|
||||
if (tradeIds == null || !tradeIds.Any())
|
||||
{
|
||||
logger.Info("[GJGenerateConfirmBook] tradeIds 为空,直接返回");
|
||||
errors = new List<string>();
|
||||
files = new List<string>();
|
||||
return true;
|
||||
}
|
||||
|
||||
var trades = DbContext.trade.Where(x => tradeIds.Contains(x.id)).AsNoTracking().ToList();
|
||||
logger.Info($"[GJGenerateConfirmBook] 查询到交易记录数: {trades.Count}");
|
||||
|
||||
if (!trades.Any())
|
||||
{
|
||||
logger.Info("[GJGenerateConfirmBook] 未找到交易记录,直接返回");
|
||||
errors = new List<string>();
|
||||
files = new List<string>();
|
||||
return true;
|
||||
}
|
||||
|
||||
var clientIds = trades.Select(x => x.ClientId).Distinct().ToList();
|
||||
logger.Info($"[GJGenerateConfirmBook] 客户ID数: {clientIds.Count}");
|
||||
|
||||
var allTrades = DbContext.trade.Where(x => clientIds.Contains(x.ClientId) && x.ValidState != ConsGlobal.InValid);
|
||||
if (startDate.HasValue)
|
||||
{
|
||||
@@ -219,59 +243,127 @@ namespace YLErp.Modules.TradeModule.DealModule
|
||||
var Ids = allTrades.Select(o => o.id).Distinct().ToArray();
|
||||
var swapPositions = DbContext.swap_position.Where(s => Ids.Contains(s.SwapTradeId) && s.IsInitial && s.PositionType > 0 && !s.Invalid)
|
||||
.Distinct().ToList();
|
||||
logger.Info($"[GJGenerateConfirmBook] 查询到持仓记录数: {swapPositions.Count}");
|
||||
|
||||
var allTradeList = allTrades.AsNoTracking().ToList();
|
||||
foreach (var item in allTradeList)
|
||||
{
|
||||
item.swap_positions.Add(swapPositions.FirstOrDefault(o => o.SwapTradeId == item.id));
|
||||
}
|
||||
allTradeList = allTradeList.Where(x => x.swap_positions.Any()).ToList();
|
||||
logger.Info($"[GJGenerateConfirmBook] 过滤后有持仓的交易数: {allTradeList.Count}");
|
||||
|
||||
// 按照客户ID、交易日期、多空头进行分组
|
||||
var group = allTradeList.GroupBy(O => new { O.ClientId, O.StartDate, O.swap_positions.FirstOrDefault().PositionType })
|
||||
var group = allTradeList.GroupBy(O => new { O.ClientId, O.StartDate, O.swap_positions.FirstOrDefault()?.PositionType })
|
||||
.ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList());
|
||||
|
||||
logger.Info($"[GJGenerateConfirmBook] 分组数: {group.Count}");
|
||||
|
||||
foreach (var item in group)
|
||||
{
|
||||
LogFactory.GetLogger("生成确认书").Error("浙商生成确认书" + item.Value.Distinct().ToList().Count());
|
||||
var tradeCount = item.Value.Distinct().Count();
|
||||
logger.Info($"[GJGenerateConfirmBook] 处理分组 - ClientId: {item.Key.ClientId}, StartDate: {item.Key.StartDate}, PositionType: {item.Key.PositionType}, 交易数: {tradeCount}");
|
||||
groupGenerateHandle(item.Value.Distinct().ToList(), docType, startDate, endDate, results, error, file);
|
||||
}
|
||||
}
|
||||
errors = results.Where(n => !string.IsNullOrWhiteSpace(n.ErrorMessage)).Select(n => n.ErrorMessage).ToList();
|
||||
files = results.Where(n => !string.IsNullOrWhiteSpace(n.OutputFilePath)).Select(n => n.OutputFilePath).ToList();
|
||||
logger.Info($"[GJGenerateConfirmBook] 完成生成确认书 - 错误数: {errors.Count()}, 文件数: {files.Count()}");
|
||||
return !errors.Any();
|
||||
}
|
||||
|
||||
private void groupGenerateHandle_Date(List<int> ids, string docType, DateTime? startDate, DateTime? endDate, List<TradeDocGenerateResult> results, List<string> error, List<string> file)
|
||||
{
|
||||
var logger = LogFactory.GetLogger("生成确认书");
|
||||
logger.Info($"[groupGenerateHandle_Date] 开始处理 - ids.Count: {ids?.Count ?? 0}");
|
||||
|
||||
if (ids == null || !ids.Any())
|
||||
{
|
||||
logger.Info("[groupGenerateHandle_Date] ids 为空,直接返回");
|
||||
return;
|
||||
}
|
||||
|
||||
var trades = DbContext.trade.Where(c => ids.Contains(c.id)).ToList();
|
||||
var supProtocolDate = DataCacheProvider.GetClientDataSource().GetData(trades.FirstOrDefault().ClientId).SupProtocolDate;
|
||||
logger.Info($"[groupGenerateHandle_Date] 查询到交易数: {trades.Count}");
|
||||
|
||||
if (!trades.Any())
|
||||
{
|
||||
logger.Info("[groupGenerateHandle_Date] 未找到交易记录,直接返回");
|
||||
return;
|
||||
}
|
||||
|
||||
var firstTrade = trades.FirstOrDefault();
|
||||
if (firstTrade == null)
|
||||
{
|
||||
logger.Info("[groupGenerateHandle_Date] 第一条交易记录为 null,直接返回");
|
||||
return;
|
||||
}
|
||||
|
||||
var client = DataCacheProvider.GetClientDataSource().GetData(firstTrade.ClientId);
|
||||
if (client == null)
|
||||
{
|
||||
logger.Info($"[groupGenerateHandle_Date] 未找到客户信息 - ClientId: {firstTrade.ClientId}");
|
||||
return;
|
||||
}
|
||||
|
||||
var supProtocolDate = client.SupProtocolDate;
|
||||
logger.Info($"[groupGenerateHandle_Date] 客户补充协议日期: {supProtocolDate}");
|
||||
|
||||
var groupDateDouble = trades.Where(x => supProtocolDate == null || x.TradeDate < supProtocolDate).Select(x => x.id).ToList();
|
||||
var groupDateSingle = trades.Where(x => supProtocolDate != null && x.TradeDate >= supProtocolDate).Select(x => x.id).ToList();
|
||||
|
||||
logger.Info($"[groupGenerateHandle_Date] 双章确认书交易数: {groupDateDouble.Count}, 单章确认书交易数: {groupDateSingle.Count}");
|
||||
|
||||
// 单章确认书和双章确认书同时生成要生成两个文件
|
||||
if (groupDateDouble.Any() && groupDateSingle.Any())
|
||||
{
|
||||
logger.Info("[groupGenerateHandle_Date] 同时生成单章和双章确认书");
|
||||
groupGenerateHandle(groupDateDouble, docType, startDate, supProtocolDate.Value.AddDays(-1), results, error, file);
|
||||
groupGenerateHandle(groupDateSingle, docType, supProtocolDate, endDate, results, error, file);
|
||||
}
|
||||
else if (groupDateDouble.Any())
|
||||
{
|
||||
logger.Info("[groupGenerateHandle_Date] 仅生成双章确认书");
|
||||
groupGenerateHandle(groupDateDouble, docType, startDate, endDate, results, error, file);
|
||||
}
|
||||
else if (groupDateSingle.Any())
|
||||
{
|
||||
logger.Info("[groupGenerateHandle_Date] 仅生成单章确认书");
|
||||
groupGenerateHandle(groupDateSingle, docType, startDate, endDate, results, error, file);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info("[groupGenerateHandle_Date] 没有需要生成的确认书");
|
||||
}
|
||||
}
|
||||
|
||||
private void groupGenerateHandle(List<int> ids, string docType, DateTime? startDate, DateTime? endDate, List<TradeDocGenerateResult> results, List<string> error, List<string> file)
|
||||
{
|
||||
var logger = LogFactory.GetLogger("生成确认书");
|
||||
logger.Info($"[groupGenerateHandle] 开始处理 - ids.Count: {ids?.Count ?? 0}, docType: {docType}");
|
||||
|
||||
if (ids == null || !ids.Any())
|
||||
{
|
||||
logger.Info("[groupGenerateHandle] ids 为空,直接返回");
|
||||
return;
|
||||
}
|
||||
|
||||
var trade_contract_r = DbContext.trade_contract_r.Where(c => ids.Contains(c.TradeId) && c.Type == "交易确认书" && c.IsValid).ToList();
|
||||
logger.Info($"[groupGenerateHandle] 找到已存在的确认书记录数: {trade_contract_r.Count}");
|
||||
|
||||
//DbContext.trade_contract_r.RemoveRange(trade_contract_r);
|
||||
trade_contract_r.ForEach(O => O.IsValid = false);
|
||||
DbContext.SaveChanges();
|
||||
|
||||
logger.Info("[groupGenerateHandle] 调用 BatchConfirmationGenerateService.Generate");
|
||||
var result = new BatchConfirmationGenerateService(this).Generate(ids, docType, startDate, endDate);
|
||||
logger.Info($"[groupGenerateHandle] 生成结果 - 成功数: {result.Count(r => string.IsNullOrWhiteSpace(r.ErrorMessage))}, 失败数: {result.Count(r => !string.IsNullOrWhiteSpace(r.ErrorMessage))}");
|
||||
|
||||
results.AddRange(result);
|
||||
error.AddRange(results.Where(n => !string.IsNullOrWhiteSpace(n.ErrorMessage)).Select(n => n.ErrorMessage).ToArray());
|
||||
file.AddRange(results.Where(n => !string.IsNullOrWhiteSpace(n.OutputFilePath)).Select(n => n.OutputFilePath).ToList());
|
||||
|
||||
logger.Info($"[groupGenerateHandle] 完成处理 - 当前总错误数: {error.Count}, 当前总文件数: {file.Count}");
|
||||
}
|
||||
|
||||
public bool GXJY_CorrespondingConfirmationTemplate(List<int> tradeIds, out string ErrMsg)
|
||||
|
||||
Reference in New Issue
Block a user