优化“收益互换”确认书查询与编号生成逻辑

This commit is contained in:
锦麟 王
2026-04-14 11:24:03 +08:00
parent 130cbedaba
commit f11e8ea27a
6 changed files with 94 additions and 46 deletions
@@ -229,49 +229,9 @@ namespace YLErp.Modules.TradeModule.DealModule
var clientIds = trades.Select(x => x.ClientId).Distinct().ToList();
logger.Info($"[GJGenerateConfirmBook] 客户ID数: {clientIds.Count}");
if (trades.Any(o => o.TradeType.Equals("收益互换")))
foreach (var item in trades)
{
var allTrades = DbContext.trade.Where(x => clientIds.Contains(x.ClientId) && x.TradeType.Equals("收益互换") && x.ValidState != ConsGlobal.InValid);
if (startDate.HasValue)
{
allTrades = allTrades.Where(x => x.TradeDate >= startDate);
}
if (endDate.HasValue)
{
allTrades = allTrades.Where(x => x.TradeDate <= endDate);
}
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 })
.ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList());
logger.Info($"[GJGenerateConfirmBook] 分组数: {group.Count}");
foreach (var item in group)
{
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);
}
}
else
{
foreach (var item in trades)
{
groupGenerateHandle_Date(new List<int> { item.id }, docType, startDate, endDate, results, error, file);
}
groupGenerateHandle_Date(new List<int> { item.id }, docType, startDate, endDate, results, error, file);
}
errors = results.Where(n => !string.IsNullOrWhiteSpace(n.ErrorMessage)).Select(n => n.ErrorMessage).ToList();
@@ -1278,9 +1278,11 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule
contractNo = GenerateShanXiGuShouContractNo();
break;
case CompanyEnum.:
case CompanyEnum.:
contractNo = GenerateZheShangContractNo();
break;
case CompanyEnum.:
contractNo = GenerateGuolianContractNo();
break;
default:
throw new ContextMarshalException("未实现");
}
@@ -1336,6 +1338,22 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule
}
return Trade.TradeNumber;
}
private string GenerateGuolianContractNo()
{
if (_contractType != ContractTypeEnum.Trade)
{
return UniqueTimeId.GetStr();
}
if (Trade.TradeType == "收益互换")
{
var posi = GetSwapPositions(Trade.id, true).FirstOrDefault(p => p.PositionType > 0);
var isLong = posi?.PositionType == (int)PositionTypeFlag.Short ? false : true;
return "GLMS-" + _client.Number + "-" + Trade.TradeNumber;
}
return Trade.TradeNumber;
}
/// <summary>
/// 生成国贸确认书编号
/// </summary>
+1 -1
View File
@@ -41,7 +41,7 @@
{Name:"资金记录",Rights:["结算管理-出入金维护"],Url:"entryexit/entryexitList"},
{Name:"资金审批",Rights:["结算管理-资金审批页面"],Url:"entryexit/entryexitApproval"},
{Name:"收盘操作",Rights:["结算管理-收盘操作"],Url:"eod_trade_value/eodExec"},
{Name:"交易确认书",Rights:["结算管理-交易确认书"],Url:"TradeConfirmBook/ConfirmBookListByClient"},
{Name:"交易确认书",Rights:["结算管理-交易确认书"],Url:"TradeConfirmBook/Index"},
{Name:"交易确认书_期权",Rights:["结算管理-交易确认书-期权"],Url:"TradeConfirmBook/IndexOption"},
{Name:"结算确认书",Rights:["结算管理-结算确认书"],Url:"swaptrade2/tradeEndConfirmList"},
{Name:"每日估值报告",Rights:["结算管理-每日估值报告"],Url:"clientbalance/TradeMarketReport"},
@@ -186,6 +186,74 @@ namespace YLErp.Web.Controllers
return Json(sList);
}
/// <summary>
/// 互换确认书查询(只查询收益互换)
/// </summary>
public JsonResult SwapQuery(TradeReq req)
{
req.AssetIdList = AssetUnitModel.IntersectAssetUnits(req.AssetIdGroupList, req.AssetIdList).ToList();
req.UserAssets = CurUser.GetAssetUnitIds();
req.UserClients = CurUser.GetClientIdsByCurUser(CurUser._查看所有交易);
req.CurUserTradeIds = CurUser.GetTradeIdsByCurUser();
// 只查询收益互换
req.TradeTypes = "收益互换";
var sList = new tradeBLL().SearchListForTradeConfirm(req);
var rowList = sList.rows;
// 增加交易确认书编号
if (rowList != null && rowList.Any())
{
var tradeIds = rowList.Select(x => x.id).ToList();
var tradeContractCodeList = (from tradeContractR in yldb.trade_contract_r
join tradeContractDoc in (from tradeContractDocTemp in yldb.trade_contract_document where ContractTypeEnum.Trade == tradeContractDocTemp.Type select tradeContractDocTemp)
on tradeContractR.ContractCode equals tradeContractDoc.Code into tradeContractDoc1
from tradeContractDoc2 in tradeContractDoc1.DefaultIfEmpty()
where tradeIds.Contains(tradeContractR.TradeId) && ContractTypeEnum.Trade == tradeContractR.Type && tradeContractR.Type == tradeContractDoc2.Type && tradeContractR.IsValid
select new
{
tradeContractR.id,
tradeContractR.TradeId,
tradeContractR.ContractCode,
tradeContractR.send_email_result,
tradeContractDoc = tradeContractDoc2
}).ToList();
foreach (var trade in rowList)
{
if (trade.TradeType == "合成价差期权")
{
trade.SyntheticUnderlyingTipsInfo = synthetic_underlyingBLL.GetUnderlyingTipsInfo(trade.UnderlyingCode);
}
var tradeContractinfo = tradeContractCodeList.FirstOrDefault(t => t.TradeId == trade.id);
trade.MetaDic["send_email_result"] = "";
if (tradeContractinfo != null)
{
trade.ContractCode = tradeContractinfo.ContractCode;
if (null != tradeContractinfo.tradeContractDoc)
{
trade.MetaDic["ContractEncryptId"] = tradeContractinfo.tradeContractDoc.EncryptId;
trade.MetaDic["ContractRId"] = tradeContractinfo.id.ToString();
trade.MetaDic["ContractDocUrl"] = tradeContractinfo.tradeContractDoc.RelativePath;
trade.MetaDic["HasGeneratedConfirmBook"] = "True";
trade.MetaDic["send_email_result"] = tradeContractinfo.send_email_result;
}
else
{
trade.MetaDic["ContractEncryptId"] = "";
trade.MetaDic["ContractRId"] = tradeContractinfo.id.ToString();
trade.MetaDic["HasGeneratedConfirmBook"] = "False";
}
}
else
{
trade.MetaDic["ContractEncryptId"] = "";
trade.MetaDic["ContractRId"] = "";
trade.MetaDic["HasGeneratedConfirmBook"] = "False";
}
}
}
return Json(sList);
}
public async Task<ActionResult> SentMail(string enid, List<string> reciver)
{
var result = await DoSendMailSywg(enid, reciver);
+3 -1
View File
@@ -25,7 +25,9 @@
IsZheQi = PS.Config.Is浙期,
IsAutoSealAfterGeneratedBook = PS.GetErpConfig().IsAutoSealAfterGeneratedBook,
canGenerate = CurUser.结算管理_交易确认书生成,
canSendEmail = CurUser.结算管理_交易确认书邮件发送
canSendEmail = CurUser.结算管理_交易确认书邮件发送,
// 标识为互换确认书页面
isSwapPage = true
};
var tradeTypes = ConsTrade.AllTradeTypes.Except(new List<string> { "场内期权", "股票" }).Concat(new List<string> { "黑箱结构" });
}
@@ -420,7 +420,7 @@ function __initJqGrid() {
onJqgridPaging: typeof onJqgridPaging !== 'undefined' ? onJqgridPaging : void 0
};
var grid = jQuery('#listGrid').jqGrid({
url: page.isOptionPage ? '/TradeConfirmBook/OptionQuery' : '/trade/tradeConfirmEmailQuery',
url: page.isOptionPage ? '/TradeConfirmBook/OptionQuery' : (page.isSwapPage ? '/TradeConfirmBook/SwapQuery' : '/trade/tradeConfirmEmailQuery'),
datatype: page.initEmptyView ? 'local' : 'json',
height: 'auto',
width: '90%',