using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common.ConveyorLineEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_DTO.WMSInfo; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.DTO; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_Tasks.ConveyorLineJob; namespace WIDESEAWCS_Tasks { public partial class CommonConveyorLineJob { /// /// 输送线 /// /// /// public List ConveyorLineExtend(CommonConveyorLine conveyorLine) { List childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode); List strings = new List() { "1003", "1006", "1007" }; childDeviceCodes.AddRange(strings); List tasks = new List(); foreach (string childDeviceCode in childDeviceCodes) { try { ConveyorLineTaskCommandR command = conveyorLine.ReadCustomer(childDeviceCode); _cacheService.AddOrUpdate(childDeviceCode, command); if (command != null) { if (childDeviceCode == "1002" && command.Status == (ushort)ConveyorStatus.Wait) { RequestInbound(conveyorLine, command, childDeviceCode); } else if (childDeviceCode == "1004" && command.Status == (ushort)ConveyorStatus.Stored) { ConveyorLineInFinish(conveyorLine, command, childDeviceCode); } else if (childDeviceCode == "1008" && command.Status == (ushort)ConveyorStatus.Stored) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); if (task != null) { #region MyRegion //List routers = _routerRepository.QueryData(x => x.StartPosi == task.TargetAddress && x.ChildPosiDeviceCode == "AGV" && x.Remark == "未占用"); //if (routers != null && routers.Count > 0) //{ // var router = routers.FirstOrDefault(); // if (router != null) // { // task.TaskState = TaskOutStatusEnum.Line_OutFinish.ObjToInt(); // task.CurrentAddress = childDeviceCode; // task.NextAddress = router.NextPosi; // task.TargetAddress = task.NextAddress; // router.Remark = "占用"; // _routerRepository.UpdateData(router); // _taskService.UpdateData(task); // } //} #endregion task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt(); WMSTaskDTO WMStask = _mapper.Map(task); _taskService.AddTask_Hty(task, TaskOperateTypeEnum.AutoComplete); HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary()); } } } } catch (Exception ex) { continue; } } return tasks; } /// /// 输送线请求入库 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode) { Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.Barcode); //Dt_Task task = _taskService.QueryConveyorLineTaskNum(conveyorLine.DeviceCode, childDeviceCode, command.TaskNum); if (task != null) { if (command.Spec > 0) { DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == command.Spec.ToString() && x.DeviceProParamName == nameof(ConveyorLineTaskCommandR.Spec)); string? Des = deviceProtocolDetail?.ProtocolDetailDes; if (Des != task.ExceptionMessage) { task.ExceptionMessage = deviceProtocolDetail?.ProtocolDetailDes; _taskService.UpdateData(task); } return; } ConveyorLineDTO lineDTO = new ConveyorLineDTO() { TaskNum = task.TaskNum, stationCode = childDeviceCode, Barcode = command.Barcode, Spec = command.Spec, Weight = command.Weight, }; var content = _taskService.RequestWMSTask(lineDTO); if (!content.Status) { task.ExceptionMessage = content?.Message; _taskService.UpdateData(task); return; } //if (content.Status) //{ task.CurrentAddress = childDeviceCode; List routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.TargetAddress); if (routers.Count > 0) { task.NextAddress = routers.FirstOrDefault().ChildPosi; } //task.NextAddress = AppSettings.Configuration["OKAddress"]; task.ExceptionMessage = null; ConveyorLineTaskCommandW taskCommand = _mapper.Map(task); taskCommand.WriterTrue = (short)command.inRead; if (conveyorLine.SendCommand(taskCommand, childDeviceCode)) _taskService.UpdateTaskStatusToNext(task); //} //else //{ // //if (content.Code == 404)//修改终点地址 // //{ // task.CurrentAddress = childDeviceCode; // task.NextAddress = AppSettings.Configuration["NGAddress"]; // task.ExceptionMessage = content.Message; // task.TaskState = (int)TaskInStatusEnum.InException; // ConveyorLineTaskCommandW taskCommand = _mapper.Map(task); // taskCommand.WriterTrue = 1; // if (conveyorLine.SendCommand(taskCommand, childDeviceCode)) _taskService.UpdateData(task); // //} //} } else { Dt_Task _Task = new Dt_Task(); _Task.TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")); _Task.CurrentAddress = childDeviceCode; _Task.NextAddress = "1001"; ConveyorLineTaskCommandW taskCommand = _mapper.Map(_Task); taskCommand.WriterTrue = (short)command.inRead; } } /// /// 输送线请求入库下一地址 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); if (task != null) { Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); //if (newTask != null) //{ // ConveyorLineTaskCommandW taskCommand = _mapper.Map(newTask); // conveyorLine.SendCommand(taskCommand, childDeviceCode); //} } } /// /// 输送线入库完成 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode) { //Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.Barcode, childDeviceCode); if (task != null) _taskService.UpdateTaskStatusToNext(task); task = _taskService.QueryCompletedConveyorLineTask(command.Barcode, childDeviceCode); if (task != null && string.IsNullOrEmpty(task.TargetAddress)) { _taskService.StackerCraneRequestInbound(task); } //if (task != null) //{ // //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); // //向WMS更新任务状态,WMS返回入库任务终点 // WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); // //Console.Out.WriteLine(content.Serialize()); //} } /// /// 输送线请求出信息 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode) { Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.Barcode); if (task != null) { ConveyorLineTaskCommandW taskCommand = _mapper.Map(task); conveyorLine.SendCommand(taskCommand, childDeviceCode); _taskService.UpdateTaskStatusToNext(task); } } /// /// 输送线请求出库下一地址 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); if (task != null) { Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress); //if (newTask != null) //{ // ConveyorLineTaskCommandW taskCommand = _mapper.Map(newTask); // conveyorLine.SendCommand(taskCommand, childDeviceCode); //} } } /// /// 输送线出库完成 /// /// 输送线实例对象 /// 读取的请求信息 /// 子设备编号 public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode) { Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode); if (task != null) { //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode); WebResponseContent content = _taskService.UpdateTaskStatusToNext(task); //Console.Out.WriteLine(content.Serialize()); } } } }