Files
wcs/WCS.BLL/HardWare/MXL4Shelf.cs
2025-05-06 18:23:40 +08:00

1015 lines
50 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Newtonsoft.Json;
using System;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using WCS.BLL.Config;
using WCS.BLL.DbModels;
using WCS.BLL.DbModels.Task;
using WCS.BLL.Manager;
using WCS.BLL.Tool;
using WCS.DAL.Db;
using WCS.DAL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel.InOutRecord;
using WCS.Model.ApiModel.MKYBackgroundThread;
using WCS.Model.ApiModel.OutStore;
using WCS.Model.WebSocketModel;
using static WCS.BLL.HardWare.WarningLight;
namespace WCS.BLL.HardWare
{
/// <summary>
/// 智能货架
/// </summary>
public class MXL4Shelf : IShelfBase
{
public MXL4Shelf(ShelfInfo shelfInfo)
{
ShelfTypeName = shelfInfo.ShelfTypeName;
ShelfId = shelfInfo.Id;
ShelfCode = shelfInfo.ShelfCode;
RowCounts = shelfInfo.Rowcounts;
ColumnCounts = shelfInfo.Columncounts;
SetCurrentMode(TaskModeEnum.);
ClientIp = shelfInfo.ClientIp;
LightId = shelfInfo.LightId;
WarningLight = new WarningLight() { LightId = shelfInfo.LightId };
//初始化Module
var task = Task.Run(() =>
{
var modules = DbHelp.db.Queryable<ModuleInfo>().Where(t => t.ShelfId == ShelfId).ToList();
foreach (var module in modules)
{
MXL4Modules.Add(new MXL4ShelfModule()
{
ModuleId = module.Id,
ModuleCode = module.ModuleCode,
BoardId = module.BoardId,
IsEnable = module.IsEnable,
CurrentMode = TaskModeEnum.,
IsNeedRefresh = false,
});
}
ModulesStr = string.Join(";", MXL4Modules.Select(t => t.ModuleCode));
ModuleIds = MXL4Modules.Select(t => t.BoardId).ToList();
});
//一个货架存在一个线程去刷新数据
Task.Run(async () =>
{
//等待模组加载完毕再开始发送数据进行刷新
Task.WaitAll(task);
while (true)
{
//Logs.Write($"[后台刷新线程]开始刷新{ShelfCode}");
try
{
await Task.Delay(100);
//Logs.Write($"[后台刷新线程]开始刷新{ShelfCode}");
if (TcpCleint == null)
{
await Task.Delay(2000);
continue;
}
//Logs.Write($"[后台刷新线程]TcpCleint =null {ShelfCode}");
//未完成首次连接时 暂不发送
if (TcpCleint.IsFirstConnected == false)
{
await Task.Delay(2000);
continue;
}
// Logs.Write($"[test]{ShelfCode}3");
//查询属于本货架的任务
var currentShelfTasks = DbHelp.db.Queryable<CurrentTask>()
.Where(t => t.ShelfId == this.ShelfId)
.Where(t => (t.IsSended == false && t.IsSuspended == false) || t.IsCancel == true || (t.IsSended == true && t.IsSuspended == true))
.OrderBy(t => t.CreateTime)
.ToList();
//Logs.Write($"[后台刷新线程]属于本货架的任务{currentShelfTasks.Count}");
//获取因为任务需要刷新的module
var haveTaskModules = currentShelfTasks.Where(t => t.IsCancel == true || (t.IsSended == false && t.IsSuspended == false))
.Select(t => t.ModuleId)
.Distinct()
.ToList();
MXL4Modules.ForEach(t =>
{
if (haveTaskModules.Contains(t.ModuleId))
{
t.IsNeedRefresh = true;
}
});
// Logs.Write($"[test]{ShelfCode}4");
//查询是否有需要刷新的
var needRefreshModules = MXL4Modules.Where(t => t.IsNeedRefresh)
.ToList();
foreach (var module in needRefreshModules)
{
try
{
//查询当前是否有任务
var currentTasks = currentShelfTasks.Where(t => t.ModuleId == module.ModuleId)
.OrderBy(t => t.CreateTime)
.ToList();
//if (currentTasks == null || currentTasks.Count <= 0)
//{
// continue;
//}
#region
var cancelTasks = currentTasks.Where(t => t.IsCancel == true)
.ToList();
if (cancelTasks != null && cancelTasks.Count > 0)
{
Logs.Write($"[后台刷新线程]当前有任务需要取消!");
//删除取消的这个任务
DbHelp.db.Deleteable(cancelTasks).ExecuteCommand();
currentShelfTasks.RemoveAll(t => t.IsCancel == true);
//退出当前模式
if (module.CurrentMode != TaskModeEnum.)
{
Logs.Write($"当前模组不是待机模式 退出对应模式");
// 退出对应模式
switch (module.CurrentMode)
{
case (TaskModeEnum.):
module.GoOutInstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutOutstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutStocktakingMode(TcpCleint);
break;
default:
break;
}
await Task.Delay(10);
}
module.IsNeedRefresh = true;
continue;
}
#endregion
#region 退
var suspendedTasks = currentTasks.Where(t =>t.IsSended == true && t.IsSuspended == true)
.FirstOrDefault();
if (suspendedTasks != null)
{
Logs.Write("【挂起】任务,先退出当前模式,再重新发送所有任务内容!");
//先退出当前模式
if (module.CurrentMode != TaskModeEnum.)
{
Logs.Write($"【挂起】模组当前模式为{module.CurrentMode},先退出模式");
switch (module.CurrentMode)
{
case (TaskModeEnum.):
module.GoOutInstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutOutstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutStocktakingMode(TcpCleint);
break;
default:
break;
}
await Task.Delay(10);
//将此字段更新为未发送
suspendedTasks.IsSended = false;
DbHelp.db.Updateable(suspendedTasks).ExecuteCommand();
Logs.Write($"【挂起】模组当前模式为{module.CurrentMode},先退出模式1");
}
module.IsNeedRefresh = true;
continue;
}
#endregion
//入库、出库、盘点等任务
if (currentTasks != null && currentTasks.Count > 0)
{
Logs.Write($"[test]{ShelfCode}5.2");
var firstTask = currentTasks.First();
var taskMode = currentTasks.First().TaskMode;
#region Continue
if (module.CurrentMode == TaskModeEnum.)
{
//进入对应模式
switch (taskMode)
{
case (TaskModeEnum.):
module.GoInInstoreMode(TcpCleint, firstTask.ButtonColor);
break;
case (TaskModeEnum.):
module.GoInOutstoreMode(TcpCleint, firstTask.ButtonColor);
break;
case (TaskModeEnum.):
module.GoInStocktakingMode(TcpCleint, firstTask.ButtonColor);
break;
default:
break;
}
//等待10ms这边将状态成功更新了来
await Task.Delay(10);
}
else
{
taskMode = module.CurrentMode;
}
#endregion
//只显示当前模式的任务
currentTasks = currentTasks.Where(t => t.TaskMode == taskMode).ToList();
//这个分支应该很少跑到 有刷新必然有新任务
if (currentTasks == null || currentTasks.Count == 0)
{
Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!");
var tasks = DbHelp.db.Queryable<CurrentTask>()
.Where(t => t.ModuleId == module.ModuleId)
.Where(t => t.IsSended == true)
.Where(t => t.TaskMode == taskMode)
.OrderBy(t => t.CreateTime)
.ToList();
if (tasks != null && tasks.Count > 0)
{
Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!有已发送的任务未完成故不处理!");
module.IsNeedRefresh = false;
continue;
}
//退出对应模式到待机模式! 后续持续刷新数据!
else
{
Logs.Write($"【后台发送线程】{module.ModuleCode}当前模式{module.CurrentMode},需要刷新!但是没有对应的新任务!没有已发送未完成的任务!退出当前模式!");
// 退出对应模式
switch (taskMode)
{
case (TaskModeEnum.):
module.GoOutInstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutOutstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutStocktakingMode(TcpCleint);
break;
default:
break;
}
continue;
}
}
//按照任务顺序给其发送数据
foreach (var currentTask in currentTasks)
{
module.SendTaskId(currentTask.TaskID, TcpCleint);
module.SendMatCode(currentTask.MatCode, TcpCleint);
module.SendMatName(currentTask.MatName, TcpCleint);
module.SendMatSpec(currentTask.MatSpec, TcpCleint);
module.SendMatBatch(currentTask.MatBatch, TcpCleint);
module.SendMatQty(currentTask.Qty, TcpCleint);
currentTask.IsSended = true;
DbHelp.db.Updateable(currentTask).ExecuteCommand();
}
//发送完毕后就不刷新了
module.IsNeedRefresh = false;
continue;
}
//不存在入库、出库、盘点等任务 应该变成待机
else
{
//退出对应模式到待机模式! 退出后续会再走这个else分支刷新数据!
if (module.CurrentMode != TaskModeEnum.)
{
Logs.Write($"[test]{ShelfCode}5.4");
// 退出对应模式
switch (module.CurrentMode)
{
case (TaskModeEnum.):
module.GoOutInstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutOutstoreMode(TcpCleint);
break;
case (TaskModeEnum.):
module.GoOutStocktakingMode(TcpCleint);
break;
default:
break;
}
continue;
}
else
{
//模组是待机模式后 如果还有任务 那么显示对应的任务
var otherTasks = DbHelp.db.Queryable<CurrentTask>()
.Where(t => t.ModuleId == module.ModuleId && t.IsSended == true)
.ToList();
if (otherTasks != null && otherTasks.Count > 0)
{
Logs.Write($"[后台刷新线程]当前有任务需要重新发送!");
otherTasks.ForEach(t => { t.IsSended = false; });
DbHelp.db.Updateable(otherTasks).ExecuteCommand();
Thread.Sleep(1000);
Logs.Write($"[后台刷新线程]当前有任务{otherTasks.Count}个需要重新发送!");
continue;
}
else
{
#region
//向上层系统获取数据
var stockQueryUrl = @"http://10.41.235.10:8989/ztwcs/stockQuery";
var dataBody = new StockQueryRequest();
dataBody.storeCodes.Add(module.ModuleCode);
Logs.Write("111", LogsType.StartBoot);
var result = ApiHelp.GetDataFromHttp<StockQueryResponse>(stockQueryUrl, dataBody, "POST", true);
if (result == null)
{
//Logs.Write("2222", LogsType.StartBoot);
continue;
}
//获取成功 有数据 绑定对应数据
if (result.code == 200)
{
var jsonString = result.data;
Logs.Write($"3333{jsonString}", LogsType.StartBoot);
if (!string.IsNullOrEmpty(jsonString))
{
Logs.Write($"44", LogsType.StartBoot);
// 去除所有双引号前面的反斜杠
jsonString = Regex.Replace(jsonString, @"\\(.)", "$1"); ;
var data = JsonConvert.DeserializeObject<List<StockQueryResponseDataItem>>(jsonString);
if (data != null && data.Count > 0)
{
//硬件只能显示7个 只保留前7个
if (data.Count > 7)
{
data = data.Take(7).ToList();
}
int taskid = 1;
try
{
foreach (var item in data)
{
module.SendTaskId(taskid++, TcpCleint);
module.SendMatCode(item.material_code, TcpCleint);
module.SendMatName(item.material_name, TcpCleint);
module.SendMatSpec("-", TcpCleint);
module.SendMatBatch(item.batch_no, TcpCleint);
module.SendMatQty((int)item.qty, TcpCleint);
}
}
catch (Exception)
{
module.Reset(TcpCleint);
}
module.IsNeedRefresh = false;
continue;
}
//库存里面无数据
else
{
Logs.Write($"6666", LogsType.StartBoot);
//获取成功 无数据
module.StandbyNoInfoDisplay(TcpCleint);
module.IsNeedRefresh = false;//未获取到库存数据 回没有库位显示信息给硬件
continue;
}
}
else
{
Logs.Write($"66666", LogsType.StartBoot);
//获取成功 无数据
module.StandbyNoInfoDisplay(TcpCleint);
module.IsNeedRefresh = false;//未获取到库存数据 回没有库位显示信息给硬件
continue;
}
}
else
{
Logs.Write($"code!=200", LogsType.StartBoot);
continue;
}
#endregion
}
}
}
}
catch (Exception ex)
{
Logs.Write($"【后台发送线程】遇到异常{ex.Message},{ex.StackTrace}");
}
}
//刷新报警灯
if (needRefreshModules != null && needRefreshModules.Count > 0)
{
var isShelfHaveTask = DbHelp.db.Queryable<CurrentTask>()
.Where(t => t.ShelfId == this.ShelfId)
.Where(t => t.IsSended == true)
.Any();
if (isShelfHaveTask)
{
WarningLight.GreenLight(TcpCleint);
}
else
{
WarningLight.CloseLight(TcpCleint);
}
}
}
catch (Exception ex)
{
Logs.Write($"【后台发送线程】遇到异常{ex.Message},{ex.StackTrace}");
}
await Task.Delay(1000);
}
});
}
public string ShelfTypeName { get; set; }
public int ShelfId { get; set; }
public string ShelfCode { get; set; }
public int RowCounts { get; set; }
public int ColumnCounts { get; set; }
public TaskModeEnum CurrentMode { get; set; }
public DateTime SetCurrentModeTime { get; set; }
public string ModulesStr { get; set; }//当前货架所有模组的Str
public string GroupName { get; set; }
public List<SmartShelfModule> Modules { get; set; } = new List<SmartShelfModule>();
public List<MXL4ShelfModule> MXL4Modules { get; set; } = new List<MXL4ShelfModule>();
public TCPClient TcpCleint { get { return TCPClientManager.GetTCPClientByIPHost(ClientIp); } }
public int LightId { get; set; }
public LightColorEnum LightColor { get; set; }
public bool IsWarning { get; set; } = false;
public WarningLight WarningLight { get; set; }
public void ClearWarning()
{
if (this.CurrentMode == TaskModeEnum.)
{
WarningLight.BlueLight(TcpCleint);
}
else if (this.CurrentMode == TaskModeEnum.)
{
WarningLight.GreenLight(TcpCleint);
}
else if (this.CurrentMode == TaskModeEnum.)
{
WarningLight.GreenLight(TcpCleint);
}
else
{
WarningLight.CloseLight(TcpCleint);
}
}
/// <summary>
/// 自检异常、未响应对应模式的异常
/// </summary>
public List<string> ExceptionMessages { get; set; } = new List<string>();
/// <summary>
/// 过程中异常 入库过程中异常/出库过程中异常
/// </summary>
public List<ProcessingExceptionType> ProcessingExceptions { get; set; } = new List<ProcessingExceptionType>();
public string? CurrentCom { get; set; } = string.Empty;
public MatInfoResponse InStoreData { get; set; }
public List<string> CurrentOutStoreMatSNs { get; set; } = new List<string>();
public OutOrder CurrentOutOrder { get; set; }
public string OrderNumber { get; set; }
public StockTakingOrder CurrentStockTakingOrder { get; set; }
public List<int> ModuleIds { get; set; }
public string ClientIp { get; set; }
//websocket通知的前端的IP地址
public string WebSocketIpAddress { get; set; } = "127.0.0.2";
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()
{
}
public void GoInOutstore(List<OutOrderMatDetail> MatDetails, OutOrder outOrder, string OperateUser)
{
}
public void GoOutOutstore()
{
}
public void GoInStocktaking(List<StockTakingOrderMatDetail> MatDetails, StockTakingOrder stockTakingOrder)
{
}
/// <summary>
/// 确认盘点 Pda进行触发
/// </summary>
public bool ConfirmStocktakingSingle(int BoardId, int LightNumber)
{
return false;
}
public void GoOutStocktaking()
{
}
#endregion
public void SetCurrentMode(TaskModeEnum mode)
{
this.CurrentMode = mode;
this.SetCurrentModeTime = DateTime.Now;
Task.Run(() =>
{
var shelf = DbHelp.db.Queryable<ShelfInfo>().Where(t => t.Id == ShelfId).First();
if (shelf != null)
{
shelf.CurrentMode = mode;
shelf.SetCurrentModeTime = SetCurrentModeTime;
DbHelp.db.Updateable(shelf).ExecuteCommand();
}
});
}
#endregion
#region
public void WarningLightProcess(byte[] data, int boardId)
{
if (data[TcpCleint.PreFixLength + 2] == 0x20 && data[TcpCleint.PreFixLength + 3] == 0x01)
{
//常亮或关闭 0x00常亮 0x01关闭
if (data[TcpCleint.PreFixLength + 5] == 0x00)
{
LightColor = LightColorEnum.;
Logs.Write($"货架[{ShelfCode}],灯状态更新为:{LightColor}");
}
else if (data[TcpCleint.PreFixLength + 5] == 0x01)
{
switch (data[7])
{
case 0x01:
LightColor = LightColorEnum.;
break;
case 0x02:
LightColor = LightColorEnum.绿;
break;
case 0x03:
LightColor = LightColorEnum.;
break;
default:
break;
}
Logs.Write($"货架[{ShelfCode}],灯状态更新为:{LightColor}");
}
}
}
#endregion
#region
public void ProtocolProcess(byte[] data, int boardId)
{
//协议处理 判断功能位
switch (data[TcpCleint.PreFixLength + 2])
{
case 0xA4://标签回到待机模式 请求获取显示数据的信号
if (data[TcpCleint.PreFixLength + 3] == 0x02)
GoBackStandbyModeReturnProcess(data, boardId);
else if (data[TcpCleint.PreFixLength + 3] == 0x05)
SelectSuspendTaskProcess(data, boardId);
break;
case 0xA1:
//标签返回入库成功信号
if (data[TcpCleint.PreFixLength + 3] == 0x05)
InStoreSuccessProcess(data, boardId);
//进入入库模式成功
else if (data[TcpCleint.PreFixLength + 3] == 0x01)
GoInInStoreReturnProcess(data, boardId);
//退出入库模式
else if (data[TcpCleint.PreFixLength + 3] == 0x03)
GoBackStandbyModeReturnProcess(data, boardId);
//挂载此出库任务
else if (data[TcpCleint.PreFixLength + 3] == 0x04)
SuspendTaskProcess(data, boardId);
break;
case 0xA2:
//标签返回出库成功信号
if (data[TcpCleint.PreFixLength + 3] == 0x04)
OutStoreSuccessProcess(data, boardId);
//进入出库模式成功
else if (data[TcpCleint.PreFixLength + 3] == 0x01)
GoInOutStoreReturnProcess(data, boardId);
//退出出库模式
else if (data[TcpCleint.PreFixLength + 3] == 0x03)
GoBackStandbyModeReturnProcess(data, boardId);
break;
case 0xA3:
//标签返回盘点成功信号
if (data[TcpCleint.PreFixLength + 3] == 0x03)
StocktakingSuccessProcess(data, boardId);
//进入盘点模式
else if (data[TcpCleint.PreFixLength + 3] == 0x01)
GoInStocktakingReturnProcess(data, boardId);
//退出盘点模式
else if (data[TcpCleint.PreFixLength + 3] == 0x02)
GoBackStandbyModeReturnProcess(data, boardId);
break;
default:
;
break;
}
}
/// <summary>
/// 标签回到待机模式
/// </summary>
/// <param name="data"></param>
public void GoBackStandbyModeReturnProcess(byte[] data, int boardId)
{
//获取对应的模组
var module = MXL4Modules.Where(t => t.BoardId == boardId)
.FirstOrDefault();
if (module != null)
{
module.SetCurrentMode(TaskModeEnum.);
module.IsNeedRefresh = true;
}
else
{
Logs.Write($"【回到待机模式】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
}
//TO DO 所有退出后货架才待机
SetCurrentMode(TaskModeEnum.);
}
/// <summary>
/// 挂起任务
/// </summary>
/// <param name="data"></param>
public async void SuspendTaskProcess(byte[] data, int boardId)
{
//获取当前挂载任务
var taskSuspended = DbHelp.db.Queryable<CurrentTask>()
.Where(t => t.IsSuspended)
.First();
if (taskSuspended != null)
{
Logs.Write($"【挂起任务】已有挂起任务 货架【{taskSuspended.ShelfCode}】模组{taskSuspended.ModuleCode},任务ID{taskSuspended.TaskID},在数据库中!无法挂起第二个");
return;
}
else
{
Logs.Write($"【挂起任务】当前没有挂起任务,可以进行任务挂起");
}
//获取对应的模组
var module = MXL4Modules.Where(t => t.BoardId == boardId)
.FirstOrDefault();
if (module != null)
{
Logs.Write($"【挂起任务】获取到当前进行挂起任务的模组{module.ModuleCode},货架{ShelfCode}");
//获取对应任务
var taskId = Convert.ToInt32(data[TcpCleint.PreFixLength + 4]);//任务ID
Logs.Write($"【挂起任务】获取到当前进行挂起任务的模组{module.ModuleCode},货架{ShelfCode}任务ID{taskId}");
var task = DbHelp.db.Queryable<CurrentTask>()
.Where(t => t.TaskID == taskId && t.ModuleId == module.ModuleId)
.First();
if (task != null)
{
Logs.Write($"【挂起任务】task != null");
task.IsSuspended = true;
DbHelp.db.Updateable(task).ExecuteCommand();
await Task.Delay(15);
module.IsNeedRefresh = true;
Logs.Write($"【挂起任务】模组{module.ModuleCode}已更新为需要刷新!");
}
else
{
Logs.Write($"【挂起任务】货架【{ShelfCode}】模组{module.ModuleCode},任务ID{taskId},在数据库中未找到对应任务!");
}
}
else
{
Logs.Write($"【挂起任务】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
}
}
/// <summary>
/// 选择挂起任务 挂载至另一个模组
/// </summary>
/// <param name="data"></param>
public void SelectSuspendTaskProcess(byte[] data, int boardId)
{
Logs.Write("[选择挂起任务]接收到相关指令!");
//获取对应的模组
var module = MXL4Modules.Where(t => t.BoardId == boardId)
.FirstOrDefault();
if (module != null)
{
Logs.Write($"[选择挂起任务]接收到相关指令!货架{ShelfCode},模组{module.ModuleCode}");
//获取当前挂载任务
var task = DbHelp.db.Queryable<CurrentTask>()
.Where(t => t.IsSuspended)
.First();
if (task != null)
{
task.IsSuspended = false;
task.ShelfId = ShelfId;
task.ModuleId = module.ModuleId;
task.ModuleCode = module.ModuleCode;
task.IsSuspended = false;
task.IsSended = false;
DbHelp.db.Updateable(task).ExecuteCommand();
Thread.Sleep(30);
module.IsNeedRefresh = true;
Logs.Write($"[选择挂起任务]已获取到相关任务,任务已更新为当前模组");
}
else
{
Logs.Write($"【选择挂起任务】货架【{ShelfCode}】模组{module.ModuleCode},在数据库中未找到当前挂起的任务!");
}
}
else
{
Logs.Write($"【选择挂起任务】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
}
}
/// <summary>
/// 标签返回进入入库模式信号
/// </summary>
/// <param name="data"></param>
public void GoInInStoreReturnProcess(byte[] data, int boardId)
{
//获取对应的模组
var module = MXL4Modules.Where(t => t.BoardId == boardId)
.FirstOrDefault();
if (module != null)
{
module.SetCurrentMode(TaskModeEnum.);
}
else
{
Logs.Write($"【进入入库模式成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
}
}
/// <summary>
/// 标签返回进入出库模式信号
/// </summary>
/// <param name="data"></param>
public void GoInOutStoreReturnProcess(byte[] data, int boardId)
{
//获取对应的模组
var module = MXL4Modules.Where(t => t.BoardId == boardId)
.FirstOrDefault();
if (module != null)
{
module.SetCurrentMode(TaskModeEnum.);
}
else
{
Logs.Write($"【进入出库模式成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
}
}
/// <summary>
/// 标签返回进入盘点模式信号
/// </summary>
/// <param name="data"></param>
public void GoInStocktakingReturnProcess(byte[] data, int boardId)
{
//获取对应的模组
var module = MXL4Modules.Where(t => t.BoardId == boardId)
.FirstOrDefault();
if (module != null)
{
module.SetCurrentMode(TaskModeEnum.);
}
else
{
Logs.Write($"【进入盘点模式成功】货架【{ShelfCode}】通过板子ID【{boardId}】未找到对应模组!");
}
}
/// <summary>
/// 标签返回入库成功信号
/// </summary>
/// <param name="data"></param>
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,
ItemNo = task.ItemNo,
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,
Qty = task.Qty,
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 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,
ItemNo = task.ItemNo,
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,
Qty = task.Qty,
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 StocktakingSuccessProcess(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,
ItemNo = task.ItemNo,
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,
Qty = task.Qty,
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
}
}