using Dlhis.Basic.Dishes.Request; using Dlhis.Basic.Dishes.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; using System.Collections.Generic; using System.Globalization; namespace Dlhis.Basic.Dishes.Services.Implements; public class DishesService : IDishesService { private readonly IDbContext _dbContext; private readonly IConfiguration _configuration; public DishesService(IDbContext dbContext, IConfiguration configuration) { _dbContext = dbContext; _configuration = configuration; } public async Task> GetDishesPageAsync(DishesPageRequest request) { //todo 营业点权限 return await _dbContext.Queryable() .LeftJoin((x, category) => x.CategoryCode == category.Code) .WhereIF(request.Search.IsPresent(), x => x.CustomCode == request.Search || x.Name.Contains(request.Search)) .WhereIF(request.BusinessPlaceCodes.IsPresent(), x => request.BusinessPlaceCodes.Contains(x.BusinessPlaceCode)) .OrderBy(x => x.CreateTime, SqlSugar.OrderByType.Desc) .Select((x, category) => new DishesResponse { CurrnetUnits = x.Units.ToString(), CategoryName = category.Name, }, true) .ToPageListAsync(request); } public async Task SaveDishesAsync(DishesSaveRequest request) { if (!request.Id.HasValue) { var dishers = request.Adapt(); dishers.CustomCode = request.CustomCode; await _dbContext.InsertAsync(dishers); } else { var entity = await _dbContext.Queryable().Where(x => x.Id == request.Id).FirstAsync(); entity.ThrowIfNull("菜品不存在,无法更新"); request.Adapt(entity); await _dbContext.UpdateAsync(entity); } } public async Task GetDishesMenusBookingSetting(GetDishesMenusBookingRequest request) { // 读取最晚订餐的时间 var strDatetime = await _dbContext.Queryable() .Where(x => x.UniqueType == CanteenSettingUnqiueEnumType.Tenant && x.Item == CanteenSettingItemEnumType.BookingDeadline && x.Enable) .Select(x => x.Value) .FirstAsync(); DateTime dateTime; DateTime.TryParseExact(strDatetime, "HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out dateTime); var res = new GetDishesMenusBookingResponse { ServiceTime = dateTime, }; var shift = await _dbContext.Queryable() .Where(x => x.PlaceCode == request.PlaceCode) .FirstAsync(); var payTypes = new List(); var dto1 = new BalanceRecordSourceEnumDto { Type = BalanceRecordSourceEnumType.Cash }; payTypes.Add(dto1); if (shift != null) { var businessShiftMealRelationships = await _dbContext.Queryable() .Where(x => x.ShiftCode == shift.ShiftCode) .Select() .ToListAsync(); res.BusinessShiftMealRelationships = businessShiftMealRelationships; if (shift.TenantId == request.Factory) { var dto2 = new BalanceRecordSourceEnumDto { Type = BalanceRecordSourceEnumType.LocalTenantSubsidies }; payTypes.Add(dto2); } } res.PayTypes = payTypes; return res; } public async Task GetDishesDetailByIdAsync(long id) { return await _dbContext.Queryable() .Where(x => x.Id == id) .Select() .SingleAsync(); } }