using HH.WCS.Mobox3.DoubleCoin.dispatch;
using HH.WCS.Mobox3.DoubleCoin.util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.Mobox3.DoubleCoin.device
{
///
/// 小车读卡器通过TCPServer发送消息存储在这
///
public class ScanCodeHelper
{
public static Dictionary scanInfoDic = new Dictionary();//内存信息缓存
///
/// 校验RFID
///
///
///
///
public static bool Analysis(string address, string data)
{
var agvScan = Settings.AgvScanDevices.FirstOrDefault(a => a.ScanAddress == address);
if (agvScan != null)
{
ScanInfoModel scanInfoModel = new ScanInfoModel();
scanInfoModel.AgvCode = agvScan.AgvCode;
scanInfoModel.AgvAddress = agvScan.ScanAddress;
scanInfoModel.RFID = data;//这里要筛选
if (scanInfoDic.ContainsKey(agvScan.AgvCode))
{
scanInfoDic[agvScan.AgvCode] = scanInfoModel;
}
else
{
scanInfoDic.Add(agvScan.AgvCode, scanInfoModel);
}
return GetRFIDByAgvCode(scanInfoModel.AgvCode, scanInfoModel.RFID);
}
else
{
LogHelper.Info("在配置表中未找到该读卡器地址:" + address + "的信息", "TCP");
}
return false;
}
internal static bool GetRFIDByAgvCode(string agvCode,string RFID)
{
var db = new SqlHelper().GetInstance();
var task = new TN_Task();
task = db.Queryable().Where(a => a.S_EQ_NO == agvCode).OrderByDescending(b => b.T_START_TIME).First();
if (task != null &&
(
RFID == task.S_CNTR_CODE
|| RFID.Contains(task.S_CNTR_CODE)
|| task.S_CNTR_CODE.Contains(RFID)
))
{
LogHelper.Info($"校验成功Agv:{agvCode},读卡器的容器号:{RFID},任务的容器号:{ task.S_CNTR_CODE}");
return true;
}
else
{
LogHelper.Info($"校验失败Agv:{agvCode},读卡器的容器号:{RFID},任务的容器号:{ task?.S_CNTR_CODE ?? "任务未找到"}");
//校验失败就取消任务
//var task1 = Task.Run(() =>
//{
// if (task != null)
// {
// var res = NDCApi.ChangeOrderParam(task.S_CODE, 6, "2");
// LogHelper.Info($"AGV校验RFID失败,发送取消任务命令参数6改为2,任务号{task.S_CODE}");
// if (res.err_code==0)
// {
// LogHelper.Info($"AGV校验RFID失败,发送取消任务命令参数6改为2,任务号{task.S_CODE},结果:取消成功");
// }
// else
// {
// LogHelper.Info($"AGV校验RFID失败,发送取消任务命令参数6改为2,任务号{task.S_CODE},结果:取消失败:{res.err_msg}");
// }
// }
//});
return false;
}
}
}
public class ScanInfoModel
{
public string AgvCode { get; set; }//agv编号
public string AgvAddress { get; set; }//agv读卡器地址
public string RFID { get; set; }//agv读卡器上报的RFID,托盘
}
}