diff --git a/Src/Dlhis.Basic.Api/IDisheMenuApi.cs b/Src/Dlhis.Basic.Api/IDisheMenuApi.cs index 04482e6a..96b649da 100644 --- a/Src/Dlhis.Basic.Api/IDisheMenuApi.cs +++ b/Src/Dlhis.Basic.Api/IDisheMenuApi.cs @@ -16,6 +16,6 @@ public interface IDisheMenuApi /// /// [Auth] - [Get("/api/dishesMenus/detail")] + [Get("/api/dishesMenus/checkdetail")] Task> GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, int shiftType, string dishesCode); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs index 7b1ab8ce..b021c5db 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs @@ -9,7 +9,7 @@ using Microsoft.AspNetCore.Mvc; namespace Dlhis.Basic.Device.Controllers; -[Authorize] +[Authorize(Roles = "admin,tenant-admin")] [Route("api/[controller]")] [ApiController] public class DevicePermissionsController : ControllerBase diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index 35c4d5a1..148fc763 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -11,6 +11,7 @@ using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Entity; using Kurisu.Core.User.Abstractions; using Kurisu.SqlSugar.Services; +using SqlSugar; namespace Dlhis.Basic.Device.Services.Implements; @@ -278,6 +279,7 @@ public class DevicePermissionService : IDevicePermissionService Status = DeviceTaskStatusEnumType.Wait, Type = taskType, UserNo = userNo, + CancellationId = 0, Version = 0, }).ToList(); @@ -302,6 +304,9 @@ public class DevicePermissionService : IDevicePermissionService /// public async Task> GetAssignDeviceCodesAsync(string userNo) { + var devices = await _dbContext.Queryable().ToListAsync(); + var deviceRegistries = await _dbContext.Queryable().Where(x => !SqlFunc.IsNullOrEmpty(x.BusinessPlaceCode)).ToListAsync(); + var gainfo = await _dbContext.Queryable().Where(x => x.No == userNo).SingleAsync(); var gainfoGroups = await _dbContext.Queryable().ToListAsync(); @@ -309,7 +314,7 @@ public class DevicePermissionService : IDevicePermissionService var deviceGroups = await _dbContext.Queryable().ToListAsync(); var deviceRelationships = await _dbContext.Queryable().ToListAsync(); - var result = GetAssignDeviceCodesInternal(gainfo, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships); + var result = GetAssignDeviceCodesInternal(gainfo, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, deviceRegistries, devices); return result.SelectMany(x => x.Codes).ToList(); } @@ -321,13 +326,22 @@ public class DevicePermissionService : IDevicePermissionService /// public async Task> GetAssigmentByCodeAsync(AssigmentByCodeRequest request) { + var lst1 = new List(); //所有设备guid var gds = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, request.No); + if (gds != null && gds.Count > 0) + { + lst1.AddRange(gds); + } //所有设备组guid var ggs = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, request.No); + //所有营业点guid + var gps = await GetAssignmentsAsync(DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.User, request.No); + var devices = await _dbContext.Queryable().ToListAsync(); + var regiss = await _dbContext.Queryable().ToListAsync(); if (ggs != null && ggs.Count > 0) { @@ -337,11 +351,23 @@ public class DevicePermissionService : IDevicePermissionService .Where(x => x.GroupCode == gid) .Select(x => x.DeviceCode) .ToListAsync(); - gds.AddRange(ds); + lst1.AddRange(ds); + } + } + if (gps != null && gps.Count > 0) + { + foreach (var placeCode in gps) + { + var nos = regiss.Where(x => x.BusinessPlaceCode == placeCode) + .Select(x => x.DeviceUniqueNo).ToList(); + + var dcodes = devices.Where(d => nos.Contains(d.UniqueNo)) + .Select(d => d.Code).ToList(); + lst1.AddRange(dcodes); } } - var dds = gds.Distinct().ToList(); + var dds = lst1.Distinct().ToList(); var lst = devices.Where(x => dds.Contains(x.Code)) .Select(x => new AssigmentByCodeResponse { @@ -445,6 +471,9 @@ public class DevicePermissionService : IDevicePermissionService private async Task>> GetAssignDeviceCodesInternalAsync(List userNos) { + var devices = await _dbContext.Queryable().ToListAsync(); + var regiss = await _dbContext.Queryable().Where(x => !SqlFunc.IsNullOrEmpty(x.BusinessPlaceCode)).ToListAsync(); + var gainfos = await _dbContext.Queryable().Where(x => userNos.Contains(x.No)).ToListAsync(); if (!gainfos.Any()) { @@ -460,7 +489,7 @@ public class DevicePermissionService : IDevicePermissionService foreach (var gainfo in gainfos) { - var codes = GetAssignDeviceCodesInternal(gainfo, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships); + var codes = GetAssignDeviceCodesInternal(gainfo, gainfoGroupRelationships, devicePermissions, deviceGroups, deviceRelationships, regiss, devices); result.Add(gainfo.No, codes); } @@ -472,11 +501,15 @@ public class DevicePermissionService : IDevicePermissionService List gainfoGroupRelationships, List devicePermissions, List deviceGroups, - List deviceGroupRelationships) + List deviceGroupRelationships, + List deviceRegistries, + List devices + ) { var userNo = gainfo.No; - var deviceCodes = new List(); - var deviceGroupCodes = new List(); + var deviceDtos = new List(); + var deviceGroupDtos = new List(); + var businessPlaceDtos = new List(); //获取人员的分组,跨基地 var gainfoGroups = gainfoGroupRelationships.Where(x => x.UserNo == userNo).Select(x => x.GroupCode).ToList(); @@ -484,42 +517,67 @@ public class DevicePermissionService : IDevicePermissionService //按用户 var du = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.User, userNo); var gu = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.User, userNo); - deviceCodes.AddRange(du); - deviceGroupCodes.AddRange(gu); + var pu = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.User, userNo); + + deviceDtos.AddRange(du); + deviceGroupDtos.AddRange(gu); + businessPlaceDtos.AddRange(pu); //按用户组 foreach (var groupCode in gainfoGroups) { var dg = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Group, groupCode.ToString()); var gg = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Group, groupCode.ToString()); - deviceCodes.AddRange(dg); - deviceGroupCodes.AddRange(gg); + var pg = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Group, groupCode.ToString()); + deviceDtos.AddRange(dg); + deviceGroupDtos.AddRange(gg); + businessPlaceDtos.AddRange(pg); } //按部门 var gainfoFactoryDevicePermissions = devicePermissions.Where(x => x.TenantId == gainfo.Factory).ToList(); var dd = GetAssignCodesInternal(gainfoFactoryDevicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Department, gainfo.DepartmentNo); var gd = GetAssignCodesInternal(gainfoFactoryDevicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Department, gainfo.DepartmentNo); - deviceCodes.AddRange(dd); - deviceGroupCodes.AddRange(gd); + var pd = GetAssignCodesInternal(gainfoFactoryDevicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Department, gainfo.DepartmentNo); + deviceDtos.AddRange(dd); + deviceGroupDtos.AddRange(gd); + businessPlaceDtos.AddRange(pd); //按厂区 var dt = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Device, AssignTypeEnumType.Tenant, gainfo.Factory); var gt = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.Group, AssignTypeEnumType.Tenant, gainfo.Factory); - deviceCodes.AddRange(dt); - deviceGroupCodes.AddRange(gt); + var pt = GetAssignCodesInternal(devicePermissions, deviceGroups, DeviceAssignmentTypeEnumType.BusinessPlace, AssignTypeEnumType.Tenant, gainfo.Factory); + deviceDtos.AddRange(dt); + deviceGroupDtos.AddRange(gt); + businessPlaceDtos.AddRange(pt); - var groupCodes = deviceGroupCodes.SelectMany(x => x.Codes).Distinct().ToList(); - var deveiceCodesByGroup = deviceGroupRelationships.Where(x => groupCodes.Contains(x.GroupCode)).GroupBy(x => x.TenantId) + var deviceGroupCodes = deviceGroupDtos.SelectMany(x => x.Codes).Distinct().ToList(); + var businessPlaceCodes = businessPlaceDtos.SelectMany(x => x.Codes).Distinct().ToList(); + + var deveiceCodesByGroup = deviceGroupRelationships.Where(x => deviceGroupCodes.Contains(x.GroupCode)).GroupBy(x => x.TenantId) .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(item => item.DeviceCode).Distinct().ToList() }); - deviceCodes.AddRange(deveiceCodesByGroup); + var placeGroup = deviceRegistries.Where(x => businessPlaceCodes.Contains(x.BusinessPlaceCode.Value)).GroupBy(x => x.TenantId) + .Select(x => + { + var currentDeviceUniqueNos = x.Select(item => item.DeviceUniqueNo).ToList(); - return deviceCodes.GroupBy(x => x.Tenant).Select(x => new UserTenantDeviceCodeDto + return new UserTenantDeviceCodeDto + { + Tenant = x.Key, + Codes = devices.Where(d => currentDeviceUniqueNos.Contains(d.UniqueNo)).Select(d => d.Code).Distinct().ToList() + }; + }) + .ToList(); + + deviceDtos.AddRange(deveiceCodesByGroup); + deviceDtos.AddRange(placeGroup); + + return deviceDtos.GroupBy(x => x.Tenant).Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.SelectMany(item => item.Codes).Distinct().ToList() diff --git a/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs b/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs index 31c24e25..b1eb6e49 100644 --- a/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs +++ b/Src/Dlhis.Basic/Dishes/Controller/DishesMenusController.cs @@ -7,6 +7,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.Basic.Dishes.Controller; @@ -38,6 +39,19 @@ public class DishesMenusController : ControllerBase return await _dishesMenuService.GetDishesMenuPageAsync(request); } + /// + /// 菜单详情 + /// + /// + /// + /// + /// + [HttpGet("detail")] + public async Task GetDishesMenuDetailAsync(Guid businessPlaceCode, string customCode, DateTime date) + { + return await _dishesMenuService.GetDishesMenuDetailAsync(businessPlaceCode, customCode, date); + } + /// /// 菜单保存/更改 /// @@ -51,14 +65,14 @@ public class DishesMenusController : ControllerBase } /// - /// 菜单明细 + /// 检查明细 /// /// /// /// /// /// - [HttpGet("detail")] + [HttpGet("checkdetail")] public async Task GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, ShiftEnumType shiftType, string dishesCode) { return await _dishesMenuService.GetBookingDishesDetailAsync(date, businessPlaceCode, shiftType, dishesCode); @@ -103,7 +117,7 @@ public class DishesMenusController : ControllerBase /// /// [HttpGet("setting")] - public async Task GetDishesMenusBookingSetting([FromQuery] GetDishesMenusBookingRequest request) + public async Task GetDishesMenusBookingSetting([FromQuery] GetDishesMenusBookingRequest request) { return await _dishesService.GetDishesMenusBookingSetting(request); } diff --git a/Src/Dlhis.Basic/Dishes/Request/DisheMenuPageRequest.cs b/Src/Dlhis.Basic/Dishes/Request/DisheMenuPageRequest.cs index 4494f433..9050763f 100644 --- a/Src/Dlhis.Basic/Dishes/Request/DisheMenuPageRequest.cs +++ b/Src/Dlhis.Basic/Dishes/Request/DisheMenuPageRequest.cs @@ -1,5 +1,4 @@ -using Dlhis.Entity.Canteen.Enums; -using Kurisu.Core.DataAccess.Dto; +using Kurisu.Core.DataAccess.Dto; namespace Dlhis.Basic.Dishes.Request; @@ -9,14 +8,4 @@ public class DisheMenuPageRequest : PageDto /// 营业点code /// public Guid BusinessPlaceCode { get; set; } - - /// - /// 餐次 - /// - public List ShiftTypes { get; set; } - - /// - /// 分类 - /// - public Guid? CategoryCode { get; set; } } diff --git a/Src/Dlhis.Basic/Dishes/Request/DishesCategorySaveRequest.cs b/Src/Dlhis.Basic/Dishes/Request/DishesCategorySaveRequest.cs index 80582418..604dfe68 100644 --- a/Src/Dlhis.Basic/Dishes/Request/DishesCategorySaveRequest.cs +++ b/Src/Dlhis.Basic/Dishes/Request/DishesCategorySaveRequest.cs @@ -6,6 +6,13 @@ public class DishesCategorySaveRequest { public long? Id { get; set; } + + /// + /// 营业点 + /// + [Required] + public Guid BusinessPlaceCode { get; set; } + /// /// PCode /// diff --git a/Src/Dlhis.Basic/Dishes/Response/BalanceRecordSourceEnumDto.cs b/Src/Dlhis.Basic/Dishes/Response/BalanceRecordSourceEnumDto.cs index 9740a562..8a1570f6 100644 --- a/Src/Dlhis.Basic/Dishes/Response/BalanceRecordSourceEnumDto.cs +++ b/Src/Dlhis.Basic/Dishes/Response/BalanceRecordSourceEnumDto.cs @@ -1,11 +1,11 @@ using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.Utils.Extensions; -namespace Dlhis.Basic.Dishes.Response +namespace Dlhis.Basic.Dishes.Response; + +public class BalanceRecordSourceEnumDto { - public class BalanceRecordSourceEnumDto - { - public BalanceRecordSourceEnumType Type { get; set; } - public string TypeCN => Type.GetDescription(); - } + public BalanceRecordSourceEnumType Type { get; set; } + + public string TypeDesc => Type.GetDescription(); } diff --git a/Src/Dlhis.Basic/Dishes/Response/BusinessShiftMealRelationshipResponse.cs b/Src/Dlhis.Basic/Dishes/Response/BusinessShiftMealRelationshipResponse.cs index 1c40fc37..0b49fd9f 100644 --- a/Src/Dlhis.Basic/Dishes/Response/BusinessShiftMealRelationshipResponse.cs +++ b/Src/Dlhis.Basic/Dishes/Response/BusinessShiftMealRelationshipResponse.cs @@ -1,29 +1,28 @@ using Dlhis.Entity.Canteen.Enums; using Kurisu.AspNetCore.Utils.Extensions; -namespace Dlhis.Basic.Dishes.Response +namespace Dlhis.Basic.Dishes.Response; + +public class BusinessShiftMealRelationshipResponse { - public class BusinessShiftMealRelationshipResponse - { - /// - /// 餐别Code - /// - public Guid ShiftCode { get; set; } + /// + /// 餐别Code + /// + public Guid ShiftCode { get; set; } - /// - /// 餐别手工号 - /// - public string ShiftCustomCode { get; set; } + /// + /// 餐别手工号 + /// + public string ShiftCustomCode { get; set; } - /// - /// 餐次 - /// - public ShiftEnumType ShiftType { get; set; } + /// + /// 餐次 + /// + public ShiftEnumType ShiftType { get; set; } - /// - /// 餐次CN - /// - public string ShiftTypeCN => ShiftType.GetDescription(); + /// + /// 餐次CN + /// + public string ShiftTypeDesc => ShiftType.GetDescription(); - } } diff --git a/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs b/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs index 3ccf7192..c59836cb 100644 --- a/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs +++ b/Src/Dlhis.Basic/Dishes/Response/DishesMenuPageResponse.cs @@ -1,11 +1,7 @@ -using Dlhis.Entity.Canteen.Enums; - -namespace Dlhis.Basic.Dishes.Response; +namespace Dlhis.Basic.Dishes.Response; public class DishesMenuPageResponse { - public long? Id { get; set; } - /// /// 菜单编码 /// @@ -20,32 +16,4 @@ public class DishesMenuPageResponse /// 营业日期 /// public DateTime Date { get; set; } - - - /// - /// 餐次 - /// - public ShiftEnumType ShiftType { get; set; } - - - /// - /// 菜品编码 - /// - public string DishesCode { get; set; } - - /// - /// 剩余数量 - /// - public int Number { get; set; } - - - /// - /// 单价 - /// - public decimal? Price { get; set; } - - /// - /// 是否启用 - /// - public bool Enable { get; set; } } diff --git a/Src/Dlhis.Basic/Dishes/Response/DishesMenusBookingSettingResponse.cs b/Src/Dlhis.Basic/Dishes/Response/DishesMenusBookingSettingResponse.cs new file mode 100644 index 00000000..8e492bc5 --- /dev/null +++ b/Src/Dlhis.Basic/Dishes/Response/DishesMenusBookingSettingResponse.cs @@ -0,0 +1,19 @@ +namespace Dlhis.Basic.Dishes.Response; + +public class DishesMenusBookingSettingResponse +{ + /// + /// 服务端时间 + /// + public DateTime ServerTime { get; set; } + + /// + /// 餐别-餐次信息 + /// + public List ShiftInfos { get; set; } + + /// + /// 支付方式 + /// + public List PayTypes { get; set; } +} diff --git a/Src/Dlhis.Basic/Dishes/Response/DishesResponse.cs b/Src/Dlhis.Basic/Dishes/Response/DishesResponse.cs index c2b58d8e..8e0f30aa 100644 --- a/Src/Dlhis.Basic/Dishes/Response/DishesResponse.cs +++ b/Src/Dlhis.Basic/Dishes/Response/DishesResponse.cs @@ -5,6 +5,8 @@ namespace Dlhis.Basic.Dishes.Response; public class DishesResponse { + public long Id { get; set; } + /// /// 分类 /// diff --git a/Src/Dlhis.Basic/Dishes/Response/GetDishesMenusBookingResponse.cs b/Src/Dlhis.Basic/Dishes/Response/GetDishesMenusBookingResponse.cs deleted file mode 100644 index 5473a443..00000000 --- a/Src/Dlhis.Basic/Dishes/Response/GetDishesMenusBookingResponse.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Dlhis.Entity.Canteen.Enums; -using SqlSugar.DbConvert; -using SqlSugar; - -namespace Dlhis.Basic.Dishes.Response -{ - public class GetDishesMenusBookingResponse - { - public List BusinessShiftMealRelationships { get; set; } - - public DateTime ServiceTime { get; set; } - - public List PayTypes { get; set; } - } -} diff --git a/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs b/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs index 87c38925..00984ab5 100644 --- a/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/IDishesMenuService.cs @@ -10,6 +10,8 @@ public interface IDishesMenuService : IScopeDependency { Task> GetDishesMenuPageAsync(DisheMenuPageRequest request); + Task GetDishesMenuDetailAsync(Guid businessPlaceCode, string customCode, DateTime date); + Task SaveDishesMenuAsync(DishesMenuSaveRequest request); Task GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, ShiftEnumType shiftType, string dishesCode); diff --git a/Src/Dlhis.Basic/Dishes/Services/IDishesService.cs b/Src/Dlhis.Basic/Dishes/Services/IDishesService.cs index 6d6830a9..f9c0fbfd 100644 --- a/Src/Dlhis.Basic/Dishes/Services/IDishesService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/IDishesService.cs @@ -12,6 +12,6 @@ public interface IDishesService : IScopeDependency Task GetDishesDetailByIdAsync(long id); - Task GetDishesMenusBookingSetting(GetDishesMenusBookingRequest request); + Task GetDishesMenusBookingSetting(GetDishesMenusBookingRequest request); } diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs index 7a97da7d..c93fd62a 100644 --- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesMenuService.cs @@ -9,6 +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; namespace Dlhis.Basic.Dishes.Services.Implements; @@ -26,10 +27,53 @@ public class DishesMenuService : IDishesMenuService public async Task> GetDishesMenuPageAsync(DisheMenuPageRequest request) { return await _dbContext.Queryable() - .Select() + .Where(x => x.BusinessPlaceCode == request.BusinessPlaceCode) + .GroupBy(x => new { x.BusinessPlaceCode, x.CustomCode, x.Date }) + .Select(x => new DishesMenuPageResponse + { + BusinessPlaceCode = x.BusinessPlaceCode, + CustomCode = x.CustomCode, + Date = x.Date, + }) .ToPageListAsync(request); } + public async Task GetDishesMenuDetailAsync(Guid businessPlaceCode, string customCode, DateTime date) + { + var data = await _dbContext.Queryable() + .Where(x => x.BusinessPlaceCode == businessPlaceCode) + .ToListAsync(); + + return new DishesMenuSaveRequest + { + BusinessPlaceCode = businessPlaceCode, + Items = new List + { + new() + { + CustomCode = customCode, + Date = date, + ShiftTypes = data.GroupBy(x => x.ShiftType).Select(item => + { + var shiftType = item.Key; + + return new DishesMenuShiftTypeSaveRequest + { + ShiftType = shiftType, + Dishes = item.Select(x => new MenuDishesSaveRequest + { + DishesCode = x.DishesCode, + Number = x.Number, + Price = x.Price, + }).ToList() + }; + + }).ToList() + } + } + }; + } + public async Task SaveDishesMenuAsync(DishesMenuSaveRequest request) { //检验数据 @@ -37,7 +81,7 @@ public class DishesMenuService : IDishesMenuService //检验权限 var res = await _businessPlacePermissionsService.GetMyAsync(); - var myBps = res.dtos.Select(x => x.Code).ToList(); + var myBps = res.dtos.Select(x => x.Code).ToList(); myBps.Contains(request.BusinessPlaceCode).ThrowIfFalse("非经营营业点,无法保存菜单"); @@ -68,7 +112,6 @@ public class DishesMenuService : IDishesMenuService Type = CanteenApplicaitonTypeEnumType.Booking, Version = 0, - Enable = false, }; }); }); diff --git a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs index 08b29ecd..dbd90b56 100644 --- a/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs +++ b/Src/Dlhis.Basic/Dishes/Services/Implements/DishesService.cs @@ -8,19 +8,16 @@ using Kurisu.Core.DataAccess.Dto; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; -using System; namespace Dlhis.Basic.Dishes.Services.Implements; public class DishesService : IDishesService { private readonly IDbContext _dbContext; - private readonly IConfiguration _configuration; - public DishesService(IDbContext dbContext, IConfiguration configuration) + public DishesService(IDbContext dbContext) { _dbContext = dbContext; - _configuration = configuration; } public async Task> GetDishesPageAsync(DishesPageRequest request) @@ -34,6 +31,7 @@ public class DishesService : IDishesService .OrderBy(x => x.CreateTime, SqlSugar.OrderByType.Desc) .Select((x, category) => new DishesResponse { + Id = x.Id, CurrnetUnits = x.Units.ToString(), CategoryName = category.Name, @@ -60,7 +58,7 @@ public class DishesService : IDishesService } } - public async Task GetDishesMenusBookingSetting(GetDishesMenusBookingRequest request) + public async Task GetDishesMenusBookingSetting(GetDishesMenusBookingRequest request) { // 读取最晚订餐的时间 var strDatetime = await _dbContext.Queryable() @@ -71,9 +69,9 @@ public class DishesService : IDishesService DateTime dateTime; DateTime.TryParseExact(strDatetime, "HH:mm:ss", null, System.Globalization.DateTimeStyles.None, out dateTime); - var res = new GetDishesMenusBookingResponse + var res = new DishesMenusBookingSettingResponse { - ServiceTime = dateTime, + ServerTime = dateTime, }; var shift = await _dbContext.Queryable() @@ -93,7 +91,7 @@ public class DishesService : IDishesService .Where(x => x.ShiftCode == shift.ShiftCode) .Select() .ToListAsync(); - res.BusinessShiftMealRelationships = businessShiftMealRelationships; + res.ShiftInfos = businessShiftMealRelationships; if (shift.TenantId == request.Factory) { @@ -107,7 +105,7 @@ public class DishesService : IDishesService } res.PayTypes = payTypes; return res; - } + } public async Task GetDishesDetailByIdAsync(long id) { diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs index a3a881e5..b2b9d996 100644 --- a/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs +++ b/Src/Dlhis.Basic/Organization/Controllers/GainfosController.cs @@ -2,6 +2,7 @@ using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; using Dlhis.Basic.Organization.Services; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.Core.DataAccess.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -45,39 +46,6 @@ public class GainfosController : ControllerBase return await _gainfoService.GetPageAsync(request); } - /// - /// 档案表修改 - /// - /// - /// - [HttpPut("update")] - public async Task UpdateAsync(GainfoSaveRequest request) - { - await _gainfoService.UpdateAsync(request); - } - - /// - /// 离职 - /// - /// - /// - [HttpPost("dimission")] - public async Task DimissionAsync(GainfoDimissionRequest request) - { - await _gainfoService.DimissionAsync(request); - } - - /// - /// 入职 - /// - /// - /// - [HttpPost("onboarding")] - public async Task OnboardingAsync(GainfoDimissionRequest request) - { - await _gainfoService.OnboardingAsync(request); - } - /// /// 当前人员信息,余额 /// @@ -93,6 +61,7 @@ public class GainfosController : ControllerBase /// /// [HttpPost("face")] + [Transactional] public async Task UploadFaceAsync(GainfoUploadFaceRequest request) { await _gainfoService.UploadFaceAsync(request); diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs index 6a3488fa..af1460b3 100644 --- a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs @@ -1,7 +1,5 @@ using Dlhis.Entity.Basic.Enums; using Kurisu.AspNetCore.Utils.Extensions; -using SqlSugar; -using System.ComponentModel.DataAnnotations; namespace Dlhis.Basic.Organization.Response; @@ -122,17 +120,11 @@ public class GainfoDetailResponse /// public string NationName { get; set; } - /// /// 人脸base64 /// public string Face { get; set; } - /// - /// 在职状态 - /// - public string Status { get; set; } - /// /// 厂区 /// diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs index 137700de..9a4ff4c2 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs @@ -13,7 +13,6 @@ using Kurisu.SqlSugar.Services; using Mapster; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Mvc; -using System.IdentityModel.Tokens.Jwt; using System.Linq.Expressions; namespace Dlhis.Basic.Organization.Services.Implements; @@ -28,7 +27,6 @@ public class GainfoService : IGainfoService private readonly IServiceProvider _serviceProvider; private readonly IConfiguration _configuration; private readonly ILogger _logger; - private readonly IDepartmentService _departmentService; public GainfoService(IGainfoStore gainfoStore, IDbContext dbContext, @@ -48,7 +46,6 @@ public class GainfoService : IGainfoService _serviceProvider = serviceProvider; _configuration = configuration; _logger = logger; - _departmentService = departmentService; } /// @@ -427,13 +424,6 @@ public class GainfoService : IGainfoService OnboardingDate = ga.CreateTime, }) .FirstAsync(); - info.Status = request.Status.GetDescription(); - var trees = await _departmentService.GetTreeAsync(); - var res = trees.First(x => x.No == info.Factory); - if (res != null) - { - info.FactoryName = res.Name; - } if (info != null) { @@ -446,201 +436,6 @@ public class GainfoService : IGainfoService return info; } - public async Task>> GetWeekNumberAsync(WeekNumberRequest request, string token) - { - var werks = GetClaimValueFromToken(token, "tenant"); - - //获取近7天并转化为"yyyy-MM-dd"集合 - DateTime currentDate = DateTime.Now; - List times = new List(); - for (int i = 0; i < 7; i++) - { - DateTime date = currentDate.AddDays(-i); - string dateString = date.ToString("yyyy-MM-dd"); - times.Add(dateString); - } - - var dic = new Dictionary>(); - - foreach (var time in times) - { - var infos = await _gainfoStore.Queryable(GainfoStatusEnumType.Working) - .LeftJoin((ga, de) => ga.DepartmentNo == de.No) - .LeftJoin((ga, de, type) => ga.Native == type.Code && type.Type == "native") - .LeftJoin((ga, de, type, posi) => ga.Position == posi.Name) - .LeftJoin((ga, de, type, posi, type2) => ga.CountryNo == type2.Code && type2.Type == "country") - .LeftJoin((ga, de, type, posi, type2, type3) => ga.Nation == type3.Code && type3.Type == "nation") - .Where(ga => ga.CreateTime.ToString("yyyy-MM-dd") == time && ga.Werks == werks) - .Select((ga, de, type, posi, type2, type3) => new GainfoDetailResponse - { - No = ga.No, - SapNo = ga.SapNo, - Name = ga.Name, - Code = ga.Code, - DepartmentName = de.Name, - IdClass = ga.IdClass, - IdNo = ga.IdNo, - Gender = ga.Gender, - NativeName = type.Display, - Address = ga.Address, - Birthday = ga.Birthday, - Phone = ga.Phone, - Position = ga.Position, - Grade = posi.Grade, - Degree = ga.Degree, - Werks = ga.Werks, - CostId = ga.CostId, - Marital = ga.Marital, - CountryName = type2.Display, - NationName = type3.Display, - }).ToPageListAsync(request); - - dic[time] = infos; - } - return dic; - } - - public async Task>> GetDimissionWeekNumberAsync(WeekNumberRequest request, string token) - { - var werks = GetClaimValueFromToken(token, "tenant"); - - //获取近7天并转化为"yyyy-MM-dd"集合 - DateTime currentDate = DateTime.Now; - List times = new List(); - for (int i = 0; i < 7; i++) - { - DateTime date = currentDate.AddDays(-i); - string dateString = date.ToString("yyyy-MM-dd"); - times.Add(dateString); - } - - var dic = new Dictionary>(); - foreach (var time in times) - { - var infos = await _gainfoStore.Queryable(GainfoStatusEnumType.Leave) - .LeftJoin((ga, de) => ga.DepartmentNo == de.No) - .LeftJoin((ga, de, type) => ga.Native == type.Code && type.Type == "native") - .LeftJoin((ga, de, type, posi) => ga.Position == posi.Name) - .LeftJoin((ga, de, type, posi, type2) => ga.CountryNo == type2.Code && type2.Type == "country") - .LeftJoin((ga, de, type, posi, type2, type3) => ga.Nation == type3.Code && type3.Type == "nation") - .Where(ga => ga.CreateTime.ToString("yyyy-MM-dd") == time && ga.Werks == werks) - .Select((ga, de, type, posi, type2, type3) => new GainfoDetailResponse - { - No = ga.No, - SapNo = ga.SapNo, - Name = ga.Name, - Code = ga.Code, - DepartmentName = de.Name, - IdClass = ga.IdClass, - IdNo = ga.IdNo, - Gender = ga.Gender, - NativeName = type.Display, - Address = ga.Address, - Birthday = ga.Birthday, - Phone = ga.Phone, - Position = ga.Position, - Grade = posi.Grade, - Degree = ga.Degree, - Werks = ga.Werks, - CostId = ga.CostId, - Marital = ga.Marital, - CountryName = type2.Display, - NationName = type3.Display, - }).ToPageListAsync(request); - dic[time] = infos; - } - return dic; - } - - public async Task GetGainfoNumbersAsync(string token) - { - var werks = GetClaimValueFromToken(token, "tenant"); - - //在职人数 - var onlineNumber = await _gainfoStore.Queryable(GainfoStatusEnumType.Working) - .Where(ga => ga.Werks == werks) - .CountAsync(); - - //离职人数 - var offlineNumber = await _gainfoStore.Queryable(GainfoStatusEnumType.Leave) - .Where(ga => ga.Werks == werks) - .CountAsync(); - - //考勤总人数 - var attendanceNumber = onlineNumber + offlineNumber; - - var res = new GainfoGainfoNumbersResponse - { - OnlineNumber = onlineNumber, - OfflineNumber = offlineNumber, - AttendanceNumber = attendanceNumber - }; - return res; - } - - //-------------------------------------------help methods ------------------------------------------------ - - /// - /// 递归获取部门No - /// - /// - /// - private async Task> GetRecursionDepartmentNosAsync(List departmentNos) - { - if (departmentNos.IsEmpty()) - { - return new List(); - } - - var departments = await _dbContext.Queryable().ToListAsync(); - var currentNos = departments.Where(x => departmentNos.Contains(x.No)).ToList(); - - foreach (var item in currentNos) - { - RecursionGetNext(item.No, departments, departmentNos); - } - - return departmentNos.Distinct().ToList(); - - void RecursionGetNext(string currentCode, List departments, List result) - { - var next = departments.Where(x => x.PNo == currentCode).ToList(); - - foreach (var item in next) - { - result.Add(item.No); - RecursionGetNext(item.No, departments, result); - } - } - } - - /// - /// 解析token - /// - /// - /// - /// - /// - private string GetClaimValueFromToken(string token, string claimType) - { - try - { - var handler = new JwtSecurityTokenHandler(); - var jsonToken = handler.ReadToken(token) as JwtSecurityToken; - - if (jsonToken == null) - throw new Exception("Invalid JWT Token"); - - var claimValue = jsonToken.Claims.FirstOrDefault(c => c.Type == claimType)?.Value; - - return claimValue; - } - catch (Exception ex) - { - return null; - } - } - public async Task MigrationAsync(MigrationRequest request) { //档案数据 @@ -677,4 +472,41 @@ public class GainfoService : IGainfoService } } } + + //-------------------------------------------help methods ------------------------------------------------ + + /// + /// 递归获取部门No + /// + /// + /// + private async Task> GetRecursionDepartmentNosAsync(List departmentNos) + { + if (departmentNos.IsEmpty()) + { + return new List(); + } + + var departments = await _dbContext.Queryable().ToListAsync(); + var currentNos = departments.Where(x => departmentNos.Contains(x.No)).ToList(); + + foreach (var item in currentNos) + { + RecursionGetNext(item.No, departments, departmentNos); + } + + return departmentNos.Distinct().ToList(); + + void RecursionGetNext(string currentCode, List departments, List result) + { + var next = departments.Where(x => x.PNo == currentCode).ToList(); + + foreach (var item in next) + { + result.Add(item.No); + RecursionGetNext(item.No, departments, result); + } + } + } + } diff --git a/Src/Dlhis.Entity/Canteen/Entities/DishesCategoryEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/DishesCategoryEntity.cs index 0f40049f..7ee20c16 100644 --- a/Src/Dlhis.Entity/Canteen/Entities/DishesCategoryEntity.cs +++ b/Src/Dlhis.Entity/Canteen/Entities/DishesCategoryEntity.cs @@ -7,6 +7,12 @@ namespace Dlhis.Entity.Canteen.Entities; [SugarTable(TableName = "DishesCategory", TableDescription = "菜品分类")] public class DishesCategoryEntity : SugarBaseEntity, ITenantId { + /// + /// 营业点 + /// + [SugarColumn(ColumnDescription = "营业点", IsNullable = false)] + public Guid BusinessPlaceCode { get; set; } + /// /// PCode /// @@ -21,13 +27,13 @@ public class DishesCategoryEntity : SugarBaseEntity, ITenantId /// /// 分类名称 /// - [SugarColumn(IsNullable = false, ColumnDescription = "名称")] + [SugarColumn(ColumnDescription = "名称", IsNullable = false)] public string Name { get; set; } /// /// 序号 /// - [SugarColumn(IsNullable = false, ColumnDescription = "序号", DefaultValue = "100")] + [SugarColumn(ColumnDescription = "序号", IsNullable = false, DefaultValue = "100")] public int Sequence { get; set; } = 100; diff --git a/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs index 928c9040..52dffbc0 100644 --- a/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs +++ b/Src/Dlhis.Entity/Canteen/Entities/DishesMenuEntity.cs @@ -54,25 +54,18 @@ public class DishesMenuEntity : SugarBaseEntity, ITenantId, IVersion /// public int Number { get; set; } - /// /// 单价 /// public decimal? Price { get; set; } - /// - /// 是否启用 - /// - [SugarColumn(ColumnDataType = "bit", ColumnDescription = "是否启用")] - public bool Enable { get; set; } - - - public string TenantId { get; set; } - /// /// 并发控制 /// public int Version { get; set; } + + + public string TenantId { get; set; } } diff --git a/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs b/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs index 93ba3b54..e286125f 100644 --- a/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs +++ b/Src/Dlhis.Entity/Device/Entities/DeviceTaskEntity.cs @@ -50,7 +50,8 @@ public class DeviceTaskEntity : SugarBaseEntity, ITenantId, IVersion /// /// 取消id /// - public long CancellationId { get; set; } + [SugarColumn(DefaultValue = "0")] + public long CancellationId { get; set; } = 0; public string TenantId { get; set; } diff --git a/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs b/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs index d5614214..5302ddf8 100644 --- a/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs +++ b/Src/Dlhis.Entity/Sys/Enums/DeviceAssignmentTypeEnumType.cs @@ -18,5 +18,11 @@ public enum DeviceAssignmentTypeEnumType /// 设备组 /// [Description("设备组")] - Group = 2 + Group = 2, + + /// + /// 营业点 + /// + [Description("营业点")] + BusinessPlace = 3, }