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,托盘 } }