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

View File

@@ -1,9 +1,12 @@
namespace Dlhis.Basic.Dishes.Request using System.ComponentModel.DataAnnotations;
{
public class GetDishesMenusBookingRequest
{
public string Factory { get; set; }
public Guid BusinessPlaceCode { get; set; } 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<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); 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>() var data = await _dbContext.Queryable<DishesMenuEntity>()
.LeftJoin<DishesEntity>((x, dishes) => x.DishesCode == dishes.CustomCode) .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 => SqlFunc.DateIsSame(x.Date, date, DateType.Day))
.Where((x, dishes) => dishes.Enable) .Where((x, dishes) => dishes.Enable)
.WhereIF(shiftType.HasValue, x => x.ShiftType == shiftType) .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 .Select((x, dishes) => new DishesDetailResponse
{ {
BusinessPlaceCode = x.BusinessPlaceCode, BusinessPlaceCode = x.BusinessPlaceCode,
@@ -146,20 +146,18 @@ public class DishesMenuService : IDishesMenuService
var where = LinqExpressionExtension.False<DishesMenuEntity>(); var where = LinqExpressionExtension.False<DishesMenuEntity>();
keys.ForEach(x => 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.Client.Deleteable<DishesMenuEntity>().Where(where).ExecuteCommandAsync();
await _dbContext.InsertAsync(entities); await _dbContext.InsertAsync(entities);
} }
public async Task<DishesMenuDetailDto> GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, ShiftEnumType shiftType, string dishesCode) public async Task<DishesMenuDetailDto> GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, ShiftEnumType shiftType, string dishesCode)
{ {
var detail = await _dbContext.Queryable<DishesMenuEntity>() var detail = await _dbContext.Queryable<DishesMenuEntity>()
.LeftJoin<DishesEntity>((x, d) => x.DishesCode == d.CustomCode) .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.BusinessPlaceCode == businessPlaceCode)
.Where(x => x.ShiftType == shiftType) .Where(x => x.ShiftType == shiftType)
.Where(x => x.DishesCode == dishesCode) .Where(x => x.DishesCode == dishesCode)

View File

@@ -5,6 +5,7 @@ using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums; using Dlhis.Entity.Canteen.Enums;
using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Dto;
using Kurisu.Core.User.Abstractions;
using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services; using Kurisu.SqlSugar.Services;
using Mapster; using Mapster;
@@ -14,10 +15,12 @@ namespace Dlhis.Basic.Dishes.Services.Implements;
public class DishesService : IDishesService public class DishesService : IDishesService
{ {
private readonly IDbContext _dbContext; private readonly IDbContext _dbContext;
private readonly ICurrentUser _currentUser;
public DishesService(IDbContext dbContext) public DishesService(IDbContext dbContext, ICurrentUser currentUser)
{ {
_dbContext = dbContext; _dbContext = dbContext;
_currentUser = currentUser;
} }
public async Task<Pagination<DishesResponse>> GetDishesPageAsync(DishesPageRequest request) public async Task<Pagination<DishesResponse>> GetDishesPageAsync(DishesPageRequest request)
@@ -60,49 +63,43 @@ public class DishesService : IDishesService
public async Task<DishesMenusBookingSettingResponse> GetDishesMenusBookingSetting(GetDishesMenusBookingRequest request) 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) .Where(x => x.UniqueType == CanteenSettingUnqiueEnumType.Tenant && x.Item == CanteenSettingItemEnumType.BookingDeadline && x.Enable)
.Select(x => x.Value) .Select(x => x.Value)
.FirstAsync(); .FirstAsync();
if (!TimeOnly.TryParse(strDatetime, out var deadline)) if (!TimeOnly.TryParse(value, out var deadline))
deadline = new TimeOnly(8, 30); deadline = new TimeOnly(8, 30);
var res = new DishesMenusBookingSettingResponse
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();
if (gainfo.Factory == selectTenantId)
{
payTypes.Add(new BalanceRecordSourceEnumDto { Type = BalanceRecordSourceEnumType.LocalTenantSubsidies });
}
return new DishesMenusBookingSettingResponse
{ {
ServerTime = DateTime.Now, ServerTime = DateTime.Now,
Deadline = DateTime.Today.Add(deadline.ToTimeSpan()) Deadline = DateTime.Today.Add(deadline.ToTimeSpan()),
PayTypes = payTypes
}; };
var shift = await _dbContext.Queryable<BusinessPlaceShiftRelationshipEntity>()
.Where(x => x.PlaceCode == request.PlaceCode)
.FirstAsync();
var payTypes = new List<BalanceRecordSourceEnumDto>();
var dto1 = new BalanceRecordSourceEnumDto
{
Type = BalanceRecordSourceEnumType.Cash
};
payTypes.Add(dto1);
if (shift != null)
{
if (shift.TenantId == request.Factory)
{
var dto2 = new BalanceRecordSourceEnumDto
{
Type = BalanceRecordSourceEnumType.LocalTenantSubsidies
};
payTypes.Add(dto2);
}
}
res.PayTypes = payTypes;
return res;
} }
public async Task<DishesDetailResponse> GetDishesDetailByIdAsync(long id) public async Task<DishesDetailResponse> GetDishesDetailByIdAsync(long id)

View File

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

View File

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