|  |  | 
 |  |  | using Autofac.Core; | 
 |  |  | using HslCommunication; | 
 |  |  | using HslCommunication.Core; | 
 |  |  | using HslCommunication.Enthernet; | 
 |  |  | using HslCommunication.WebSocket; | 
 |  |  | using Microsoft.Extensions.Hosting; | 
 |  |  | using Microsoft.VisualBasic.FileIO; | 
 |  |  | using Newtonsoft.Json; | 
 |  |  | using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; | 
 |  |  | using Quartz; | 
 |  |  | using SixLabors.ImageSharp.PixelFormats; | 
 |  |  | using System; | 
 |  |  | 
 |  |  | using WIDESEAWCS_Common.TaskEnum; | 
 |  |  | using WIDESEAWCS_Communicator; | 
 |  |  | using WIDESEAWCS_Core; | 
 |  |  | using WIDESEAWCS_Core.BaseRepository; | 
 |  |  | using WIDESEAWCS_Core.Helper; | 
 |  |  | using WIDESEAWCS_ISystemServices; | 
 |  |  | using WIDESEAWCS_ITaskInfoService; | 
 |  |  | using WIDESEAWCS_Model.Models; | 
 |  |  | using WIDESEAWCS_QuartzJob; | 
 |  |  | using WIDESEAWCS_QuartzJob.DeviceBase; | 
 |  |  | using WIDESEAWCS_QuartzJob.StackerCrane.Enum; | 
 |  |  | using WIDESEAWCS_TaskInfoService; | 
 |  |  | using WIDESEAWCS_Tasks.OHT; | 
 |  |  |  | 
 |  |  | namespace WIDESEAWCS_Tasks | 
 |  |  | 
 |  |  |     public class OHTJob : JobBase, IJob | 
 |  |  |     { | 
 |  |  |         public static string InorOut = "In"; | 
 |  |  |         public static OHTReadData oHTReadData = new OHTReadData(); | 
 |  |  |         private readonly ITaskService _taskService; | 
 |  |  |         private readonly Idt_ErrormsginfoService _ErrormsginfoService; | 
 |  |  |         private readonly IRepository<Dt_Task_hty> _taskhtyRepository; | 
 |  |  |         WebSocketServer _webSocketServer; | 
 |  |  |         public OHTJob(ITaskService taskService, WebSocketServer webSocketServer) | 
 |  |  |         OtherDevice devicese; | 
 |  |  |         OtherDevice deviceses; | 
 |  |  |         public OHTJob(ITaskService taskService, WebSocketServer webSocketServer, Idt_ErrormsginfoService errormsginfoService, IRepository<Dt_Task_hty> taskhtyRepository) | 
 |  |  |         { | 
 |  |  |             _taskService = taskService;//注å
¥ | 
 |  |  |             _webSocketServer = webSocketServer; | 
 |  |  |             _ErrormsginfoService = errormsginfoService; | 
 |  |  |             _taskhtyRepository = taskhtyRepository; | 
 |  |  |         } | 
 |  |  |         public Task Execute(IJobExecutionContext context) | 
 |  |  |         { | 
 |  |  |             | 
 |  |  |             //return Task.CompletedTask; | 
 |  |  |             bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); | 
 |  |  |             if (flag && value != null) | 
 |  |  |             { | 
 |  |  |                 //天车PLC对象 | 
 |  |  |                 OtherDevice device = (OtherDevice)value; | 
 |  |  |                 OtherDevice zxj = (OtherDevice)Storage.Devices.Find(v => v.DeviceName == "鳿æ´å½¢æº"); | 
 |  |  |                 OtherDevice gzj = (OtherDevice)Storage.Devices.Find(v => v.DeviceName == "é³æè§æ´æº"); | 
 |  |  |                 devicese = zxj; | 
 |  |  |                 deviceses = gzj; | 
 |  |  |  | 
 |  |  |                  | 
 |  |  |                 //æ´å½¢æºPLC对象 | 
 |  |  |                 var ZXJdevice = Storage.Devices.Find(v => v.DeviceName == "鳿æ´å½¢æº"); | 
 |  |  |                 //è§æ´æºPLC对象 | 
 |  |  |                 var GZJevice = Storage.Devices.Find(v => v.DeviceName == "é³æè§æ´æº"); | 
 |  |  |                 //if (!device.Communicator.IsConnected || !ZXJdevice.Communicator.IsConnected || !GZJevice.Communicator.IsConnected) | 
 |  |  |                 //{ | 
 |  |  |                 //    return Task.CompletedTask; | 
 |  |  |                 //} | 
 |  |  |                 try | 
 |  |  |                 { | 
 |  |  |                     //Example | 
 |  |  |                     //device.GetValue  è¯»å | 
 |  |  |                     //device.SetValue  åå
¥ | 
 |  |  |                     //_taskService.Repository; //ä»å¨å±ï¼è¿è¡æ°æ®åºè®¿é® | 
 |  |  |                     OHTReadData oHTReadData = new OHTReadData(); | 
 |  |  |                      | 
 |  |  |                     #region è¯»åå¤©è½¦è®¾å¤æ°æ® | 
 |  |  |                     oHTReadData.R_HeartBeat = device.GetValue<DeviceDBName, bool>(DeviceDBName.R_HeartBeat); | 
 |  |  |                     oHTReadData.R_RunMode = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RunMode); | 
 |  |  |                     oHTReadData.R_RunState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_RunState); | 
 |  |  |                     oHTReadData.R_AlarmCode = device.GetValue<DeviceDBName, short>(DeviceDBName.R_AlarmCode); | 
 |  |  |                     oHTReadData.R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState); | 
 |  |  |                     oHTReadData.R_CurrentLine = device.GetValue<DeviceDBName, int>(DeviceDBName.R_CurrentLine); | 
 |  |  |                     oHTReadData.R_CurrentColumn = device.GetValue<DeviceDBName, int>(DeviceDBName.R_CurrentColumn); | 
 |  |  |                     oHTReadData.R_RiseUp_Position = device.GetValue<DeviceDBName, int>(DeviceDBName.R_RiseUp_Position); | 
 |  |  |                     oHTReadData.R_TaskNumber = device.GetValue<DeviceDBName, int>(DeviceDBName.R_TaskNumber); | 
 |  |  |                     oHTReadData.R_Loaded_1 = device.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_1); | 
 |  |  |                     oHTReadData.R_Loaded_2 = device.GetValue<DeviceDBName, short>(DeviceDBName.R_Loaded_2); | 
 |  |  |                     oHTReadData.weight = device.GetValue<DeviceDBName, float>(DeviceDBName.weight); | 
 |  |  |                      | 
 |  |  |                     #region æµè¯ç¨ | 
 |  |  |                     //oHTReadData.R_HeartBeat = 1; | 
 |  |  |                     //oHTReadData.R_RunMode = 2; | 
 |  |  |                     //oHTReadData.R_RunState = 3; | 
 |  |  |                     //oHTReadData.R_AlarmCode = 4; | 
 |  |  |                     //oHTReadData.R_TaskState = 5; | 
 |  |  |                     //oHTReadData.R_CurrentLine = 6; | 
 |  |  |                     //oHTReadData.R_CurrentColumn = 7; | 
 |  |  |                     //oHTReadData.R_RiseUp_Position = 8; | 
 |  |  |                     //oHTReadData.R_TaskNumber = 9; | 
 |  |  |                     //oHTReadData.R_Loaded_1 =10; | 
 |  |  |                     //oHTReadData.R_Loaded_2 = 11; | 
 |  |  |                     //oHTReadData.R_Code_1 = "12"; | 
 |  |  |                     //oHTReadData.R_Code_2 = "13"; | 
 |  |  |                     //oHTReadData.R_Load_Requst_1 =true; | 
 |  |  |                     //oHTReadData.R_Load_Requst_2 = false; | 
 |  |  |                     #endregion | 
 |  |  |  | 
 |  |  |                     #endregion | 
 |  |  |  | 
 |  |  |                     //ç¶ææ°æ®åéç»å端 | 
 |  |  |                     string ohtData = JsonConvert.SerializeObject(oHTReadData); | 
 |  |  |                     _webSocketServer.PublishAllClientPayload(ohtData); | 
 |  |  |  | 
 |  |  |                     #region å¤©è½¦å®æä»»å¡é»è¾ | 
 |  |  |                     //å ä¸ºå¤©çä»»å¡éè¦å段åéï¼æä»¥åè´§å®æä¸æ¾è´§å®æéè¦åç¬åé»è¾æ§å¶ | 
 |  |  |                     //å¤æå¤©è½¦å½åææ²¡æåè´§å®æä»»å¡ä¿¡å· | 
 |  |  | 
 |  |  |                         { | 
 |  |  |                             throw new Exception(string.Format("天车åè´§å®æä»»å¡æªæ¥è¯¢å°ä»»å¡å·{0}", oHTReadData.R_TaskNumber)); | 
 |  |  |                         } | 
 |  |  |                         //å
