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; 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)) .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 shift = await _dbContext.Queryable() .Where(x => x.PlaceCode == request.PlaceCode) .FirstAsync(); shift.ThrowIfNull($"营业点{request.PlaceCode}吗,没有餐别!"); var BusinessShiftMealRelationships = await _dbContext.Queryable() .Where(x => x.ShiftCode == shift.ShiftCode) .Select() .ToListAsync(); // 读取配置中的时间 var eightThirtyPmStr = _configuration["EightThirtyPM"]; DateTime.TryParseExact(eightThirtyPmStr, "HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out var dateTime); var payTypes = new List { BalanceRecordSourceEnumType.Cash }; if (shift.TenantId == request.Factory) { payTypes.Add(BalanceRecordSourceEnumType.LocalTenantSubsidies); } var res = new GetDishesMenusBookingResponse { BusinessShiftMealRelationships = BusinessShiftMealRelationships, ServiceTime = dateTime, PayType = payTypes }; return res; } }