feat 菜单订单控制器

This commit is contained in:
cheche
2024-03-13 18:55:12 +08:00
parent 20cf421a3c
commit 53dd000f34
19 changed files with 785 additions and 8 deletions

View File

@@ -0,0 +1,70 @@
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Order.Services;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Canteen.Order.Controllers;
/// <summary>
/// 菜单菜品控制器
/// </summary>
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class MenuDishesController : ControllerBase
{
private readonly IMenuDishesService _menuDishesService;
public MenuDishesController(IMenuDishesService menuDishesService)
{
_menuDishesService = menuDishesService;
}
/// <summary>
/// 获取菜单
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("pageMenu")]
public async Task<Pagination<GetMenuResponse>> GetMenuAsync([FromQuery]GetMenuRequest request)
{
return await _menuDishesService.GetMenuAsync(request);
}
/// <summary>
/// 菜单保存/更改
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("saveMenu")]
public async Task SaveMenuAsync(SaveMenuRequest request)
{
await _menuDishesService.SaveMenuAsync(request);
}
/// <summary>
/// 获取菜品
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("pageDishes")]
public async Task<Pagination<GetDishesResponse>> GetDishesAsync([FromQuery] GetDishesRequest request)
{
return await _menuDishesService.GetDishesAsync(request);
}
/// <summary>
/// 菜品保存/更改
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("saveDishes")]
public async Task SaveDishesAsync(SaveDishesRequest request)
{
await _menuDishesService.SaveDishesAsync(request);
}
}

View File

@@ -0,0 +1,47 @@
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Order.Services;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Canteen.Order.Controllers;
/// <summary>
///订单/明细控制器
/// </summary>
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class MiniProgramOrderDetailController : ControllerBase
{
private readonly IMiniProgramOrderDetailService _miniProgramOrderDetailService;
public MiniProgramOrderDetailController(IMiniProgramOrderDetailService miniProgramOrderDetailService)
{
_miniProgramOrderDetailService = miniProgramOrderDetailService;
}
/// <summary>
/// 订单分页
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("pageOrder")]
public async Task<Pagination<GetMiniProgramOrderResponse>> GetMiniProgramOrderAsync([FromQuery]GetMiniProgramOrderRequest request)
{
return await _miniProgramOrderDetailService.GetMiniProgramOrderAsync(request);
}
/// <summary>
/// 明细分页
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("pageDetail")]
public async Task<Pagination<GetDetailResponse>> GetDetailAsync([FromQuery] GetDetailRequest request)
{
return await _miniProgramOrderDetailService.GetDetailAsync(request);
}
}

View File

@@ -0,0 +1,8 @@
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Canteen.Order.Request
{
public class GetDetailRequest : PageDto
{
}
}

View File