¥åº | 
 |  |  |                         if (nawtask.TaskType == (int)TaskInboundTypeEnum.Inbound) | 
 |  |  |                         { | 
 |  |  |                             //妿任å¡çç¶ææ¯å¤©è½¦å
¥åºåè´§æ§è¡ä¸ | 
 |  |  |                             //妿任å¡çç¶ææ¯å¦æ¯å¤©è½¦å
¥åºåè´§æ§è¡ä¸ | 
 |  |  |                             if (nawtask.TaskState == (int)TaskInStatusEnum.Line_InGrabExecuting) | 
 |  |  |                             { | 
 |  |  |                                 //ä¿®æ¹ç¶æ | 
 |  |  |                                 WebResponseContent result = _taskService.UpdateTaskStatusToLine_Ingrab(nawtask); | 
 |  |  |                                 if (result.Status) | 
 |  |  |                                 { | 
 |  |  | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         //åºåº | 
 |  |  |                         else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.Outbound) | 
 |  |  |                         { | 
 |  |  |                             //妿任å¡ç¶ææ¯å¤©è½¦åºåºåè´§æ§è¡ä¸ | 
 |  |  |                             //妿任å¡ç¶ææ¯å¦æ¯å¤©è½¦åºåºåè´§æ§è¡ä¸ | 
 |  |  |                             if (nawtask.TaskState == (int)TaskOutStatusEnum.Line_OutGrabExecuting) | 
 |  |  |                             { | 
 |  |  |                                 //ä¿®æ¹ç¶æ | 
 |  |  |                                 WebResponseContent result = _taskService.UpdateTaskStatusToLine_Outgrab(nawtask); | 
 |  |  |                                 if (result.Status) | 
 |  |  |                                 { | 
 |  |  |                                     device.SetValue(DeviceDBName.W_ConfirmSignal, 3); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         //ç´æ¥åºåº | 
 |  |  |                         else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.OutInventory) | 
 |  |  |                         { | 
 |  |  |                             //ä¿®æ¹ç¶æ | 
 |  |  |                             WebResponseContent result = _taskService.UpdateTaskStatusToLine_Outgrab(nawtask); | 
 |  |  |                             if (result.Status) | 
 |  |  |                             { | 
 |  |  |                                 device.SetValue(DeviceDBName.W_ConfirmSignal, 3); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         //åé¤åºåº | 
 |  |  |                         else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.TiChuChuKu) | 
 |  |  |                         { | 
 |  |  |                             //ä¿®æ¹ç¶æ | 
 |  |  |                             WebResponseContent result = _taskService.UpdateTaskStatusToLine_Outgrab(nawtask); | 
 |  |  |                             if (result.Status) | 
 |  |  |                             { | 
 |  |  |                                 //gzj.SetValue(DeviceDBName.W_GZJ_LockGZJ, true); | 
 |  |  |                                 device.SetValue(DeviceDBName.W_ConfirmSignal, 3); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         //åé¤å
¥åº | 
 |  |  |                         else if (nawtask.TaskType == (int)TaskInboundTypeEnum.TiChuRuKu) | 
 |  |  |                         { | 
 |  |  |                             //ä¿®æ¹ç¶æ | 
 |  |  |                             WebResponseContent result = _taskService.UpdateTaskStatusToLine_Ingrab(nawtask); | 
 |  |  |                             if (result.Status) | 
 |  |  |                             { | 
 |  |  |                                 device.SetValue(DeviceDBName.W_ConfirmSignal, 3); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         //åé¤ç´æ¥åºåº | 
 |  |  |                         else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.TiChuZhiJieChuKu) | 
 |  |  |                         { | 
 |  |  |                             //ä¿®æ¹ç¶æ | 
 |  |  |                             WebResponseContent result = _taskService.UpdateTaskStatusToLine_Outgrab(nawtask); | 
 |  |  |                             if (result.Status) | 
 |  |  |                             { | 
 |  |  |                                 //gzj.SetValue(DeviceDBName.W_GZJ_LockGZJ, true); | 
 |  |  |                                 device.SetValue(DeviceDBName.W_ConfirmSignal, 3); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                         return Task.CompletedTask; | 
 |  |  | 
 |  |  |                         { | 
 |  |  |                             device.SetValue(DeviceDBName.W_ConfirmSignal, 3); | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                         var nawtask = _taskService.QueryTakNnmTask(oHTReadData.R_TaskNumber); | 
 |  |  |                         if (nawtask == null) | 
 |  |  |                         { | 
 |  |  |                             throw new Exception(string.Format("天车åè´§å®æä»»å¡æªæ¥è¯¢å°ä»»å¡å·{0}", oHTReadData.R_TaskNumber)); | 
 |  |  |                         } | 
 |  |  |                         //åé¤åºåºä¸åé¤ç´æ¥åºåº | 
 |  |  |                         //if (nawtask.TaskType == (int)TaskOutboundTypeEnum.TiChuChuKu || nawtask.TaskType == (int)TaskOutboundTypeEnum.TiChuZhiJieChuKu) | 
 |  |  |                         //{ | 
 |  |  |                         //    gzj.SetValue(DeviceDBName.W_GZJ_LockGZJ, false); | 
 |  |  |                         //} | 
 |  |  |                         return Task.CompletedTask; | 
 |  |  |                     } | 
 |  |  |                     else if (oHTReadData.R_RunState == (int)RunStateEnum.MoveCompleted && oHTReadData.R_TaskState == (int)TaskStateEnum.TaskComplete) | 
 |  |  |                     { | 
 |  |  |                         //天车移å¨å®æ | 
 |  |  |                         WebResponseContent result = _taskService.StackCraneTaskCompleted(oHTReadData.R_TaskNumber, oHTReadData.weight); | 
 |  |  |                         if (result.Status) | 
 |  |  |                         { | 
 |  |  |                             //åé¤åºåºãç´æ¥åºåºç»å®æä¿¡å· | 
 |  |  |                             //List<Dt_Task_hty> Task_hty = _taskhtyRepository.QueryData(); | 
 |  |  |                             //int shu = Task_hty.Count - 1; | 
 |  |  |                             //int zhi = Task_hty[shu].TaskId; | 
 |  |  |                             //Dt_Task_hty lishi = _taskhtyRepository.QueryFirst(x => x.TaskId == zhi); | 
 |  |  |                             //if (lishi.TargetAddress == "40-2-1") | 
 |  |  |                             //{ | 
 |  |  |                             //    gzj.SetValue(DeviceDBName.W_GZJ_LockGZJ, false); | 
 |  |  |                             //} | 
 |  |  |                             device.SetValue(DeviceDBName.W_ConfirmSignal, 3); | 
 |  |  |                         } | 
 |  |  |                         return Task.CompletedTask; | 
 |  |  |                     } | 
 |  |  |                     #endregion | 
 |  |  |  | 
 |  |  |                     #region å¤©è½¦åéä»»å¡é»è¾ | 
 |  |  |                     if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic && oHTReadData.R_AlarmCode == (int)AlarmCodeEnum.Normal) | 
 |  |  |                     if (oHTReadData.R_RunMode == (int)RunModeEnum.Automatic) | 
 |  |  |                     { | 
 |  |  |                         if (oHTReadData.R_RunState == (int)RunStateEnum.Standby) | 
 |  |  |                         { | 
 |  |  |                             Dt_Task? task = GetTask(InorOut); | 
 |  |  |                             if (task != null) | 
 |  |  |                             //æ¥ç任塿± ä¸æ¯å¦å卿§è¡ä¸çä»»å¡ | 
 |  |  |                             var tasking = _taskService.QueryTasking(); | 
 |  |  |                             if (tasking==null) | 
 |  |  |                             { | 
 |  |  |                                 OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task); | 
 |  |  |                                 if (oHTTaskCommand != null) | 
 |  |  |                                 Dt_Task? task = GetTask(InorOut); | 
 |  |  |                                 if (task != null) | 
 |  |  |                                 { | 
 |  |  |                                     //todoï¼åå
¥ä»»å¡å½ä»¤ | 
 |  |  |                                     device.SetValue(DeviceDBName.W_Task_Type, oHTTaskCommand.W_Task_Type); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_Pick_Line, oHTTaskCommand.W_Pick_Line); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_Pick_Column, oHTTaskCommand.W_Pick_Column); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_Put_Line, oHTTaskCommand.W_Put_Line); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_Put_Column, oHTTaskCommand.W_Put_Column); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_Catch_1, oHTTaskCommand.W_Catch_1); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_Catch_2, oHTTaskCommand.W_Catch_2); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_TaskNumber, oHTTaskCommand.W_TaskNumber); | 
 |  |  |                                     device.SetValue(DeviceDBName.W_CheckValue, oHTTaskCommand.W_CheckValue); | 
 |  |  |                                     //确认信å·åå
¥1ï¼ä»»å¡ä¸è¾¾å®æ | 
 |  |  |                                     device.SetValue(DeviceDBName.W_ConfirmSignal, 1); | 
 |  |  |                                     Thread.Sleep(500); | 
 |  |  |                                     //WCSæ£æµå°å¤©è½¦çR_TaskState=1ï¼éè¿W_ConfirmSignalç½®2表示让天车å¼å§æ§è¡ä»»å¡ | 
 |  |  |                                     int R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState); | 
 |  |  |                                     if (R_TaskState == 1) | 
 |  |  |                                     OHTTaskCommand? oHTTaskCommand = ConvertToOHTTaskCommand(task); | 
 |  |  |                                     if (oHTTaskCommand != null) | 
 |  |  |                                     { | 
 |  |  |                                         device.SetValue(DeviceDBName.W_ConfirmSignal, 2); | 
 |  |  |                                         //ç»å¤©è½¦ä¸åä»»å¡ä¹åå°æ¤å¼å0 | 
 |  |  |                                         device.SetValue(DeviceDBName.W_ConfirmSignal, 0); | 
 |  |  |                                         //todoï¼åå
¥ä»»å¡å½ä»¤ | 
 |  |  |                                         device.SetValue(DeviceDBName.W_Task_Type, oHTTaskCommand.W_Task_Type); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_Pick_Line, oHTTaskCommand.W_Pick_Line); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_Pick_Column, oHTTaskCommand.W_Pick_Column); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_Put_Line, oHTTaskCommand.W_Put_Line); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_Put_Column, oHTTaskCommand.W_Put_Column); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_Catch_1, oHTTaskCommand.W_Catch_1); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_Catch_2, oHTTaskCommand.W_Catch_2); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_TaskNumber, oHTTaskCommand.W_TaskNumber); | 
 |  |  |                                         device.SetValue(DeviceDBName.W_CheckValue, oHTTaskCommand.W_CheckValue); | 
 |  |  |                                         //确认信å·åå
