fix 分类控制菜品获取

This commit is contained in:
2024-03-21 11:01:14 +08:00
parent 96c5c5feba
commit 02084be82b
7 changed files with 67 additions and 71 deletions

View File

@@ -63,9 +63,9 @@ public class DishesMenusController : ControllerBase
public async Task<List<DishesDetailResponse>> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode,
DateTime date,
ShiftEnumType? shiftType,
[FromQuery] List<Guid> categoryCodes)
Guid categoryCode)
{
return await _dishesMenuService.GetDishesUnderCurrentMenuAsync(businessPlaceCode, date, shiftType, categoryCodes);
return await _dishesMenuService.GetDishesUnderCurrentMenuAsync(businessPlaceCode, date, shiftType, categoryCode);
}
/// <summary>
@@ -133,6 +133,7 @@ public class DishesMenusController : ControllerBase
/// </summary>
/// <returns></returns>
[HttpGet("setting")]
[IgnoreTenant]
public async Task<DishesMenusBookingSettingResponse> GetDishesMenusBookingSetting([FromQuery] GetDishesMenusBookingRequest request)
{
return await _dishesService.GetDishesMenusBookingSetting(request);

View File

@@ -1,9 +1,12 @@
namespace Dlhis.Basic.Dishes.Request
{
public class GetDishesMenusBookingRequest
{
public string Factory { get; set; }
using System.ComponentModel.DataAnnotations;
namespace Dlhis.Basic.Dishes.Request;
public class GetDishesMenusBookingRequest
{
/// <summary>
/// 营业点
/// </summary>
[Required(ErrorMessage = "请选择营业点")]
public Guid BusinessPlaceCode { get; set; }
}
}

View File

@@ -12,7 +12,7 @@ public interface IDishesMenuService : IScopeDependency
Task<DishesMenuSaveRequest> GetDishesMenuDetailAsync(Guid businessPlaceCode, string customCode, DateTime date);
Task<List<DishesDetailResponse>> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, List<Guid> categoryCodes);
Task<List<DishesDetailResponse>> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, Guid categoryCode);
Task SaveDishesMenuAsync(DishesMenuSaveRequest request);

View File

