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

123 lines
3.9 KiB
C#

using YLErp.Model;
using YLErp.Modules.TradeModule.QueryModule;
namespace YLErp.Modules.TradeModule.ApiModule
{
/// <summary>
/// 场外期权交易导出服务
/// </summary>
public class OtcOptionTradeExportService
{
/// <summary>
///
/// </summary>
public byte[] ExportToExcel(OtcOptionTradeExportRequest queryModel)
{
var req = new TradeReq
{
TradeTypesList = queryModel.TradeTypes?.ToList(),
TradeStatusList = queryModel.TradeStatus?.ToList(),
TradeNumber = queryModel.TradeNumber,
UnderlyingCodeList = queryModel.UnderlyingCodes?.ToList(),
BuySell = queryModel.BuySell,
OptionType = queryModel.OptionType,
ExerciseMode = queryModel.ExerciseMode,
TradeDateEnd = queryModel.TradeDateEnd ?? default,
TradeDateStart = queryModel.TradeDateStart ?? default
};
//簿记账户名称
req.AssetIdList = GetAssetIds(queryModel.AssetBookNames);
//交易员名称
req.TraderNamesList = GetTraderId(queryModel.TraderNames);
//客户 优先使用客户编号
req.ClientIdsInt = GetClientIds(queryModel.ClientNumbers, queryModel.ClientNames);
return new OtcTradeListExportService(OptUserInfo.SystemUser).ExportOptionTradeListToExcel(req, new TradeQueryRequest
{
ShowAllTrades = true,
UserAssetUnits = null,
VolType = "持仓"
});
}
/// <summary>
/// 获取簿记账户id
/// </summary>
private List<int> GetAssetIds(IEnumerable<string> assetBookNames)
{
if (assetBookNames == null || !assetBookNames.HasNonEmptyItem())
{
return null;
}
var list = DataCacheProvider.GetAssetUnitDataSource().AsQueryable()
.Where(x => assetBookNames.Contains(x.Name)).Select(x => x.id).ToList();
if (!list.Any())
{
list.Add(-1);
}
return list;
}
/// <summary>
/// 返回交易员ID
/// </summary>
private List<int> GetTraderId(IEnumerable<string> traderNames)
{
if (traderNames == null || !traderNames.HasNonEmptyItem())
{
return null;
}
using (var sysdb = DbContextFactory.GetErpBaseContext())
{
var list = sysdb.SystemUsers.Where(su => traderNames.Contains(su.LoginName)).Select(n => n.Id).ToList();
if (!list.Any())
{
list.Add(-1);
}
return list;
}
}
/// <summary>
/// 根据交易对手方编号或名称返回交易对手方ID
/// </summary>
private List<int> GetClientIds(IEnumerable<string> clientNumbers, IEnumerable<string> clientNames)
{
List<int> list = null;
//编号优先,有编号则不使用客户名称匹配
if (clientNumbers != null && clientNumbers.HasNonEmptyItem())
{
list = DataCacheProvider.GetClientDataSource().AsQueryable()
.Where(x => clientNumbers.Contains(x.Number)).Select(x => x.id).ToList();
}
else if (clientNames != null && clientNames.HasNonEmptyItem())
{
list = DataCacheProvider.GetClientDataSource().AsQueryable()
.Where(x => clientNames.Contains(x.Name)).Select(x => x.id).ToList();
}
if (list == null)
{
return null;
}
if (!list.Any())
{
list.Add(-1);
}
return list;
}
}
}