液晶标签协议对接 接口业务实现
This commit is contained in:
@ -1,4 +1,7 @@
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using WCS.BLL.Config;
|
||||
using WCS.BLL.DbModels;
|
||||
using WCS.BLL.Manager;
|
||||
@ -30,7 +33,7 @@ namespace WCS.BLL.HardWare
|
||||
WarningLight = new WarningLight() { LightId = shelfInfo.LightId };
|
||||
|
||||
//初始化Module
|
||||
Task.Run(() =>
|
||||
var task = Task.Run(() =>
|
||||
{
|
||||
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => t.ShelfId == ShelfId).ToList();
|
||||
foreach (var module in modules)
|
||||
@ -48,6 +51,63 @@ namespace WCS.BLL.HardWare
|
||||
|
||||
ModuleIds = MXL4Modules.Select(t => t.BoardId).ToList();
|
||||
});
|
||||
|
||||
//一个货架存在一个线程去刷新数据
|
||||
Task.Run(async () =>
|
||||
{
|
||||
//等待模组加载完毕再开始发送数据进行刷新
|
||||
Task.WaitAll(task);
|
||||
|
||||
while (true)
|
||||
{
|
||||
//未完成首次连接时 暂不发送
|
||||
if (TcpCleint.IsFirstConnected == false)
|
||||
{
|
||||
await Task.Delay(2000);
|
||||
continue;
|
||||
}
|
||||
|
||||
Logs.Write($"[test]");
|
||||
try
|
||||
{
|
||||
//查询是否有需要刷新的
|
||||
var needRefreshModules = MXL4Modules.Where(t => t.IsNeedRefresh)
|
||||
.ToList();
|
||||
foreach (var module in needRefreshModules)
|
||||
{
|
||||
//查询当前是否有任务
|
||||
var currentTasks = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ModuleId == module.ModuleId)
|
||||
.ToList();
|
||||
//存在入库、出库、盘点等任务
|
||||
if (currentTasks != null && currentTasks.Count > 0)
|
||||
{
|
||||
|
||||
}
|
||||
//不存在入库、出库、盘点等任务
|
||||
else
|
||||
{
|
||||
module.SetCurrentMode(Mode.待机模式);
|
||||
|
||||
//向上层系统获取数据
|
||||
|
||||
//获取成功 有数据 绑定对应数据
|
||||
|
||||
//获取成功 无数据
|
||||
module.StandbyNoInfoDisplay(TcpCleint);
|
||||
module.IsNeedRefresh = false;//未获取到库存数据 回没有库位显示信息给硬件
|
||||
|
||||
//获取失败 跳过此次循环后继续获取
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logs.Write($"【后台发送线程】遇到异常{ex.Message},{ex.StackTrace}");
|
||||
}
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public string ShelfTypeName { get; set; }
|
||||
@ -114,36 +174,34 @@ namespace WCS.BLL.HardWare
|
||||
public string OutOperateUser { get; set; } = string.Empty;
|
||||
|
||||
#region 协议处理
|
||||
public void Reset()
|
||||
{
|
||||
MXL4Modules.ForEach(t => t.Reset(TcpCleint));
|
||||
}
|
||||
|
||||
#region 弃用
|
||||
void IShelfBase.Warning()
|
||||
{
|
||||
}
|
||||
public void ShelfCheck()
|
||||
{
|
||||
}
|
||||
public void GoInInstore(string? IPAddress)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void GoOutInstore()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 由自检异常等错误导致的 手动操作处理后重新进入出库模式
|
||||
/// </summary>
|
||||
/// <param name="ModuleId"></param>
|
||||
public void GoInOutstoreByWebSocket(int moduleId)
|
||||
{
|
||||
|
||||
}
|
||||
public void GoInOutstore(List<OutOrderMatDetail> MatDetails, OutOrder outOrder, string OperateUser)
|
||||
{
|
||||
|
||||
}
|
||||
public void GoOutOutstore()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void GoInStocktaking(List<StockTakingOrderMatDetail> MatDetails, StockTakingOrder stockTakingOrder)
|
||||
{
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 确认盘点 Pda进行触发
|
||||
@ -154,23 +212,8 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
public void GoOutStocktaking()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
MXL4Modules.ForEach(t => t.Reset(TcpCleint));
|
||||
}
|
||||
|
||||
public void QueryVoltage(int moduleId)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void CalibrationSetOffset(int moduleId, int offSet)
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void SetCurrentMode(Mode mode)
|
||||
{
|
||||
@ -187,20 +230,10 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void IShelfBase.Warning()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void ShelfCheck()
|
||||
{
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 报警灯协议返回处理
|
||||
public void WarningLightProcess(byte[] data, int boardId, int lightNumber)
|
||||
public void WarningLightProcess(byte[] data, int boardId)
|
||||
{
|
||||
if (data[TcpCleint.PreFixLength + 2] == 0x20 && data[TcpCleint.PreFixLength + 3] == 0x01)
|
||||
{
|
||||
@ -232,156 +265,224 @@ namespace WCS.BLL.HardWare
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 协议返回处理
|
||||
public void ProtocolProcess(byte[] data, int boardId, int lightNumber)
|
||||
#region 液晶标签协议返回处理
|
||||
public void ProtocolProcess(byte[] data, int boardId)
|
||||
{
|
||||
//协议处理 判断功能位
|
||||
switch (data[TcpCleint.PreFixLength + 2])
|
||||
{
|
||||
case 0x01://进入入库模式返回信号
|
||||
GoInInstoreProcess(data, boardId, lightNumber);
|
||||
case 0xA4://标签回到待机模式 请求获取显示数据的信号
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x02)
|
||||
GoBackStandbyModeReturnProcess(data, boardId);
|
||||
break;
|
||||
case 0x02://退出入库模式返回信号
|
||||
GoOutInstoreProcess(data, boardId, lightNumber);
|
||||
case 0xA1://标签返回入库成功信号
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x05)
|
||||
InStoreSuccessProcess(data, boardId);
|
||||
break;
|
||||
case 0x03://正常入库信号
|
||||
InStoreReturnProcess(data);
|
||||
case 0xA2://标签返回出库成功信号
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x04)
|
||||
OutStoreSuccessProcess(data, boardId);
|
||||
break;
|
||||
case 0x04://入库模式中异常信号
|
||||
InStoreExceptionReturnProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x05://进入出库模式返回信号
|
||||
GoInOutstoreProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x06://退出出库模式返回信号
|
||||
GoOutOutstoreProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x07://正常出库返回信号
|
||||
OutstoreReturnProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x08://出库模式中异常信号
|
||||
OutstoreExceptionReturnProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x09://进入盘点模式返回信号
|
||||
GoInStockTakingReturnProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x0A://退出盘点模式返回信号
|
||||
GoOutStockTakingReturnProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x13://复位的返回信号
|
||||
ResetReturnProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x17://电压值1
|
||||
QueryVoltageProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x18://电压值2
|
||||
QueryVoltageProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x19://电压值3
|
||||
QueryVoltageProcess(data, boardId, lightNumber);
|
||||
break;
|
||||
case 0x0B://自检结果反馈
|
||||
SelfCheckProcess(data, boardId, lightNumber);
|
||||
case 0xA3://标签返回盘点成功信号
|
||||
if (data[TcpCleint.PreFixLength + 3] == 0x03)
|
||||
StocktakingSuccessProcess(data, boardId);
|
||||
break;
|
||||
default:
|
||||
;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进入入库模式返回信号处理
|
||||
/// 标签回到待机模式
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void GoInInstoreProcess(byte[] data, int boardId, int lightNumber)
|
||||
public void GoBackStandbyModeReturnProcess(byte[] data, int boardId)
|
||||
{
|
||||
//获取对应的模组
|
||||
var module = MXL4Modules.Where(t => t.BoardId == boardId)
|
||||
.FirstOrDefault();
|
||||
if (module != null)
|
||||
{
|
||||
module.IsNeedRefresh = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【回到待机模式】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
|
||||
SetCurrentMode(Mode.待机模式);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 退出入库模式返回信号处理
|
||||
/// 标签返回入库成功信号
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void GoOutInstoreProcess(byte[] data, int boardId, int lightNumber)
|
||||
public void InStoreSuccessProcess(byte[] data, int boardId)
|
||||
{
|
||||
var taskId = Convert.ToInt32(data[TcpCleint.PreFixLength + 4]);
|
||||
var finishQty = (data[TcpCleint.PreFixLength + 5] << 8) + data[TcpCleint.PreFixLength + 6];
|
||||
|
||||
//获取对应的模组
|
||||
var module = MXL4Modules.Where(t => t.BoardId == boardId)
|
||||
.FirstOrDefault();
|
||||
if (module != null)
|
||||
{
|
||||
//获取对应的任务
|
||||
var task = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ModuleCode == module.ModuleCode)
|
||||
.Where(t => t.TaskID == taskId)
|
||||
.First();
|
||||
if (task != null)
|
||||
{
|
||||
var finishedTask = new FinishedTask()
|
||||
{
|
||||
ShelfId = task.ShelfId,
|
||||
ShelfCode = task.ShelfCode,
|
||||
ModuleId = task.ModuleId,
|
||||
ModuleCode = task.ModuleCode,
|
||||
StoreId = task.StoreId,
|
||||
StoreCode = task.StoreCode,
|
||||
TaskID = task.TaskID,
|
||||
Guid = task.Guid,
|
||||
TaskMode = task.TaskMode,
|
||||
OrderNumber = task.OrderNumber,
|
||||
ButtonColor = task.ButtonColor,
|
||||
MatCode = task.MatCode,
|
||||
MatName = task.MatName,
|
||||
MatSpec = task.MatSpec,
|
||||
MatBatch = task.MatBatch,
|
||||
MatSN = task.MatSN,
|
||||
CreateTime = task.CreateTime,
|
||||
FinishQty = finishQty,
|
||||
FinishTime = DateTime.Now,
|
||||
};
|
||||
DbHelp.db.Insertable(finishedTask).ExecuteCommand();
|
||||
DbHelp.db.Deleteable(task).ExecuteCommand();
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【入库成功】货架【{ShelfCode}】通过模组{module.ModuleCode}({boardId}),通过任务id{taskId}未找到对应任务!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【入库成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 正常入库信号
|
||||
/// 标签返回出库成功信号
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void InStoreReturnProcess(byte[] data)
|
||||
public void OutStoreSuccessProcess(byte[] data, int boardId)
|
||||
{
|
||||
var taskId = Convert.ToInt32(data[TcpCleint.PreFixLength + 4]);
|
||||
var finishQty = (data[TcpCleint.PreFixLength + 5] << 8) + data[TcpCleint.PreFixLength + 6];
|
||||
|
||||
//获取对应的模组
|
||||
var module = MXL4Modules.Where(t => t.BoardId == boardId)
|
||||
.FirstOrDefault();
|
||||
if (module != null)
|
||||
{
|
||||
//获取对应的任务
|
||||
var task = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ModuleCode == module.ModuleCode)
|
||||
.Where(t => t.TaskID == taskId)
|
||||
.First();
|
||||
if (task != null)
|
||||
{
|
||||
var finishedTask = new FinishedTask()
|
||||
{
|
||||
ShelfId = task.ShelfId,
|
||||
ShelfCode = task.ShelfCode,
|
||||
ModuleId = task.ModuleId,
|
||||
ModuleCode = task.ModuleCode,
|
||||
StoreId = task.StoreId,
|
||||
StoreCode = task.StoreCode,
|
||||
TaskID = task.TaskID,
|
||||
Guid = task.Guid,
|
||||
TaskMode = task.TaskMode,
|
||||
OrderNumber = task.OrderNumber,
|
||||
ButtonColor = task.ButtonColor,
|
||||
MatCode = task.MatCode,
|
||||
MatName = task.MatName,
|
||||
MatSpec = task.MatSpec,
|
||||
MatBatch = task.MatBatch,
|
||||
MatSN = task.MatSN,
|
||||
CreateTime = task.CreateTime,
|
||||
FinishQty = finishQty,
|
||||
FinishTime = DateTime.Now,
|
||||
};
|
||||
DbHelp.db.Insertable(finishedTask).ExecuteCommand();
|
||||
DbHelp.db.Deleteable(task).ExecuteCommand();
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【出库成功】货架【{ShelfCode}】通过模组{module.ModuleCode}({boardId}),通过任务id{taskId}未找到对应任务!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【出库成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 入库模式中异常处理
|
||||
/// 标签返回盘点成功信号
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="boardId"></param>
|
||||
/// <param name="lightNumber"></param>
|
||||
public void InStoreExceptionReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
public void StocktakingSuccessProcess(byte[] data, int boardId)
|
||||
{
|
||||
}
|
||||
var taskId = Convert.ToInt32(data[TcpCleint.PreFixLength + 4]);
|
||||
var finishQty = (data[TcpCleint.PreFixLength + 5] << 8) + data[TcpCleint.PreFixLength + 6];
|
||||
|
||||
/// <summary>
|
||||
/// 进入出库模式协议返回
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="boardId"></param>
|
||||
/// <param name="lightNumber"></param>
|
||||
public void GoInOutstoreProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OutstoreReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 退出出库模式返回信号处理
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public void GoOutOutstoreProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 出库模式中异常处理
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="boardId"></param>
|
||||
/// <param name="lightNumber"></param>
|
||||
public void OutstoreExceptionReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 进入盘点模式返回信号
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <param name="boardId"></param>
|
||||
/// <param name="lightNumber"></param>
|
||||
public void GoInStockTakingReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void GoOutStockTakingReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
}
|
||||
|
||||
public void ResetReturnProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
}
|
||||
|
||||
public void QueryVoltageProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
}
|
||||
|
||||
public void SelfCheckProcess(byte[] data, int boardId, int lightNumber)
|
||||
{
|
||||
//获取对应的模组
|
||||
var module = MXL4Modules.Where(t => t.BoardId == boardId)
|
||||
.FirstOrDefault();
|
||||
if (module != null)
|
||||
{
|
||||
//获取对应的任务
|
||||
var task = DbHelp.db.Queryable<CurrentTask>()
|
||||
.Where(t => t.ModuleCode == module.ModuleCode)
|
||||
.Where(t => t.TaskID == taskId)
|
||||
.First();
|
||||
if (task != null)
|
||||
{
|
||||
var finishedTask = new FinishedTask()
|
||||
{
|
||||
ShelfId = task.ShelfId,
|
||||
ShelfCode = task.ShelfCode,
|
||||
ModuleId = task.ModuleId,
|
||||
ModuleCode = task.ModuleCode,
|
||||
StoreId = task.StoreId,
|
||||
StoreCode = task.StoreCode,
|
||||
TaskID = task.TaskID,
|
||||
Guid = task.Guid,
|
||||
TaskMode = task.TaskMode,
|
||||
OrderNumber = task.OrderNumber,
|
||||
ButtonColor = task.ButtonColor,
|
||||
MatCode = task.MatCode,
|
||||
MatName = task.MatName,
|
||||
MatSpec = task.MatSpec,
|
||||
MatBatch = task.MatBatch,
|
||||
MatSN = task.MatSN,
|
||||
CreateTime = task.CreateTime,
|
||||
FinishQty = finishQty,
|
||||
FinishTime = DateTime.Now,
|
||||
};
|
||||
DbHelp.db.Insertable(finishedTask).ExecuteCommand();
|
||||
DbHelp.db.Deleteable(task).ExecuteCommand();
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【盘点成功】货架【{ShelfCode}】通过模组{module.ModuleCode}({boardId}),通过任务id{taskId}未找到对应任务!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logs.Write($"【盘点成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
Reference in New Issue
Block a user