1.前后端增加复位功能
2.tcpclient心跳设置 3.优化后端启动速度 4.增加后端出库日志
This commit is contained in:
@ -302,6 +302,7 @@ namespace WCS.BLL.HardWare
|
||||
CurrentOutStoreMatSNs.Clear();
|
||||
////添加属于当前货架的物料
|
||||
CurrentOutStoreMatSNs.AddRange(MatDetails.Select(t => t.MatSN).ToList());
|
||||
Logs.Write($"货架【{ShelfCode}】本次发料物料为{string.Join(",", CurrentOutStoreMatSNs)}!", LogsType.Outstore);
|
||||
////记录当前出库的发料单
|
||||
CurrentOutOrder = outOrder;
|
||||
|
||||
@ -365,63 +366,71 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logs.Write($"货架【{ShelfCode}】进入出库模式发生异常!", LogsType.Outstore);
|
||||
GoOutOutstore();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
public void GoOutOutstore()
|
||||
{
|
||||
//找到在出库中的模组
|
||||
var outingModules = Modules.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.ToList();
|
||||
foreach (var module in outingModules)
|
||||
try
|
||||
{
|
||||
module.GoOutOutStoreMode(TcpCleint);
|
||||
}
|
||||
//Task.Run(() =>
|
||||
//{
|
||||
//通信校验
|
||||
var timeOut = 3000;
|
||||
var timeSpan = TimeSpan.FromMilliseconds(0);
|
||||
var beginTime = DateTime.Now;
|
||||
while (timeSpan <= TimeSpan.FromMilliseconds(timeOut))
|
||||
{
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
|
||||
//所有板子成功退出出库模式 表示退出出库模式成功,跳出循环
|
||||
var isExistsOutstore = outingModules.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsOutstore)
|
||||
Logs.Write($"货架【{ShelfCode}】,开始退出出库", LogsType.Outstore);
|
||||
//找到在出库中的模组
|
||||
var outingModules = Modules.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.ToList();
|
||||
foreach (var module in outingModules)
|
||||
{
|
||||
break;
|
||||
module.GoOutOutStoreMode(TcpCleint);
|
||||
}
|
||||
//循环延时处理
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
var list = outingModules.Where(t => t.IsEnable && t.CurrentMode == Mode.出库模式).ToList();
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var messages = list.Select(t => $"模组{t.ModuleCode}未退出出库模式!").ToList();
|
||||
messages.Add("请及时联系技术人员处理!");
|
||||
var exceptionMessage = string.Join("\r\n", messages);
|
||||
var warningModel = new WebSocketMessageModel()
|
||||
//通信校验
|
||||
var timeOut = 3000;
|
||||
var timeSpan = TimeSpan.FromMilliseconds(0);
|
||||
var beginTime = DateTime.Now;
|
||||
while (timeSpan <= TimeSpan.FromMilliseconds(timeOut))
|
||||
{
|
||||
IsWarning = true,
|
||||
WarningType = WarningTypeEnum.退出入库未响应,
|
||||
StoreId = 0,
|
||||
StoreCode = "",
|
||||
ShelfCode = ShelfCode,
|
||||
ShelfId = ShelfId,
|
||||
WarningMessage = exceptionMessage,
|
||||
ClientIp = WebSocketIpAddress,
|
||||
};
|
||||
WarningManager.SendWarning(warningModel);
|
||||
timeSpan = DateTime.Now - beginTime;
|
||||
|
||||
//所有板子成功退出出库模式 表示退出出库模式成功,跳出循环
|
||||
var isExistsOutstore = outingModules.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.Where(t => t.IsEnable)
|
||||
.Any();
|
||||
if (!isExistsOutstore)
|
||||
{
|
||||
break;
|
||||
}
|
||||
//循环延时处理
|
||||
Thread.Sleep(50);
|
||||
}
|
||||
var list = outingModules.Where(t => t.IsEnable && t.CurrentMode == Mode.出库模式).ToList();
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var messages = list.Select(t => $"模组{t.ModuleCode}未退出出库模式!").ToList();
|
||||
messages.Add("请及时联系技术人员处理!");
|
||||
var exceptionMessage = string.Join("\r\n", messages);
|
||||
var warningModel = new WebSocketMessageModel()
|
||||
{
|
||||
IsWarning = true,
|
||||
WarningType = WarningTypeEnum.退出出库未响应,
|
||||
StoreId = 0,
|
||||
StoreCode = "",
|
||||
ShelfCode = ShelfCode,
|
||||
ShelfId = ShelfId,
|
||||
WarningMessage = exceptionMessage,
|
||||
ClientIp = WebSocketIpAddress,
|
||||
};
|
||||
WarningManager.SendWarning(warningModel);
|
||||
}
|
||||
|
||||
CurrentOutStoreMatSNs.Clear();
|
||||
WarningLight.CloseLight(TcpCleint);
|
||||
this.CurrentMode = Mode.待机模式;
|
||||
Logs.Write($"货架【{ShelfCode}】,结束退出出库", LogsType.Outstore);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"货架【{ShelfCode}】,退出出库时发生异常{ex.Message}", LogsType.Outstore);
|
||||
}
|
||||
//});
|
||||
CurrentOutStoreMatSNs.Clear();
|
||||
WarningLight.CloseLight(TcpCleint);
|
||||
this.CurrentMode = Mode.待机模式;
|
||||
}
|
||||
|
||||
public void GoInStocktaking(List<StockTakingOrderMatDetail> MatDetails, StockTakingOrder stockTakingOrder)
|
||||
@ -603,9 +612,18 @@ namespace WCS.BLL.HardWare
|
||||
this.CurrentMode = Mode.待机模式;
|
||||
}
|
||||
|
||||
void IShelfBase.Reset()
|
||||
public void Reset()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var modules = Modules.Where(t => t.IsEnable).ToList();
|
||||
if (modules != null && modules.Count > 0)
|
||||
{
|
||||
modules.ForEach(t =>
|
||||
{
|
||||
t.Reset(TcpCleint);
|
||||
});
|
||||
}
|
||||
WarningLight.CloseLight(TcpCleint);
|
||||
this.CurrentMode = Mode.待机模式;
|
||||
}
|
||||
|
||||
void IShelfBase.SetCurrentMode()
|
||||
@ -630,7 +648,6 @@ namespace WCS.BLL.HardWare
|
||||
#region 协议返回处理
|
||||
public void ProtocolProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
Logs.Write("协议处理4");
|
||||
//协议处理 判断功能位
|
||||
switch (data[TcpCleint.PreFixLength + 2])
|
||||
{
|
||||
@ -672,7 +689,6 @@ namespace WCS.BLL.HardWare
|
||||
break;
|
||||
|
||||
}
|
||||
Logs.Write("协议处理5");
|
||||
}
|
||||
/// <summary>
|
||||
/// 进入入库模式返回信号处理
|
||||
@ -1034,19 +1050,16 @@ namespace WCS.BLL.HardWare
|
||||
/// <param name="lightNumber"></param>
|
||||
public void InStoreExceptionReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
Logs.Write("协议处理5.1");
|
||||
lightNumber = (int)data[TcpCleint.PreFixLength + 4];
|
||||
var storeInfo = DbHelp.db.Queryable<StoreInfo>()
|
||||
.Where(t => t.ShelfId == ShelfId)
|
||||
.Where(t => t.BoardId == boardId && t.LightNumber == lightNumber)
|
||||
.First();
|
||||
Logs.Write("协议处理5.2");
|
||||
if (storeInfo == null)
|
||||
{
|
||||
//TO DO 库位未找到
|
||||
return;
|
||||
}
|
||||
Logs.Write("协议处理5.3");
|
||||
//已放物料丢失了 物料多放了 储位恢复正常
|
||||
switch (data[TcpCleint.PreFixLength + 3])
|
||||
{
|
||||
@ -1077,12 +1090,10 @@ namespace WCS.BLL.HardWare
|
||||
});
|
||||
|
||||
ProcessingExceptions.RemoveAll(t => t.BoardId == boardId);
|
||||
Logs.Write("协议处理5.5");
|
||||
}
|
||||
break;
|
||||
case 0x01:
|
||||
{
|
||||
Logs.Write("协议处理5.4");
|
||||
var exceptionMessage = storeInfo.StoreCode + "入库过程中存在物料未扫描上架!";
|
||||
var warningModel = new WebSocketMessageModel()
|
||||
{
|
||||
@ -1104,12 +1115,10 @@ namespace WCS.BLL.HardWare
|
||||
LightNumber = lightNumber,
|
||||
ExceptionMessage = storeInfo.StoreCode + "入库过程中存在物料未扫描上架!"
|
||||
});
|
||||
Logs.Write("协议处理5.5");
|
||||
}
|
||||
break;
|
||||
case 0x02:
|
||||
{
|
||||
Logs.Write("协议处理5.4");
|
||||
var exceptionMessage = storeInfo.StoreCode + "物料被取出!";
|
||||
var warningModel = new WebSocketMessageModel()
|
||||
{
|
||||
@ -1131,7 +1140,6 @@ namespace WCS.BLL.HardWare
|
||||
LightNumber = lightNumber,
|
||||
ExceptionMessage = storeInfo.StoreCode + "入库过程中物料丢失!"
|
||||
});
|
||||
Logs.Write("协议处理5.5");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -1281,7 +1289,7 @@ namespace WCS.BLL.HardWare
|
||||
{
|
||||
if (CurrentMode != Mode.出库模式)
|
||||
{
|
||||
Logs.Write($"出库错误:{ShelfCode}该货架模式不是出库模式或盘点模式!");
|
||||
Logs.Write($"出库错误:{ShelfCode}该货架模式不是出库模式或盘点模式!", LogsType.Outstore);
|
||||
return;
|
||||
}
|
||||
lightNumber = Convert.ToInt32(data[TcpCleint.PreFixLength + 3]);
|
||||
@ -1303,7 +1311,7 @@ namespace WCS.BLL.HardWare
|
||||
if (string.IsNullOrEmpty(storeInfo.CurrentMatSn))
|
||||
{
|
||||
//该库位是需要出库的库位,物料被多次取出or给了多个正常出库信号
|
||||
Logs.Write($"该库位是需要出库的库位,物料被反复取出or给了多个正常出库信号,库位{storeInfo.StoreCode}");
|
||||
Logs.Write($"该库位是需要出库的库位,物料被反复取出or给了多个正常出库信号,库位{storeInfo.StoreCode}", LogsType.Outstore);
|
||||
//暂不进行处理
|
||||
return;
|
||||
}
|
||||
@ -1311,7 +1319,7 @@ namespace WCS.BLL.HardWare
|
||||
//不是本次出库需要出的物料
|
||||
if (!CurrentOutStoreMatSNs.Contains(storeInfo.CurrentMatSn))
|
||||
{
|
||||
Logs.Write($"{storeInfo.CurrentMatSn}不是本次需要出库的物料");
|
||||
Logs.Write($"{storeInfo.CurrentMatSn}不是本次需要出库的物料", LogsType.Outstore);
|
||||
//报警灯报警
|
||||
WarningLight.WaringLightAlwaysRed(TcpCleint);
|
||||
return;
|
||||
@ -1321,7 +1329,7 @@ namespace WCS.BLL.HardWare
|
||||
var inventoryDetail = DbHelp.db.Queryable<InventoryDetail>().Where(t => t.MatSN == storeInfo.CurrentMatSn).First();
|
||||
if (inventoryDetail == null)
|
||||
{
|
||||
Logs.Write($"{storeInfo.CurrentMatSn}库存信息不存在");
|
||||
Logs.Write($"{storeInfo.CurrentMatSn}库存信息不存在", LogsType.Outstore);
|
||||
//报警灯报警
|
||||
WarningLight.WaringLightAlwaysRed(TcpCleint);
|
||||
return;
|
||||
@ -1335,7 +1343,7 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
if (orderMatDetails == null)
|
||||
{
|
||||
Logs.Write($"{storeInfo.CurrentMatSn},OrderDetail出库明细信息不存在");
|
||||
Logs.Write($"{storeInfo.CurrentMatSn},OrderDetail出库明细信息不存在", LogsType.Outstore);
|
||||
//报警灯报警
|
||||
WarningLight.WaringLightAlwaysRed(TcpCleint);
|
||||
return;
|
||||
@ -1408,9 +1416,11 @@ namespace WCS.BLL.HardWare
|
||||
module.ComfirmOutstore(TcpCleint, data[TcpCleint.PreFixLength + 3]);
|
||||
|
||||
|
||||
|
||||
//当前柜子是否还存在未出库的
|
||||
Logs.Write($"货架【{ShelfCode}】,用户取出物料{matSN}", LogsType.Outstore);
|
||||
CurrentOutStoreMatSNs.RemoveAll(t => t == matSN);//删除本次已出的物料SN
|
||||
Logs.Write($"货架【{ShelfCode}】,当前货架剩余物料{string.Join(",", CurrentOutStoreMatSNs)}", LogsType.Outstore);
|
||||
|
||||
var isExsistOut = CurrentOutStoreMatSNs.Any();
|
||||
|
||||
var tempOrder = CurrentOutOrder;
|
||||
@ -1432,6 +1442,7 @@ namespace WCS.BLL.HardWare
|
||||
//本次亮灯的物料已全部取出
|
||||
if (!isExsistOut)
|
||||
{
|
||||
Logs.Write($"货架【{ShelfCode}】,本次亮灯的物料已全部取出", LogsType.Outstore);
|
||||
CurrentOutOrder = null;
|
||||
|
||||
//退出出库模式
|
||||
@ -1453,7 +1464,7 @@ namespace WCS.BLL.HardWare
|
||||
.Any();
|
||||
if (!isLastShelf)
|
||||
{
|
||||
Logs.Write($"发料单{OrderNumber},最后一个出库货架,触发精准发料机制!查询是否还存在待出库物料");
|
||||
Logs.Write($"发料单{OrderNumber},最后一个出库货架,触发精准发料机制!查询是否还存在待出库物料", LogsType.Outstore);
|
||||
var outOrder = DbHelp.db.Queryable<OutOrder>()
|
||||
.Where(t => t.OrderNumber == OrderNumber)
|
||||
.First();
|
||||
@ -1468,7 +1479,7 @@ namespace WCS.BLL.HardWare
|
||||
if (outOrderMatDetails != null && outOrderMatDetails.Count > 0)
|
||||
{
|
||||
//存在待出库 然后之前又没亮灯的情况 => 继续分批次亮灯
|
||||
Logs.Write($"发料单{OrderNumber},还有物料未出!");
|
||||
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)
|
||||
@ -1480,13 +1491,13 @@ namespace WCS.BLL.HardWare
|
||||
var matCode = outOrderDetailCount.First().bb.Key;
|
||||
outOrderMatDetails = outOrderMatDetails.Where(t => t.MatCode == matCode)
|
||||
.ToList();
|
||||
Logs.Write($"发料单{OrderNumber},本次亮灯物料{matCode}!");
|
||||
Logs.Write($"发料单{OrderNumber},本次亮灯物料{matCode}!", LogsType.Outstore);
|
||||
}
|
||||
//相同物料不存在盘数超过n的情况,剩余物料全部亮灯
|
||||
else
|
||||
{
|
||||
//剩余物料全出
|
||||
Logs.Write($"发料单{OrderNumber},剩余物料灯全亮!");
|
||||
Logs.Write($"发料单{OrderNumber},剩余物料灯全亮!", LogsType.Outstore);
|
||||
}
|
||||
|
||||
var shelfIds = outOrderMatDetails.Select(t => t.StoreInfo.ShelfId)
|
||||
@ -1517,14 +1528,35 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"发料单{OrderNumber},当前物料已发完!");
|
||||
Logs.Write($"发料单{OrderNumber},当前物料已发完!", LogsType.Outstore);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"发料单{OrderNumber},OutOrder为null,肯定是有问题");
|
||||
Logs.Write($"发料单{OrderNumber},OutOrder为null,肯定是有问题", LogsType.Outstore);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"发料单{OrderNumber},非最后一个出库货架!", LogsType.Outstore);
|
||||
var otherShelfs = ShelfManager.Shelves
|
||||
.Where(t => t.OrderNumber == OrderNumber)
|
||||
.Where(t => t.CurrentMode == Mode.出库模式)
|
||||
.ToList();
|
||||
|
||||
otherShelfs.ForEach(shelf =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if (shelf is SmartShelf)
|
||||
{
|
||||
var smartShelf = (SmartShelf)shelf;
|
||||
Logs.Write($"货架【{smartShelf.ShelfCode}】待取物料{string.Join(",", smartShelf.CurrentOutStoreMatSNs)}", LogsType.Outstore);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
Reference in New Issue
Block a user