@@ -74,7 +74,7 @@ public class DishesMenuService : IDishesMenuService
};
}
public async Task<List<DishesDetailResponse>> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, List<Guid> categoryCodes)
public async Task<List<DishesDetailResponse>> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, Guid categoryCode)
{
var data = await _dbContext.Queryable<DishesMenuEntity>()
.LeftJoin<DishesEntity>((x, dishes) => x.DishesCode == dishes.CustomCode)
@@ -82,7 +82,7 @@ public class DishesMenuService : IDishesMenuService
.Where(x => SqlFunc.DateIsSame(x.Date, date, DateType.Day))
.Where((x, dishes) => dishes.Enable)
.WhereIF(shiftType.HasValue, x => x.ShiftType == shiftType)
.WhereIF(categoryCodes.IsPresent(), (x, dishes) => categoryCodes.Contains(dishes.CategoryCode))
.Where((x, dishes) => dishes.CategoryCode == categoryCode)
.Select((x, dishes) => new DishesDetailResponse
{
BusinessPlaceCode = x.BusinessPlaceCode,
@@ -146,20 +146,18 @@ public class DishesMenuService : IDishesMenuService
var where = LinqExpressionExtension.False<DishesMenuEntity>();
keys.ForEach(x =>
{
where = where.Or(item => item.Date == x.Date && item.ShiftType == x.ShiftType);
where = where.Or(item => SqlFunc.DateIsSame(item.Date, x.Date, DateType.Day) && item.ShiftType == x.ShiftType);
});
await _dbContext.Client.Deleteable<DishesMenuEntity>().Where(where).ExecuteCommandAsync();
await _dbContext.InsertAsync(entities);
}
public async Task<DishesMenuDetailDto> GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, ShiftEnumType shiftType, string dishesCode)
{
var detail = await _dbContext.Queryable<DishesMenuEntity>()
.LeftJoin<DishesEntity>((x, d) => x.DishesCode == d.CustomCode)
.Where(x => x.Date == date)
.Where(x => SqlFunc.DateIsSame(x.Date, date, DateType.Day))
.Where(x => x.BusinessPlaceCode == businessPlaceCode)
.Where(x => x.ShiftType == shiftType)
.Where(x => x.DishesCode == dishesCode)

View File

@@ -5,6 +5,7 @@ using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums;
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;
@@ -14,10 +15,12 @@ namespace Dlhis.Basic.Dishes.Services.Implements;
public class DishesService : IDishesService
{
private readonly IDbContext _dbContext;
private readonly ICurrentUser _currentUser;
public DishesService(IDbContext dbContext)
public DishesService(IDbContext dbContext, ICurrentUser currentUser)
{
_dbContext = dbContext;
_currentUser = currentUser;
}
public async Task<Pagination<DishesResponse>> GetDishesPageAsync(DishesPageRequest request)
@@ -60,49 +63,43 @@ public class DishesService : IDishesService
public async Task<DishesMenusBookingSettingResponse> GetDishesMenusBookingSetting(GetDishesMenusBookingRequest request)
{
var subjectId = _currentUser.GetIntSubjectId();
var gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.IdentityUserId == subjectId).FirstAsync();
var jinkoCode = _currentUser.GetUserClaim("jinko-code") ?? string.Empty;
if (jinkoCode.IsPresent())
{
gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.Code == jinkoCode).FirstAsync();
}
// 读取最晚订餐的时间
var strDatetime = await _dbContext.Queryable<CanteenSettingEntity>()
var value = await _dbContext.Queryable<CanteenSettingEntity>()
.Where(x => x.UniqueType == CanteenSettingUnqiueEnumType.Tenant && x.Item == CanteenSettingItemEnumType.BookingDeadline && x.Enable)
.Select(x => x.Value)
.FirstAsync();
if (!TimeOnly.TryParse(strDatetime, out var deadline))
if (!TimeOnly.TryParse(value, out var deadline))
deadline = new TimeOnly(8, 30);
var res = new DishesMenusBookingSettingResponse
{
ServerTime = DateTime.Now,
Deadline = DateTime.Today.Add(deadline.ToTimeSpan())
};
var shift = await _dbContext.Queryable<BusinessPlaceShiftRelationshipEntity>()
.Where(x => x.PlaceCode == request.PlaceCode)
var payTypes = new List<BalanceRecordSourceEnumDto>() { new() { Type = BalanceRecordSourceEnumType.Cash } };
var selectTenantId = await _dbContext.Queryable<BusinessPlaceEntity>()
.Where(x => x.Code == request.BusinessPlaceCode)
.Select(x => x.TenantId)
.FirstAsync();
var payTypes = new List<BalanceRecordSourceEnumDto>();
var dto1 = new BalanceRecordSourceEnumDto
if (gainfo.Factory == selectTenantId)
{
Type = BalanceRecordSourceEnumType.Cash
};
payTypes.Add(dto1);
if (shift != null)
{
if (shift.TenantId == request.Factory)
{
var dto2 = new BalanceRecordSourceEnumDto
{
Type = BalanceRecordSourceEnumType.LocalTenantSubsidies
};
payTypes.Add(dto2);
payTypes.Add(new BalanceRecordSourceEnumDto { Type = BalanceRecordSourceEnumType.LocalTenantSubsidies });
}
}
res.PayTypes = payTypes;
return res;
return new DishesMenusBookingSettingResponse
{
ServerTime = DateTime.Now,
Deadline = DateTime.Today.Add(deadline.ToTimeSpan()),
PayTypes = payTypes
};
}
public async Task<DishesDetailResponse> GetDishesDetailByIdAsync(long id)

View File

@@ -33,10 +33,6 @@ public abstract class BaseOrderService
_logger = logger;
}
protected BaseOrderService(ICanteenSettingService canteenSettingService)
{
_canteenSettingService = canteenSettingService;
}
protected IDbContext DbContext => _dbContext;

View File

