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; } } }