From f664b5beac0109d70af746689e5f096839cf1b0e Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Mon, 4 Nov 2024 10:15:34 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A9=BA=E7=AE=B1=E8=A1=A5=E8=B4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/PBL/BigScreenController.cs | 11 +- .../appsettings.Development.json | 2 +- DOAN.Model/PBL/Dto/BIgScreenDto.cs | 30 ---- .../PBL/Dto/BIgScreenDtoLightPickupDto.cs | 61 +++++++ DOAN.Model/PBL/Dto/StoragelocationDto.cs | 75 ++++----- DOAN.Model/PBL/Storagelocation.cs | 2 +- DOAN.Service/PBL/BigScreenService.cs | 157 +++++++++++------- .../PBL/IService/IBigScreenService.cs | 7 +- DOAN.ServiceCore/Filters/VerifyAttribute.cs | 25 ++- 9 files changed, 233 insertions(+), 137 deletions(-) delete mode 100644 DOAN.Model/PBL/Dto/BIgScreenDto.cs create mode 100644 DOAN.Model/PBL/Dto/BIgScreenDtoLightPickupDto.cs diff --git a/DOAN.Admin.WebApi/Controllers/PBL/BigScreenController.cs b/DOAN.Admin.WebApi/Controllers/PBL/BigScreenController.cs index 13afc3e..c00886d 100644 --- a/DOAN.Admin.WebApi/Controllers/PBL/BigScreenController.cs +++ b/DOAN.Admin.WebApi/Controllers/PBL/BigScreenController.cs @@ -6,7 +6,7 @@ using DOAN.Admin.WebApi.Filters; namespace DOAN.Admin.WebApi.Controllers.PBL; -[Verify] +[AllowAnonymous] [Route("PBL/bigscreen")] public class BigScreenController : BaseController { @@ -27,7 +27,12 @@ public class BigScreenController : BaseController return SUCCESS(response); } - - + //TODO 查询补料 情况 + [HttpGet("searchfeedingMaterial")] + public IActionResult SearchfeedingMaterialInfomation() + { + var response= _BigScreenService.SearchfeedingMaterialInfomation(); + return SUCCESS(response); + } } \ No newline at end of file diff --git a/DOAN.Admin.WebApi/appsettings.Development.json b/DOAN.Admin.WebApi/appsettings.Development.json index 9ecee7c..2b5af3b 100644 --- a/DOAN.Admin.WebApi/appsettings.Development.json +++ b/DOAN.Admin.WebApi/appsettings.Development.json @@ -31,7 +31,7 @@ "Issuer": "DOANAdmin.NET", //即token的签发者。 "Audience": "DOANAdmin.NET", //指该token是服务于哪个群体的(群体范围) "SecretKey": "SecretKey-DOANADMIN.NET-202311281883838", - "Expire": 0, //jwt登录过期时间(分) + "Expire": 30, //jwt登录过期时间(分) "RefreshTokenTime": 30, //分钟 "TokenType": "Bearer" }, diff --git a/DOAN.Model/PBL/Dto/BIgScreenDto.cs b/DOAN.Model/PBL/Dto/BIgScreenDto.cs deleted file mode 100644 index 2c43175..0000000 --- a/DOAN.Model/PBL/Dto/BIgScreenDto.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace DOAN.Model.PBL.Dto; - -public class BIgScreenDto -{ - //料架号 - public string RackCode { get; set; } - - // - public LayerObject[] LayerObjectArray { get; set; } - - //是否亮灯 - public bool isLight { get; set; } -} - -public class LayerObject -{ - // 层号 - public int LayerNum { get; set; } - - // 零件号 - public string Partnumber { get; set; } - // 最大容量 - public int MaxCapacity { get; set; } - - // 箱子数 - public int? PackageNum { get; set; } - - //是否亮灯 - public bool isLight { get; set; } -} \ No newline at end of file diff --git a/DOAN.Model/PBL/Dto/BIgScreenDtoLightPickupDto.cs b/DOAN.Model/PBL/Dto/BIgScreenDtoLightPickupDto.cs new file mode 100644 index 0000000..3d5c016 --- /dev/null +++ b/DOAN.Model/PBL/Dto/BIgScreenDtoLightPickupDto.cs @@ -0,0 +1,61 @@ +namespace DOAN.Model.PBL.Dto; + +public class BIgScreenDtoLightPickupDto +{ + //料架号 + public string RackCode { get; set; } + + // + public LayerObject[] LayerObjectArray { get; set; } + + //是否亮灯 + public bool isLight { get; set; } +} + +public class BigSreeenDtoFeedingMaterial +{ + //料架号 + public string RackCode { get; set; } + + // + public LayerFeedingMaterialObject[] LayerObjectArray { get; set; } + + //是否补料 + public bool isFeedingMaterial { get; set; } +} + +public class LayerObject +{ + // 层号 + public int LayerNum { get; set; } + + // 零件号 + public string Partnumber { get; set; } + + // 最大容量 + public int MaxCapacity { get; set; } + + // 箱子数 + public int? PackageNum { get; set; } + + //是否亮灯 + public bool isLight { get; set; } +} + +public class LayerFeedingMaterialObject +{ + // 层号 + public int LayerNum { get; set; } + + // 零件号 + public string Partnumber { get; set; } + + // 最大容量 + public int MaxCapacity { get; set; } + + // 箱子数 + public int? PackageNum { get; set; } + + //是否亮灯 + public bool isFeedingMaterial { get; set; } +} \ No newline at end of file diff --git a/DOAN.Model/PBL/Dto/StoragelocationDto.cs b/DOAN.Model/PBL/Dto/StoragelocationDto.cs index e212fe4..5be60b7 100644 --- a/DOAN.Model/PBL/Dto/StoragelocationDto.cs +++ b/DOAN.Model/PBL/Dto/StoragelocationDto.cs @@ -1,52 +1,47 @@ +namespace DOAN.Model.PBL.Dto; -namespace DOAN.Model.PBL.Dto +/// +/// 料架表查询对象 +/// +public class StoragelocationQueryDto : PagerInfo { - /// - /// 料架表查询对象 - /// - public class StoragelocationQueryDto : PagerInfo - { - public string Partnumber { get; set; } + public string Partnumber { get; set; } - public string RackCode { get; set; } - } + public string RackCode { get; set; } +} + +/// +/// 料架表输入输出对象 +/// +public class StoragelocationDto +{ + public int Id { get; set; } + + public string RackCode { get; set; } + + public int LayerNum { get; set; } + + public string Partnumber { get; set; } /// - /// 料架表输入输出对象 + /// 最大容量 /// - public class StoragelocationDto - { - [Required(ErrorMessage = "Id不能为空")] - public int Id { get; set; } - - public string RackCode { get; set; } - - public int LayerNum { get; set; } - public string Partnumber { get; set; } - - /// - /// 最大容量 - /// - - public int MaxCapacity { get; set; } - public int? PackageNum { get; set; } - - - /// - /// 箱子数 - /// - public int? IsLight { get; set; } + public int MaxCapacity { get; set; } - public string CreatedBy { get; set; } - - public DateTime? CreatedTime { get; set; } - - public string UpdatedBy { get; set; } - - public DateTime? UpdatedTime { get; set; } + public int? PackageNum { get; set; } + /// + /// 箱子数 + /// + public int? IsLight { get; set; } - } + public string CreatedBy { get; set; } + + public DateTime? CreatedTime { get; set; } + + public string UpdatedBy { get; set; } + + public DateTime? UpdatedTime { get; set; } } \ No newline at end of file diff --git a/DOAN.Model/PBL/Storagelocation.cs b/DOAN.Model/PBL/Storagelocation.cs index 6d6f2e7..183a018 100644 --- a/DOAN.Model/PBL/Storagelocation.cs +++ b/DOAN.Model/PBL/Storagelocation.cs @@ -42,7 +42,7 @@ namespace DOAN.Model.PBL public int? PackageNum { get; set; } /// - /// 箱子数 + /// 是否亮灯 /// [SugarColumn(ColumnName = "is_light")] public int? IsLight { get; set; } diff --git a/DOAN.Service/PBL/BigScreenService.cs b/DOAN.Service/PBL/BigScreenService.cs index 3841f8f..bb4f215 100644 --- a/DOAN.Service/PBL/BigScreenService.cs +++ b/DOAN.Service/PBL/BigScreenService.cs @@ -1,71 +1,116 @@ -using Infrastructure.Attribute; -using Infrastructure.Extensions; -using DOAN.Model.PBL.Dto; using DOAN.Model.PBL; -using DOAN.Repository; +using DOAN.Model.PBL.Dto; using DOAN.Service.PBL.IService; +using Infrastructure.Attribute; -namespace DOAN.Service.PBL +namespace DOAN.Service.PBL; + +[AppService(ServiceType = typeof(IBigScreenService), ServiceLifetime = LifeTime.Transient)] +public class BigScreenService : BaseService, IBigScreenService { - [AppService(ServiceType = typeof(IBigScreenService), ServiceLifetime = LifeTime.Transient)] - public class BigScreenService : BaseService, IBigScreenService + /// + /// 查询料架灯 亮和灭 情况 + /// + /// + public List SearchShelfLightInfomation() { - /// - /// 查询料架灯 亮和灭 情况 - /// - /// + var result = new List(); - public List SearchShelfLightInfomation() + // 1 查询所有料架 + var RackCodeArray = Context.Queryable().GroupBy(it => it.RackCode).Select(it => it.RackCode) + .ToArray(); + + var DataSoure = Context.Queryable().ToList(); + //2 查询每个料架层 + for (var i = 0; i < RackCodeArray.Length; i++) { - List result = new List(); - - // 1 查询所有料架 - string[] RackCodeArray= Context.Queryable().GroupBy(it=>it.RackCode).Select(it=>it.RackCode).ToArray(); + var RackCodeObject = new BIgScreenDtoLightPickupDto(); + RackCodeObject.RackCode = RackCodeArray[i]; - List DataSoure= Context.Queryable().ToList(); - //2 查询每个料架层 - for (int i = 0; i < RackCodeArray.Length; i++) + var LayerSheelfList = DataSoure.Where(it => it.RackCode == RackCodeArray[i]).ToList(); + var LayerObjectfArray = new LayerObject[LayerSheelfList.Count]; + if (LayerSheelfList != null && LayerSheelfList.Count > 0) { - BIgScreenDto RackCodeObject = new BIgScreenDto(); - RackCodeObject.RackCode = RackCodeArray[i]; - - List LayerSheelfList= DataSoure.Where(it => it.RackCode == RackCodeArray[i]).ToList(); - LayerObject[] LayerObjectfArray =new LayerObject[LayerSheelfList.Count]; - if (LayerSheelfList != null && LayerSheelfList.Count > 0) + for (var j = 0; j < LayerSheelfList.Count; j++) { - for (int j = 0; j < LayerSheelfList.Count; j++) - { - LayerObject LayerObject = new LayerObject(); - LayerObject.LayerNum=LayerSheelfList[j].LayerNum; - LayerObject.Partnumber=LayerSheelfList[j].Partnumber; - LayerObject.MaxCapacity=LayerSheelfList[j].MaxCapacity; - LayerObject.PackageNum=LayerSheelfList[j].PackageNum; - LayerObject.isLight=LayerSheelfList[j].IsLight==1?true:false; - LayerObjectfArray[j] = LayerObject; - } - - for (int j = 0; j < LayerSheelfList.Count; j++) - { - RackCodeObject.isLight = false; - if (LayerSheelfList[j].IsLight == 1) - { - RackCodeObject.isLight = true; - break; - } - - } - + var LayerObject = new LayerObject(); + LayerObject.LayerNum = LayerSheelfList[j].LayerNum; + LayerObject.Partnumber = LayerSheelfList[j].Partnumber; + LayerObject.MaxCapacity = LayerSheelfList[j].MaxCapacity; + LayerObject.PackageNum = LayerSheelfList[j].PackageNum; + LayerObject.isLight = LayerSheelfList[j].IsLight == 1 ? true : false; + LayerObjectfArray[j] = LayerObject; + } + + for (var j = 0; j < LayerSheelfList.Count; j++) + { + RackCodeObject.isLight = false; + if (LayerSheelfList[j].IsLight == 1) + { + RackCodeObject.isLight = true; + break; + } } - - RackCodeObject.LayerObjectArray= LayerObjectfArray; - result.Add(RackCodeObject); - } - - - return result.OrderBy(it=>it.RackCode).ToList(); + RackCodeObject.LayerObjectArray = LayerObjectfArray; + result.Add(RackCodeObject); } + + + return result.OrderBy(it => it.RackCode).ToList(); } - -} + + + + public List SearchfeedingMaterialInfomation() + { + var result = new List(); + + // 1 查询所有料架 + var RackCodeArray = Context.Queryable().GroupBy(it => it.RackCode).Select(it => it.RackCode) + .ToArray(); + + var DataSoure = Context.Queryable().ToList(); + //2 查询每个料架层 + for (var i = 0; i < RackCodeArray.Length; i++) + { + var RackCodeObject = new BigSreeenDtoFeedingMaterial(); + RackCodeObject.RackCode = RackCodeArray[i]; + + var LayerSheelfList = DataSoure.Where(it => it.RackCode == RackCodeArray[i]).ToList(); + var LayerObjectfArray = new LayerFeedingMaterialObject[LayerSheelfList.Count]; + if (LayerSheelfList != null && LayerSheelfList.Count > 0) + { + for (var j = 0; j < LayerSheelfList.Count; j++) + { + var LayerObject = new LayerFeedingMaterialObject(); + LayerObject.LayerNum = LayerSheelfList[j].LayerNum; + LayerObject.Partnumber = LayerSheelfList[j].Partnumber; + LayerObject.MaxCapacity = LayerSheelfList[j].MaxCapacity; + LayerObject.PackageNum = LayerSheelfList[j].PackageNum; + LayerObject.isFeedingMaterial = LayerSheelfList[j].PackageNum <= 2 ? true : false; + LayerObjectfArray[j] = LayerObject; + } + + for (var j = 0; j < LayerSheelfList.Count; j++) + { + RackCodeObject.isFeedingMaterial = false; + if (LayerSheelfList[j].PackageNum <= 2) + { + RackCodeObject.isFeedingMaterial = true; + break; + } + } + } + + RackCodeObject.LayerObjectArray = LayerObjectfArray; + result.Add(RackCodeObject); + } + + + return result.OrderBy(it => it.RackCode).ToList(); + + } + +} \ No newline at end of file diff --git a/DOAN.Service/PBL/IService/IBigScreenService.cs b/DOAN.Service/PBL/IService/IBigScreenService.cs index df4a165..05e9a9a 100644 --- a/DOAN.Service/PBL/IService/IBigScreenService.cs +++ b/DOAN.Service/PBL/IService/IBigScreenService.cs @@ -5,7 +5,8 @@ namespace DOAN.Service.PBL.IService; public interface IBigScreenService : IBaseService { - List SearchShelfLightInfomation(); - - + List SearchShelfLightInfomation(); + + List SearchfeedingMaterialInfomation(); + } \ No newline at end of file diff --git a/DOAN.ServiceCore/Filters/VerifyAttribute.cs b/DOAN.ServiceCore/Filters/VerifyAttribute.cs index 7557d8a..7958088 100644 --- a/DOAN.ServiceCore/Filters/VerifyAttribute.cs +++ b/DOAN.ServiceCore/Filters/VerifyAttribute.cs @@ -24,19 +24,29 @@ namespace DOAN.Admin.WebApi.Filters /// public void OnAuthorization(AuthorizationFilterContext context) { + #region 首先检查当前操作是否标记了 AllowAnonymousAttribute 属性。如果有,则跳过授权检查 + var noNeedCheck = false; if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor) { noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true) - .Any(a => a.GetType().Equals(typeof(AllowAnonymousAttribute))); + .Any(a => a.GetType().Equals(typeof(AllowAnonymousAttribute))); } - if (noNeedCheck) return; + #endregion + + + + #region 获取客户端IP地址、请求路径、用户是否已认证以及操作系统类型。 string ip = HttpContextExtension.GetClientUserIp(context.HttpContext); string url = context.HttpContext.Request.Path; var isAuthed = context.HttpContext.User.Identity.IsAuthenticated; string osType = context.HttpContext.Request.Headers["os"]; + + #endregion + + #region 刷新JWT令牌验证 //使用jwt token校验2020-11-21 TokenModel loginUser = JwtUtil.GetLoginUser(context.HttpContext); if (loginUser != null) @@ -44,7 +54,7 @@ namespace DOAN.Admin.WebApi.Filters var nowTime = DateTime.UtcNow; TimeSpan ts = loginUser.ExpireTime - nowTime; - //Console.WriteLine($"jwt到期剩余:{ts.TotalMinutes}分,{ts.TotalSeconds}秒"); + Console.WriteLine($"jwt到期剩余:{ts.TotalMinutes}分,{ts.TotalSeconds}秒"); var CK = "token_" + loginUser.UserId; if (!CacheHelper.Exists(CK) && ts.TotalMinutes < 5) @@ -61,12 +71,21 @@ namespace DOAN.Admin.WebApi.Filters context.HttpContext.Response.Headers.Add("X-Refresh-Token", newToken); } } + + + #endregion + + #region 处理未认证的情况 + if (loginUser == null || !isAuthed) { string msg = $"请求访问[{url}]失败,无法访问系统资源"; //logger.Info(msg); context.Result = new JsonResult(ApiResult.Error(ResultCode.DENY, msg)); } + + #endregion + } } }