From 2f9ca87876875854c6323696ea78fcfb93553c5d Mon Sep 17 00:00:00 2001 From: hehaibing-1996 Date: Tue, 5 Nov 2024 16:32:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=8A=A5=E9=94=99=E6=9C=BA=E5=88=B6=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=9C=AA=E6=89=AB=E6=8F=8F=E4=B8=8A=E6=9E=B6=E7=9A=84?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E5=BA=93=E4=BD=8D=E5=B1=8F=E8=94=BD=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2.库位查询增加当前屏蔽模组库位百分比查询 3.货架库位屏蔽、模组屏蔽后增加当前禁用模组库位百分比查询 --- WCS.BLL/Manager/WarningManager.cs | 93 +++++++++- .../Services/IService/IStoreInfoService.cs | 1 + WCS.BLL/Services/Service/StoreInfoService.cs | 163 +++++++++++++++++- .../WebSocketModel/SolveWarningRequesr.cs | 1 + WCS.WebApi/Controllers/StoreInfoController.cs | 7 + .../MXViewModel/MXOutOrderDetailViewViewModel.cs | 8 +- .../ViewModels/StoreInfoViewModel.cs | 31 ++++ 货架标准上位机/Views/StoreInfoView.xaml | 5 + 货架标准上位机/Views/Windows/TipView.xaml | 2 +- .../Views/Windows/WarningWindow.xaml.cs | 39 ++++- 货架标准上位机/WarningManager.cs | 9 +- 11 files changed, 350 insertions(+), 9 deletions(-) diff --git a/WCS.BLL/Manager/WarningManager.cs b/WCS.BLL/Manager/WarningManager.cs index 54fdcd1..e39dbcc 100644 --- a/WCS.BLL/Manager/WarningManager.cs +++ b/WCS.BLL/Manager/WarningManager.cs @@ -5,6 +5,7 @@ using System.Data.OscarClient; using System.Linq; using System.Text; using System.Threading.Tasks; +using WCS.BLL.Config; using WCS.BLL.DbModels; using WCS.BLL.HardWare; using WCS.DAL.Db; @@ -81,6 +82,21 @@ namespace WCS.BLL.Manager break; } } + else if (solveType == SolveTypeEnum.屏蔽库位) + { + switch (warningInManager.WarningType) + { + case WarningTypeEnum.出库自检未扫描上架: + DisableNoScan(warningInManager); + break; + case WarningTypeEnum.入库自检未扫描上架: + DisableNoScan(warningInManager); + break; + case WarningTypeEnum.自检未扫描上架: + DisableNoScan(warningInManager); + break; + } + } else if (solveType == SolveTypeEnum.忽略) { //不发指令了 @@ -143,9 +159,83 @@ namespace WCS.BLL.Manager #region 报警消除的处理 - public static void SolveNoScan(WebSocketMessageModel warning) + /// + /// 未扫描上架禁用库位 + /// + /// + public static void DisableNoScan(WebSocketMessageModel warning) { + #region 【后台】未扫描上架库位的处理 + try + { + //获取库位 + var storeInfo = DbHelp.db.Queryable() + .Where(t => t.ShelfId == warning.ShelfId) + .Where(t => t.Id == warning.StoreId) + .First(); + if (storeInfo != null) + { + storeInfo.CurrentMatSn = "禁用"; + DbHelp.db.Updateable(storeInfo).ExecuteCommand(); + if (LocalFile.Config.IsMx) + { + var DingDing = string.Empty; + MXBackgroundThread.SendDingDingMsg($"【智能货架】库位{storeInfo.StoreCode}被 {warning.SolvedUser} “未扫描上架弹窗”屏蔽,请及时调查或维保硬件!", new List { "104379", "103595" }, ref DingDing); + #region 计算库位禁用率并发送 + Task.Run(() => + { + var disabledStore = DbHelp.db.Queryable() + .Where(t => t.CurrentMatSn == "禁用") + .ToList(); + var allStore = DbHelp.db.Queryable() + .ToList(); + var disabledCount = disabledStore.Count(); + var allCount = allStore.Count(); + + var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + + var disabledModule = DbHelp.db.Queryable() + .Where(t => t.IsEnable == false) + .ToList(); + var allModule = DbHelp.db.Queryable() + .ToList(); + + var disabledModuleCount = disabledModule.Count(); + var allModuleCount = allModule.Count(); + + var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," + + $"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," + + $"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" + + $"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," + + $"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," + + $"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。"; + + var dd = string.Empty; + MXBackgroundThread.SendDingDingMsg(message, new List { "104379", "103595" }, ref dd); + }); + #endregion + } + + } + } + catch (Exception e) + { + DbHelp.db.RollbackTran(); + } + + #endregion } public static void SolveLoss(WebSocketMessageModel warning) @@ -244,6 +334,7 @@ namespace WCS.BLL.Manager #endregion } + public static void GoInRightMode(WebSocketMessageModel warning) { try diff --git a/WCS.BLL/Services/IService/IStoreInfoService.cs b/WCS.BLL/Services/IService/IStoreInfoService.cs index c61631f..a3f6141 100644 --- a/WCS.BLL/Services/IService/IStoreInfoService.cs +++ b/WCS.BLL/Services/IService/IStoreInfoService.cs @@ -73,5 +73,6 @@ namespace WCS.BLL.Services.IService /// public Task disableOrEnableStore(DisableOrEnableStoreRequest request); + public Task getDisablePercent(); } } diff --git a/WCS.BLL/Services/Service/StoreInfoService.cs b/WCS.BLL/Services/Service/StoreInfoService.cs index ec21070..a67d661 100644 --- a/WCS.BLL/Services/Service/StoreInfoService.cs +++ b/WCS.BLL/Services/Service/StoreInfoService.cs @@ -350,7 +350,52 @@ namespace WCS.BLL.Services.Service if (LocalFile.Config.IsMx) { var DingDing = string.Empty; - MXBackgroundThread.SendDingDingMsg($"【智能货架】模组{moduleInfo.ModuleCode}被屏蔽", new List { "104379", "103595" }, ref DingDing); + MXBackgroundThread.SendDingDingMsg($"【智能货架】模组{moduleInfo.ModuleCode}被屏蔽(模组管理),请及时调查或维保硬件!", new List { "104379", "103595" }, ref DingDing); + #region 计算库位禁用率并发送 + Task.Run(() => + { + var disabledStore = DbHelp.db.Queryable() + .Where(t => t.CurrentMatSn == "禁用") + .ToList(); + var allStore = DbHelp.db.Queryable() + .ToList(); + + var disabledCount = disabledStore.Count(); + var allCount = allStore.Count(); + + var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + + var disabledModule = DbHelp.db.Queryable() + .Where(t => t.IsEnable == false) + .ToList(); + var allModule = DbHelp.db.Queryable() + .ToList(); + + var disabledModuleCount = disabledModule.Count(); + var allModuleCount = allModule.Count(); + + var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," + + $"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," + + $"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" + + $"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," + + $"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," + + $"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。"; + + var dd = string.Empty; + MXBackgroundThread.SendDingDingMsg(message, new List { "104379", "103595" }, ref dd); + }); + #endregion } } else @@ -552,7 +597,53 @@ namespace WCS.BLL.Services.Service if (LocalFile.Config.IsMx) { var DingDing = string.Empty; - MXBackgroundThread.SendDingDingMsg($"【智能货架】库位{storeInfo.StoreCode}被屏蔽", new List { "104379", "103595" }, ref DingDing); + MXBackgroundThread.SendDingDingMsg($"【智能货架】库位{storeInfo.StoreCode}被屏蔽(库位管理),请及时调查或维保硬件!", new List { "104379", "103595" }, ref DingDing); + + #region 计算库位禁用率并发送 + Task.Run(() => + { + var disabledStore = DbHelp.db.Queryable() + .Where(t => t.CurrentMatSn == "禁用") + .ToList(); + var allStore = DbHelp.db.Queryable() + .ToList(); + + var disabledCount = disabledStore.Count(); + var allCount = allStore.Count(); + + var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + + var disabledModule = DbHelp.db.Queryable() + .Where(t => t.IsEnable == false) + .ToList(); + var allModule = DbHelp.db.Queryable() + .ToList(); + + var disabledModuleCount = disabledModule.Count(); + var allModuleCount = allModule.Count(); + + var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," + + $"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," + + $"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" + + $"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," + + $"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," + + $"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。"; + + var dd = string.Empty; + MXBackgroundThread.SendDingDingMsg(message, new List { "104379", "103595" }, ref dd); + }); + #endregion } //库位 @@ -618,6 +709,74 @@ namespace WCS.BLL.Services.Service } } + public async Task getDisablePercent() + { + try + { + #region 计算库位禁用率 + var disabledStore = DbHelp.db.Queryable() + .Where(t => t.CurrentMatSn == "禁用") + .ToList(); + var allStore = DbHelp.db.Queryable() + .ToList(); + + var disabledCount = disabledStore.Count(); + var allCount = allStore.Count(); + + var disabledACount = disabledStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allACount = allStore.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCCount = disabledStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCCount = allStore.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + + var disabledModule = DbHelp.db.Queryable() + .Where(t => t.IsEnable == false) + .ToList(); + var allModule = DbHelp.db.Queryable() + .ToList(); + + var disabledModuleCount = disabledModule.Count(); + var allModuleCount = allModule.Count(); + + var disabledAModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + var allAModuleCount = allModule.Where(t => t.ShelfCode.Contains("A")).ToList().Count(); + + var disabledCModuleCount = disabledModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + var allCModuleCount = allModule.Where(t => t.ShelfCode.Contains("C")).ToList().Count(); + + var message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}," + + $"其中A区库位总数{allACount},禁用数{disabledACount},禁用率{((double)disabledACount / allACount).ToString("P")}," + + $"C区库位总数{allCCount},禁用数{disabledCCount},禁用率{((double)disabledCCount / allCCount).ToString("P")}。\r\n" + + $"当前模组总数{allModuleCount},禁用总数{disabledModuleCount},禁用率{((double)disabledModuleCount / allModuleCount).ToString("P")}," + + $"其中A区模组总数{allAModuleCount},禁用数{disabledAModuleCount},禁用率{((double)disabledAModuleCount / allAModuleCount).ToString("P")}," + + $"C区模组总数{allCModuleCount},禁用数{disabledCModuleCount},禁用率{((double)disabledCModuleCount / allCModuleCount).ToString("P")}。"; + #endregion + + //非盟讯公司的展示 + if (LocalFile.Config.IsMx == false) + { + message = $"【智能货架】当前库位总数{allCount},禁用总数{disabledCount},禁用率{((double)disabledCount / allCount).ToString("P")}。"; + } + + return new ResponseCommon() + { + Code = 200, + Message = $"Success", + Data = message , + }; + } + catch (Exception ex) + { + DbHelp.db.RollbackTran(); + return new ResponseCommon() + { + Code = 300, + Message = $"操作失败:异常{ex.Message}!" + }; + } + } + #endregion } } diff --git a/WCS.Model/WebSocketModel/SolveWarningRequesr.cs b/WCS.Model/WebSocketModel/SolveWarningRequesr.cs index 7b97545..988cfe2 100644 --- a/WCS.Model/WebSocketModel/SolveWarningRequesr.cs +++ b/WCS.Model/WebSocketModel/SolveWarningRequesr.cs @@ -14,5 +14,6 @@ namespace WCS.Model.WebSocketModel { 处理 = 0, 忽略 = 1, + 屏蔽库位 = 2, } } diff --git a/WCS.WebApi/Controllers/StoreInfoController.cs b/WCS.WebApi/Controllers/StoreInfoController.cs index ed41590..f4a8fa1 100644 --- a/WCS.WebApi/Controllers/StoreInfoController.cs +++ b/WCS.WebApi/Controllers/StoreInfoController.cs @@ -89,6 +89,13 @@ namespace WCS.WebApi.Controllers { return await _storeInfoService.disableOrEnableStore(request); } + + [Route("getDisablePercent")] + [HttpPost(Name = "getDisablePercent")] + public async Task getDisablePercent(DisableOrEnableStoreRequest request) + { + return await _storeInfoService.getDisablePercent(); + } #endregion } } diff --git a/货架标准上位机/ViewModels/MXViewModel/MXOutOrderDetailViewViewModel.cs b/货架标准上位机/ViewModels/MXViewModel/MXOutOrderDetailViewViewModel.cs index e305e49..7e6c67d 100644 --- a/货架标准上位机/ViewModels/MXViewModel/MXOutOrderDetailViewViewModel.cs +++ b/货架标准上位机/ViewModels/MXViewModel/MXOutOrderDetailViewViewModel.cs @@ -102,7 +102,9 @@ namespace 智能仓储WCS管理系统.ViewModel } else if (Result != null && Result.Code == 200 && (Result.Data == null || Result.Data.Lists == null || Result.Data.Lists.Count == 0)) { - MessageBox.Show($"未查询到领料明细!所推荐物料在此货架上不存在,请确认是否在其他货架上!\r\n{string.Join(",\r\n", matSns)}"); + var content = $"未查询到领料明细!所推荐物料在此货架上不存在,请确认是否在其他货架上!或者是否已经丢失?(复制物料条码后在[出入记录]功能中通过物料SN查询确认是否丢失)\r\n{string.Join(",\r\n", matSns)}"; + //MessageBox.Show($"未查询到领料明细!所推荐物料在此货架上不存在,请确认是否在其他货架上!或者是否已经丢失?(复制物料条码后在[出入记录]功能中即可查询)\r\n{string.Join(",\r\n", matSns)}"); + TipView.Show(content, "提示", true); DataGridItemSource = null; } else @@ -120,12 +122,12 @@ namespace 智能仓储WCS管理系统.ViewModel } else if (result != null && result.code == 200 && (result.data == null || result.data.Count == 0)) { - Growl.Warning("未查询到物料明细!MES推荐物料明细为空!"); + Growl.Warning("未查询到物料明细!MES推荐物料明细为空!请确认该单据是否已发或咨询MES系统相关负责人!"); DataGridItemSource = null; } else { - Growl.Warning("未查询到领料明细!请求MES接口失败!"); + Growl.Warning("未查询到领料明细!请求MES接口失败!请确认该单据是否已发或咨询MES系统相关负责人!"); DataGridItemSource = null; } }); diff --git a/货架标准上位机/ViewModels/StoreInfoViewModel.cs b/货架标准上位机/ViewModels/StoreInfoViewModel.cs index 121f2b5..0df820e 100644 --- a/货架标准上位机/ViewModels/StoreInfoViewModel.cs +++ b/货架标准上位机/ViewModels/StoreInfoViewModel.cs @@ -230,6 +230,37 @@ namespace 智能仓储WCS管理系统.ViewModel } #endregion } + + + public ICommand BtnDisablePercentCommand { get => new DelegateCommand(DisablePercent); } + public void DisablePercent() + { + #region 调用接口 获取屏蔽率 + try + { + var body = new DisableOrEnableStoreRequest() + { + }; + var Result = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "storeInfo/getDisablePercent", body, "POST"); + if (Result != null && Result.Code == 200) + { + HandyControl.Controls.MessageBox.Show(Result.Data.ToString()); + } + else if (Result != null) + { + Growl.Warning(Result.Message); + } + else + { + Growl.Warning("操作失败:请重试!"); + } + } + catch (Exception ex) + { + Growl.Error("操作失败:" + ex.Message); + } + #endregion + } #endregion #region PageOperation 分页操作 diff --git a/货架标准上位机/Views/StoreInfoView.xaml b/货架标准上位机/Views/StoreInfoView.xaml index c1dff3c..68eb77b 100644 --- a/货架标准上位机/Views/StoreInfoView.xaml +++ b/货架标准上位机/Views/StoreInfoView.xaml @@ -67,6 +67,11 @@ Grid.Column="9" MinHeight="40" FontSize="18" Content=" 重置" FontFamily="{StaticResource IconFont}" Command="{Binding BtnResetCommand}"> + + diff --git a/货架标准上位机/Views/Windows/TipView.xaml b/货架标准上位机/Views/Windows/TipView.xaml index a41e5f4..d08fca5 100644 --- a/货架标准上位机/Views/Windows/TipView.xaml +++ b/货架标准上位机/Views/Windows/TipView.xaml @@ -32,7 +32,7 @@