wcs_server_kate_suzhou/WcsMain/Business/CirculationTask/Convey/ReadScanCode.cs

98 lines
3.2 KiB
C#
Raw Normal View History

using CirculateTool.Attribute;
2024-06-12 07:29:44 +08:00
using WcsMain.Business.Convey.HistoryDataHandler;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.DataService;
2024-06-12 07:29:44 +08:00
using WcsMain.Enum.General;
using WcsMain.EquipOperation.Convey;
namespace WcsMain.Business.CirculationTask.Convey;
/// <summary>
/// 箱式线读取扫码信息
/// </summary>
[Circulation]
public class ReadScanCode(AppRouterMethodDao routerMethodDao, ConveyOperation conveyOperation, HistoryConveyDataHander historyConveyDataHander, AppScanRecordDao scanRecordDao, DataBaseData dataBaseData)
2024-06-12 07:29:44 +08:00
{
private static List<AppRouterMethod>? routers;
/// <summary>
/// 读取扫码数据
/// </summary>
/// <returns></returns>
[Circulation("读取扫码数据", 300)]
public bool ReadData()
{
if(routers == default)
{
routers = routerMethodDao.Query(new AppRouterMethod() { RouterStatus = (int)TrueFalseEnum.TRUE });
2024-06-12 07:29:44 +08:00
return true;
}
List<Task> tasks = [];
foreach(AppRouterMethod router in routers)
{
tasks.Add(Task.Factory.StartNew(() =>
{
2024-08-01 16:20:04 +08:00
(var readErrText, var scanOk, var code) = conveyOperation.ReadScanInfo(router.Area);
if (!string.IsNullOrEmpty(readErrText))
{
ConsoleLog.Exception($"【异常】读取扫码:{router.Area} 数据异常,信息:{readErrText}");
Thread.Sleep(5000);
return; // 不读了,估计网断了
}
if (scanOk != (short)TrueFalseEnum.TRUE) { return; }
if (!CheckCode(code, router.Area ?? "")) { return; }
string clearErrText = conveyOperation.ClearScanStatus(router.Area);
2024-08-01 16:20:04 +08:00
if (!string.IsNullOrEmpty(clearErrText))
2024-06-12 07:29:44 +08:00
{
ConsoleLog.Exception($"【异常】扫码:{router.Area} 清理读码信号异常,信息:{clearErrText}");
}
2024-08-01 16:20:04 +08:00
else
{
ConsoleLog.Success($"扫码:{router.Area} 清理读码信号成功,点位:{router.Area}");
}
historyConveyDataHander.GetData("-", code, router.Area ?? "");
scanRecordDao.Insert(new AppScanRecord() { RecordId = dataBaseData.GetNewUUID2(), ScanId = router.Area, Code = code, ScanTime = DateTime.Now });
2024-06-12 07:29:44 +08:00
}));
}
Task.WaitAll([.. tasks]);
return true;
}
Dictionary<string, DateTime>? codeData;
DateTime firstTime = DateTime.Now;
private bool CheckCode(string codeIn, string area)
{
string code = codeIn + area;
if(codeData == default) codeData = [];
if ((DateTime.Now - firstTime).TotalSeconds > 5.5)
{
codeData.Clear();
}
firstTime = DateTime.Now;
if (!codeData.TryGetValue(code, out DateTime value))
{
value = DateTime.Now;
codeData.Add(code, value);
return true;
}
DateTime dateTime = value;
TimeSpan timeSpan = DateTime.Now - dateTime;
if(timeSpan.TotalSeconds > 5)
{
codeData[code] = dateTime;
return true;
}
return false;
}
2024-06-12 07:29:44 +08:00
}