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

73 lines
3.2 KiB
C#

namespace YLErp.Modules.TradeModule.QueryModule
{
public class TradeCloseInfoQueryApiService : YLBaseService
{
public TradeCloseInfoQueryApiService(OptUserInfo userInfo) : base(userInfo)
{
}
public IEnumerable<OtcTradeDetail> GetTradeCloseInfoList(TradeCloseInfoRequestModel req)
{
int[] clientIds = null;
using (var clientDB = DbContextFactory.GetClientDbContext(OptUser))
{
if (!string.IsNullOrEmpty(req.ClientNumber))
{
clientIds = clientDB.client.Where(n => n.Number == req.ClientNumber).Select(n => n.id).ToArray();
}
else if (!string.IsNullOrEmpty(req.ClientName))
{
clientIds = clientDB.client.Where(n => n.Name == req.ClientName).Select(n => n.id).ToArray();
}
if (clientIds != null && !clientIds.Any())
{
return Enumerable.Empty<OtcTradeDetail>();
}
}
var tdPredicate = PredicateBuilder.Create<trade>(t => t.ValidState != ConsGlobal.InValid);
if (clientIds != null)
{
tdPredicate = tdPredicate.And(t => clientIds.Contains(t.ClientId));
}
var tcActions = new[] { ClientCashInCashOut.系统操作_平仓费, ClientCashInCashOut.系统操作_行权费 };
var query = from tc in DbContext.trade_cash.AsNoTracking()
join td in DbContext.trade.AsNoTracking().Where(tdPredicate) on tc.TradeId equals td.id
join et in DbContext.eod_trade.Where(O => O.ValueDate == req.ValueDate) on td.id equals et.TradeId into tempEt
from et in tempEt.DefaultIfEmpty()
where tc.ValidState != ConsGlobal.InValid && tc.ValueDate == req.ValueDate && tcActions.Contains(tc.Action)
select new
{
et,
trade = td,
detail = new OtcTradeDetail
{
TcId = tc.id,
TcValueDate = tc.HappenedDate != null ? tc.HappenedDate : tc.ValueDate,
TcFinalPrice = tc.FinalPrice,
TcUnwindPrice = tc.UnwindPrice,
TcUnwindPricePercent = tc.UnwindPricePercentRate,
TcAmount = tc.Amount,
UnWindNotional = tc.UnwindNotional ?? tc.Notional,
TcUnwindTradeAmount = tc.UnwindTradeAmount,
TcUnwindPercent = tc.UnwindPercentRate,
TcAction = tc.Action,
TcExerciseWay = tc.ExerciseWay,
}
};
var list = query.ToList();
return list.Select(n =>
{
YLAutoMapper.Map(n.et?.trade ?? n.trade, n.detail);
return n.detail;
}).ToList();
}
}
}