using Dlhis.Canteen.Order.Request; using Dlhis.Canteen.Order.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.User.Abstractions; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; namespace Dlhis.Canteen.Order.Services.Implements { public class MenuDishesService : IMenuDishesService { private readonly IDbContext _dbContext; private readonly ICurrentUser _currentUser; public MenuDishesService(IDbContext dbContext, ICurrentUser currentUser) { _dbContext = dbContext; _currentUser = currentUser; } public async Task> GetMenuAsync(GetMenuRequest request) { var page = await _dbContext.Queryable() .LeftJoin((x,place) => x.PlaceCode == place.Code) .WhereIF(!request.Factory.IsEmpty(),x => x.Factory == request.Factory) .WhereIF(request.PlaceCode.HasValue, x => request.PlaceCode == x.PlaceCode) .WhereIF(!request.Search.IsEmpty(),x => x.Name.Contains(request.Search)) .Select((x,place) => new GetMenuResponse { ShiftTypesSrt = x.ShiftTypes.ToString(), //ShiftTypesSrt = string.Join(", ", x.ShiftTypes.Select(enumValue => enumValue.GetDescription())), PlaceName = place.Name, },true) .ToPageListAsync(request); return page; } public async Task SaveMenuAsync(SaveMenuRequest request) { var place = await _dbContext.Queryable() .FirstAsync(x => x.Code == request.PlaceCode); place.ThrowIfNull($"{request.PlaceCode}:该营业点不存在!"); if (!request.Id.HasValue) { var entity = request.Adapt(); entity.Code = Guid.NewGuid(); await _dbContext.InsertAsync(entity); } else { var entity = await _dbContext.Queryable() .Where(x => x.Id == request.Id).FirstAsync(); request.Adapt(entity); await _dbContext.UpdateAsync(entity); } } public async Task> GetDishesAsync(GetDishesRequest request) { if (!request.MenuCode.HasValue) { return await _dbContext.Queryable() .Select() .ToPageListAsync(request); } else { var disCodes = await _dbContext.Queryable() .Where(x => x.MenuCode == request.MenuCode) .Select(x => x.DishersCode) .ToListAsync(); return await _dbContext.Queryable() .Where(x => disCodes.Contains(x.Code)) .Select() .ToPageListAsync(request); } } public async Task SaveDishesAsync(SaveDishesRequest request) { if (!request.Id.HasValue) { var dishers = request.Adapt(); dishers.Code = Guid.NewGuid(); await _dbContext.InsertAsync(dishers); } else { var entity = await _dbContext.Queryable() .Where(x => x.Id == request.Id).FirstAsync(); request.Adapt(entity); await _dbContext.UpdateAsync(entity); } } public async Task DispositionDishesAsync(DispositionDishesRequest request) { var lst = new List(); foreach (var dto in request.DishersDtos) { var entity = new CanteenMenuDishersRelationshipEntity { MenuCode = request.MenudCode, DishersCode = dto.DisherCode, RestrictedNum = dto.RestrictedNum, }; lst.Add(entity); } await _dbContext.InsertAsync(lst); } } }