diff --git a/WCS.BLL/DbModels/InOutRecord.cs b/WCS.BLL/DbModels/InOutRecord.cs index 080816f..253d1ef 100644 --- a/WCS.BLL/DbModels/InOutRecord.cs +++ b/WCS.BLL/DbModels/InOutRecord.cs @@ -140,7 +140,7 @@ namespace WCS.BLL.DbModels /// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架) /// [SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = false, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")] - public string GroupName { get; set; } + public string GroupName { get; set; } = string.Empty; /// /// 序号 diff --git a/WCS.BLL/DbModels/StockTakingOrder.cs b/WCS.BLL/DbModels/StockTakingOrder.cs index ccd2e36..07757b8 100644 --- a/WCS.BLL/DbModels/StockTakingOrder.cs +++ b/WCS.BLL/DbModels/StockTakingOrder.cs @@ -56,6 +56,12 @@ namespace WCS.BLL.DbModels [SugarColumn(ColumnName = "update_time", IsNullable = false, ColumnDescription = "更新时间")] public DateTime UpdateTime { get; set; } = DateTime.Now; + /// + /// 货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架) + /// + [SugarColumn(ColumnName = "group_name", Length = 50, IsNullable = true, DefaultValue = "0", ColumnDescription = "货架的组别、区域(区分单个软件管哪些货架的,前端的配置文件配置一个组别,查询时只显示当前组别的货架)")] + public string GroupName { get; set; } = string.Empty; + /// /// 序号 /// diff --git a/WCS.BLL/HardWare/SmartShelf.cs b/WCS.BLL/HardWare/SmartShelf.cs index 4c02971..73f0295 100644 --- a/WCS.BLL/HardWare/SmartShelf.cs +++ b/WCS.BLL/HardWare/SmartShelf.cs @@ -23,7 +23,6 @@ namespace WCS.BLL.HardWare ShelfCode = shelfInfo.ShelfCode; RowCounts = shelfInfo.Rowcounts; ColumnCounts = shelfInfo.Columncounts; - //CurrentMode = shelfInfo.CurrentMode; SetCurrentMode(Mode.待机模式); ClientIp = shelfInfo.ClientIp; LightId = shelfInfo.LightId; @@ -326,6 +325,7 @@ namespace WCS.BLL.HardWare { try { + Logs.Write("GoInOutstoreByWebSocket", LogsType.Outstore); //找到对应的模组 var module = Modules.Where(t => t.ModuleId == moduleId).First(); if (module == null) @@ -341,16 +341,12 @@ namespace WCS.BLL.HardWare module.Reset(TcpCleint); //判断此货架是否还有出库模式的模块 - var isExistOuting = Modules.Where(t => t.CurrentMode == Mode.出库模式).Any(); - if (isExistOuting) + #region 判断是否退出入库 是否亮下一次灯逻辑 + var isExsistOut = CurrentOutStoreMatSNs.Any(); + //本次亮灯的物料已全部取出 + if (!isExsistOut) { - //还有继续出的就不管 - } - //这里的处理逻辑应与出库出了最后一盘料相同 - else - { - #region 继续出库进程 - Logs.Write($"GoInOutstoreByModule货架【{ShelfCode}】,丢失删除的料刚好为货架需要出库的最后一盘料", LogsType.Outstore); + Logs.Write($"货架【{ShelfCode}】,本次亮灯的物料已全部取出", LogsType.Outstore); CurrentOutOrder = null; //退出出库模式 @@ -373,9 +369,10 @@ namespace WCS.BLL.HardWare .Any(); if (!isLastShelf) { - Logs.Write($"GoInOutstoreByModule发料单{OrderNumber},最后一个出库货架,触发精准发料机制!查询是否还存在待出库物料", LogsType.Outstore); + Logs.Write($"发料单{OrderNumber},最后一个出库货架,触发精准发料机制!查询是否还存在待出库物料", LogsType.Outstore); var outOrder = DbHelp.db.Queryable() .Where(t => t.OrderNumber == OrderNumber) + .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName) .First(); if (outOrder != null) { @@ -391,7 +388,7 @@ namespace WCS.BLL.HardWare LocalStatic.CurrentOutStoreColor = LocalStatic.CurrentOutStoreColor == (byte)0x02 ? (byte)0x04 : (byte)0x02; //存在待出库 然后之前又没亮灯的情况 => 继续分批次亮灯 - Logs.Write($"GoInOutstoreByModule发料单{OrderNumber},还有物料未出!", LogsType.Outstore); + Logs.Write($"发料单{OrderNumber},还有物料未出!", LogsType.Outstore); var outOrderDetailCount = outOrderMatDetails.GroupBy(t => t.MatCode) .Select(o => new { count = o.Count(), bb = o }) .Where(o => o.count >= 2) @@ -403,13 +400,13 @@ namespace WCS.BLL.HardWare var matCode = outOrderDetailCount.First().bb.Key; outOrderMatDetails = outOrderMatDetails.Where(t => t.MatCode == matCode) .ToList(); - Logs.Write($"GoInOutstoreByModule发料单{OrderNumber},本次亮灯物料{matCode}!", LogsType.Outstore); + Logs.Write($"发料单{OrderNumber},本次亮灯物料{matCode}!", LogsType.Outstore); } //相同物料不存在盘数超过n的情况,剩余物料全部亮灯 else { //剩余物料全出 - Logs.Write($"GoInOutstoreByModule发料单{OrderNumber},剩余所有物料灯全亮(发送命令)!", LogsType.Outstore); + Logs.Write($"发料单{OrderNumber},剩余所有物料灯全亮(发送命令)!", LogsType.Outstore); } var shelfIds = outOrderMatDetails.Select(t => t.StoreInfo.ShelfId) @@ -430,7 +427,6 @@ namespace WCS.BLL.HardWare shelfs.ForEach(shelf => { var matDetails = outOrderMatDetails.Where(t => t.StoreInfo.ShelfCode == shelf.ShelfCode) - .Distinct() .ToList(); shelf.GoInOutstore(matDetails, outOrder, OutOperateUser); @@ -439,17 +435,45 @@ namespace WCS.BLL.HardWare } else { - Logs.Write($"GoInOutstoreByModule发料单{OrderNumber},当前物料已发完!", LogsType.Outstore); + #region 当前单据物料已发完 + Logs.Write($"发料单{OrderNumber},当前物料已发完!", LogsType.Outstore); + //清空发料单缓存 + var outingShelfs = ShelfManager.Shelves.Where(t => t.OrderNumber == OrderNumber).ToList(); + outingShelfs.ForEach(t => + { + t.OrderNumber = string.Empty; + }); + + Task.Run(() => + { + //判断是否是当前订单最后一个出库货架 + var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber) + .Any(); + //WebSocket通知前台以更新左侧出库单列表的状态 + if (!isOuting) + { + #region WebSocket + var messageMode = new WebSocketMessageModel() + { + IsWarning = false, + ClientIp = WebSocketIpAddress, + WarningType = WarningTypeEnum.通知刷新出库单列表, + }; + WarningManager.SendWarning(messageMode); + #endregion + } + }); + #endregion } } else { - Logs.Write($"GoInOutstoreByModule发料单{OrderNumber},OutOrder为null,肯定是有问题", LogsType.Outstore); + Logs.Write($"发料单{OrderNumber},OutOrder为null,肯定是有问题", LogsType.Outstore); } } else { - Logs.Write($"GoInOutstoreByModule发料单{OrderNumber},非最后一个出库货架!", LogsType.Outstore); + Logs.Write($"发料单{OrderNumber},非最后一个出库货架!", LogsType.Outstore); var otherShelfs = ShelfManager.Shelves .Where(t => t.OrderNumber == OrderNumber) .Where(t => t.CurrentMode == Mode.出库模式) @@ -462,7 +486,7 @@ namespace WCS.BLL.HardWare if (shelf is SmartShelf) { var smartShelf = (SmartShelf)shelf; - Logs.Write($"GoInOutstoreByModule货架【{smartShelf.ShelfCode}】待取物料{string.Join(",", smartShelf.CurrentOutStoreMatSNs)}", LogsType.Outstore); + Logs.Write($"货架【{smartShelf.ShelfCode}】待取物料{string.Join(",", smartShelf.CurrentOutStoreMatSNs)}", LogsType.Outstore); } } catch @@ -471,17 +495,50 @@ namespace WCS.BLL.HardWare } #endregion } - }); - #endregion - } - } + else + { + #region 当前单据物料已发完 + Logs.Write($"发料单{OrderNumber},当前物料已发完!", LogsType.Outstore); + //清空发料单缓存 + var outingShelfs = ShelfManager.Shelves.Where(t => t.OrderNumber == OrderNumber).ToList(); + outingShelfs.ForEach(t => + { + t.OrderNumber = string.Empty; + }); + Task.Run(() => + { + //判断是否是当前订单最后一个出库货架 + var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber) + .Any(); + //WebSocket通知前台以更新左侧出库单列表的状态 + if (!isOuting) + { + #region WebSocket + var messageMode = new WebSocketMessageModel() + { + IsWarning = false, + ClientIp = WebSocketIpAddress, + WarningType = WarningTypeEnum.通知刷新出库单列表, + }; + WarningManager.SendWarning(messageMode); + #endregion + } + }); + #endregion + } + }); + } + #endregion + } else { //继续亮灯 Logs.Write($"GoInOutstoreByModule货架【{ShelfCode}】,模组【{module.ModuleCode}】,存在需要继续出的物料,继续亮灯。", LogsType.Outstore); module.GoInOutStoreMode(TcpCleint, module.CurrentOutSns); + Thread.Sleep(20); WarningLight.GreenLight(TcpCleint); + Logs.Write("GoInOutstoreByWebSocket", LogsType.Outstore); } } catch (Exception e) @@ -528,6 +585,7 @@ namespace WCS.BLL.HardWare .Select(mat => mat.MatSN) .ToList(); t.GoInOutStoreMode(TcpCleint, outMatSns); + Thread.Sleep(20);//出库每块板子之间增加15ms的间隔 }); //所有板子亮灯后 亮警示灯 WarningLight.GreenLight(TcpCleint); @@ -637,25 +695,25 @@ namespace WCS.BLL.HardWare SetCurrentMode(Mode.待机模式); Logs.Write($"货架【{ShelfCode}】,结束退出出库", LogsType.Outstore); - Task.Run(() => - { - //判断是否是当前订单最后一个出库货架 - var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber) - .Any(); - //WebSocket通知前台以更新左侧出库单列表的状态 - if (!isOuting) - { - #region WebSocket - var messageMode = new WebSocketMessageModel() - { - IsWarning = false, - ClientIp = WebSocketIpAddress, - WarningType = WarningTypeEnum.通知刷新出库单列表, - }; - WarningManager.SendWarning(messageMode); - #endregion - } - }); + //Task.Run(() => + //{ + // //判断是否是当前订单最后一个出库货架 + // var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber) + // .Any(); + // //WebSocket通知前台以更新左侧出库单列表的状态 + // if (!isOuting) + // { + // #region WebSocket + // var messageMode = new WebSocketMessageModel() + // { + // IsWarning = false, + // ClientIp = WebSocketIpAddress, + // WarningType = WarningTypeEnum.通知刷新出库单列表, + // }; + // WarningManager.SendWarning(messageMode); + // #endregion + // } + //}); } catch (Exception ex) { @@ -773,17 +831,7 @@ namespace WCS.BLL.HardWare //报警灯闪一下 WarningLight.SuccessLightGreenEnd(TcpCleint); - //通知前台刷新 - Task.Run(() => - { - var messageMode = new WebSocketMessageModel() - { - IsWarning = false, - ClientIp = WebSocketIpAddress, - WarningType = WarningTypeEnum.通知刷新盘点 - }; - WarningManager.SendWarning(messageMode); - }); + return true; } @@ -1133,48 +1181,6 @@ namespace WCS.BLL.HardWare ExceptionMessages.Add($"{storeInfo.StoreCode}物料{storeInfo.CurrentMatSn}丢失,库存数据已删除,请重新扫码后入库"); #endregion - //#region 【后台】丢失的数据处理 - //Task.Run(() => - //{ - // try - // { - // DbHelp.db.BeginTran(); - // //库位表字段清空 - // storeInfo.CurrentMatSn = string.Empty; - // DbHelp.db.Updateable(storeInfo).ExecuteCommand(); - - // //库存表记录删除、插入出入记录 - // var inventoryDetail = DbHelp.db.Queryable().Where(t => t.StoreId == storeInfo.Id).First(); - // if (inventoryDetail != null) - // { - // var inOutRecord = new MatInventoryDetailService() - // { - // StoreCode = storeInfo.StoreCode, - // StoreId = storeInfo.Id, - // StoreInfo = storeInfo, - - // MatSN = inventoryDetail.MatSN, - // MatCode = inventoryDetail.MatCode, - // MatName = inventoryDetail.MatName, - // MatBatch = inventoryDetail.MatBatch, - // MatQty = inventoryDetail.MatQty, - // MatSpec = inventoryDetail.MatSpec, - // MatCustomer = inventoryDetail.MatCustomer, - // MatSupplier = inventoryDetail.MatSupplier, - - // Direction = DirectionEnum.丢失, - // }; - // DbHelp.db.Insertable(inOutRecord).ExecuteCommand(); - // DbHelp.db.Deleteable(inventoryDetail).ExecuteCommand(); - // } - // DbHelp.db.CommitTran(); - // } - // catch (Exception e) - // { - // DbHelp.db.RollbackTran(); - // } - //}); - //#endregion #region 不处理、WebSocket通知前台 var exceptionMessage = storeInfo.StoreCode + $"进入入库自检发现物料{storeInfo.CurrentMatSn}丢失,请确认是否删除?"; var warningModel = new WebSocketMessageModel() @@ -1728,11 +1734,11 @@ namespace WCS.BLL.HardWare return; } - #region 校验项通过 处理出库逻辑 //当前库位的SN var matSN = storeInfo.CurrentMatSn; try { + #region 校验项通过 处理出库逻辑 DbHelp.db.BeginTran(); //库存明细表 删除 ; @@ -1759,6 +1765,7 @@ namespace WCS.BLL.HardWare MatSupplier = inventoryDetail.MatSupplier, OrderNumber = orderMatDetails.OrderNumber, + OperateUser = OutOperateUser, Direction = orderMatDetails.IsMXPD == false ? DirectionEnum.出库 : DirectionEnum.盘点下架, }; //库位表 修改 @@ -1793,7 +1800,7 @@ namespace WCS.BLL.HardWare //确认本次出库 module.ComfirmOutstore(TcpCleint, data[TcpCleint.PreFixLength + 3]); - //更新时间 避免被自动退出 + //更新时间 避免超时被自动退出 Task.Run(() => { var shelves = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber).ToList(); @@ -1803,14 +1810,13 @@ namespace WCS.BLL.HardWare } }); - //当前柜子是否还存在未出库的 Logs.Write($"货架【{ShelfCode}】,用户取出物料{matSN}", LogsType.Outstore); CurrentOutStoreMatSNs.RemoveAll(t => t == matSN);//删除本次已出的物料SN Logs.Write($"货架【{ShelfCode}】,当前货架剩余物料{string.Join(",", CurrentOutStoreMatSNs)}", LogsType.Outstore); + #endregion - var isExsistOut = CurrentOutStoreMatSNs.Any(); - + #region 刷新出库明细逻辑 var tempOrder = CurrentOutOrder; var isMXPD = orderMatDetails.IsMXPD == true; //通知前台刷新 @@ -1818,7 +1824,6 @@ namespace WCS.BLL.HardWare { //更新订单状态 UpdateOutOrderStatus(tempOrder); - var messageMode = new WebSocketMessageModel() { IsWarning = false, @@ -1827,7 +1832,10 @@ namespace WCS.BLL.HardWare }; WarningManager.SendWarning(messageMode); }); + #endregion + #region 判断是否退出入库 是否亮下一次灯逻辑 + var isExsistOut = CurrentOutStoreMatSNs.Any(); //本次亮灯的物料已全部取出 if (!isExsistOut) { @@ -1857,6 +1865,7 @@ namespace WCS.BLL.HardWare Logs.Write($"发料单{OrderNumber},最后一个出库货架,触发精准发料机制!查询是否还存在待出库物料", LogsType.Outstore); var outOrder = DbHelp.db.Queryable() .Where(t => t.OrderNumber == OrderNumber) + .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName) .First(); if (outOrder != null) { @@ -1911,7 +1920,6 @@ namespace WCS.BLL.HardWare shelfs.ForEach(shelf => { var matDetails = outOrderMatDetails.Where(t => t.StoreInfo.ShelfCode == shelf.ShelfCode) - .Distinct() .ToList(); shelf.GoInOutstore(matDetails, outOrder, OutOperateUser); @@ -1921,6 +1929,32 @@ namespace WCS.BLL.HardWare else { Logs.Write($"发料单{OrderNumber},当前物料已发完!", LogsType.Outstore); + //清空发料单缓存 + var outingShelfs = ShelfManager.Shelves.Where(t => t.OrderNumber == OrderNumber).ToList(); + outingShelfs.ForEach(t => + { + t.OrderNumber = string.Empty; + }); + + Task.Run(() => + { + //判断是否是当前订单最后一个出库货架 + var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber) + .Any(); + //WebSocket通知前台以更新左侧出库单列表的状态 + if (!isOuting) + { + #region WebSocket + var messageMode = new WebSocketMessageModel() + { + IsWarning = false, + ClientIp = WebSocketIpAddress, + WarningType = WarningTypeEnum.通知刷新出库单列表, + }; + WarningManager.SendWarning(messageMode); + #endregion + } + }); } } else @@ -1952,9 +1986,38 @@ namespace WCS.BLL.HardWare } #endregion } + else + { + //清空发料单缓存 + var outingShelfs = ShelfManager.Shelves.Where(t => t.OrderNumber == OrderNumber).ToList(); + outingShelfs.ForEach(t => + { + t.OrderNumber = string.Empty; + }); + + Task.Run(() => + { + //判断是否是当前订单最后一个出库货架 + var isOuting = ShelfManager.Shelves.Where(t => t.CurrentMode == Mode.出库模式 && t.OrderNumber == OrderNumber) + .Any(); + //WebSocket通知前台以更新左侧出库单列表的状态 + if (!isOuting) + { + #region WebSocket + var messageMode = new WebSocketMessageModel() + { + IsWarning = false, + ClientIp = WebSocketIpAddress, + WarningType = WarningTypeEnum.通知刷新出库单列表, + }; + WarningManager.SendWarning(messageMode); + #endregion + } + }); + } }); } - + #endregion } catch (Exception ex) @@ -1963,7 +2026,6 @@ namespace WCS.BLL.HardWare //报警灯报警 WarningLight.WaringLightAlwaysRed(TcpCleint); } - #endregion } public void UpdateOutOrderStatus(OutOrder order) @@ -2047,7 +2109,7 @@ namespace WCS.BLL.HardWare .First(); if (storeInfo == null) { - //TO DO 库位未找到 + Logs.Write($"[OutstoreExceptionReturnProcess]boardId{boardId};lightNumber{lightNumber}库位未找到!", LogsType.Outstore); return; } //已放物料丢失了 物料多放了 储位恢复正常 @@ -2077,6 +2139,7 @@ namespace WCS.BLL.HardWare //自动消除本地缓存的报警 warnings.ForEach(warning => { + Logs.Write($"ClearWarning,{warning.Guid}", LogsType.Outstore); WarningManager.ClearWarning(warning, SolveTypeEnum.忽略); }); ProcessingExceptions.RemoveAll(t => t.BoardId == boardId); @@ -2090,8 +2153,6 @@ namespace WCS.BLL.HardWare WarningType = WarningTypeEnum.出库中未扫描上架, StoreId = storeInfo.Id, StoreCode = storeInfo.StoreCode, - //ModuleId = module.ModuleId, - //ModuleCode = module.ModuleCode, ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, @@ -2305,7 +2366,6 @@ namespace WCS.BLL.HardWare var storeInfo = storeInfos.Where(t => t.LightNumber == index + 1).First(); if (storeInfo != null) { - #region 不处理、WebSocket通知前台 var exceptionMessage = storeInfo.StoreCode + $"自检发现物料{storeInfo.CurrentMatSn}丢失,请确认是否删除?"; var warningModel = new WebSocketMessageModel() @@ -2323,58 +2383,10 @@ namespace WCS.BLL.HardWare WarningManager.SendWarning(warningModel); #endregion - //#region 【后台】丢失的数据处理 - //Task.Run(() => - //{ - // try - // { - // DbHelp.db.BeginTran(); - // //库位表字段清空 - // storeInfo.CurrentMatSN = string.Empty; - // DbHelp.db.Updateable(storeInfo).ExecuteCommand(); - // //库存表记录删除、插入出入记录 - // var inventoryDetail = DbHelp.db.Queryable().Where(t => t.StoreCode == storeInfo.StoreCode).First(); - // if (inventoryDetail != null) - // { - // var inOutRecord = new InOutRecord() - // { - // StoreCode = storeInfo.StoreCode, - // StoreId = storeInfo.Id, - // StoreInfo = storeInfo, - - // R = storeInfo.R, - // C = storeInfo.C, - // Wei = storeInfo.Wei, - // WarehouseCode = inventoryDetail.WarehouseCode, - - // MatSN = inventoryDetail.MatSN, - // MatCode = inventoryDetail.MatCode, - // MatName = inventoryDetail.MatName, - // MatBatch = inventoryDetail.MatBatch, - // MatQty = inventoryDetail.MatQty, - // MatSpec = inventoryDetail.MatSpec, - - // OrderNumber = inventoryDetail.OrderNumber, - // OrderProdNumber = inventoryDetail.OrderProdNumber, - // OrderMaterialCode = inventoryDetail.OrderMaterialCode, - // OrderMaterialName = inventoryDetail.OrderMaterialName, - // OrderMaterialSpec = inventoryDetail.OrderMaterialSpec, - - // GroupName = LocalFile.Config.GroupName, - - // Direction = DirectionEnum.丢失, - // }; - // DbHelp.db.Insertable(inOutRecord).ExecuteCommand(); - // DbHelp.db.Deleteable(inventoryDetail).ExecuteCommand(); - // } - // DbHelp.db.CommitTran(); - // } - // catch (Exception e) - // { - // DbHelp.db.RollbackTran(); - // } - //}); - //#endregion + IsWarning = true; + Logs.Write($"货架自检【{ShelfCode},库位{storeInfo.StoreCode}发现物料丢失,开始发送红灯】", LogsType.Instore); + WarningLight.WaringLightAlwaysRed(TcpCleint); + Logs.Write($"货架自检【{ShelfCode},库位{storeInfo.StoreCode}发现物料丢失,发送红灯完成】", LogsType.Instore); } //库位未配置、返回数据异常 else @@ -2403,11 +2415,11 @@ namespace WCS.BLL.HardWare }; WarningManager.SendWarning(warningModel); #endregion - //#region 【记录缓存异常信息】 - //var shelfStatus = LocalStatic.ShelfStatuses.Where(t => t.ShelfCode == storeInfo.ShelfCode).First(); - //LocalStatic.CheckErr.Add($"库位{storeInfo.StoreCode}:存在物料未扫描上架,请取出后重新扫描上架!"); - //#endregion - //WaringLightAlwaysRed(shelfStatus.ClientIp, shelfStatus.LightId); + + IsWarning = true; + Logs.Write($"货架自检【{ShelfCode},库位{storeInfo.StoreCode}存在物料未扫描上架,开始发送红灯】", LogsType.Instore); + WarningLight.WaringLightAlwaysRed(TcpCleint); + Logs.Write($"货架自检【{ShelfCode},库位{storeInfo.StoreCode}存在物料未扫描上架,发送红灯完成】", LogsType.Instore); } else { diff --git a/WCS.BLL/Manager/MXBackgroundThread.cs b/WCS.BLL/Manager/MXBackgroundThread.cs index bab8644..e7877e3 100644 --- a/WCS.BLL/Manager/MXBackgroundThread.cs +++ b/WCS.BLL/Manager/MXBackgroundThread.cs @@ -282,8 +282,11 @@ namespace WCS.BLL.Manager if (shelf is SmartShelf) { var smartShelf = (SmartShelf)shelf; - smartShelf?.WarningLight.CloseLight(smartShelf.TcpCleint); - Logs.Write($"【定时任务】:监测警示灯关灯机制,关【{shelf.ShelfCode}】灯发送指令成功!"); + if(smartShelf.IsWarning == false) + { + smartShelf?.WarningLight.CloseLight(smartShelf.TcpCleint); + Logs.Write($"【定时任务】:监测警示灯关灯机制,关【{shelf.ShelfCode}】灯发送指令成功!"); + } } } catch (Exception ex) diff --git a/WCS.BLL/Manager/TCPClientManager.cs b/WCS.BLL/Manager/TCPClientManager.cs index f20200f..b099252 100644 --- a/WCS.BLL/Manager/TCPClientManager.cs +++ b/WCS.BLL/Manager/TCPClientManager.cs @@ -53,23 +53,28 @@ namespace WCS.BLL.Manager } var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray(); - Logs.Write($"【接收】{BitConverter.ToString(data)}", LogsType.Instructions); + + Task.Run(() => + { + Logs.Write($"【接收{clientIpHost}】{BitConverter.ToString(data)}", LogsType.Instructions); + }); + e.ByteBlock.Clear(); var len = data.Length; if (tcpCleint.ShelfTypeName == "信息化货架") { - Logs.Write($"【信息化货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.Instructions); + Logs.Write($"【信息化货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess); Helper.ReturnDataProcess(TcpCleint, data); - Logs.Write($"【信息化货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.Instructions); + Logs.Write($"【信息化货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess); return EasyTask.CompletedTask; } if (tcpCleint.ShelfTypeName == "液晶货架") { - Logs.Write($"【液晶货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.Instructions); + Logs.Write($"【液晶货架开始处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess); //Helper.ReturnDataProcess(TcpCleint, data); - Logs.Write($"【液晶货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.Instructions); + Logs.Write($"【液晶货架完成处理接收数据】{BitConverter.ToString(data)}", LogsType.InstructionsProcess); return EasyTask.CompletedTask; } @@ -85,7 +90,7 @@ namespace WCS.BLL.Manager { continue; } - Logs.Write($"【处理单条指令 开始】{BitConverter.ToString(dataTemp)}", LogsType.Instructions); + Logs.Write($"【处理单条指令 开始】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess); index += (TcpCleint.PreFixLength + TcpCleint.DataLength - 1);//每次循环index会+1 所以这里-1 //获取板子ID var boardId = (dataTemp[TcpCleint.PreFixLength + 0] << 8) + dataTemp[TcpCleint.PreFixLength + 1]; @@ -109,7 +114,7 @@ namespace WCS.BLL.Manager var smartShelf = shelf as SmartShelf; smartShelf?.ProtocolProcess(dataTemp, boardId, lightNumber); } - Logs.Write($"【处理单条指令 结束】{BitConverter.ToString(dataTemp)}", LogsType.Instructions); + Logs.Write($"【处理单条指令 结束】{BitConverter.ToString(dataTemp)}", LogsType.InstructionsProcess); } } return EasyTask.CompletedTask; diff --git a/WCS.BLL/Manager/WarningManager.cs b/WCS.BLL/Manager/WarningManager.cs index e364b98..54fdcd1 100644 --- a/WCS.BLL/Manager/WarningManager.cs +++ b/WCS.BLL/Manager/WarningManager.cs @@ -51,7 +51,7 @@ namespace WCS.BLL.Manager { Warnings.Add(warning); //发送WebSocket记录 - Logs.Write(JsonConvert.SerializeObject(warning),LogsType.WebSocket); + Logs.Write(JsonConvert.SerializeObject(warning), LogsType.WebSocket); WebSoceketManager.TrySendMessage(warning.ClientIp, JsonConvert.SerializeObject(warning)); warning.LastSendTime = DateTime.Now; @@ -95,16 +95,20 @@ namespace WCS.BLL.Manager //货架是否还存在报警信息 shelfIsWarning = Warnings.Where(t => t.ShelfId == warning.ShelfId) + .Where(t => t.IsWarning) .Any(); //对应货架如果不存在报警信息了 指示灯回到对应的状态 + Logs.Write($"shelfIsWarning{shelfIsWarning}", LogsType.WebSocket); if (!shelfIsWarning) { + Logs.Write("货架不存在报警信息", LogsType.WebSocket); var shelf = ShelfManager.Shelves.Where(t => t.ShelfId == warning.ShelfId) .FirstOrDefault(); if (shelf != null) { try { + Logs.Write("smartShelf?.ClearWarning();", LogsType.WebSocket); var smartShelf = shelf as SmartShelf; smartShelf?.ClearWarning(); smartShelf.IsWarning = false; @@ -117,6 +121,7 @@ namespace WCS.BLL.Manager } #region 重新发指令进入对应模式 + Logs.Write($"GoInRightMode", LogsType.WebSocket); GoInRightMode(warning); #endregion @@ -194,7 +199,7 @@ namespace WCS.BLL.Manager #region 如果是出库 删除正在出库缓存的数据 if (warning.WarningType == WarningTypeEnum.出库自检丢失) { - Logs.Write($"【出库自检】发现物料{inventoryDetail.MatSN}丢失,用户点击【处理】,删除数据",LogsType.Outstore); + Logs.Write($"【出库自检】发现物料{inventoryDetail.MatSN}丢失,用户点击【处理】,删除数据", LogsType.Outstore); //清掉需要出库的缓存 var shelf = ShelfManager.Shelves .Where(t => t.ShelfId == warning.ShelfId) @@ -207,10 +212,11 @@ namespace WCS.BLL.Manager //删除货架上缓存的那一条数据 smartShelf.CurrentOutStoreMatSNs.RemoveAll(t => t == inventoryDetail.MatSN); Logs.Write($"【出库自检】发现物料{inventoryDetail.MatSN}丢失,已删除货架缓存,剩余物料为{string.Join(",", smartShelf.CurrentOutStoreMatSNs)}", LogsType.Outstore); - + //删除模组上缓存的那一条数据 var module = smartShelf.Modules.Where(t => t.ModuleId == warning.ModuleId).FirstOrDefault(); - if (module != null) { + if (module != null) + { module.CurrentOutSns.RemoveAll(t => t == inventoryDetail.MatSN); Logs.Write($"【出库自检】发现物料{inventoryDetail.MatSN}丢失,已删除模组缓存,剩余物料为{string.Join(",", module.CurrentOutSns)}", LogsType.Outstore); } @@ -246,6 +252,8 @@ namespace WCS.BLL.Manager var moduleOtherError = WarningManager.Warnings.Where(t => t.ShelfId == warning.ShelfId && t.ModuleId == warning.ModuleId).Any(); if (moduleOtherError) { + var guids = WarningManager.Warnings.Where(t => t.ShelfId == warning.ShelfId && t.ModuleId == warning.ModuleId).Select(t => t.Guid.ToString()).ToList(); + Logs.Write($"模组还存在其他异常 暂时不进入对应模式.{string.Join("''", guids)}", LogsType.WebSocket); return; } @@ -253,6 +261,7 @@ namespace WCS.BLL.Manager .FirstOrDefault(); if (shelf != null) { + Logs.Write($"shelf != null", LogsType.WebSocket); var smartShelf = shelf as SmartShelf; if (smartShelf != null) { @@ -266,8 +275,7 @@ namespace WCS.BLL.Manager smartShelf.WarningLight.BlueLight(smartShelf.TcpCleint); break; case Mode.出库模式: - //module.GoInOutStoreMode(smartShelf.TcpCleint, module.CurrentOutSns); - //smartShelf.WarningLight.GreenLight(smartShelf.TcpCleint); + Logs.Write("smartShelf.GoInOutstoreByWebSocket", LogsType.WebSocket); smartShelf.GoInOutstoreByWebSocket(module.ModuleId); break; case Mode.待机模式: @@ -278,6 +286,14 @@ namespace WCS.BLL.Manager } } } + else + { + Logs.Write($"smartShelf != null", LogsType.WebSocket); + } + } + else + { + Logs.Write($"shelf == null", LogsType.WebSocket); } } catch (Exception e) diff --git a/WCS.BLL/Services/Service/InterfaceRecordService.cs b/WCS.BLL/Services/Service/InterfaceRecordService.cs index 0251674..b336d6a 100644 --- a/WCS.BLL/Services/Service/InterfaceRecordService.cs +++ b/WCS.BLL/Services/Service/InterfaceRecordService.cs @@ -40,7 +40,7 @@ namespace WCS.BLL.Services.Service } var totalCount = await recordsQueryable.CountAsync(); var records = await recordsQueryable - .OrderByDescending(t => t.Id) + //.OrderByDescending(t => t.Id) .Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize) .ToListAsync(); //生成序号 @@ -48,10 +48,6 @@ namespace WCS.BLL.Services.Service { records[i].RowNumber = (request.PageNumber - 1) * request.PageSize + i + 1; } - //Task.WaitAll(new Task[] { recordsTask, totalCountTask }); - - //var records = recordsTask.Result; - //var totalCount = totalCountTask.Result; return new PageQueryResponse() { diff --git a/WCS.BLL/Services/Service/MatInventoryDetailService.cs b/WCS.BLL/Services/Service/MatInventoryDetailService.cs index 31c0c4c..4fd67a4 100644 --- a/WCS.BLL/Services/Service/MatInventoryDetailService.cs +++ b/WCS.BLL/Services/Service/MatInventoryDetailService.cs @@ -41,6 +41,7 @@ namespace WCS.BLL.Services.Service ; var totalCount = await recordsQueryable.CountAsync(); + var totalQty = await recordsQueryable.SumAsync((id, si) => id.MatQty); var records = await recordsQueryable .OrderByDescending((id, si) => id.Id) .Skip((request.PageNumber - 1) * request.PageSize).Take(request.PageSize) @@ -55,7 +56,7 @@ namespace WCS.BLL.Services.Service return new PageQueryResponse() { Code = 200, - Message = $"success", + Message = $"{totalQty}", Data = new PageQueryResponseData() { TotalCount = totalCount, diff --git a/WCS.BLL/Services/Service/OutstoreService.cs b/WCS.BLL/Services/Service/OutstoreService.cs index 476a8ab..8883af8 100644 --- a/WCS.BLL/Services/Service/OutstoreService.cs +++ b/WCS.BLL/Services/Service/OutstoreService.cs @@ -487,7 +487,8 @@ namespace WCS.BLL.Services.Service //获取后台当前正在进行出库的订单 将出库状态反馈给前端 var outingOrderNumbers = ShelfManager.Shelves - .Where(t => t.CurrentMode == HardWare.Mode.出库模式).Select(t => t.OrderNumber) + .Where(t => t.CurrentMode == HardWare.Mode.出库模式) + .Select(t => t.OrderNumber) .ToList(); foreach (var record in records) { diff --git a/WCS.BLL/Services/Service/StockTakingService.cs b/WCS.BLL/Services/Service/StockTakingService.cs index 74e71a9..06f6337 100644 --- a/WCS.BLL/Services/Service/StockTakingService.cs +++ b/WCS.BLL/Services/Service/StockTakingService.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using WCS.BLL.Config; using WCS.BLL.DbModels; using WCS.BLL.Manager; using WCS.BLL.Services.IService; @@ -12,6 +13,7 @@ using WCS.DAL.DbModels; using WCS.Model; using WCS.Model.ApiModel.InOutRecord; using WCS.Model.ApiModel.Stocktaking; +using WCS.Model.WebSocketModel; namespace WCS.BLL.Services.Service { @@ -100,7 +102,8 @@ namespace WCS.BLL.Services.Service { StocktakingOrderNumber = request.StocktakingOrderNumber, StocktakingOrderSource = request.StocktakingOrderSource, - CreateUser = request.UserName + CreateUser = request.UserName, + GroupName = LocalFile.Config.GroupName, }; var stockTakingOrderId = await DbHelp.db.Insertable(stockTakingOrder).ExecuteReturnIdentityAsync(); stockTakingOrder.Id = stockTakingOrderId; @@ -180,6 +183,7 @@ namespace WCS.BLL.Services.Service { StocktakingOrderNumber = request.StocktakingOrderNumber, StocktakingOrderSource = request.StocktakingOrderSource, + GroupName = LocalFile.Config.GroupName, CreateUser = request.UserName }; var stockTakingOrderId = await DbHelp.db.Insertable(stockTakingOrder).ExecuteReturnIdentityAsync(); @@ -242,6 +246,7 @@ namespace WCS.BLL.Services.Service //获取库存数据 生成盘点单据 var inventoryDetails = await DbHelp.db.Queryable() .Where(t => request.List.Contains(t.MatSN)) + .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName) .ToListAsync(); if (inventoryDetails == null || inventoryDetails.Count == 0) { @@ -260,6 +265,7 @@ namespace WCS.BLL.Services.Service { StocktakingOrderNumber = request.StocktakingOrderNumber, StocktakingOrderSource = request.StocktakingOrderSource, + GroupName = LocalFile.Config.GroupName, CreateUser = request.UserName }; var stockTakingOrderId = await DbHelp.db.Insertable(stockTakingOrder).ExecuteReturnIdentityAsync(); @@ -317,7 +323,8 @@ namespace WCS.BLL.Services.Service var recordsQueryable = DbHelp.db.Queryable() .WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderNumber), t => t.StocktakingOrderNumber.Contains(request.StocktakingOrderNumber)) - .WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderSource), t => t.StocktakingOrderSource != null && t.StocktakingOrderSource.Contains(request.StocktakingOrderSource)); + .WhereIF(!string.IsNullOrEmpty(request.StocktakingOrderSource), t => t.StocktakingOrderSource != null && t.StocktakingOrderSource.Contains(request.StocktakingOrderSource)) + .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName); switch (request.StocktakingOrderStatus) { @@ -396,6 +403,7 @@ namespace WCS.BLL.Services.Service var records = await recordsQueryable .Where(t => t.StocktakingOrderStatus != StocktakingOrderStatus.已提交) + .WhereIF(!string.IsNullOrEmpty(LocalFile.Config.GroupName), t => t.GroupName == LocalFile.Config.GroupName) .OrderByDescending(t => t.UpdateTime) .Take(40) .ToListAsync(); @@ -493,6 +501,14 @@ namespace WCS.BLL.Services.Service Message = $"操作失败:不存在Id为{request.StockTakingOrderId}的盘点单!", }; } + if (order.StocktakingOrderStatus == StocktakingOrderStatus.已提交) + { + return new ResponseCommon() + { + Code = 201, + Message = $"操作失败:盘点单据:{request.StockTakingOrderNumber}已提交!", + }; + } } else if (!string.IsNullOrEmpty(request.StockTakingOrderNumber)) { @@ -794,6 +810,19 @@ namespace WCS.BLL.Services.Service #endregion DbHelp.db.CommitTran(); + + //通知前台刷新 + Task.Run(() => + { + var messageMode = new WebSocketMessageModel() + { + IsWarning = false, + ClientIp = shelf.WebSocketIpAddress, + WarningType = WarningTypeEnum.通知刷新盘点 + }; + WarningManager.SendWarning(messageMode); + }); + //更新时间 避免被自动退出 Task.Run(() => { diff --git a/WCS.BLL/Tool/Logs.cs b/WCS.BLL/Tool/Logs.cs index 0973352..6950125 100644 --- a/WCS.BLL/Tool/Logs.cs +++ b/WCS.BLL/Tool/Logs.cs @@ -46,6 +46,10 @@ namespace WCS.BLL /// Instore, WebSocket, + /// + /// 指令发送接收 + /// + InstructionsProcess, } /// diff --git a/WCS.BLL/Tool/TCPClient.cs b/WCS.BLL/Tool/TCPClient.cs index 8d9c66b..21dd0b0 100644 --- a/WCS.BLL/Tool/TCPClient.cs +++ b/WCS.BLL/Tool/TCPClient.cs @@ -252,10 +252,11 @@ namespace WCS.BLL tcpClient.Send(message); Task.Run(() => { - Logs.Write($"【发送】{BitConverter.ToString(message)}", LogsType.Instructions); + var clientIpHost = tcpClient.IP + ":" + tcpClient.Port; + Logs.Write($"【发送{clientIpHost}】{BitConverter.ToString(message)}", LogsType.Instructions); }); //发送自带15ms间隔 - Thread.Sleep(15); + Thread.Sleep(18); } } catch (Exception ex) diff --git a/货架标准上位机/App.xaml.cs b/货架标准上位机/App.xaml.cs index 02490c8..c41b9c6 100644 --- a/货架标准上位机/App.xaml.cs +++ b/货架标准上位机/App.xaml.cs @@ -25,7 +25,7 @@ namespace 货架标准上位机 } else { - MainWindow = new MainWindow1(); + MainWindow = new MainWindow2(); } MainWindow.ShowDialog(); diff --git a/货架标准上位机/Fonts/iconfont.ttf b/货架标准上位机/Fonts/iconfont.ttf index 02b62ec..5878b6a 100644 Binary files a/货架标准上位机/Fonts/iconfont.ttf and b/货架标准上位机/Fonts/iconfont.ttf differ diff --git a/货架标准上位机/Models/JsConfig.cs b/货架标准上位机/Models/JsConfig.cs index ba7c8d9..ad72217 100644 --- a/货架标准上位机/Models/JsConfig.cs +++ b/货架标准上位机/Models/JsConfig.cs @@ -95,6 +95,8 @@ namespace 货架标准上位机 /// 登录历史 /// public List SaveLogin { get; set; } + + public string LastSaveLoginPassword { get; set; } /// /// 登录历史数量 /// diff --git a/货架标准上位机/Resources/主页.png b/货架标准上位机/Resources/主页.png index e5b75de..e68e6e6 100644 Binary files a/货架标准上位机/Resources/主页.png and b/货架标准上位机/Resources/主页.png differ diff --git a/货架标准上位机/Resources/入库.png b/货架标准上位机/Resources/入库.png new file mode 100644 index 0000000..324017d Binary files /dev/null and b/货架标准上位机/Resources/入库.png differ diff --git a/货架标准上位机/Resources/出库.png b/货架标准上位机/Resources/出库.png new file mode 100644 index 0000000..29d3026 Binary files /dev/null and b/货架标准上位机/Resources/出库.png differ diff --git a/货架标准上位机/Resources/数据.png b/货架标准上位机/Resources/数据.png deleted file mode 100644 index 68fc991..0000000 Binary files a/货架标准上位机/Resources/数据.png and /dev/null differ diff --git a/货架标准上位机/Resources/权限.png b/货架标准上位机/Resources/权限.png index 723e7fa..01eeee7 100644 Binary files a/货架标准上位机/Resources/权限.png and b/货架标准上位机/Resources/权限.png differ diff --git a/货架标准上位机/Resources/查询.png b/货架标准上位机/Resources/查询.png new file mode 100644 index 0000000..3c0f5f8 Binary files /dev/null and b/货架标准上位机/Resources/查询.png differ diff --git a/货架标准上位机/Resources/模式.png b/货架标准上位机/Resources/模式.png deleted file mode 100644 index 27b51ce..0000000 Binary files a/货架标准上位机/Resources/模式.png and /dev/null differ diff --git a/货架标准上位机/Resources/物料.png b/货架标准上位机/Resources/物料.png new file mode 100644 index 0000000..27c4b5a Binary files /dev/null and b/货架标准上位机/Resources/物料.png differ diff --git a/货架标准上位机/Resources/盘点.png b/货架标准上位机/Resources/盘点.png new file mode 100644 index 0000000..7a7f845 Binary files /dev/null and b/货架标准上位机/Resources/盘点.png differ diff --git a/货架标准上位机/Resources/设置.png b/货架标准上位机/Resources/设置.png deleted file mode 100644 index 3e87d66..0000000 Binary files a/货架标准上位机/Resources/设置.png and /dev/null differ diff --git a/货架标准上位机/Resources/调试.png b/货架标准上位机/Resources/调试.png new file mode 100644 index 0000000..51d8d4d Binary files /dev/null and b/货架标准上位机/Resources/调试.png differ diff --git a/货架标准上位机/Resources/货架.png b/货架标准上位机/Resources/货架.png new file mode 100644 index 0000000..3cddab5 Binary files /dev/null and b/货架标准上位机/Resources/货架.png differ diff --git a/货架标准上位机/ViewModels/InOutRecordViewModel.cs b/货架标准上位机/ViewModels/InOutRecordViewModel.cs index e39ab3e..3a13a23 100644 --- a/货架标准上位机/ViewModels/InOutRecordViewModel.cs +++ b/货架标准上位机/ViewModels/InOutRecordViewModel.cs @@ -381,7 +381,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/InterfaceRecordViewModel.cs b/货架标准上位机/ViewModels/InterfaceRecordViewModel.cs index afd9379..c5252ce 100644 --- a/货架标准上位机/ViewModels/InterfaceRecordViewModel.cs +++ b/货架标准上位机/ViewModels/InterfaceRecordViewModel.cs @@ -255,7 +255,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs b/货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs index c98af57..5638b66 100644 --- a/货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs +++ b/货架标准上位机/ViewModels/MXViewModel/MXPDViewModel.cs @@ -185,7 +185,7 @@ namespace 货架标准上位机.ViewModel var Result = ApiHelp.GetDataFromHttp(LocalFile.Config.ApiIpHost + "outStore/goInOutstore", body, "POST"); if (Result != null && Result.Code == 200) { - Growl.Warning("已成功开始出库!"); + Growl.Warning("已成功开始盘点!"); RefreshDataGridItemSource(); } else if (Result != null) diff --git a/货架标准上位机/ViewModels/MatBaseInfoViewModel.cs b/货架标准上位机/ViewModels/MatBaseInfoViewModel.cs index 9439e36..abebc98 100644 --- a/货架标准上位机/ViewModels/MatBaseInfoViewModel.cs +++ b/货架标准上位机/ViewModels/MatBaseInfoViewModel.cs @@ -439,7 +439,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/MatInfoViewModel.cs b/货架标准上位机/ViewModels/MatInfoViewModel.cs index 810ebac..5c259ba 100644 --- a/货架标准上位机/ViewModels/MatInfoViewModel.cs +++ b/货架标准上位机/ViewModels/MatInfoViewModel.cs @@ -372,7 +372,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/MatInventoryDetailViewModel.cs b/货架标准上位机/ViewModels/MatInventoryDetailViewModel.cs index f8954cf..9f93da9 100644 --- a/货架标准上位机/ViewModels/MatInventoryDetailViewModel.cs +++ b/货架标准上位机/ViewModels/MatInventoryDetailViewModel.cs @@ -78,6 +78,10 @@ namespace 货架标准上位机.ViewModel set { SetProperty(ref shelfCode, value); } } + private string totalQtyStr; + + public string TotalQtyStr { get => totalQtyStr; set { SetProperty(ref totalQtyStr, value); } } + /// /// 物料编码 @@ -220,6 +224,8 @@ namespace 货架标准上位机.ViewModel MatName = string.Empty; MatSN = string.Empty; StoreCode = string.Empty; + ShelfCode = string.Empty; + MatBatch = string.Empty; } public ICommand BtnSearchCommand { get => new DelegateCommand(BtnSearchReset); } @@ -261,6 +267,11 @@ namespace 货架标准上位机.ViewModel DataGridItemSource = Result.Data.Lists; MaxPage = Result.Data.MaxPage; TotalCount = Result.Data.TotalCount; + TotalQtyStr = "物料总数量" + Result.Message; + } + else + { + TotalQtyStr = string.Empty; } } catch (Exception ex) @@ -331,6 +342,9 @@ namespace 货架标准上位机.ViewModel MatCode = MatCode, StoreCode = StoreCode, + ShelfTypeId = SelectedShelfTypeItem == null ? 0 : SelectedShelfTypeItem.Id, + ShelfCode = ShelfCode, + UserName = LocalStatic.CurrentUser, DeviceType = LocalFile.Config.DeviceType, PageNumber = 1, @@ -429,6 +443,9 @@ namespace 货架标准上位机.ViewModel MatCode = MatCode, StoreCode = StoreCode, + ShelfTypeId = SelectedShelfTypeItem == null ? 0 : SelectedShelfTypeItem.Id, + ShelfCode = ShelfCode, + UserName = LocalStatic.CurrentUser, DeviceType = LocalFile.Config.DeviceType, PageNumber = CurrentPage, @@ -543,7 +560,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/ModuleInfoViewModel.cs b/货架标准上位机/ViewModels/ModuleInfoViewModel.cs index b5fde19..0b91e51 100644 --- a/货架标准上位机/ViewModels/ModuleInfoViewModel.cs +++ b/货架标准上位机/ViewModels/ModuleInfoViewModel.cs @@ -279,7 +279,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/OutInventoryDocumentViewModel.cs b/货架标准上位机/ViewModels/OutInventoryDocumentViewModel.cs index dd9c295..6ae3c98 100644 --- a/货架标准上位机/ViewModels/OutInventoryDocumentViewModel.cs +++ b/货架标准上位机/ViewModels/OutInventoryDocumentViewModel.cs @@ -468,7 +468,11 @@ namespace 货架标准上位机.ViewModels public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/OutInventoryViewModel.cs b/货架标准上位机/ViewModels/OutInventoryViewModel.cs index b3c44fc..e9a2e3f 100644 --- a/货架标准上位机/ViewModels/OutInventoryViewModel.cs +++ b/货架标准上位机/ViewModels/OutInventoryViewModel.cs @@ -277,7 +277,8 @@ namespace 货架标准上位机.ViewModel { if (Result.Data.Count > 0) { - DataGridItemSource = new ObservableCollection(Result.Data); + var list = Result.Data.OrderBy(t => t.IsSended).ToList(); + DataGridItemSource = new ObservableCollection(list); OrderStatus = Result.Message; } else diff --git a/货架标准上位机/ViewModels/ShelfInfoViewModel.cs b/货架标准上位机/ViewModels/ShelfInfoViewModel.cs index 71347d9..167566a 100644 --- a/货架标准上位机/ViewModels/ShelfInfoViewModel.cs +++ b/货架标准上位机/ViewModels/ShelfInfoViewModel.cs @@ -254,7 +254,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/StocktakingDocumentViewModel.cs b/货架标准上位机/ViewModels/StocktakingDocumentViewModel.cs index 3e10719..03f3fc0 100644 --- a/货架标准上位机/ViewModels/StocktakingDocumentViewModel.cs +++ b/货架标准上位机/ViewModels/StocktakingDocumentViewModel.cs @@ -292,6 +292,7 @@ namespace 货架标准上位机.ViewModels { //成功后直接跳转 MainWindow1.viewModel.GoToStockTakingView = true; + MainWindow2.viewModel.SelectedValue = "物料盘点"; Growl.Success("已跳转到物料盘点页面!"); } else if (Result != null) @@ -452,7 +453,11 @@ namespace 货架标准上位机.ViewModels public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/ViewModels/StocktakingViewModel.cs b/货架标准上位机/ViewModels/StocktakingViewModel.cs index cc5bb3d..9d9d470 100644 --- a/货架标准上位机/ViewModels/StocktakingViewModel.cs +++ b/货架标准上位机/ViewModels/StocktakingViewModel.cs @@ -254,6 +254,7 @@ namespace 货架标准上位机.ViewModel if (SelectedOutOrder == null) { //选择的单据为空无法进行查询 + Logs.Write("选择的单据为空无法进行查询!"); return; } #region 调用接口获取盘点单物料明细 @@ -261,21 +262,26 @@ namespace 货架标准上位机.ViewModel { var body = new GetStockTakingOrderMatDetailRequest() { - StockTakingOrderId = selectedOutOrder.Id, - StockTakingOrderNumber = selectedOutOrder.StocktakingOrderNumber, + StockTakingOrderId = SelectedOutOrder.Id, + StockTakingOrderNumber = SelectedOutOrder.StocktakingOrderNumber, UserName = LocalStatic.CurrentUser, DeviceType = LocalFile.Config.DeviceType, }; + Logs.Write("[刷新盘点明细1]!"); var Result = ApiHelp.GetDataFromHttp>>(LocalFile.Config.ApiIpHost + "stockTaking/getStockTakingOrderMatDetail", body, "POST"); if (Result != null && Result.Code == 200) { + Logs.Write("[刷新盘点明细]Result != null && Result.Code == 200!"); if (Result.Data.Count > 0) { - DataGridItemSource = new ObservableCollection(Result.Data); + Logs.Write("[刷新盘点明细2]Result.Data.Count>0"); + var list = Result.Data.OrderBy(t => t.IsStocktaking).ToList(); + DataGridItemSource = new ObservableCollection(list); } else { + Logs.Write("[刷新盘点明细2]Result.Data.Count<=0,该单据未查询到盘点明细"); App.Current.Dispatcher.Invoke(() => { DataGridItemSource?.Clear(); @@ -286,10 +292,12 @@ namespace 货架标准上位机.ViewModel } else if (Result != null) { + Logs.Write("[刷新盘点明细2]Result != null"); Growl.Warning(Result.Message); } else { + Logs.Write("[刷新盘点明细2]调用接口失败"); Growl.Warning("调用接口失败!"); } }); diff --git a/货架标准上位机/ViewModels/StoreInfoViewModel.cs b/货架标准上位机/ViewModels/StoreInfoViewModel.cs index fc5302a..357a28f 100644 --- a/货架标准上位机/ViewModels/StoreInfoViewModel.cs +++ b/货架标准上位机/ViewModels/StoreInfoViewModel.cs @@ -263,7 +263,11 @@ namespace 货架标准上位机.ViewModel public int PageSize { get => pageSize; - set { SetProperty(ref pageSize, value); } + set + { + SetProperty(ref pageSize, value); + BtnSearch(true); + } } diff --git a/货架标准上位机/Views/HomeView.xaml b/货架标准上位机/Views/HomeView.xaml index c12de53..7582b93 100644 --- a/货架标准上位机/Views/HomeView.xaml +++ b/货架标准上位机/Views/HomeView.xaml @@ -10,10 +10,10 @@ xmlns:pi="https://github.com/ping9719/wpfex" d:DesignHeight="737" d:DesignWidth="1192" LoadedVisibleFirst="loadFir" IsVisibleChanged="vis"> - + - - + + @@ -27,12 +27,12 @@ - - + + + --> diff --git a/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml index 1268104..7f66b5a 100644 --- a/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml +++ b/货架标准上位机/Views/MXWindows/MXOutInventoryView.xaml @@ -112,11 +112,9 @@ - - diff --git a/货架标准上位机/Views/MainWindows/MainWindow2.xaml b/货架标准上位机/Views/MainWindows/MainWindow2.xaml index 7a4de24..46587b9 100644 --- a/货架标准上位机/Views/MainWindows/MainWindow2.xaml +++ b/货架标准上位机/Views/MainWindows/MainWindow2.xaml @@ -97,107 +97,260 @@ - - - - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + - + + - + - + + - + - + + - + + + + + + + + + + + + + + + + + - + - + + - + - + + - + - + - + - + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + @@ -206,11 +359,6 @@ - - - - - diff --git a/货架标准上位机/Views/MatInventoryDetailView.xaml b/货架标准上位机/Views/MatInventoryDetailView.xaml index 1ea47be..c11a0f4 100644 --- a/货架标准上位机/Views/MatInventoryDetailView.xaml +++ b/货架标准上位机/Views/MatInventoryDetailView.xaml @@ -58,7 +58,7 @@ ItemsSource="{Binding Items}" Text="{Binding MatCode}" DisplayMemberPath="MatCode"/> - + @@ -126,7 +126,7 @@ - + + + + diff --git a/货架标准上位机/Views/StockTakingView.xaml b/货架标准上位机/Views/StockTakingView.xaml index 914cc5d..7592afe 100644 --- a/货架标准上位机/Views/StockTakingView.xaml +++ b/货架标准上位机/Views/StockTakingView.xaml @@ -126,7 +126,7 @@ - + diff --git a/货架标准上位机/Views/Windows/UserLoginView.xaml.cs b/货架标准上位机/Views/Windows/UserLoginView.xaml.cs index 248a92c..7192f8b 100644 --- a/货架标准上位机/Views/Windows/UserLoginView.xaml.cs +++ b/货架标准上位机/Views/Windows/UserLoginView.xaml.cs @@ -42,6 +42,8 @@ namespace 货架标准上位机 { ComboBoxId.ItemsSource = LocalFile.Config.Sys.SaveLogin; ComboBoxId.SelectedIndex = 0; + + PasswordBoxPass.Password = LocalFile.Config.Sys.LastSaveLoginPassword; } } @@ -74,8 +76,8 @@ namespace 货架标准上位机 PassWord = pass, IsNoLogin = false, }; - if (LocalFile.Config.IsMx) - body.IsNoLogin = true; + //if (LocalFile.Config.IsMx) + // body.IsNoLogin = true; var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "user/userLogin", body, "POST"); if (Result != null && Result.Code != 200) @@ -99,6 +101,7 @@ namespace 货架标准上位机 { LocalFile.Config.Sys.SaveLogin.RemoveAll(t => t == loginName); LocalFile.Config.Sys.SaveLogin.Insert(0, loginName); + LocalFile.Config.Sys.LastSaveLoginPassword = pass; LocalFile.Config.Sys.SaveLogin = LocalFile.Config.Sys.SaveLogin.Take(LocalFile.Config.Sys.SaveLoginCount).ToList(); LocalFile.SaveConfig(); } diff --git a/货架标准上位机/data/jsconfig.json b/货架标准上位机/data/jsconfig.json index 93d951d..8500eee 100644 --- a/货架标准上位机/data/jsconfig.json +++ b/货架标准上位机/data/jsconfig.json @@ -2,9 +2,9 @@ //连接不上加:SslMode=none; "MySql": "server=localhost;Database=db1;Uid=root;Pwd=123456;Convert Zero Datetime=True", //货架服务器的IP和端口号 - "ApiIpHost": "http://192.168.9.21:8888/", + "ApiIpHost": "http://127.0.0.1:8888/", //WebSocket的地址 - "WebSocketUrl": "ws://192.168.9.21:7789/ws", + "WebSocketUrl": "ws://127.0.0.1:7789/ws", //货架分区 "GroupName": [ "A0-2" ], //设备类型 可以配置为每个电脑不一样 diff --git a/货架标准上位机/货架标准上位机 - Backup.csproj b/货架标准上位机/货架标准上位机 - Backup.csproj new file mode 100644 index 0000000..c0bb730 --- /dev/null +++ b/货架标准上位机/货架标准上位机 - Backup.csproj @@ -0,0 +1,141 @@ + + + + WinExe + net472 + enable + true + latest + 重庆盟讯电子科技有限公司 + Copyright © 2024 + 1.0.0 + 1.0.0 + Resources\Logo.ico + 重庆盟讯电子科技有限公司 + 货架标准上位机 + 货架标准上位机 + + + + 1701;1702;8601;8618;8625 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\..\..\..\Windows\assembly\GAC_MSIL\Interop.BarTender\10.1.4.1__109ff779a1b4cbc7\Interop.BarTender.dll + True + + + + + + + + PreserveNewest + + + + PreserveNewest + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Never + + + + + + + + + + + + + + PreserveNewest + + + Code + + + Code + + + Code + + + + + + Designer + + + Designer + + + + diff --git a/货架标准上位机/货架标准上位机.csproj b/货架标准上位机/货架标准上位机.csproj index dad7ff1..aad4143 100644 --- a/货架标准上位机/货架标准上位机.csproj +++ b/货架标准上位机/货架标准上位机.csproj @@ -1,142 +1,150 @@  - - WinExe - net472 - enable - true - latest - 重庆盟讯电子科技有限公司 - Copyright © 2024 - 1.0.0 - 1.0.0 - Resources\Logo.ico - 重庆盟讯电子科技有限公司 - 货架标准上位机 - 货架标准上位机 - + + WinExe + net472 + enable + true + latest + 重庆盟讯电子科技有限公司 + Copyright © 2024 + 1.0.0 + 1.0.0 + Resources\Logo.ico + 重庆盟讯电子科技有限公司 + 货架标准上位机 + 货架标准上位机 + - - 1701;1702;8601;8618;8625 - + + 1701;1702;8601;8618;8625 + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - ..\..\..\..\..\Windows\assembly\GAC_MSIL\Interop.BarTender\10.1.4.1__109ff779a1b4cbc7\Interop.BarTender.dll - True - - - - + + + ..\..\..\..\..\Windows\assembly\GAC_MSIL\Interop.BarTender\10.1.4.1__109ff779a1b4cbc7\Interop.BarTender.dll + True + + + + - - - PreserveNewest - - - - PreserveNewest - - - - - - - - - + + + PreserveNewest + + + + PreserveNewest + + + + + + + + + + + + + - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - Never - - + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Never + + - - - + + + - - - + + + - - - PreserveNewest - - - Code - - - Code - - - Code - - + + + PreserveNewest + + + Code + + + Code + + + Code + + - - - Designer - - - Designer - - + + + Designer + + + Designer + +