using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Yi.Framework.Stock.Application.Contracts.Dtos.StockHolding; using Yi.Framework.Stock.Application.Contracts.Dtos.StockTransaction; using Yi.Framework.Stock.Application.Contracts.IServices; using Yi.Framework.Stock.Domain.Entities; using Yi.Framework.SqlSugarCore.Abstractions; using Volo.Abp.Users; namespace Yi.Framework.Stock.Application.Services { /// /// 用户持仓服务实现 /// [Authorize] public class StockHoldingService : ApplicationService, IStockHoldingService { private readonly ISqlSugarRepository _stockHoldingRepository; private readonly ISqlSugarRepository _stockTransactionRepository; public StockHoldingService( ISqlSugarRepository stockHoldingRepository, ISqlSugarRepository stockTransactionRepository) { _stockHoldingRepository = stockHoldingRepository; _stockTransactionRepository = stockTransactionRepository; } /// /// 获取当前用户的持仓列表 /// [Authorize] [HttpGet("stock/user-holdings")] public async Task> GetUserHoldingsAsync(StockHoldingGetListInputDto input) { Guid userId = CurrentUser.GetId(); RefAsync total = 0; var query = _stockHoldingRepository._DbQueryable .Where(h => h.UserId == userId) .WhereIF(!string.IsNullOrEmpty(input.StockCode), h => h.StockCode.Contains(input.StockCode)) .WhereIF(!string.IsNullOrEmpty(input.StockName), h => h.StockName.Contains(input.StockName)) .OrderByIF(!string.IsNullOrEmpty(input.Sorting),input.Sorting) .OrderByIF(string.IsNullOrEmpty(input.Sorting),t=>t.CreationTime,OrderByType.Desc); var list = await query .Select(h => new StockHoldingDto { Id = h.Id, UserId = h.UserId, StockId = h.StockId, StockCode = h.StockCode, StockName = h.StockName, Quantity = h.Quantity, CreationTime = h.CreationTime }) .ToPageListAsync(input.SkipCount, input.MaxResultCount, total); return new PagedResultDto(total, list); } /// /// 获取当前用户的交易记录 /// [Authorize] [HttpGet("stock/user-transactions")] public async Task> GetUserTransactionsAsync(StockTransactionGetListInputDto input) { Guid userId = CurrentUser.GetId(); RefAsync total = 0; var query = _stockTransactionRepository._DbQueryable .Where(t => t.UserId == userId) .WhereIF(!string.IsNullOrEmpty(input.StockCode), t => t.StockCode.Contains(input.StockCode)) .WhereIF(!string.IsNullOrEmpty(input.StockName), t => t.StockName.Contains(input.StockName)) .WhereIF(input.TransactionType.HasValue, t => t.TransactionType == input.TransactionType.Value) .WhereIF(input.StartTime.HasValue, t => t.CreationTime >= input.StartTime.Value) .WhereIF(input.EndTime.HasValue, t => t.CreationTime <= input.EndTime.Value) .OrderByIF(!string.IsNullOrEmpty(input.Sorting),input.Sorting) .OrderByIF(string.IsNullOrEmpty(input.Sorting),t=>t.CreationTime,OrderByType.Desc); var list = await query .Select(t => new StockTransactionDto { Id = t.Id, UserId = t.UserId, StockId = t.StockId, StockCode = t.StockCode, StockName = t.StockName, TransactionType = t.TransactionType, Price = t.Price, Quantity = t.Quantity, TotalAmount = t.TotalAmount, Fee = t.Fee, CreationTime = t.CreationTime }) .ToPageListAsync(input.SkipCount, input.MaxResultCount, total); return new PagedResultDto(total, list); } } }