using CirculateTool.Attribute; using System.Text.RegularExpressions; using WcsMain.ApiClient.DataEntity.WmsEntity; using WcsMain.Common; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.DataService; using WcsMain.Enum.Convey; using WcsMain.EquipOperation.Convey; using WcsMain.ExtendMethod; using WcsMain.Plugins; namespace WcsMain.Business.CirculationTask.Convey; [Circulation] public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation conveyOperation, WmsWebApiPost wmsWebApiPost, AppConveyTaskDao conveyTaskDao) { private static List? _pickStands; // 拣选站台 /// /// 拣选台上报料箱 /// /// [Circulation("拣选台上报料箱")] public bool UploadInfo() { if (_pickStands == default) { _pickStands = conveyStandDao.Query(new AppConveyStand() { StandStatus = 1, StandType = (int)ConveyStandTypeEnum.pick }); return true; } if (_pickStands.Count < 1) { ConsoleLog.Info($"【提示】无拣选站台信息,监控已经停止"); return false; } List tasks = new(); foreach (AppConveyStand stand in _pickStands) { Thread.Sleep(20); Task task = new(() => { string code = conveyOperation.ReadStandCode(stand.Area!); code = Regex.Replace(code, "\\W", ""); if (string.IsNullOrEmpty(code)) { return; } ConsoleLog.Info($"【提示】料箱:{code} 已经到达拣选站台:{stand.Area}"); conveyOperation.ClearStandCodeStatus(stand.Area!); // 查询 条码 对应的任务 List? pickTasks = conveyTaskDao.Query(new AppConveyTask() { VehicleNo = code, TaskType = (int)ConveyTaskTypeEnum.pick, Location = stand.Area }); if (pickTasks == default || pickTasks.Count < 1) { ConsoleLog.Error($"【异常】拣选站台{stand.Area} 料箱:{code} 找不到对应任务"); conveyOperation.ClearStandCodeStatus(stand.Area!); return; } var pickTask = pickTasks[0]; // 拣选任务 // 更新表内拣选时间和状态 conveyTaskDao.Update(new AppConveyTask() { TaskId = pickTask.TaskId, TaskStatus = (int)ConveyTaskStatusEnum.arrive, CompleteTime = DateTime.Now, Remark = "PLC上报料箱到达" }); // 发送wms料箱到达 UploadPickStandRequest request = new UploadPickStandRequest() { PickStand = stand.Area, VehicleNo = pickTask.VehicleNo, Remark = "" }; var responseEntity = wmsWebApiPost.HttpPost(request, CommonData.AppApiBaseInfos.GetAddress("UploadBoxArrive") ?? "", 5000); if (responseEntity.IsSend) // 发送失败不处理,下一次循环在发送 { // 只要发送成功则不再发送 ConsoleLog.Info( $"拣选站台{stand.Area} 获得对应料箱:{pickTask.VehicleNo} 上报成功,WMS返回:{responseEntity.ResponseMsg}"); var result = responseEntity.ResponseEntity; conveyOperation.ClearStandCodeStatus(stand.Area!); } }); task.Start(); tasks.Add(task); } Task.WaitAll(tasks.ToArray()); return true; } }