@@ -19,11 +19,12 @@ namespace Dlhis.Canteen.Order.Services.Implements;
public class BookingOrderService : BaseOrderService, IBookingOrderService
{
private readonly IDbContext _dbContext;
private readonly ICurrentUser _currentUser;
private readonly IDisheMenuApi _disheMenuApi;
public BookingOrderService(ICanteenSettingService canteenSettingService, IDisheMenuApi disheMenuApi) : base(canteenSettingService)
public BookingOrderService(ICanteenSettingService canteenSettingService, IDbContext dbContext,
IDisheMenuApi disheMenuApi,
ICurrentUser currentUser, IDevicePermissionApi devicePermissionApi, ILogger<BookingOrderService> logger)
: base(canteenSettingService, dbContext, currentUser, devicePermissionApi, logger)
{
_disheMenuApi = disheMenuApi;
}
@@ -32,7 +33,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
{
var gainfo = await CheckExistsMyBookingsAsync(request.BookingDate, request.ShiftType);
var businessPlace = await _dbContext.Queryable<BusinessPlaceEntity>().Where(x => x.Code == request.BusinessPlaceCode).FirstAsync();
var businessPlace = await DbContext.Queryable<BusinessPlaceEntity>().Where(x => x.Code == request.BusinessPlaceCode).FirstAsync();
//预定时间
var now = DateTime.Now;
@@ -82,7 +83,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
TenantId = businessPlace.TenantId,
};
var orderId = await _dbContext.InsertReturnIdentityAsync(order);
var orderId = await DbContext.InsertReturnIdentityAsync(order);
await ContinueUpdateAsync(async () =>
{
await _disheMenuApi.GetBookingDishesDetailAsync(request.BookingDate, request.BusinessPlaceCode, (int)request.ShiftType, request.DishesCode);
@@ -96,10 +97,10 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
if (request.Source == BalanceRecordSourceEnumType.LocalTenantSubsidies)
{
var mealInfo = await _dbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
var mealInfo = await DbContext.Queryable<GainfoMealEntity>().Where(x => x.UserNo == order.UserNo).FirstAsync();
if (mealInfo == null)
{
await _dbContext.InsertAsync(new GainfoMealEntity
await DbContext.InsertAsync(new GainfoMealEntity
{
Balance = 0,
BalanceOfRecharge = 0,
@@ -115,7 +116,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
mealInfo.Balance += order.Amount;
(mealInfo.Balance < 0).ThrowIfTrue("余额不足,无法消费");
var effectMeal = await _dbContext.Updateable<GainfoMealEntity>()
var effectMeal = await DbContext.Updateable<GainfoMealEntity>()
.SetColumns(x => x.Balance == mealInfo.Balance)
.SetColumns(x => x.Version == x.Version + 1)
.Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致
@@ -125,7 +126,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
}
var effectMenu = await _dbContext.Updateable<DishesMenuEntity>()
var effectMenu = await DbContext.Updateable<DishesMenuEntity>()
.SetColumns(x => x.Number == menuDetail.Number)
.SetColumns(x => x.Version == x.Version + 1)
.SetColumns(x => x.ModifiedTime == now)
@@ -141,9 +142,9 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
//写入记录
var balanceRecord = order.Adapt<BalanceRecordEntity>();
await _dbContext.InsertAsync(balanceRecord);
await DbContext.InsertAsync(balanceRecord);
await _dbContext.InsertAsync(new CanteenOrderDetailEntity
await DbContext.InsertAsync(new CanteenOrderDetailEntity
{
OrderNo = order.No,
DishesCode = request.DishesCode,
@@ -167,7 +168,7 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
public async Task<Pagination<OrderBookingResponse>> GetBookingPageAsync(OrderBookingPageRequest request)
{
var page = await _dbContext.Queryable<CanteenOrderEntity>()
var page = await DbContext.Queryable<CanteenOrderEntity>()
.LeftJoin<GainfoEntity>((x, ga) => x.UserNo == ga.No)
.Select(x => new OrderBookingResponse
{
@@ -200,18 +201,18 @@ public class BookingOrderService : BaseOrderService, IBookingOrderService
/// <returns></returns>
private async Task<GainfoEntity> CheckExistsMyBookingsAsync(DateTime bookingDate, ShiftEnumType shiftType)
{
var subjectId = _currentUser.GetIntSubjectId();
var gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.IdentityUserId == subjectId).FirstAsync();
var jinkoCode = _currentUser.GetUserClaim("jinko-code") ?? string.Empty;
var subjectId = CurrentUser.GetIntSubjectId();
var gainfo = await DbContext.Queryable<GainfoEntity>().Where(x => x.IdentityUserId == subjectId).FirstAsync();
var jinkoCode = CurrentUser.GetUserClaim("jinko-code") ?? string.Empty;
if (jinkoCode.IsPresent())
{
gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.Code == jinkoCode).FirstAsync();
gainfo = await DbContext.Queryable<GainfoEntity>().Where(x => x.Code == jinkoCode).FirstAsync();
}
var start = bookingDate.Date.AddDays(-1);
var end = start.AddDays(1).AddSeconds(-1);
var exists = await _dbContext.Queryable<CanteenOrderEntity>()
var exists = await DbContext.Queryable<CanteenOrderEntity>()
.Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.Booking)
.Where(x => x.ShiftType == shiftType)
.Where(x => x.UserNo == gainfo.No)