¥1ï¼ä»»å¡ä¸è¾¾å®æ | 
 |  |  |                                         device.SetValue(DeviceDBName.W_ConfirmSignal, 1); | 
 |  |  |                                         Thread.Sleep(500); | 
 |  |  |                                         //WCSæ£æµå°å¤©è½¦çR_TaskState=1ï¼éè¿W_ConfirmSignalç½®2表示让天车å¼å§æ§è¡ä»»å¡ | 
 |  |  |                                         int R_TaskState = device.GetValue<DeviceDBName, short>(DeviceDBName.R_TaskState); | 
 |  |  |                                         if (R_TaskState == 1) | 
 |  |  |                                         { | 
 |  |  |                                             device.SetValue(DeviceDBName.W_ConfirmSignal, 2); | 
 |  |  |                                         } | 
 |  |  |                                         //ä¸åæåï¼ä¿®æ¹ä»»å¡ç¶æ | 
 |  |  |                                         _taskService.UpdateTaskStatus(task.TaskId, oHTTaskCommand.W_Task_Type); | 
 |  |  |                                     } | 
 |  |  |                                     //ä¸åæåï¼ä¿®æ¹ä»»å¡ç¶æ | 
 |  |  |                                     _taskService.UpdateTaskStatus(task.TaskNum, oHTTaskCommand.W_Task_Type); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  | 
 |  |  |                     #endregion | 
 |  |  |                 } | 
 |  |  |                 catch (Exception ex) | 
 |  |  |                 { | 
 |  |  |                     WriteError(device.DeviceName, "é误", ex); | 
 |  |  |                 {  | 
 |  |  |                     _ErrormsginfoService.UpdateErrorMsg(ex.Message, 1); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             return Task.CompletedTask; | 
 |  |  | 
 |  |  |         public OHTTaskCommand? ConvertToOHTTaskCommand([NotNull] Dt_Task task) | 
 |  |  |         { | 
 |  |  |             OHTTaskCommand oHtTaskCommand = new OHTTaskCommand(); | 
 |  |  |  | 
 |  |  |             if (task.TaskState==(int)TaskInStatusEnum.InNew || task.TaskState == (int)TaskOutStatusEnum.OutNew) | 
 |  |  |              | 
 |  |  |             if (task.TaskState == (int)TaskInStatusEnum.InNew || task.TaskState == (int)TaskOutStatusEnum.OutNew) | 
 |  |  |             { | 
 |  |  |                 oHtTaskCommand.W_Task_Type = 2; | 
 |  |  |                 string[] SourceCodes = task.SourceAddress.Split("-"); | 
 |  |  | 
 |  |  |                     oHtTaskCommand.W_Pick_Column = Convert.ToInt16(SourceCodes[1]); | 
 |  |  |                     oHtTaskCommand.W_Put_Line = 0; | 
 |  |  |                     oHtTaskCommand.W_Put_Column = 0; | 
 |  |  |  | 
 |  |  |                     //åé¤åºåº(ä¸éè¦åéä¿¡å·) | 
 |  |  |                     //åé¤å
¥åº | 
 |  |  |                     if (task.TaskType == (int)TaskInboundTypeEnum.TiChuRuKu) | 
 |  |  |                     { | 
 |  |  |                         devicese.SetValue(DeviceDBName.W_ZXJ_LockLocation, true); | 
 |  |  |                     } | 
 |  |  |                     //åé¤ç´æ¥åºåº | 
 |  |  |                     else if (task.TaskType == (int)TaskOutboundTypeEnum.TiChuZhiJieChuKu) | 
 |  |  |                     { | 
 |  |  |                         devicese.SetValue(DeviceDBName.W_ZXJ_LockLocation, true); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  | 
 |  |  |                     _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任塿ºå°åé
ç½®é误ï¼"); | 
 |  |  |                     return null; | 
 |  |  |                 } | 
 |  |  |                 oHtTaskCommand.W_CheckValue = task.TaskType + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); | 
 |  |  |                 oHtTaskCommand.W_CheckValue = 2 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); | 
 |  |  |             } | 
 |  |  |             else if (task.TaskState == (int)TaskInStatusEnum.Line_Ingrab || task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) | 
 |  |  |             { | 
 |  |  | 
 |  |  |                     oHtTaskCommand.W_Pick_Column =0; | 
 |  |  |                     oHtTaskCommand.W_Put_Line = Convert.ToInt16(SourceCodes[0]); | 
 |  |  |                     oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[1]); | 
 |  |  |  | 
 |  |  |                     //åé¤åºåº | 
 |  |  |                     //if (task.TaskType == (int)TaskOutboundTypeEnum.TiChuChuKu) | 
 |  |  |                     //{ | 
 |  |  |                     //    deviceses.SetValue(DeviceDBName.W_GZJ_LockGZJ, true); | 
 |  |  |                     //} | 
 |  |  |                     //åé¤å
¥åº | 
 |  |  |                     if (task.TaskType == (int)TaskInboundTypeEnum.TiChuRuKu) | 
 |  |  |                     { | 
 |  |  |  | 
 |  |  |                         devicese.SetValue(DeviceDBName.W_ZXJ_LockLocation, false); | 
 |  |  |                     } | 
 |  |  |                     //åé¤ç´æ¥åºåº | 
 |  |  |                     else if (task.TaskType == (int)TaskOutboundTypeEnum.TiChuZhiJieChuKu) | 
 |  |  |                     { | 
 |  |  |  | 
 |  |  |                         //deviceses.SetValue(DeviceDBName.W_GZJ_LockGZJ, true); | 
 |  |  |                         devicese.SetValue(DeviceDBName.W_ZXJ_LockLocation, false); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  | 
 |  |  |                     _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任塿ºå°åé
ç½®é误ï¼"); | 
 |  |  |                     return null; | 
 |  |  |                 } | 
 |  |  |                 oHtTaskCommand.W_CheckValue = task.TaskType + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); | 
 |  |  |                 oHtTaskCommand.W_CheckValue = 3 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); | 
 |  |  |             } | 
 |  |  |             else if(task.TaskState == (int)TaskMoveStatusEnum.OutNewMove ) | 
 |  |  |             { | 
 |  |  |                 oHtTaskCommand.W_Task_Type = 4; | 
 |  |  |                 string[] SourceCodes = task.TargetAddress.Split("-"); | 
 |  |  |                 if (SourceCodes.Length == 3) | 
 |  |  |                 { | 
 |  |  |                     oHtTaskCommand.W_Pick_Line = 0; | 
 |  |  |                     oHtTaskCommand.W_Pick_Column = 0; | 
 |  |  |                     oHtTaskCommand.W_Put_Line = Convert.ToInt16(SourceCodes[0]); | 
 |  |  |                     oHtTaskCommand.W_Put_Column = Convert.ToInt16(SourceCodes[1]); | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     //æ°æ®é
ç½®é误 | 
 |  |  |                     _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"任塿ºå°åé
ç½®é误ï¼"); | 
 |  |  |                     return null; | 
 |  |  |                 } | 
 |  |  |                 oHtTaskCommand.W_CheckValue = 4 + Convert.ToInt16(SourceCodes[0]) + Convert.ToInt16(SourceCodes[1]); | 
 |  |  |             } | 
 |  |  |              | 
 |  |  |             if (task.WMSId==1) | 
 |  |  | 
 |  |  |                 oHtTaskCommand.W_Catch_2 = 1; | 
 |  |  |                 oHtTaskCommand.W_CheckValue += 2; | 
 |  |  |             } | 
 |  |  |             oHtTaskCommand.W_TaskNumber = task.TaskNum; | 
 |  |  |             oHtTaskCommand.W_CheckValue += task.TaskNum; | 
 |  |  |             oHtTaskCommand.W_TaskNumber = task.TaskId; | 
 |  |  |             oHtTaskCommand.W_CheckValue += task.TaskId; | 
 |  |  |             return oHtTaskCommand; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |                     InorOut = "In"; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             else | 
 |  |  |             { | 
 |  |  |                 if (workType.Equals("In")) | 
 |  |  |                 { | 
 |  |  |                     InorOut = "Out"; | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     InorOut = "In"; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             return task; | 
 |  |  |         } | 
 |  |  |     } |