//using Newtonsoft.Json;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using WIDESEAWCS_Common.TaskEnum;
//using WIDESEAWCS_Common;
//using WIDESEAWCS_Core.Helper;
//using WIDESEAWCS_Core;
//using WIDESEAWCS_DTO.TaskInfo;
//using WIDESEAWCS_DTO.WMS;
//using WIDESEAWCS_Model.Models;
//using WIDESEAWCS_QuartzJob;
//using WIDESEAWCS_Tasks.ConveyorLineJob;
//using WIDESEAWCS_QuartzJob.DeviceBase;
//using WIDESEAWCS_QuartzJob.DTO;
//using AutoMapper;
//using WIDESEAWCS_IProcessRepository;
//using WIDESEAWCS_ISystemServices;
//using WIDESEAWCS_ITaskInfoRepository;
//using WIDESEAWCS_ITaskInfoService;
//using WIDESEAWCS_QuartzJob.Service;
//using HslCommunication;
//namespace WIDESEAWCS_Tasks.Public
//{
// public class PublicCommonTask
// {
// public readonly ITaskService _taskService;
// private readonly ITaskRepository _taskRepository;
// private readonly ITaskExecuteDetailService _taskExecuteDetailService;
// private readonly IRouterService _routerService;
// private readonly IPlatFormRepository _platFormRepository;
// private readonly ISys_ConfigService _sys_ConfigService;
// private readonly IMapper _mapper;
// public PublicCommonTask(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, ITaskRepository taskRepository, IPlatFormRepository platFormRepository, ISys_ConfigService sys_ConfigService)
// {
// _taskService = taskService;
// _taskExecuteDetailService = taskExecuteDetailService;
// _routerService = routerService;
// _mapper = mapper;
// _taskRepository = taskRepository;
// _platFormRepository = platFormRepository;
// _sys_ConfigService = sys_ConfigService;
// }
// ///
// /// 处理出库任务
// ///
// public static void HandleTaskOut(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue, Dt_Task taskOut)
// {
// if (taskOut == null) return;
// //var taskCommand = MapTaskCommand(taskOut, command);
// bool isOutTray = taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray;
// bool isOutboundAndOutFinish = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.SC_OutFinish;
// bool isOutboundAndLineOutExecuting = taskOut.TaskType == (int)TaskOutboundTypeEnum.Outbound && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting;
// if (isOutTray || isOutboundAndOutFinish || !isOutboundAndLineOutExecuting)
// {
// conveyorLine.SendCommand(taskCommand, childDeviceCode);
// ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
// _taskService.UpdateTaskStatusToNext(taskOut);
// }
// else if (taskOut.TaskType == (int)TaskOutboundTypeEnum.OutTray && taskOut.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting)
// {
// CompleteWmsTask(taskOut, command, conveyorLine, childDeviceCode, ProtocalDetailValue);
// }
// }
// ///
// /// 处理新任务
// ///
// private void HandleNewTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
// {
// if ((conveyorLine.DeviceCode == "1003" && childDeviceCode == "1016") || (conveyorLine.DeviceCode == "1005" && childDeviceCode == "1048"))
// {
// CreateAndSendEmptyTrayTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
// }
// else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1088") || (conveyorLine.DeviceCode == "1004" && childDeviceCode == "1339"))
// {
// RequestWmsTask(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
// }
// //else if ((conveyorLine.DeviceCode == "1001" && childDeviceCode == "1068"))
// //{
// // ConveyorLineOutFinish(conveyorLine, command, childDeviceCode, ProtocalDetailValue);
// //}
// }
// ///
// /// 完成WMS任务
// ///
// private void CompleteWmsTask(Dt_Task taskOut, ConveyorLineTaskCommand command, CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue)
// {
// if (command.Barcode == "NoRead")
// {
// var NGAddress = _platFormRepository.QueryFirst(x => x.PlatCode == taskOut.TargetAddress).Capacity;
// taskOut.TargetAddress = NGAddress.ToString();
// }
// var keys = new Dictionary()
// {
// {"taskNum", taskOut.TaskNum}
// };
// var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
// var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
// var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue;
// if (wmsBase == null || completeTask == null)
// {
// throw new InvalidOperationException("WMS IP 未配置");
// }
// var wmsIpAddress = wmsBase + completeTask;
// var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result;
// WebResponseContent content = JsonConvert.DeserializeObject(result);
// if (content.Status)
// {
// ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
// _taskService.UpdateTaskStatusToNext(taskOut);
// }
// }
// ///
// /// 创建并发送空托盘任务
// ///
// public void CreateAndSendEmptyTrayTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
// {
// if (command.Barcode != "NoRead")
// {
// var taskDTO = CreateEmptyTrayTaskDto(command.Barcode, childDeviceCode);
// if (_taskRepository.QueryFirst(x => x.PalletCode == taskDTO.PalletCode) != null)
// {
// //WriteInfo(conveyorLine.DeviceName, "当前托盘存在任务");
// return;
// }
// var content = CreateAndSendTask(taskDTO);
// if (content.Status)
// {
// var task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode);
// if (task != null)
// {
// var taskCommand = MapTaskCommand(task, command);
// conveyorLine.SendCommand(taskCommand, childDeviceCode);
// ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
// _taskService.UpdateTaskStatusToNext(task);
// }
// }
// }
// }
// ///
// /// 创建空托盘任务DTO
// ///
// private WMSTaskDTO CreateEmptyTrayTaskDto(string barcode, string childDeviceCode)
// {
// var request = new RequestTaskDto()
// {
// Position = childDeviceCode,
// PalletCode = barcode,
// };
// var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
// var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue;
// var requestTrayInTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTrayInTask)?.ConfigValue;
// if (wmsBase == null || requestTrayInTask == null)
// {
// throw new InvalidOperationException("WMS IP 未配置");
// }
// var wmsIpAddrss = wmsBase + requestTrayInTask;
// var result = HttpHelper.PostAsync(wmsIpAddrss, request.ToJsonString()).Result;
// if (result == null)
// return new WMSTaskDTO();
// WebResponseContent content = JsonConvert.DeserializeObject(result);
// if (!content.Status)
// return new WMSTaskDTO();
// return JsonConvert.DeserializeObject(content.Data.ToString());
// }
// ///
// /// 请求WMS任务
// ///
// private async void RequestWmsTask(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
// {
// var content = await _taskService.RequestWMSTask(command.Barcode, childDeviceCode);
// if (content.Status)
// {
// var task = _taskService.QueryBarCodeConveyorLineTask(command.Barcode, childDeviceCode);
// if (task != null)
// {
// var taskCommand = MapTaskCommand(task, command);
// conveyorLine.SendCommand(taskCommand, childDeviceCode);
// ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
// _taskService.UpdateTaskStatusToNext(task);
// }
// }
// }
// ///
// /// 输送线交互完成
// ///
// /// 输送线实例对象
// /// 子设备编号
// /// 线体当前bool读取偏移地址
// /// 值
// public void ConveyorLineSendFinish(CommonConveyorLine conveyorLine, string childDeviceCode, int ProtocalDetailValue, bool value)
// {
// DeviceProDTO? devicePro = conveyorLine.DeviceProDTOs.Where(x => x.DeviceProParamType == nameof(DeviceCommand) && x.DeviceChildCode == childDeviceCode).OrderBy(x => x.DeviceProOffset).FirstOrDefault();
// string[] x = devicePro.DeviceProAddress.Split('.');
// x[x.Length - 1] = (ProtocalDetailValue + 1).ToString();
// string DeviceProAddress = string.Join(".", x);
// conveyorLine.Communicator.Write(DeviceProAddress, value);
// }
// ///
// /// 输送线入库完成
// ///
// /// 输送线实例对象
// /// 读取的请求信息
// /// 子设备编号
// /// 线体当前bool读取偏移地址
// public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommand command, string childDeviceCode, int ProtocalDetailValue)
// {
// var task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
// if (task != null && task.TaskState != (int)TaskInStatusEnum.Line_InFinish)
// {
// ConveyorLineSendFinish(conveyorLine, childDeviceCode, ProtocalDetailValue, true);
// WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
// Console.Out.WriteLine(content.Serialize());
// }
// }
// ///
// /// 创建任务
// ///
// public WebResponseContent CreateAndSendTask(WMSTaskDTO taskDTO)
// {
// var content = _taskService.ReceiveWMSTask(new List { taskDTO });
// if (content.Status)
// {
// Console.WriteLine($"{taskDTO.TaskType}呼叫成功");
// }
// return content;
// }
// }
//}