diff --git a/WCS.BLL/HardWare/IShelfBase.cs b/WCS.BLL/HardWare/IShelfBase.cs index c346d22..bd3b7e3 100644 --- a/WCS.BLL/HardWare/IShelfBase.cs +++ b/WCS.BLL/HardWare/IShelfBase.cs @@ -57,6 +57,8 @@ namespace WCS.BLL.HardWare /// 货架组别 /// public string GroupName { get; set; } + + public string WebSocketIpAddress { get; set; } /// /// 模组 /// diff --git a/WCS.BLL/HardWare/SingleLightShelf.cs b/WCS.BLL/HardWare/SingleLightShelf.cs index e09ab83..5a68716 100644 --- a/WCS.BLL/HardWare/SingleLightShelf.cs +++ b/WCS.BLL/HardWare/SingleLightShelf.cs @@ -25,6 +25,7 @@ namespace WCS.BLL.HardWare public string ClientIp { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public List ExceptionMessages { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public bool IsWarning { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public string WebSocketIpAddress { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public bool ConfirmStocktakingSingle(int BoardId, int LightNumber) { diff --git a/WCS.BLL/HardWare/SmartShelf.cs b/WCS.BLL/HardWare/SmartShelf.cs index 638efec..03ae84f 100644 --- a/WCS.BLL/HardWare/SmartShelf.cs +++ b/WCS.BLL/HardWare/SmartShelf.cs @@ -104,6 +104,9 @@ namespace WCS.BLL.HardWare public List ModuleIds { get; set; } public string ClientIp { get; set; } + //websocket通知的前端的IP地址 + public string WebSocketIpAddress { get; set; } = "127.0.0.2"; + #region 协议处理 public void GoInInstore(string? IPAddress) { @@ -186,7 +189,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, }; WarningManager.SendWarning(warningModel); @@ -267,13 +270,13 @@ namespace WCS.BLL.HardWare var warningModel = new WebSocketMessageModel() { IsWarning = true, - WarningType = WarningTypeEnum.进入入库未响应, + WarningType = WarningTypeEnum.退出入库未响应, StoreId = 0, StoreCode = "", ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, }; WarningManager.SendWarning(warningModel); } @@ -354,7 +357,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, }; WarningManager.SendWarning(warningModel); } @@ -411,7 +414,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, }; WarningManager.SendWarning(warningModel); } @@ -503,7 +506,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, }; WarningManager.SendWarning(warningModel); } @@ -536,7 +539,7 @@ namespace WCS.BLL.HardWare var messageMode = new WebSocketMessageModel() { IsWarning = false, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, WarningType = WarningTypeEnum.通知刷新盘点 }; WarningManager.SendWarning(messageMode); @@ -590,7 +593,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, }; WarningManager.SendWarning(warningModel); } @@ -797,7 +800,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); #endregion @@ -831,7 +834,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); #endregion @@ -916,7 +919,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = storeInfo.StoreCode + "入库过程中存在物料未扫描上架!", - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); @@ -1051,7 +1054,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, SolvedGuids = warnings.Select(t => t.Guid).ToList(), }; WarningManager.SendWarning(warningModel); @@ -1079,7 +1082,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); @@ -1096,7 +1099,6 @@ namespace WCS.BLL.HardWare { Logs.Write("协议处理5.4"); var exceptionMessage = storeInfo.StoreCode + "物料被取出!"; - //WebSoceketManager.TrySendMessage("127.0.0.1", exceptionMessage); var warningModel = new WebSocketMessageModel() { WarningType = WarningTypeEnum.入库中异常取出, @@ -1107,7 +1109,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); @@ -1213,7 +1215,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); #endregion @@ -1247,7 +1249,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); #endregion @@ -1402,7 +1404,7 @@ namespace WCS.BLL.HardWare var messageMode = new WebSocketMessageModel() { IsWarning = false, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, WarningType = WarningTypeEnum.通知刷新出库 }; WarningManager.SendWarning(messageMode); @@ -1625,7 +1627,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1", + ClientIp = WebSocketIpAddress, SolvedGuids = warnings.Select(t => t.Guid).ToList(), }; WarningManager.SendWarning(warningModel); @@ -1640,7 +1642,6 @@ namespace WCS.BLL.HardWare case 0x01: { var exceptionMessage = storeInfo.StoreCode + "出库过程中存在物料上架!"; - //WebSoceketManager.TrySendMessage("127.0.0.1", exceptionMessage); var warningModel = new WebSocketMessageModel() { WarningType = WarningTypeEnum.出库中未扫描上架, @@ -1651,7 +1652,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress, }; WarningManager.SendWarning(warningModel); @@ -1666,7 +1667,6 @@ namespace WCS.BLL.HardWare case 0x02: { var exceptionMessage = storeInfo.StoreCode + "物料被取出!"; - //WebSoceketManager.TrySendMessage("127.0.0.1", exceptionMessage); var warningModel = new WebSocketMessageModel() { WarningType = WarningTypeEnum.出库中丢失, @@ -1677,7 +1677,7 @@ namespace WCS.BLL.HardWare ShelfCode = ShelfCode, ShelfId = ShelfId, WarningMessage = exceptionMessage, - ClientIp = "127.0.0.1" + ClientIp = WebSocketIpAddress }; WarningManager.SendWarning(warningModel); diff --git a/WCS.BLL/Manager/DbInit.cs b/WCS.BLL/Manager/DbInit.cs index a790d46..981e4f2 100644 --- a/WCS.BLL/Manager/DbInit.cs +++ b/WCS.BLL/Manager/DbInit.cs @@ -14,6 +14,9 @@ namespace WCS.BLL.Manager { public static void InitDb() { + Logs.Write("【初始化数据库】开始", LogsType.StartBoot); + DbHelp.db.DbMaintenance.CreateDatabase(); + DbHelp.db.CodeFirst.InitTables(typeof(ModuleInfo), typeof(ShelfInfo), typeof(StoreInfo) , typeof(InventoryDetail), typeof(OutOrder), typeof(OutOrderDetail), typeof(OutOrderMatDetail) , typeof(ShelfTypeInfo), typeof(MatBaseInfo), typeof(MatInfo) @@ -43,6 +46,8 @@ namespace WCS.BLL.Manager DbHelp.db.Insertable(outDocumentSerialNumber).ExecuteCommand(); DbHelp.db.Insertable(stockTakingDocumentSerialNumber).ExecuteCommand(); } + + Logs.Write("【初始化数据库】结束", LogsType.StartBoot); } } } diff --git a/WCS.BLL/Manager/ShelfManager.cs b/WCS.BLL/Manager/ShelfManager.cs index 1126322..20a1c35 100644 --- a/WCS.BLL/Manager/ShelfManager.cs +++ b/WCS.BLL/Manager/ShelfManager.cs @@ -20,11 +20,15 @@ namespace WCS.BLL.Manager public static void InitShelves() { + Logs.Write("【InitShelves】开始", LogsType.StartBoot); + var shelvesInDb = DbHelp.db.Queryable().ToList(); foreach (var shelfInDb in shelvesInDb) { Shelves.Add(InitShelf(shelfInDb)); } + + Logs.Write("【InitShelves】结束", LogsType.StartBoot); } public static IShelfBase InitShelf(ShelfInfo shelfInDb) diff --git a/WCS.BLL/Manager/TCPClientManager.cs b/WCS.BLL/Manager/TCPClientManager.cs index 1c6b76b..bb1a209 100644 --- a/WCS.BLL/Manager/TCPClientManager.cs +++ b/WCS.BLL/Manager/TCPClientManager.cs @@ -21,107 +21,97 @@ namespace WCS.BLL.Manager public static List TCPClients = new List(); public static void InitTcpClient() { + Logs.Write("【InitTcpClient】开始", LogsType.StartBoot); + var ips = DbHelp.db.Queryable() - //.Where(t => t.ShelfCode.Contains("C")) .Select(t => t.ClientIp) .Distinct() .ToList(); foreach (var ip in ips) { - var tcpCleint = new TCPClient(ip, ""); - //配置断线重连 - tcpCleint.tcpClient.Received += (client, e) => + Task.Run(() => { - var clientIpHost = client.IP + ":" + client.Port; - var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost); - if (TcpCleint == null) + var tcpCleint = new TCPClient(ip, ""); + //配置断线重连 + tcpCleint.tcpClient.Received += (client, e) => { - //TO DO - return EasyTask.CompletedTask; - } - - var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray(); - e.ByteBlock.Clear(); - var len = data.Length; - for (int index = 0; index < data.Length - TcpCleint.PreFixLength; index++) - { - //协议拆包 通过前缀校验是否为完整数据包 - var prefixInData = data.Skip(index).Take(TcpCleint.PreFixLength); - var isEqual = prefixInData.SequenceEqual(TcpCleint.Prefix); - if (isEqual) + var clientIpHost = client.IP + ":" + client.Port; + var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost); + if (TcpCleint == null) { - Logs.Write("协议处理1!"); - var dataTemp = data.Skip(index).Take(TcpCleint.PreFixLength + TcpCleint.DataLength).ToArray(); - if (dataTemp.Length < TcpCleint.PreFixLength + TcpCleint.DataLength)//拆包后不满足一条指令的长度 - { - continue; - } - index += (TcpCleint.PreFixLength + TcpCleint.DataLength - 1);//每次循环index会+1 所以这里-1 - //获取板子ID - var boardId = (dataTemp[TcpCleint.PreFixLength + 0] << 8) + dataTemp[TcpCleint.PreFixLength + 1]; - var lightNumber = Convert.ToInt32(dataTemp[TcpCleint.PreFixLength + 3]); - - Logs.Write("协议处理2!"); - //报警灯 - if (dataTemp[TcpCleint.PreFixLength + 2] == 0x20) - { - var shelf = ShelfManager.Shelves.Where(t => t.ClientIp == clientIpHost) - .Where(t => t.LightId == boardId) - .FirstOrDefault(); - var smartShelf = shelf as SmartShelf; - smartShelf?.ProtocolProcess(dataTemp, boardId, lightNumber); - } - //!= 0x20 货架类型协议返回 - else - { - Logs.Write("协议处理3!"); - var shelf = ShelfManager.Shelves - .Where(t => t.ClientIp == clientIpHost) - .Where(t => t.ModuleIds.Contains(boardId)) - .FirstOrDefault(); - var smartShelf = shelf as SmartShelf; - smartShelf?.ProtocolProcess(dataTemp, boardId, lightNumber); - - } - - //协议处理 判断功能位 - //switch (dataTemp[TcpCleint.PreFixLength + 2]) - //{ - // case 0x20://进入入库模式信号 - // //GoInInstoreProcess(dataTemp, boardId, lightNumber); - // break; - // case 0x03://正常入库信号 - // //InStoreReturnProcess(dataTemp); - // break; - // default: - // ; - // break; - //} + return EasyTask.CompletedTask; } - } - Logs.Write("协议处理完毕!"); - return EasyTask.CompletedTask; - }; - //配置首次连接后复位操作 - tcpCleint.tcpClient.Connected += (client, e) => - { - var clientIpHost = client.IP + ":" + client.Port; - var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost); - if (TcpCleint == null) - { - return EasyTask.CompletedTask; - } - //首次连接 - if (TcpCleint.IsFirstConnected == false) - { - InitStatus(TcpCleint); - TcpCleint.IsFirstConnected = true; - } - return EasyTask.CompletedTask; - }; - TCPClients.Add(tcpCleint); - tcpCleint.Connect(); + var data = e.ByteBlock.Buffer.Take((int)e.ByteBlock.Length).ToArray(); + e.ByteBlock.Clear(); + var len = data.Length; + for (int index = 0; index < data.Length - TcpCleint.PreFixLength; index++) + { + //协议拆包 通过前缀校验是否为完整数据包 + var prefixInData = data.Skip(index).Take(TcpCleint.PreFixLength); + var isEqual = prefixInData.SequenceEqual(TcpCleint.Prefix); + if (isEqual) + { + Logs.Write("协议处理1!"); + var dataTemp = data.Skip(index).Take(TcpCleint.PreFixLength + TcpCleint.DataLength).ToArray(); + if (dataTemp.Length < TcpCleint.PreFixLength + TcpCleint.DataLength)//拆包后不满足一条指令的长度 + { + continue; + } + index += (TcpCleint.PreFixLength + TcpCleint.DataLength - 1);//每次循环index会+1 所以这里-1 + //获取板子ID + var boardId = (dataTemp[TcpCleint.PreFixLength + 0] << 8) + dataTemp[TcpCleint.PreFixLength + 1]; + var lightNumber = Convert.ToInt32(dataTemp[TcpCleint.PreFixLength + 3]); + + Logs.Write("协议处理2!"); + //报警灯 + if (dataTemp[TcpCleint.PreFixLength + 2] == 0x20) + { + var shelf = ShelfManager.Shelves.Where(t => t.ClientIp == clientIpHost) + .Where(t => t.LightId == boardId) + .FirstOrDefault(); + var smartShelf = shelf as SmartShelf; + smartShelf?.ProtocolProcess(dataTemp, boardId, lightNumber); + } + //!= 0x20 货架类型协议返回 + else + { + Logs.Write("协议处理3!"); + var shelf = ShelfManager.Shelves + .Where(t => t.ClientIp == clientIpHost) + .Where(t => t.ModuleIds.Contains(boardId)) + .FirstOrDefault(); + var smartShelf = shelf as SmartShelf; + smartShelf?.ProtocolProcess(dataTemp, boardId, lightNumber); + + } + } + } + Logs.Write("协议处理完毕!"); + return EasyTask.CompletedTask; + }; + //配置首次连接后复位操作 + tcpCleint.tcpClient.Connected += (client, e) => + { + var clientIpHost = client.IP + ":" + client.Port; + var TcpCleint = TCPClientManager.GetTCPClientByIPHost(clientIpHost); + if (TcpCleint == null) + { + return EasyTask.CompletedTask; + } + //首次连接 + if (TcpCleint.IsFirstConnected == false) + { + Logs.Write($"【InitTcpClient】{clientIpHost}完成首次连接", LogsType.StartBoot); + InitStatus(TcpCleint); + TcpCleint.IsFirstConnected = true; + } + return EasyTask.CompletedTask; + }; + + TCPClients.Add(tcpCleint); + tcpCleint.Connect(); + }); } //启动线程监听所有TCP是否已经完成首次连接 @@ -145,6 +135,7 @@ namespace WCS.BLL.Manager } } }); + Logs.Write("【InitTcpClient】完成后台继续连接", LogsType.StartBoot); } //后台启动时给所有板子、警示灯发送复位操作 保持状态一致 diff --git a/WCS.BLL/Manager/WebSoceketManager.cs b/WCS.BLL/Manager/WebSoceketManager.cs index 2256bd8..531dbb4 100644 --- a/WCS.BLL/Manager/WebSoceketManager.cs +++ b/WCS.BLL/Manager/WebSoceketManager.cs @@ -16,6 +16,7 @@ namespace WCS.BLL.Manager public static object flag = new object(); public static void InitWebSocket() { + Logs.Write("【启动WebSocket】开始", LogsType.StartBoot); service = new HttpService(); service.Setup(new TouchSocketConfig()//加载配置 .SetListenIPHosts(7789) @@ -32,9 +33,10 @@ namespace WCS.BLL.Manager })); service.Start(); - service.Logger.Info("服务器已启动"); + Logs.Write("【启动WebSocket】结束", LogsType.StartBoot); } - //尝试发送报警信息给前端 + + //发送报警信息给前端 public static void TrySendMessage(string IpAddress, string Message) { try diff --git a/WCS.BLL/Services/Service/UserService.cs b/WCS.BLL/Services/Service/UserService.cs index 8fa5916..8f705c8 100644 --- a/WCS.BLL/Services/Service/UserService.cs +++ b/WCS.BLL/Services/Service/UserService.cs @@ -5,6 +5,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using TouchSocket.Core; +using WCS.BLL.Manager; using WCS.BLL.Services.IService; using WCS.DAL; using WCS.DAL.Db.AuthDb; @@ -440,13 +441,23 @@ namespace WCS.BLL.Services.Service //返回字串不返回密码 user.Password = "***"; - var response = new ResponseCommon() { Code = 200, Message = "success", Data = user }; + //登录成功 + if (request.DeviceType == "WCS前端" && request.GroupNames != null) + { + var shelves = ShelfManager.Shelves.Where(t => request.GroupNames.Contains(t.GroupName)) + .ToList(); + foreach (var shelf in shelves) + { + shelf.WebSocketIpAddress = request.WebSocketIpAddress; + } + } + return response; } catch (Exception ex) diff --git a/WCS.BLL/Tool/Logs.cs b/WCS.BLL/Tool/Logs.cs index ec604ac..c450c40 100644 --- a/WCS.BLL/Tool/Logs.cs +++ b/WCS.BLL/Tool/Logs.cs @@ -22,17 +22,10 @@ namespace WCS.BLL /// Info, /// - /// 警告 + /// 启动信息 /// - Warning, - /// - /// 错误 - /// - Err, - /// - /// 数据库错误 - /// - DbErr, + StartBoot, + Api } @@ -115,16 +108,6 @@ namespace WCS.BLL Write($"{contentTitle} {JsonConvert.SerializeObject(content)}", type); } - /// - /// 写入日志 - /// - /// 错误 - /// 是否写入成功 - public static void Write(Exception ex, LogsType type = LogsType.Err) - { - Write(ex.ToString(), type); - } - /// /// 清除日志 /// diff --git a/WCS.BLL/Tool/TCPClient.cs b/WCS.BLL/Tool/TCPClient.cs index ee74e07..c5dd9aa 100644 --- a/WCS.BLL/Tool/TCPClient.cs +++ b/WCS.BLL/Tool/TCPClient.cs @@ -94,7 +94,7 @@ namespace WCS.BLL continue; } //获取返回指令的板子ID - var boardId = (data[PreFixLength + 0] << 8) + data[PreFixLength + 1]; + var boardId = (dataTemp[PreFixLength + 0] << 8) + dataTemp[PreFixLength + 1]; //查询当前板子是否有待验证的指令 var message = new MessageDto(); MessageList.TryGetValue(boardId, out message); @@ -103,7 +103,7 @@ namespace WCS.BLL { MessageList.TryRemove(boardId, out message); } - index += (PreFixLength + DataLength - 1);//每次循环index会+1 所以这里-1 + index += (PreFixLength + DataLength - 2);//每次循环index会+1 所以这里-1 } } Logs.Write($"校验发送接收处理完毕" + BitConverter.ToString(data)); @@ -131,24 +131,21 @@ namespace WCS.BLL try { //TODO如果指令已发两次 则取消重发 - Console.WriteLine(Thread.CurrentThread.ManagedThreadId); await Task.Delay(100); if (MessageList.Count > 0) { - var failedMessage = MessageList.Where(t => t.Value.SendTimes >= 2).ToList(); + var failedMessage = MessageList.Where(t => t.Value.LastSendTime < DateTime.Now.AddSeconds(-1)) + .ToList(); foreach (var message in failedMessage) { - Logs.Write(BitConverter.ToString(message.Value.Message) + - "指令未响应"); + Logs.Write(BitConverter.ToString(message.Value.Message) + "指令超时1s未响应"); } - MessageList.RemoveWhen(t => t.Value.SendTimes >= 3); - - Console.WriteLine(Thread.CurrentThread.ManagedThreadId); + MessageList.RemoveWhen(t => t.Value.SendTimes >= 2); foreach (var item in MessageList) { if (item.Value.LastSendTime < DateTime.Now.AddSeconds(-1)) { - tcpClient.Send(item.Value.Message); + Send(item.Value.Message); item.Value.SendTimes++; item.Value.LastSendTime = DateTime.Now; await Task.Delay(10); @@ -173,17 +170,25 @@ namespace WCS.BLL } - public void Send(byte[] message) + public void Send(byte[] message, bool IsReSend = false) { try { var boardId = (message[3] << 8) + message[4]; + if (boardId != 2047 && IsReSend == false) + { + MessageList.TryAdd(boardId, new MessageDto() + { + ID = boardId, + Message = message, + }); + } + lock (sendLockObject) { tcpClient.Send(message); - //TODO MessageList.AddOrUpdate(new Mes) - //发送自带10ms间隔 - Thread.Sleep(10); + //发送自带8ms间隔 + Thread.Sleep(8); } } catch (Exception ex) @@ -226,18 +231,14 @@ namespace WCS.BLL public class MessageDto { public int ID { get; set; } - /// /// 最后一次发送时间 /// public DateTime LastSendTime { get; set; } = DateTime.Now; - /// /// 发送内容 /// public byte[] Message { get; set; } - - public bool IsWating { get; set; } /// /// 发送次数 /// diff --git a/WCS.Model/ApiModel/User/UserLoginRequest.cs b/WCS.Model/ApiModel/User/UserLoginRequest.cs index f1b9c28..a3ee97f 100644 --- a/WCS.Model/ApiModel/User/UserLoginRequest.cs +++ b/WCS.Model/ApiModel/User/UserLoginRequest.cs @@ -14,5 +14,9 @@ namespace WCS.Model.ApiModel.User /// 是否配置为不登陆(如果不登陆 直接获取admin 且不验证密码了) /// public bool IsNoLogin { get; set; } = false; + + public string WebSocketIpAddress { get; set; } = string.Empty; + + public List GroupNames { get; set; } } } diff --git a/WCS.WebApi/Controllers/UserController.cs b/WCS.WebApi/Controllers/UserController.cs index bc70c55..2cc712b 100644 --- a/WCS.WebApi/Controllers/UserController.cs +++ b/WCS.WebApi/Controllers/UserController.cs @@ -52,6 +52,8 @@ namespace WCS.WebApi.Controllers [HttpPost(Name = "userLogin")] public async Task userLogin(UserLoginRequest request) { + //获取调用设备的Ip地址 + request.WebSocketIpAddress = HttpContext?.Connection?.RemoteIpAddress?.ToString(); return await _userService.UserLogin(request); } } diff --git a/WCS.WebApi/Program.cs b/WCS.WebApi/Program.cs index fefaf41..a9af159 100644 --- a/WCS.WebApi/Program.cs +++ b/WCS.WebApi/Program.cs @@ -20,19 +20,21 @@ namespace WebApi { public static void Main(string[] args) { - + //ʼwebsocket WebSoceketManager.InitWebSocket(); + //ʼݿ DbInit.InitDb(); + //ʼļ LocalFile.SaveConfig(); + //ʼTCP TCPClientManager.InitTcpClient(); + //ʼ ShelfManager.InitShelves(); - //λƺͰ - //TCPClientManager.InitStatus(); WarningManager.StartWarningMessageThread(); @@ -71,7 +73,7 @@ namespace WebApi app.UseAuthorization(); app.MapControllers(); - app.Run("http://+:8888"); + app.Run("http://0.0.0.0:8888");//0.0.0.0ʾipv4 } } } diff --git a/货架标准上位机/ViewModels/InInventoryViewModel.cs b/货架标准上位机/ViewModels/InInventoryViewModel.cs index 09ac937..c643e4c 100644 --- a/货架标准上位机/ViewModels/InInventoryViewModel.cs +++ b/货架标准上位机/ViewModels/InInventoryViewModel.cs @@ -28,6 +28,7 @@ using System.Collections.ObjectModel; using WCS.BLL.DbModels; using WCS.Model.ApiModel.MatBaseInfo; using System.Security.Cryptography; +using Ping9719.WpfEx; namespace 货架标准上位机.ViewModel { @@ -259,6 +260,33 @@ namespace 货架标准上位机.ViewModel if (Result != null && Result.Code == 200) { scanner.MatSn = Result.Data.MatSN; + #region 调用接口获取入库状态 + Task.Run(() => + { + try + { + var body = new QueryByMatSnRequest() + { + MatSn = scanner.MatSn, + ShelfCode = scanner.ShelfCode, + IpAddress = scanner.COM, + DeviceType = LocalFile.Config.DeviceType, + UserName = LocalStatic.CurrentUser, + }; + var Result = ApiHelp.GetDataFromHttp>(LocalFile.Config.ApiIpHost + "instore/queryInstoreStatus", body, "POST"); + if (Result != null && !string.IsNullOrEmpty(Result.Message)) + { + TextBoxLog.AddLog(Result.Message, "InstoreLog", DateTime.Now); + scanner.MatSn = string.Empty; + scanner.ScannerDisplayControl.RefreshValues(scanner.ShelfCode, scanner.MatSn); + } + } + catch (Exception ex) + { + Growl.Warning(ex.Message); + } + }); + #endregion } else if (Result != null && !string.IsNullOrEmpty(Result.Message)) { diff --git a/货架标准上位机/Views/MainWindows/MainWindow1.xaml b/货架标准上位机/Views/MainWindows/MainWindow1.xaml index 8081593..ae08325 100644 --- a/货架标准上位机/Views/MainWindows/MainWindow1.xaml +++ b/货架标准上位机/Views/MainWindows/MainWindow1.xaml @@ -291,10 +291,10 @@ - + diff --git a/货架标准上位机/Views/Windows/UserLoginView.xaml.cs b/货架标准上位机/Views/Windows/UserLoginView.xaml.cs index ee64eea..06cf0ba 100644 --- a/货架标准上位机/Views/Windows/UserLoginView.xaml.cs +++ b/货架标准上位机/Views/Windows/UserLoginView.xaml.cs @@ -69,6 +69,7 @@ namespace 货架标准上位机 { UserName = loginName, DeviceType = LocalFile.Config.DeviceType, + GroupNames = LocalFile.Config.GroupName, PassWord = pass, IsNoLogin = false, }; diff --git a/货架标准上位机/data/jsconfig.json b/货架标准上位机/data/jsconfig.json index 87c04ae..66c8dc1 100644 --- a/货架标准上位机/data/jsconfig.json +++ b/货架标准上位机/data/jsconfig.json @@ -4,13 +4,13 @@ //货架服务器的IP和端口号 "ApiIpHost": "http://localhost:8888/", //货架分区 - "GroupName": [ "A", "B", "C" ], + "GroupName": [ "13寸智能货架", "7寸智能货架"], //设备类型 可以配置为每个电脑不一样 - "DeviceType": "WCS前端-开发电脑", + "DeviceType": "WCS前端", //货架类型的是否开机自检 "IsBootSelfTest": false, //扫码枪COM口列表 - "ScannerComList": [ "COM1", "COM2" ], + "ScannerComList": [], //串口扫码枪延时 "ScannerTimeOut": 2000, //系统配置