@@ -0,0 +1,9 @@
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Canteen.Order.Request
{
public class GetDishesRequest : PageDto
{
public Guid? MenuCode { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Canteen.Order.Request
{
public class GetMenuRequest : PageDto
{
public Guid? PlaceCode { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
using Kurisu.Core.DataAccess.Dto;
namespace Dlhis.Canteen.Order.Request
{
public class GetMiniProgramOrderRequest : PageDto
{
}
}

View File

@@ -0,0 +1,69 @@
using Dlhis.Entity.Canteen.Enums;
using SqlSugar.DbConvert;
using SqlSugar;
using System.ComponentModel.DataAnnotations;
namespace Dlhis.Canteen.Order.Request
{
public class SaveDishesRequest
{
public long? Id { get; set; }
/// <summary>
/// 菜单编码
/// </summary>
public Guid MenuCode { get; set; }
/// <summary>
/// 大类
/// </summary>
public string Categories { get; set; }
/// <summary>
/// 小类
/// </summary>
public string SubCategories { get; set; }
/// <summary>
/// 菜品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 类型
/// </summary>
[EnumDataType(typeof(CanteenDishesEnumType))]
public CanteenDishesEnumType Type { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 单位
/// </summary>
public string Unit { get; set; }
/// <summary>
/// 限售份数
/// </summary>
public int RestrictedNum { get; set; }
/// <summary>
/// 图片
/// </summary>
public string Image { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool Enable { get; set; }
}
}

View File

@@ -0,0 +1,48 @@
using Dlhis.Entity.Canteen.Enums;
using Dlhis.Entity.Device.Enums;
using SqlSugar;
using System.ComponentModel.DataAnnotations;
namespace Dlhis.Canteen.Order.Request
{
public class SaveMenuRequest
{
public long? Id { get; set; }
/// <summary>
/// 菜单名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 所属营业点
/// </summary>
[Required]
public Guid PlaceCode { get; set; }
/// <summary>
/// 厂区
/// </summary>
public string Factory { get; set; }
/// <summary>
/// 开始日期
/// </summary>
public DateOnly StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public DateOnly EndDate { get; set; }
/// <summary>
/// 餐次段
/// </summary>
public List<ShiftEnumType> ShiftTypes { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool Enable { get; set; }
}
}

View File

@@ -0,0 +1,66 @@
using Dlhis.Entity.Canteen.Enums;
using SqlSugar.DbConvert;
using SqlSugar;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Canteen.Order.Response
{
public class GetDetailResponse
{
/// <summary>
/// 订单号
/// </summary>
public string ThirdNo { get; set; }
/// <summary>
/// 营业日
/// </summary>
public DateOnly BusinessDate { get; set; }
/// <summary>
/// 餐别
/// </summary>
public string ShiftType { get; set; }
/// <summary>
/// 菜品编码
/// </summary>
public Guid DishesCode { get; set; }
/// <summary>
/// 菜品名称
/// </summary>
public Guid DishesName { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 单位
/// </summary>
public string Unit { get; set; }
/// <summary>
/// 数量
/// </summary>
public int Num { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 订单明细状态
/// </summary>
public OrderDetailsStatusEnumType OrderStatus { get; set; }
/// <summary>
/// 订单明细状态CN
/// </summary>
public string OrderStatusCN => OrderStatus.GetDescription();
}
}

View File

@@ -0,0 +1,75 @@
using Dlhis.Entity.Canteen.Enums;
using SqlSugar.DbConvert;
using SqlSugar;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Canteen.Order.Response
{
public class GetDishesResponse
{
/// <summary>
/// 菜单编码
/// </summary>
public Guid MenuCode { get; set; }
/// <summary>
/// 大类
/// </summary>
public string Categories { get; set; }
/// <summary>
/// 小类
/// </summary>
public string SubCategories { get; set; }
/// <summary>
/// 菜品编码
/// </summary>
public Guid Code { get; set; }
/// <summary>
/// 菜品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 菜品类型
/// </summary>
public CanteenDishesEnumType Type { get; set; }
/// <summary>
/// 菜品类型描述
/// </summary>
public string TypeDescription => Type.GetDescription();
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 单位
/// </summary>
public string Unit { get; set; }
/// <summary>
/// 限售份数
/// </summary>
public int RestrictedNum { get; set; }
/// <summary>
/// 图片
/// </summary>
public string Image { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool Enable { get; set; }
}
}

View File

@@ -0,0 +1,59 @@
using Dlhis.Entity.Canteen.Enums;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Canteen.Order.Response
{
public class GetMenuResponse
{
/// <summary>
/// 菜单编码
/// </summary>
public Guid Code { get; set; }
/// <summary>
/// 菜单名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 所属营业点
/// </summary>
public Guid PlaceCode { get; set; }
/// <summary>
/// 厂区
/// </summary>
public string Factory { get; set; }
/// <summary>
/// 开始日期
/// </summary>
public DateOnly StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public DateOnly EndDate { get; set; }
/// <summary>
/// 餐次段
/// </summary>
public List<ShiftEnumType> ShiftTypes
{
get
{
if (ShiftTypesSrt.IsEmpty()) ShiftTypesSrt = "[]";
return ShiftTypesSrt.ToObject<List<ShiftEnumType>>();
}
}
public string ShiftTypesSrt { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public bool Enable { get; set; }
}
}

View File

@@ -0,0 +1,106 @@
using Dlhis.Entity.Canteen.Enums;
using SqlSugar.DbConvert;
using SqlSugar;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Canteen.Order.Response
{
public class GetMiniProgramOrderResponse
{
/// <summary>
/// 订单号
/// </summary>
public string No { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 工号
/// </summary>
public string Code { get; set; }
/// <summary>
/// 人事范围
/// </summary>
public string Werks { get; set; }
/// <summary>
/// 部门编码
/// </summary>
public string DepartmentNo { get; set; }
/// <summary>
/// 成本中心
/// </summary>
public string CostId { get; set; }
/// <summary>
/// 工作地
/// </summary>
public string Workplace { get; set; }
/// <summary>
/// 厂区
/// </summary>
public string Factory { get; set; }
/// <summary>
/// 营业点
/// </summary>
public Guid PlaceCode { get; set; }
/// <summary>
/// 餐次
/// </summary>
public string ShiftType { get; set; }
/// <summary>
/// 菜品
/// </summary>
public Guid DishesCode { get; set; }
/// <summary>
/// 手机号码
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 用餐日期
/// </summary>
public DateOnly SysDate { get; set; }
/// <summary>
/// 下单时间
/// </summary>
public DateTime CostDate { get; set; }
/// <summary>
/// 支付方式
/// </summary>
public CanteenPayEnumType PayType { get; set; }
/// <summary>
/// 支付方式CN
/// </summary>
public string PayTypeCN => PayType.GetDescription();
/// <summary>
/// 订单状态
/// </summary>
public MiniProgramOrderStatusEnumType OrderStatus { get; set; }
/// <summary>
/// 订单状态CN
/// </summary>
public string OrderStatusCN => OrderStatus.GetDescription();
/// <summary>
/// 总金额
/// </summary>
public decimal TotalAmount { get; set; }
}
}

View File

@@ -0,0 +1,18 @@
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Canteen.Order.Services
{
public interface IMenuDishesService :IScopeDependency
{
Task<Pagination<GetMenuResponse>> GetMenuAsync(GetMenuRequest request);
Task SaveMenuAsync(SaveMenuRequest request);
Task<Pagination<GetDishesResponse>> GetDishesAsync(GetDishesRequest request);
Task SaveDishesAsync(SaveDishesRequest request);
}
}

View File

@@ -0,0 +1,14 @@
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Canteen.Order.Services
{
public interface IMiniProgramOrderDetailService : IScopeDependency
{
Task<Pagination<GetMiniProgramOrderResponse>> GetMiniProgramOrderAsync(GetMiniProgramOrderRequest request);
Task<Pagination<GetDetailResponse>> GetDetailAsync( GetDetailRequest request);
}
}

View File

@@ -0,0 +1,93 @@
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<Pagination<GetMenuResponse>> GetMenuAsync(GetMenuRequest request)
{
var currentTenantId = _currentUser.GetStringTenantId();
var page = await _dbContext.Queryable<CanteenMenuEntity>()
.Where(x => x.Factory == currentTenantId)
.WhereIF(request.PlaceCode.HasValue, x => request.PlaceCode == x.PlaceCode)
.WhereIF(!request.Search.IsEmpty(),x => x.Name.Contains(request.Search))
.Select(x => new GetMenuResponse
{
ShiftTypesSrt = x.ShiftTypes.ToString(),
},true)
.ToPageListAsync(request);
return page;
}
public async Task SaveMenuAsync(SaveMenuRequest request)
{
var place = await _dbContext.Queryable<BusinessPlaceEntity>()
.FirstAsync(x => x.Code == request.PlaceCode);
place.ThrowIfNull($"{request.PlaceCode}:该营业点不存在!");
if (!request.Id.HasValue)
{
var entity = request.Adapt<CanteenMenuEntity>();
entity.Code = Guid.NewGuid();
await _dbContext.InsertAsync(entity);
}
else
{
var entity = await _dbContext.Queryable<CanteenMenuEntity>()
.Where(x => x.Id == request.Id).FirstAsync();
request.Adapt(entity);
await _dbContext.UpdateAsync(entity);
}
}
public async Task<Pagination<GetDishesResponse>> GetDishesAsync(GetDishesRequest request)
{
var page = await _dbContext.Queryable<CanteenDishesEntity>()
.WhereIF(request.MenuCode.HasValue, x => request.MenuCode == x.MenuCode)
.WhereIF(!request.Search.IsEmpty(),x => x.Name.Contains(request.Search))
.Select<GetDishesResponse>()
.ToPageListAsync(request);
return page;
}
public async Task SaveDishesAsync(SaveDishesRequest request)
{
var menu = await _dbContext.Queryable<CanteenMenuEntity>()
.FirstAsync(x => x.Code == request.MenuCode);
menu.ThrowIfNull($"{request.MenuCode}:该菜单不存在!");
if (!request.Id.HasValue)
{
var dishers = request.Adapt<CanteenDishesEntity>();
dishers.Code = Guid.NewGuid();
await _dbContext.InsertAsync(dishers);
}
else
{
var entity = await _dbContext.Queryable<CanteenDishesEntity>()
.Where(x => x.Id == request.Id).FirstAsync();
request.Adapt(entity);
await _dbContext.UpdateAsync(entity);
}
}
}
}

View File

@@ -0,0 +1,39 @@
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Dlhis.Entity.Canteen.Entities;
using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto;
using Kurisu.SqlSugar.Extensions;
using Kurisu.SqlSugar.Services;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Canteen.Order.Services.Implements;
public class MiniProgramOrderDetailService : IMiniProgramOrderDetailService
{
private readonly IDbContext _dbContext;
public MiniProgramOrderDetailService(IDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<Pagination<GetMiniProgramOrderResponse>> GetMiniProgramOrderAsync(GetMiniProgramOrderRequest request)
{
var page = await _dbContext.Queryable<MiniProgramOrderEntity>()
.WhereIF(!request.Search.IsEmpty(), x => x.Name == request.Search || x.Code == request.Search)
.Select<GetMiniProgramOrderResponse>()
.ToPageListAsync(request);
return page;
}
public async Task<Pagination<GetDetailResponse>> GetDetailAsync(GetDetailRequest request)
{
var page = await _dbContext.Queryable<OrderDetailsEntity>()
.WhereIF(!request.Search.IsEmpty(),x => x.ThirdNo == request.Search)
.Select<GetDetailResponse>()
.ToPageListAsync(request);
return page;
}
}

View File

@@ -1,4 +1,6 @@
using Kurisu.SqlSugar;
using Dlhis.Entity.Canteen.Enums;
using Dlhis.Entity.Device.Enums;
using Kurisu.SqlSugar;
using SqlSugar;
using System;
using System.Collections.Generic;
@@ -54,8 +56,8 @@ public class CanteenMenuEntity : SugarBaseEntity
/// <summary>
/// 餐次段
/// </summary>
[SugarColumn(ColumnDescription = "餐次段", IsNullable = true)]
public List<string> ShiftTypes { get; set; }
[SugarColumn(ColumnDataType = "varchar(150)", IsJson = true, ColumnDescription = "餐次段", DefaultValue = "[]")]
public List<ShiftEnumType> ShiftTypes { get; set; }
/// <summary>
/// 是否启用

View File

@@ -2,11 +2,6 @@
using Kurisu.SqlSugar;
using SqlSugar;
using SqlSugar.DbConvert;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Dlhis.Entity.Canteen.Entities
{
@@ -49,6 +44,7 @@ namespace Dlhis.Entity.Canteen.Entities
/// <summary>
/// 成本中心
/// </summary>
[SugarColumn(ColumnDescription = "成本中心")]
public string CostId { get; set; }
/// <summary>

View File

@@ -0,0 +1,41 @@
using System.ComponentModel;
namespace Dlhis.Entity.Canteen.Enums
{
/// <summary>
/// 餐次
/// </summary>
[Description("餐次")]
public enum ShiftEnumType
{
/// <summary>
/// 早餐
/// </summary>
[Description("早餐")]
Breakfast = 1,
/// <summary>
/// 午餐
/// </summary>
[Description("午餐")]
Lunch = 2,
/// <summary>
/// 晚餐
/// </summary>
[Description("晚餐")]
Dinner = 3,
/// <summary>
/// 宵夜
/// </summary>
[Description("宵夜")]
Nightsnack = 4,
/// <summary>
/// 凌晨餐
/// </summary>
[Description("凌晨餐")]
Midnightsnack = 5,
}
}