using YLErp.Model;
using YLErp.Modules.TradeModule.QueryModule;
namespace YLErp.Modules.TradeModule.ApiModule
{
///
/// 场外期权交易导出服务
///
public class OtcOptionTradeExportService
{
///
///
///
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 = "持仓"
});
}
///
/// 获取簿记账户id
///
private List GetAssetIds(IEnumerable 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;
}
///
/// 返回交易员ID
///
private List GetTraderId(IEnumerable 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;
}
}
///
/// 根据交易对手方编号或名称返回交易对手方ID
///
private List GetClientIds(IEnumerable clientNumbers, IEnumerable clientNames)
{
List 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;
}
}
}