123 lines
3.9 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|