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,
//系统配置