diff --git a/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs b/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs index b1eb6e49..2ebeea48 100644 --- a/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs +++ b/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs @@ -7,7 +7,6 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.Core.DataAccess.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Org.BouncyCastle.Asn1.Ocsp; namespace Dlhis.Basic.Dishes.Controller; @@ -52,6 +51,20 @@ public class DishesMenusController : ControllerBase return await _dishesMenuService.GetDishesMenuDetailAsync(businessPlaceCode, customCode, date); } + /// + /// 根据参数获取菜品 + /// + /// + /// + /// + /// + /// + [HttpGet("dishes-selections")] + public async Task> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, [FromQuery] List categoryCodes) + { + return await _dishesMenuService.GetDishesUnderCurrentMenuAsync(businessPlaceCode, date, shiftType, categoryCodes); + } + /// /// 菜单保存/更改 /// diff --git a/Src/Dlhis.Basic/Dishes/Response/DishesMenusBookingSettingResponse.cs b/Src/Dlhis.Basic/Dishes/Response/DishesMenusBookingSettingResponse.cs index 8e492bc5..f9b3a87c 100644 --- a/Src/Dlhis.Basic/Dishes/Response/DishesMenusBookingSettingResponse.cs +++ b/Src/Dlhis.Basic/Dishes/Response/DishesMenusBookingSettingResponse.cs @@ -8,9 +8,9 @@ public class DishesMenusBookingSettingResponse public DateTime ServerTime { get; set; } /// - /// 餐别-餐次信息 + /// 订餐期限 /// - public List ShiftInfos { get; set; } + public DateTime Deadline { get; set; } /// /// 支付方式 diff --git a/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs b/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs index 00984ab5..da96b3cc 100644 --- a/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs @@ -12,6 +12,8 @@ public interface IDishesMenuService : IScopeDependency Task GetDishesMenuDetailAsync(Guid businessPlaceCode, string customCode, DateTime date); + Task> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, List categoryCodes); + Task SaveDishesMenuAsync(DishesMenuSaveRequest request); Task GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, ShiftEnumType shiftType, string dishesCode); diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs index c93fd62a..cec11e46 100644 --- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs @@ -9,7 +9,7 @@ using Dlhis.Basic.Dishes.Request; using Dlhis.Basic.Dishes.Response; using Dlhis.Basic.BusinessPlace.Services; using Dlhis.Basic.Dishes.Dto; -using Org.BouncyCastle.Asn1.Ocsp; +using Mapster; namespace Dlhis.Basic.Dishes.Services.Implements; @@ -49,7 +49,7 @@ public class DishesMenuService : IDishesMenuService BusinessPlaceCode = businessPlaceCode, Items = new List { - new() + new() { CustomCode = customCode, Date = date, @@ -74,6 +74,21 @@ public class DishesMenuService : IDishesMenuService }; } + public async Task> GetDishesUnderCurrentMenuAsync(Guid businessPlaceCode, DateTime date, ShiftEnumType? shiftType, List categoryCodes) + { + var data = await _dbContext.Queryable() + .LeftJoin((x, dishes) => x.DishesCode == dishes.CustomCode) + .Where(x => x.BusinessPlaceCode == businessPlaceCode) + .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)) + .Select((x, dishes) => dishes) + .ToListAsync(); + + return data.Adapt>(); + } + public async Task SaveDishesMenuAsync(DishesMenuSaveRequest request) { //检验数据 @@ -163,7 +178,7 @@ public class DishesMenuService : IDishesMenuService foreach (var item in request.Items) { - var u = item.Date.ToString("yyyy-MM-dd") + "-" + item.CustomCode; + var u = item.Date.ToString("yyyy-MM-dd") + ". " + item.CustomCode; (item.ShiftTypes.DistinctBy(x => x.ShiftType).Count() != item.ShiftTypes.Count).ThrowIfTrue($"{u}的餐次不可重复添加"); diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs index dbd90b56..f8518ff8 100644 --- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs @@ -66,12 +66,13 @@ public class DishesService : IDishesService .Select(x => x.Value) .FirstAsync(); - DateTime dateTime; - DateTime.TryParseExact(strDatetime, "HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out dateTime); + if (!TimeOnly.TryParse(strDatetime, out var deadline)) + deadline = new TimeOnly(8, 30); var res = new DishesMenusBookingSettingResponse { - ServerTime = dateTime, + ServerTime = DateTime.Now, + Deadline = DateTime.Today.Add(deadline.ToTimeSpan()) }; var shift = await _dbContext.Queryable() @@ -87,11 +88,7 @@ public class DishesService : IDishesService if (shift != null) { - var businessShiftMealRelationships = await _dbContext.Queryable() - .Where(x => x.ShiftCode == shift.ShiftCode) - .Select() - .ToListAsync(); - res.ShiftInfos = businessShiftMealRelationships; + if (shift.TenantId == request.Factory) { @@ -104,6 +101,7 @@ public class DishesService : IDishesService } res.PayTypes = payTypes; + return res; } diff --git a/Src/Dlhis.Basic/Dlhis.Basic.csproj b/Src/Dlhis.Basic/Dlhis.Basic.csproj index 61d37f79..5c48837c 100644 --- a/Src/Dlhis.Basic/Dlhis.Basic.csproj +++ b/Src/Dlhis.Basic/Dlhis.Basic.csproj @@ -27,6 +27,7 @@ + diff --git a/Src/Dlhis.Basic/MealUser/Controllers/MealUsersController.cs b/Src/Dlhis.Basic/MealUser/Controllers/MealUsersController.cs index 02fc4e33..04e365ac 100644 --- a/Src/Dlhis.Basic/MealUser/Controllers/MealUsersController.cs +++ b/Src/Dlhis.Basic/MealUser/Controllers/MealUsersController.cs @@ -1,5 +1,4 @@ -using Dlhis.Basic.MealUser.Request; -using Dlhis.Basic.MealUser.Response; +using Dlhis.Basic.MealUser.Response; using Dlhis.Basic.MealUser.Services; using Kurisu.Core.DataAccess.Dto; using Microsoft.AspNetCore.Authorization; @@ -28,19 +27,8 @@ public class MealUsersController : ControllerBase /// /// [HttpGet("page")] - public async Task> GetPageAsync([FromQuery] MealUserPageRequest request) + public async Task> GetPageAsync([FromQuery] PageDto request) { return await _mealUserService.GetPageAsync(request); } - - /// - /// 就餐人员保存 - /// - /// - /// - [HttpPost] - public async Task AddAsync(MealUserAddRequest request) - { - await _mealUserService.AddAsync(request); - } } diff --git a/Src/Dlhis.Basic/MealUser/Request/MealUserAddRequest.cs b/Src/Dlhis.Basic/MealUser/Request/MealUserAddRequest.cs deleted file mode 100644 index f4ee6ccc..00000000 --- a/Src/Dlhis.Basic/MealUser/Request/MealUserAddRequest.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Dlhis.Entity.Canteen.Enums; - -namespace Dlhis.Basic.MealUser.Request; - -public class MealUserAddRequest -{ - /// - /// 档案号 - /// - [Required(ErrorMessage = "档案号不能为空")] - public string UserNo { get; set; } - - - /// - /// 用户类型 - /// - [EnumDataType(typeof(CanteenUserEnumType))] - public CanteenUserEnumType UserType { get; set; } -} diff --git a/Src/Dlhis.Basic/MealUser/Request/MealUserPageRequest.cs b/Src/Dlhis.Basic/MealUser/Request/MealUserPageRequest.cs deleted file mode 100644 index 667a21ed..00000000 --- a/Src/Dlhis.Basic/MealUser/Request/MealUserPageRequest.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Kurisu.Core.DataAccess.Dto; - -namespace Dlhis.Basic.MealUser.Request; - -public class MealUserPageRequest : PageDto -{ -} \ No newline at end of file diff --git a/Src/Dlhis.Basic/MealUser/Response/MealUserResponse.cs b/Src/Dlhis.Basic/MealUser/Response/MealUserResponse.cs index a750372e..27731ec5 100644 --- a/Src/Dlhis.Basic/MealUser/Response/MealUserResponse.cs +++ b/Src/Dlhis.Basic/MealUser/Response/MealUserResponse.cs @@ -1,6 +1,4 @@ -using Dlhis.Entity.Canteen.Enums; - -namespace Dlhis.Basic.MealUser.Response; +namespace Dlhis.Basic.MealUser.Response; public class MealUserResponse { @@ -15,13 +13,6 @@ public class MealUserResponse /// public string UserCode { get; set; } - - /// - /// 消费人员类型 - /// - public CanteenUserEnumType UserType { get; set; } - - /// /// 卡号 /// diff --git a/Src/Dlhis.Basic/MealUser/Services/IMealUserService.cs b/Src/Dlhis.Basic/MealUser/Services/IMealUserService.cs index 990a8e98..33dfe9f8 100644 --- a/Src/Dlhis.Basic/MealUser/Services/IMealUserService.cs +++ b/Src/Dlhis.Basic/MealUser/Services/IMealUserService.cs @@ -1,12 +1,9 @@ -using Dlhis.Basic.MealUser.Request; -using Dlhis.Basic.MealUser.Response; +using Dlhis.Basic.MealUser.Response; using Kurisu.Core.DataAccess.Dto; namespace Dlhis.Basic.MealUser.Services; public interface IMealUserService : IScopeDependency { - Task> GetPageAsync(MealUserPageRequest request); - - Task AddAsync(MealUserAddRequest request); + Task> GetPageAsync(PageDto request); } diff --git a/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs b/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs index 0469fe53..26bde8e4 100644 --- a/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs +++ b/Src/Dlhis.Basic/MealUser/Services/Implements/MealUserService.cs @@ -1,9 +1,5 @@ -using Dlhis.Basic.MealUser.Request; -using Dlhis.Basic.MealUser.Response; -using Dlhis.Basic.Organization.Services; +using Dlhis.Basic.MealUser.Response; using Dlhis.Entity.Basic.Entity; -using Dlhis.Entity.Basic.Enums; -using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Dto; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; @@ -13,17 +9,15 @@ namespace Dlhis.Basic.MealUser.Services.Implements; public class MealUserService : IMealUserService { private readonly IDbContext _dbContext; - private readonly IGainfoStore _gainfoStore; - public MealUserService(IDbContext dbContext, IGainfoStore gainfoStore) + public MealUserService(IDbContext dbContext) { _dbContext = dbContext; - _gainfoStore = gainfoStore; } - public async Task> GetPageAsync(MealUserPageRequest request) + public async Task> GetPageAsync(PageDto request) { - var page = await _dbContext.Queryable() + var page = await _dbContext.Queryable() .LeftJoin((x, ga) => x.UserNo == ga.No) .Select((x, ga) => new MealUserResponse { @@ -32,32 +26,9 @@ public class MealUserService : IMealUserService BalanceOfSubsidies = x.BalanceOfSubsidies, UserCode = ga.Code, UserNo = ga.No, - UserType = x.UserType }) .ToPageListAsync(request); return page; } - - public async Task AddAsync(MealUserAddRequest request) - { - //todo 获取档案信息 - - var gainfoEntity = await _gainfoStore.Queryable(GainfoStatusEnumType.Working) - .Where(x => x.No.ToString() == request.UserNo) - .FirstAsync(); - - gainfoEntity.ThrowIfNull($"档案[{request.UserNo}]不存在"); - - var entity = new CanteenUserEntity - { - UserNo = request.UserNo, - UserType = request.UserType, - Balance = 0, - BalanceOfRecharge = 0, - BalanceOfSubsidies = 0, - Version = 0, - }; - await _dbContext.InsertAsync(entity); - } } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index 9a4ff4c2..724575a5 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -169,7 +169,7 @@ public class GainfoService : IGainfoService var info = await _gainfoStore.Queryable(GainfoStatusEnumType.Working) .LeftJoin((ga, department) => ga.DepartmentNo == department.No) - .LeftJoin((ga, department, mealUser) => ga.No == mealUser.UserNo) + .LeftJoin((ga, department, mealUser) => ga.No == mealUser.UserNo) .Where((ga, department) => ga.Id == gainfo.Id) .Select((ga, department, mealUser) => new GainfoCurrentResponse { diff --git a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs index 9d0f7b96..fc1ee44e 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/OrdersController.cs @@ -6,6 +6,7 @@ using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.Core.DataAccess.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Org.BouncyCastle.Asn1.Ocsp; namespace Dlhis.Canteen.Dishes.Controllers; @@ -64,13 +65,24 @@ public class OrdersController : ControllerBase /// 订餐 /// /// - [IgnoreTenant] [HttpPost("booking")] + [Transactional] public async Task Booking(BookingMealRequest request) { - await _orderService.Booking(request); + await _orderService.BookingAsync(request); } + ///// + ///// 获取详情 + ///// + ///// + ///// + //[HttpGet("details")] + //public async Task> GetDetailsAsync(string no) + //{ + // return await _orderService.GetDetailsAsync(no); + //} + /// /// 充值 /// @@ -80,4 +92,14 @@ public class OrdersController : ControllerBase { } + + /// + /// 订单聚合数据 + /// + /// + [HttpGet("aggregation")] + public async Task> GetOrdersAggregationAsync([FromQuery] PageDto page) + { + return await _orderService.GetOrdersAggregationAsync(page); + } } diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs index 719f7e3f..8e544b15 100644 --- a/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs +++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordUserPageRequest.cs @@ -3,7 +3,7 @@ using Kurisu.Core.CustomClass; using System.ComponentModel.DataAnnotations; using Kurisu.Core.DataAccess.Dto; -namespace Dlhis.Canteen.Dishes.Request +namespace Dlhis.Canteen.Order.Request { public class BalanceRecordUserPageRequest : PageDto, IValidatableObject { @@ -13,11 +13,17 @@ namespace Dlhis.Canteen.Dishes.Request [EnumDataType(typeof(DateTimeSearchEnumType))] public DateTimeSearchEnumType? SearchDateTimeDimension { get; set; } + /// + /// 消费应用类型 + /// + public CanteenApplicaitonTypeEnumType? ApplicationType { get; set; } + /// /// 日期范围查询 /// public DateTimePeriod SearchDateTimePeriod { get; set; } + public IEnumerable Validate(ValidationContext validationContext) { var now = DateTime.Now; @@ -43,8 +49,8 @@ namespace Dlhis.Canteen.Dishes.Request } else if (SearchDateTimeDimension == DateTimeSearchEnumType.Season) { - SearchDateTimePeriod.Start = now.AddMonths(0 - ((now.Month - 1) % 3)); - SearchDateTimePeriod.End = now.AddMonths(3 - ((now.Month - 1) % 3)).AddMonths(1).AddDays(-1); + SearchDateTimePeriod.Start = now.AddMonths(0 - (now.Month - 1) % 3); + SearchDateTimePeriod.End = now.AddMonths(3 - (now.Month - 1) % 3).AddMonths(1).AddDays(-1); } else if (SearchDateTimeDimension == DateTimeSearchEnumType.HalfOfYear) { diff --git a/Src/Dlhis.Canteen/Order/Request/SaveDetailRequest.cs b/Src/Dlhis.Canteen/Order/Request/SaveDetailRequest.cs deleted file mode 100644 index a7ed3d5d..00000000 --- a/Src/Dlhis.Canteen/Order/Request/SaveDetailRequest.cs +++ /dev/null @@ -1,61 +0,0 @@ -using Dlhis.Entity.Canteen.Enums; -using SqlSugar.DbConvert; -using SqlSugar; - -namespace Dlhis.Canteen.Order.Request -{ - public class SaveDetailRequest - { - public long? Id { get; set; } - - /// - /// 订单号 - /// - public string ThirdNo { get; set; } - - /// - /// 营业日 - /// - public DateOnly BusinessDate { get; set; } - - /// - /// 餐次 - /// - public ShiftEnumType ShiftType { get; set; } - - /// - /// 菜品编码 - /// - public Guid DishesCode { get; set; } - - /// - /// 菜品名称 - /// - public Guid DishesName { get; set; } - - /// - /// 单价 - /// - public decimal Price { get; set; } - - /// - /// 单位 - /// - public string Unit { get; set; } - - /// - /// 数量 - /// - public int Num { get; set; } - - /// - /// 金额 - /// - public decimal Amount { get; set; } - - /// - /// 订单明细状态 - /// - public OrderDetailsStatusEnumType OrderStatus { get; set; } - } -} diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserResponse.cs index 1ab529aa..9ad32164 100644 --- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserResponse.cs +++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordUserResponse.cs @@ -49,4 +49,15 @@ public class BalanceRecordUserResponse /// 记录产生日期 /// public DateTime CostDateTime { get; set; } + + + /// + /// 消费应用类型 + /// + public CanteenApplicaitonTypeEnumType ApplicationType { get; set; } + + /// + /// 消费应用类型 + /// + public string ApplicationTypeDesc => ApplicationType.GetDescription(); } diff --git a/Src/Dlhis.Canteen/Order/Response/DishesDto.cs b/Src/Dlhis.Canteen/Order/Response/DishesDto.cs new file mode 100644 index 00000000..5ce96c19 --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Response/DishesDto.cs @@ -0,0 +1,34 @@ +using Newtonsoft.Json; + +namespace Dlhis.Canteen.Order.Response; + +public class DishesDto +{ + [JsonIgnore] + public string No { get; set; } + + /// + /// 菜品编码 + /// + public string DishesCode { get; set; } + + /// + /// 菜品名称 + /// + public string Name { get; set; } + + /// + /// 购买单价 + /// + public decimal Price { get; set; } + + /// + /// 购买数量 + /// + public int Number { get; set; } + + /// + /// 图片 + /// + public string ImageUrl { get; set; } +} diff --git a/Src/Dlhis.Canteen/Order/Response/GetDetailResponse.cs b/Src/Dlhis.Canteen/Order/Response/GetDetailResponse.cs deleted file mode 100644 index 956a1ac6..00000000 --- a/Src/Dlhis.Canteen/Order/Response/GetDetailResponse.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Dlhis.Entity.Canteen.Enums; -using Kurisu.AspNetCore.Utils.Extensions; - -namespace Dlhis.Canteen.Order.Response; - -public class GetDetailResponse -{ - /// - /// 订单号 - /// - public string ThirdNo { get; set; } - - /// - /// 营业日 - /// - public DateOnly SysDate { get; set; } - - /// - /// 餐次 - /// - public ShiftEnumType ShiftType { get; set; } - - /// - /// 餐次CN - /// - public string ShiftTypeCN => ShiftType.GetDescription(); - - /// - /// 菜品编码 - /// - public Guid DishesCode { get; set; } - - /// - /// 菜品名称 - /// - public string DishesName { get; set; } - - /// - /// 单价 - /// - public decimal Price { get; set; } - - /// - /// 单位 - /// - public string Unit { get; set; } - - /// - /// 数量 - /// - public int Num { get; set; } - - /// - /// 金额 - /// - public decimal Amount { get; set; } - - /// - /// 订单明细状态 - /// - public OrderDetailsStatusEnumType OrderStatus { get; set; } - - /// - /// 订单明细状态CN - /// - public string OrderStatusCN => OrderStatus.GetDescription(); -} \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Response/OrderAggregationResponse.cs b/Src/Dlhis.Canteen/Order/Response/OrderAggregationResponse.cs new file mode 100644 index 00000000..a1cb257b --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Response/OrderAggregationResponse.cs @@ -0,0 +1,51 @@ +using Kurisu.AspNetCore.Utils.Extensions; + +namespace Dlhis.Canteen.Order.Response; + +public class OrderAggregationResponse +{ + public string No { get; set; } + + /// + /// 营业点 + /// + public string BusinessPlaceName { get; set; } + + /// + /// 购买菜品 + /// + public List Dishes { get; set; } + + + /// + /// 金额 + /// + public decimal Amount + { + get + { + if (Dishes.IsPresent()) + { + return Dishes.Sum(x => x.Number * x.Price); + } + + return 0; + } + } + + /// + /// 共计数量 + /// + public int Count + { + get + { + if (Dishes.IsPresent()) + { + return Dishes.Count; + } + + return 0; + } + } +} diff --git a/Src/Dlhis.Canteen/Order/Response/OrderDetailResponse.cs b/Src/Dlhis.Canteen/Order/Response/OrderDetailResponse.cs new file mode 100644 index 00000000..f0af992a --- /dev/null +++ b/Src/Dlhis.Canteen/Order/Response/OrderDetailResponse.cs @@ -0,0 +1,34 @@ +//namespace Dlhis.Canteen.Order.Response; + +//public class OrderDetailResponse +//{ +// /// +// /// 菜品编码 +// /// +// public string DishesCode { get; set; } + +// /// +// /// 菜品名称 +// /// +// public string Name { get; set; } + +// /// +// /// 单价 +// /// +// public decimal Price { get; set; } + +// /// +// /// 数量 +// /// +// public int Number { get; set; } + +// /// +// /// 单位 +// /// +// public string Unit { get; set; } + +// /// +// /// 图片 +// /// +// public string ImageUrl { get; set; } +//} diff --git a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs index f78863cb..28c772df 100644 --- a/Src/Dlhis.Canteen/Order/Services/IOrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IOrderService.cs @@ -9,6 +9,7 @@ public interface IOrderService : IScopeDependency { Task> GetPageAsync(OrderPageRequest request); + Task AddAsync(OrderAddRequest request); /// @@ -23,5 +24,15 @@ public interface IOrderService : IScopeDependency /// /// /// - Task Booking(BookingMealRequest request); + Task BookingAsync(BookingMealRequest request); + + + ///// + ///// 获取订单详情 + ///// + ///// + ///// + //Task> GetDetailsAsync(string no); + + Task> GetOrdersAggregationAsync(PageDto page); } diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index f216236b..5bbe6c48 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -521,13 +521,14 @@ public class BalanceService : IBalanceService .LeftJoin((record, ga) => record.UserNo == ga.No) .LeftJoin((record, ga, department) => ga.DepartmentNo == department.No) .LeftJoin((record, ga, department, bplace) => record.BusinessPlaceCode == bplace.Code) - .LeftJoin((record, ga, department, bplace, bshift) => record.BusinessShiftCode == bshift.Code) - .LeftJoin((record, ga, department, bplace, bshift, type) => record.BusinessShiftCode.ToString() == type.Code) + .LeftJoin((record, ga, department, bplace, bshiftR) => bplace.Code == bshiftR.PlaceCode) + .LeftJoin((record, ga, department, bplace, bshiftR, shift) => shift.Code == bshiftR.ShiftCode) .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true, record => record.CostDate >= request.SearchDateTimePeriod.Start) .WhereIF(request.SearchDateTimePeriod?.End.HasValue == true, record => record.CostDate <= request.SearchDateTimePeriod.End) + .WhereIF(request.ApplicationType.HasValue, record => record.ApplicationType == request.ApplicationType) .Where((record, ga) => ga.IdentityUserId == userId) .OrderBy(record => record.CreateTime, OrderByType.Desc) - .Select((record, ga, department, bplace, bshift, type) => new BalanceRecordUserResponse + .Select((record, ga, department, bplace, bshiftR, shift) => new BalanceRecordUserResponse { Id = record.Id, Amount = record.Amount, @@ -536,8 +537,9 @@ public class BalanceService : IBalanceService Source = record.Source, No = record.No, BusinessPlaceName = bplace.Name, - BusinessShiftName = type.Display, - CostDateTime = record.CostDateTime + BusinessShiftName = shift.Name, + CostDateTime = record.CostDateTime, + ApplicationType = record.ApplicationType, }) .ToPageListAsync(request); @@ -558,12 +560,12 @@ public class BalanceService : IBalanceService await ContinueUpdateAsync(async () => { //重算金额 - var canteenUser = await _dbContext.Queryable().Where(x => x.UserNo == balanceRecord.UserNo).SingleAsync(); + var canteenUser = await _dbContext.Queryable().Where(x => x.UserNo == balanceRecord.UserNo).SingleAsync(); //金额 + canteenUser.Balance += Math.Abs(balanceRecord.Amount); - var effect = await _dbContext.Updateable() + var effect = await _dbContext.Updateable() .SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Version == x.Version + 1) .Where(x => x.UserNo == balanceRecord.UserNo && x.Version == canteenUser.Version) diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs index a7494d59..87bf6d86 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs @@ -18,6 +18,8 @@ using SqlSugar; using Dlhis.Canteen.Order.Response; using Dlhis.Canteen.Dishes; using Dlhis.Canteen.Order.Request; +using System.Numerics; +using MySqlX.XDevAPI.Relational; namespace Dlhis.Canteen.Order.Services.Implements; @@ -62,12 +64,9 @@ public class OrderService : IOrderService uniqueNos.Contains(deviceUniqueNo).ThrowIfFalse("无消费权限"); } - public async Task Booking(BookingMealRequest request) + public async Task BookingAsync(BookingMealRequest request) { - await CheckExistsMyBookingsAsync(request.BookingDate); - - var jinkoCode = _currentUser.GetUserClaim("jinko-code"); - var gainfo = await _dbContext.Queryable().Where(x => x.Code == jinkoCode).FirstAsync(); + var gainfo = await CheckExistsMyBookingsAsync(request.BookingDate, request.ShiftType); var businessPlace = await _dbContext.Queryable().Where(x => x.Code == request.BusinessPlaceCode).FirstAsync(); @@ -130,15 +129,29 @@ public class OrderService : IOrderService (menuDetail.Number < 0).ThrowIfTrue($"{menuDetail.DishesName}已售罄"); - var canteenUser = await _dbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); - //金额+- - canteenUser.Balance += order.Amount; - (canteenUser.Balance < 0).ThrowIfTrue("余额不足,无法消费"); + var mealInfo = await _dbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); + if (mealInfo == null) + { + await _dbContext.InsertAsync(new GainfoMealEntity + { + Balance = 0, + BalanceOfRecharge = 0, + BalanceOfSubsidies = 0, + UserCode = gainfo.Code, + UserNo = gainfo.No, + Version = 0, + }); - var effect = await _dbContext.Updateable() - .SetColumns(x => x.Balance == canteenUser.Balance) + (mealInfo == null).ThrowIfTrue("余额不足,无法消费"); + } + //金额+- + mealInfo.Balance += order.Amount; + (mealInfo.Balance < 0).ThrowIfTrue("余额不足,无法消费"); + + var effect = await _dbContext.Updateable() + .SetColumns(x => x.Balance == mealInfo.Balance) .SetColumns(x => x.Version == x.Version + 1) - .Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version)//必须与查询时的version一致 + .Where(x => x.UserNo == order.UserNo && x.Version == mealInfo.Version)//必须与查询时的version一致 .ExecuteCommandAsync(); if (effect <= 0) throw new VersionExceptions("更新版本冲突"); @@ -147,7 +160,12 @@ public class OrderService : IOrderService .SetColumns(x => x.Number == menuDetail.Number) .SetColumns(x => x.Version == x.Version + 1) .SetColumns(x => x.ModifiedTime == now) - .Where(x => x.Date == menuDetail.Date && x.ShiftType == request.ShiftType && x.BusinessPlaceCode == request.BusinessPlaceCode && x.Version == menuDetail.Version) + .Where(x => x.Date == menuDetail.Date + && x.ShiftType == request.ShiftType + && x.BusinessPlaceCode == request.BusinessPlaceCode + && x.DishesCode == request.DishesCode + && x.Version == menuDetail.Version + ) .ExecuteCommandAsync(); if (effect <= 0) throw new VersionExceptions("更新版本冲突"); @@ -156,12 +174,11 @@ public class OrderService : IOrderService var balanceRecord = order.Adapt(); await _dbContext.InsertAsync(balanceRecord); - await _dbContext.InsertAsync(new OrderDetailEntity + await _dbContext.InsertAsync(new CanteenOrderDetailEntity { OrderNo = order.No, DishesCode = request.DishesCode, Price = menuDetail.Price, - Status = OrderDetailsStatusEnumType.I, //Unit Number = 1, }); @@ -170,6 +187,24 @@ public class OrderService : IOrderService } + //public async Task> GetDetailsAsync(string no) + //{ + // return await _dbContext.Queryable() + // .LeftJoin((x, d) => x.DishesCode == d.CustomCode) + // .Where(x => x.OrderNo == no) + // .Select((x, d) => new OrderDetailResponse + // { + // DishesCode = x.DishesCode, + // Price = x.Price, + // Name = d.Name, + // Number = x.Number, + // Unit = x.Unit, + // ImageUrl = d.ImageUrl, + // }) + // .ToListAsync(); + //} + + public async Task DeviceConsume(OrderAddRequest request) { return await AddAsync(request); @@ -189,19 +224,18 @@ public class OrderService : IOrderService //消费权限控制 await CheckPAsync(gainfo.No, request.DeviceUniqueNo); - var canteenUserExists = await _dbContext.Queryable() + var canteenUserExists = await _dbContext.Queryable() .Where(x => x.UserNo == gainfo.No) .AnyAsync(); if (!canteenUserExists) { - await _dbContext.InsertAsync(new CanteenUserEntity + await _dbContext.InsertAsync(new GainfoMealEntity { UserNo = gainfo.No, Balance = 0, BalanceOfRecharge = 0, BalanceOfSubsidies = 0, - UserType = CanteenUserEnumType.LocalTenant, TenantId = gainfo.Factory, Version = 0, @@ -226,7 +260,7 @@ public class OrderService : IOrderService //获取人员余额 return await _dbContext.Queryable() .LeftJoin((ga, department) => ga.DepartmentNo == department.No) - .LeftJoin((ga, department, mealUser) => ga.No == mealUser.UserNo) + .LeftJoin((ga, department, mealUser) => ga.No == mealUser.UserNo) .Where(ga => ga.Id == gainfo.Id) .Select((ga, department, mealUser) => new OrderResultResponse { @@ -428,6 +462,53 @@ public class OrderService : IOrderService } + public async Task> GetOrdersAggregationAsync(PageDto page) + { + var subjectId = _currentUser.GetIntSubjectId(); + var gainfo = await _dbContext.Queryable().Where(x => x.IdentityUserId == subjectId).FirstAsync(); + var jinkoCode = _currentUser.GetUserClaim("jinko-code") ?? string.Empty; + if (jinkoCode.IsPresent()) + { + gainfo = await _dbContext.Queryable().Where(x => x.Code == jinkoCode).FirstAsync(); + } + + var pageResult = await _dbContext.Queryable().Where(x => x.UserNo == gainfo.No) + .LeftJoin((x, bplace) => x.BusinessPlaceCode == bplace.Code) + .Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.Booking) + .Select((x, bplace) => new OrderAggregationResponse + { + No = x.No, + BusinessPlaceName = bplace.Name, + }) + .ToPageListAsync(page); + + //.LeftJoin((x, bplace, detail) => x.No == detail.OrderNo) + + var nos = pageResult.Data.Select(x => x.No).ToList(); + var dtos = await _dbContext.Queryable() + .LeftJoin((x, d) => x.DishesCode == d.CustomCode) + .Where(x => nos.Contains(x.OrderNo)) + .Select((x, d) => new DishesDto + { + No = x.OrderNo, + DishesCode = x.DishesCode, + Name = d.Name, + ImageUrl = d.ImageUrl, + Number = x.Number, + Price = x.Price + }) + .ToListAsync(); + + + pageResult.Data.ForEach(item => + { + item.Dishes = dtos.Where(x => x.No == item.No).ToList(); + }); + + return pageResult; + } + + //******************************************************* help methods ************************************************************/ @@ -582,11 +663,11 @@ public class OrderService : IOrderService await ContinueUpdateAsync(async () => { - var canteenUser = await _dbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); + var canteenUser = await _dbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); //金额+- canteenUser.Balance += order.Amount; - var effect = await _dbContext.Updateable() + var effect = await _dbContext.Updateable() .SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Version == x.Version + 1) .Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version) @@ -623,7 +704,7 @@ public class OrderService : IOrderService { if (!allowNoBalance) { - var canteenUser = await _dbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); + var canteenUser = await _dbContext.Queryable().Where(x => x.UserNo == order.UserNo).FirstAsync(); //金额+- canteenUser.Balance += order.Amount; if (canteenUser.Balance < 0) @@ -631,7 +712,7 @@ public class OrderService : IOrderService throw new UserFriendlyException("余额不足,无法消费"); } - var effect = await _dbContext.Updateable() + var effect = await _dbContext.Updateable() .SetColumns(x => x.Balance == canteenUser.Balance) .SetColumns(x => x.Version == x.Version + 1) .Where(x => x.UserNo == order.UserNo && x.Version == canteenUser.Version)//必须与查询时的version一致 @@ -651,20 +732,30 @@ public class OrderService : IOrderService /// 检查我的订餐是否存在,存在抛出异常 /// /// + /// /// - private async Task CheckExistsMyBookingsAsync(DateTime bookingDate) + private async Task CheckExistsMyBookingsAsync(DateTime bookingDate, ShiftEnumType shiftType) { - var jinkoCode = _currentUser.GetUserClaim("jinko-code"); - var gainfo = await _dbContext.Queryable().Where(x => x.Code == jinkoCode).FirstAsync(); + var subjectId = _currentUser.GetIntSubjectId(); + var gainfo = await _dbContext.Queryable().Where(x => x.IdentityUserId == subjectId).FirstAsync(); + var jinkoCode = _currentUser.GetUserClaim("jinko-code") ?? string.Empty; + if (jinkoCode.IsPresent()) + { + gainfo = await _dbContext.Queryable().Where(x => x.Code == jinkoCode).FirstAsync(); + } - var start = bookingDate.Date; + var start = bookingDate.Date.AddDays(-1); var end = start.AddDays(1).AddSeconds(-1); - var exists = await _dbContext.Queryable().Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.Booking) + var exists = await _dbContext.Queryable() + .Where(x => x.ApplicationType == CanteenApplicaitonTypeEnumType.Booking) + .Where(x => x.ShiftType == shiftType) .Where(x => x.UserNo == gainfo.No) .Where(x => x.CreateTime >= start && x.CreateTime <= end) .AnyAsync(); exists.ThrowIfTrue("不可重复订餐"); + + return gainfo; } } diff --git a/Src/Dlhis.Canteen/appsettings.Development.json b/Src/Dlhis.Canteen/appsettings.Development.json index 49e0aa9e..f67d9370 100644 --- a/Src/Dlhis.Canteen/appsettings.Development.json +++ b/Src/Dlhis.Canteen/appsettings.Development.json @@ -10,6 +10,13 @@ "BasicRequestUrl": "http://localhost:5002", "SysRequestUrl": "http://localhost:5003" }, + "SqlSugarOptions": { + "DefaultConnectionString": "server=192.168.199.124;port=3306;userid=root;password=dlhis123;database=yikatong;charset=utf8mb4;", + "SlaveConnectionString": [], + "Timeout": 30, + "SlowSqlTime": 1, + "EnableSqlLog": true + }, "SwaggerOptions": { "Enable": true, "Authority": "https://yikatong.isawesome.cn/oauth2", diff --git a/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceShiftRelationshipEntity.cs b/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceShiftRelationshipEntity.cs index b4419ca8..e96e4a78 100644 --- a/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceShiftRelationshipEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceShiftRelationshipEntity.cs @@ -4,14 +4,14 @@ using SqlSugar; namespace Dlhis.Entity.Basic.Entity; -[SugarTable(TableName = "BusinessPlaceShiftRelationship", TableDescription = "营业点餐次关系")] +[SugarTable(TableName = "BusinessPlaceShiftRelationship", TableDescription = "营业点餐别关系")] public class BusinessPlaceShiftRelationshipEntity : SugarBaseEntity, ITenantId { [SugarColumn(ColumnDescription = "营业点code")] public Guid PlaceCode { get; set; } - [SugarColumn(ColumnDescription = "餐次code")] + [SugarColumn(ColumnDescription = "餐别code")] public Guid ShiftCode { get; set; } public string TenantId { get; set; } diff --git a/Src/Dlhis.Entity/Basic/Entity/CanteenUserEntity.cs b/Src/Dlhis.Entity/Basic/Entity/GainfoMealEntity.cs similarity index 70% rename from Src/Dlhis.Entity/Basic/Entity/CanteenUserEntity.cs rename to Src/Dlhis.Entity/Basic/Entity/GainfoMealEntity.cs index 7a18bed6..e7766a76 100644 --- a/Src/Dlhis.Entity/Basic/Entity/CanteenUserEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/GainfoMealEntity.cs @@ -1,16 +1,14 @@ -using Dlhis.Entity.Canteen.Enums; -using Kurisu.Core.DataAccess.Entity; +using Kurisu.Core.DataAccess.Entity; using Kurisu.SqlSugar; using SqlSugar; -using SqlSugar.DbConvert; namespace Dlhis.Entity.Basic.Entity; /// /// 就餐人员 /// -[SugarTable(TableName = "CanteenUser", TableDescription = "就餐人员")] -public class CanteenUserEntity : SugarBaseEntity, IVersion, ITenantId +[SugarTable(TableName = "GainfoMeal", TableDescription = "就餐人员")] +public class GainfoMealEntity : SugarBaseEntity, IVersion, ITenantId { /// /// 档案号 @@ -19,10 +17,10 @@ public class CanteenUserEntity : SugarBaseEntity, IVersion, ITenantId public string UserNo { get; set; } /// - /// 消费人员类型 + /// 工号 /// - [SugarColumn(ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert), ColumnDescription = "消费人员类型")] - public CanteenUserEnumType UserType { get; set; } + [SugarColumn(IsNullable = false, ColumnDescription = "工号", UniqueGroupNameList = new[] { "idx_CanteenUser_UserCode" })] + public string UserCode { get; set; } /// /// 余额 diff --git a/Src/Dlhis.Entity/Basic/Entity/MealSupplementRecordEntity.cs b/Src/Dlhis.Entity/Basic/Entity/MealSupplementRecordEntity.cs index 8a993992..ef31764d 100644 --- a/Src/Dlhis.Entity/Basic/Entity/MealSupplementRecordEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/MealSupplementRecordEntity.cs @@ -28,6 +28,17 @@ public class MealSupplementRecordEntity : MealSupplementRequestRecordEntity /// [SugarColumn(ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))] public MealSupplementStatusEnumtype Status { get; set; } + + /// + /// 处理结果 + /// + [SugarColumn(ColumnDescription = "处理结果", ColumnDataType = "varchar(2000)")] + public string Result { get; set; } + + /// + /// 状态同步 + /// + public bool Sync { get; set; } } [SugarTable(TableName = "MealSupplementRequestRecord", TableDescription = "餐补请求记录")] diff --git a/Src/Dlhis.Entity/Canteen/Entities/OrderDetailEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/CanteenOrderDetailEntity.cs similarity index 64% rename from Src/Dlhis.Entity/Canteen/Entities/OrderDetailEntity.cs rename to Src/Dlhis.Entity/Canteen/Entities/CanteenOrderDetailEntity.cs index 53b59bd9..80d30b52 100644 --- a/Src/Dlhis.Entity/Canteen/Entities/OrderDetailEntity.cs +++ b/Src/Dlhis.Entity/Canteen/Entities/CanteenOrderDetailEntity.cs @@ -1,16 +1,14 @@ -using Dlhis.Entity.Canteen.Enums; -using Kurisu.Core.DataAccess.Entity; +using Kurisu.Core.DataAccess.Entity; using Kurisu.SqlSugar; using SqlSugar; -using SqlSugar.DbConvert; namespace Dlhis.Entity.Canteen.Entities; /// /// 订餐明细表 /// -[SugarTable(TableName = "OrderDetail", TableDescription = "订单明细表")] -public class OrderDetailEntity : SugarBaseEntity, ITenantId +[SugarTable(TableName = "CanteenOrderDetail", TableDescription = "订单明细表")] +public class CanteenOrderDetailEntity : SugarBaseEntity, ITenantId { /// /// 订单号 @@ -42,13 +40,5 @@ public class OrderDetailEntity : SugarBaseEntity, ITenantId [SugarColumn(ColumnDescription = "单位")] public string Unit { get; set; } - - /// - /// 订单明细状态 - /// - [SugarColumn(ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert), ColumnDescription = "状态")] - public OrderDetailsStatusEnumType Status { get; set; } - - public string TenantId { get; set; } } diff --git a/Src/Dlhis.Entity/Canteen/Enums/CanteenUserEnumType.cs b/Src/Dlhis.Entity/Canteen/Enums/CanteenUserEnumType.cs deleted file mode 100644 index 9bc892fd..00000000 --- a/Src/Dlhis.Entity/Canteen/Enums/CanteenUserEnumType.cs +++ /dev/null @@ -1,30 +0,0 @@ - - -using System.ComponentModel; - -namespace Dlhis.Entity.Canteen.Enums; - -/// -/// 就餐人员类型 -/// -[Description("就餐人员类型")] -public enum CanteenUserEnumType -{ - /// - /// 本基地 - /// - [Description("本基地人员")] - LocalTenant = 1, - - /// - /// 其他基地 - /// - [Description("其他基地人员")] - OtherTenant, - - /// - /// 外部人员 - /// - [Description("外部人员")] - External -} \ No newline at end of file diff --git a/Src/Dlhis.Entity/Canteen/Enums/MiniProgramOrderStatusEnumType.cs b/Src/Dlhis.Entity/Canteen/Enums/MiniProgramOrderStatusEnumType.cs deleted file mode 100644 index 56eb9ba1..00000000 --- a/Src/Dlhis.Entity/Canteen/Enums/MiniProgramOrderStatusEnumType.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Dlhis.Entity.Canteen.Enums -{ - public enum MiniProgramOrderStatusEnumType - { - /// - /// 有效 - /// - [Description("有效")] - I = 1, - - /// - /// 取消 - /// - [Description("取消")] - C = 2, - - /// - /// 退单 - /// - [Description("退单")] - X = 3, - - /// - /// 免单 - /// - [Description("免单")] - Z = 4, - } -} diff --git a/Src/Dlhis.Entity/Canteen/Enums/OrderDetailsStatusEnumType.cs b/Src/Dlhis.Entity/Canteen/Enums/OrderDetailsStatusEnumType.cs deleted file mode 100644 index 0b4eed43..00000000 --- a/Src/Dlhis.Entity/Canteen/Enums/OrderDetailsStatusEnumType.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.ComponentModel; - -namespace Dlhis.Entity.Canteen.Enums -{ - /// - /// 订单明细状态 OrderDetailsStatusEnumType - /// - [Description("订单明细状态")] - public enum OrderDetailsStatusEnumType - { - /// - /// 有效 - /// - [Description("有效")] - I = 1, - } -}