|  |  | 
 |  |  | #endregion << ç æ¬ æ³¨ é >> | 
 |  |  |  | 
 |  |  | using AutoMapper; | 
 |  |  | using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; | 
 |  |  | using SqlSugar; | 
 |  |  | using System.Diagnostics.CodeAnalysis; | 
 |  |  | using System.Threading.Tasks; | 
 |  |  | using WIDESEAWCS_Common.LocationEnum; | 
 |  |  | using WIDESEAWCS_Common.StockEnum; | 
 |  |  | using WIDESEAWCS_Common.TaskEnum; | 
 |  |  | using WIDESEAWCS_Core; | 
 |  |  | using WIDESEAWCS_Core.BaseRepository; | 
 |  |  | using WIDESEAWCS_Core.BaseServices; | 
 |  |  | using WIDESEAWCS_DTO.TaskInfo; | 
 |  |  | using WIDESEAWCS_ISystemServices; | 
 |  |  | using WIDESEAWCS_ITaskInfoService; | 
 |  |  | using WIDESEAWCS_IWMSPart; | 
 |  |  | using WIDESEAWCS_Model.Models; | 
 |  |  | using WIDESEAWCS_Model.Models.System; | 
 |  |  | using WIDESEAWCS_QuartzJob.Models; | 
 |  |  | using WIDESEAWCS_QuartzJob.Service; | 
 |  |  |  | 
 |  |  | 
 |  |  |         private readonly IRouterService _routerService; | 
 |  |  |         private readonly ITaskExecuteDetailService _taskExecuteDetailService; | 
 |  |  |         private readonly IRepository<Dt_TaskExecuteDetail> _taskExecuteDetailRepository; | 
 |  |  |         private readonly IRepository<Dt_StockInfo> _stockRepository; | 
 |  |  |         private readonly IRepository<Dt_LocationInfo> _locationRepository; | 
 |  |  |         private readonly IRepository<dt_batchInfo> _batchinfoRepository; | 
 |  |  |         private readonly IRepository<Dt_Task_hty> _taskhtyRepository; | 
 |  |  |         private readonly IUnitOfWorkManage _unitOfWorkManage; | 
 |  |  |         private readonly IRepository<dt_errormsgInfo> _errorinfoRepository; | 
 |  |  |         private readonly Idt_ErrormsginfoService _ErrormsginfoService; | 
 |  |  |         private readonly IMapper _mapper; | 
 |  |  |  | 
 |  |  |         private Dictionary<string, OrderByType> _taskOrderBy = new() | 
 |  |  | 
 |  |  |         /// </summary> | 
 |  |  |         public IRepository<Dt_Task> Repository => BaseDal; | 
 |  |  |  | 
 |  |  |         public TaskService(IRepository<Dt_Task> BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, IRepository<Dt_TaskExecuteDetail> taskExecuteDetailRepository, IMapper mapper) : base(BaseDal) | 
 |  |  |         //SBText ITaskService.text { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } | 
 |  |  |  | 
 |  |  |         public TaskService(IRepository<Dt_Task> BaseDal, IRouterService routerService,  | 
 |  |  |             ITaskExecuteDetailService taskExecuteDetailService,  | 
 |  |  |             IRepository<Dt_TaskExecuteDetail> taskExecuteDetailRepository, | 
 |  |  |             IRepository<Dt_StockInfo> stockRepository, | 
 |  |  |             IRepository<Dt_LocationInfo> locationRepository, | 
 |  |  |             IRepository<dt_batchInfo> batchRepository, | 
 |  |  |             IRepository<Dt_Task_hty> taskhtyRepository, | 
 |  |  |             IRepository<dt_errormsgInfo> errorinfoRepository, | 
 |  |  |             Idt_ErrormsginfoService errormsginfoService, | 
 |  |  |             IUnitOfWorkManage unitOfWorkManage, | 
 |  |  |             IMapper mapper) : base(BaseDal) | 
 |  |  |         { | 
 |  |  |             _routerService = routerService; | 
 |  |  |             _taskExecuteDetailService = taskExecuteDetailService; | 
 |  |  |             _taskExecuteDetailRepository = taskExecuteDetailRepository; | 
 |  |  |             _stockRepository = stockRepository; | 
 |  |  |             _locationRepository = locationRepository; | 
 |  |  |             _batchinfoRepository = batchRepository; | 
 |  |  |             _taskhtyRepository = taskhtyRepository; | 
 |  |  |             _unitOfWorkManage = unitOfWorkManage; | 
 |  |  |             _errorinfoRepository = errorinfoRepository; | 
 |  |  |             _ErrormsginfoService = errormsginfoService; | 
 |  |  |             _mapper = mapper; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// æ ¹æ®ä»»å¡ç¶ææ¥è¯¢ä»»å¡ | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="deviceNo">设å¤ç¼å·</param> | 
 |  |  |         /// <param name="currentAddress">å½åå°å</param> | 
 |  |  |         /// <returns></returns> | 
 |  |  |         public Dt_Task QueryTaskState() | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(x => x.TaskState== (int)TaskInStatusEnum.InNew ); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæ¥è¯¢è¾éçº¿æªæ§è¡çä»»å¡ | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="deviceNo">设å¤ç¼å·</param> | 
 |  |  | 
 |  |  |         /// <returns></returns> | 
 |  |  |         public Dt_Task QueryExecutingConveyorLineTask(int taskNum, string nextAddress) | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); | 
 |  |  |             return null;// BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  | 
 |  |  |         /// <returns></returns> | 
 |  |  |         public Dt_Task QueryCompletedConveyorLineTask(int taskNum, string currentAddress) | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); | 
 |  |  |             return null;// BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  | 
 |  |  |         /// <param name="deviceNo">设å¤ç¼å·</param> | 
 |  |  |         /// <param name="currentAddress">å½åå°å</param> | 
 |  |  |         /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> | 
 |  |  |         public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "") | 
 |  |  |         public Dt_Task QueryStackerCraneTask(string workTpe, string currentAddress = "") | 
 |  |  |         { | 
 |  |  |             if (string.IsNullOrEmpty(currentAddress)) | 
 |  |  |                 return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); | 
 |  |  |             else | 
 |  |  |                 return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); | 
 |  |  |             Dt_Task task = new Dt_Task(); | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 //ä¼å
æ¥è¯¢å½å任塿± ä¸æ¯å¦æåè´§å®æçä»»å¡ | 
 |  |  |                 task = BaseDal.QueryFirst(v => v.TaskState == (int)TaskInStatusEnum.Line_Ingrab || v.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting); | 
 |  |  |                 if (task != null) | 
 |  |  |                 { | 
 |  |  |                     //ä¼å
è¿åæ§è¡å°ä¸åçä»»å¡ç»§ç»æ§è¡ | 
 |  |  |                     return task; | 
 |  |  |                 } | 
 |  |  |                 else { | 
 |  |  |                     //æ¥è¯¢å¤©è½¦ç§»å¨ä»»å¡ | 
 |  |  |                     task = BaseDal.QueryFirst(v => v.TaskType == (int)TaskMoveEnum.Mowe && v.TaskState == (int)TaskMoveStatusEnum.OutNewMove); | 
 |  |  |                     if (task!=null) | 
 |  |  |                     { | 
 |  |  |                         return task; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 //æ¥è¯¢å½å任塿± ä¸æ¯å¦åå¨ç¶æä¸ºéæ°å»ºç | 
 |  |  |                 //task= BaseDal.QueryFirst(v => v.TaskState != (int)TaskInStatusEnum.InNew || v.TaskState != (int)TaskOutStatusEnum.OutNew); | 
 |  |  |                 //if (task != null) | 
 |  |  |                 //{ | 
 |  |  |                 //    throw new Exception($"å½å任塿± ä¸å卿§è¡ä¸çä»»å¡,ä»»å¡å·:ã{task.TaskNum}ã"); | 
 |  |  |                 //} | 
 |  |  |                 if (task.TaskState!= (int)TaskMoveStatusEnum.OutNewMove) | 
 |  |  |                 { | 
 |  |  |                     if (workTpe.Equals("In")) | 
 |  |  |                     { | 
 |  |  |                         task = BaseDal.QueryData(v => v.TaskType == (int)TaskInboundTypeEnum.Inbound && v.TaskState == (int)TaskInStatusEnum.InNew).OrderByDescending(v => v.Grade).OrderBy(v => v.CreateDate).First(); | 
 |  |  |                     } | 
 |  |  |                     else if (workTpe.Equals("Out")) | 
 |  |  |                     { | 
 |  |  |                         task = BaseDal.QueryData(v => (v.TaskType == (int)TaskOutboundTypeEnum.Outbound || v.TaskType == (int)TaskOutboundTypeEnum.OutInventory) && v.TaskState == (int)TaskOutStatusEnum.OutNew).OrderBy(v => v.CreateDate).First(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             catch (Exception) | 
 |  |  |             { | 
 |  |  |                 //å°éè¯¯ä¿¡æ¯æ´æ°è³é误信æ¯è®°å½è¡¨ | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |             return task; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// æ ¹æ®ä»»å¡å·è¿åå½åä»»å¡ | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="deviceNo">设å¤ç¼å·</param> | 
 |  |  |         /// <param name="currentAddress">å½åå°å</param> | 
 |  |  |         /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> | 
 |  |  |         public Dt_Task QueryTakNnmTask(int taskNum) | 
 |  |  |         { | 
 |  |  |             return BaseDal.QueryFirst(v=>v.TaskId== taskNum); | 
 |  |  |         } | 
 |  |  |         /// <summary> | 
 |  |  |         /// ä¿®æ¹å¤©è½¦ä»»å¡ç¶æï¼å°å
¥åºåè´§æ§è¡ä¸ä¿®æ¹ä¸ºå
¥åºåè´§å®æ | 
 |  |  |         /// </summary> | 
 |  |  |         /// <returns></returns> | 
 |  |  |         public WebResponseContent UpdateTaskStatusToLine_Ingrab(Dt_Task task)  | 
 |  |  |         { | 
 |  |  |             WebResponseContent content = new WebResponseContent(); | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 task.TaskState = (int)TaskInStatusEnum.Line_Ingrab; | 
 |  |  |                 BaseDal.UpdateData(task); | 
 |  |  |                 content = WebResponseContent.Instance.OK(); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 content = WebResponseContent.Instance.Error(ex.Message); | 
 |  |  |                 UpdateTaskExceptionMessage(task.TaskNum, ex.Message); | 
 |  |  |             } | 
 |  |  |             return content; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// ä¿®æ¹å¤©è½¦ä»»å¡ç¶æï¼å°åºåºåè´§æ§è¡ä¸ä¿®æ¹ä¸ºåºåºåè´§å®æ | 
 |  |  |         /// </summary> | 
 |  |  |         /// <returns></returns> | 
 |  |  |         public WebResponseContent UpdateTaskStatusToLine_Outgrab(Dt_Task task) | 
 |  |  |         { | 
 |  |  |             WebResponseContent content = new WebResponseContent(); | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 task.TaskState = (int)TaskOutStatusEnum.SC_OutExecuting; | 
 |  |  |                 BaseDal.UpdateData(task); | 
 |  |  |                 content = WebResponseContent.Instance.OK(); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 content = WebResponseContent.Instance.Error(ex.Message); | 
 |  |  |                 UpdateTaskExceptionMessage(task.TaskNum, ex.Message); | 
 |  |  |             } | 
 |  |  |             return content; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç
§ä¼å
级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± åºåºç±»åçæ°å¢çä»»å¡ | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="deviceNo">设å¤ç¼å·</param> | 
 |  |  | 
 |  |  |             { | 
 |  |  |                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); | 
 |  |  |                 if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); | 
 |  |  |                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) | 
 |  |  |                 { | 
 |  |  |                     task.TaskState = (int)TaskOutStatusEnum.OutPending; | 
 |  |  |                 } | 
 |  |  |                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) | 
 |  |  |                 { | 
 |  |  |                     task.TaskState = (int)TaskInStatusEnum.InPending; | 
 |  |  |                 } | 
 |  |  |                 //if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) | 
 |  |  |                 //{ | 
 |  |  |                 //    task.TaskState = (int)TaskOutStatusEnum.OutPending; | 
 |  |  |                 //} | 
 |  |  |                 //else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) | 
 |  |  |                 //{ | 
 |  |  |                 //    task.TaskState = (int)TaskInStatusEnum.InPending; | 
 |  |  |                 //} | 
 |  |  |                 task.ExceptionMessage = message; | 
 |  |  |                 task.ModifyDate = DateTime.Now; | 
 |  |  |                 BaseDal.UpdateData(task); | 
 |  |  |  | 
 |  |  |                 _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage); | 
 |  |  |                 //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, task.ExceptionMessage); | 
 |  |  |  | 
 |  |  |                 content = WebResponseContent.Instance.OK(); | 
 |  |  |             } | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  |         /// æ´æ°ä»»å¡ç¶æä¿¡æ¯ï¼å¹¶åæ¥è³WMS | 
 |  |  |         /// æ´æ°ä»»å¡ç¶æä¿¡æ¯ | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="taskNum">ä»»å¡å·</param> | 
 |  |  |         /// <param name="status">ä»»å¡ç¶æ</param> | 
 |  |  |         public void UpdateTaskStatus(int taskNum, int status) | 
 |  |  |         { | 
 |  |  |             Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); | 
 |  |  |             if (task == null) return; | 
 |  |  |             task.TaskState = status; | 
 |  |  |             task.ModifyDate = DateTime.Now; | 
 |  |  |             BaseDal.UpdateData(task); | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); | 
 |  |  |                 if (status == 2 && task.TaskType == (int)TaskInboundTypeEnum.Inbound) | 
 |  |  |                 { | 
 |  |  |                     task.TaskState = (int)TaskInStatusEnum.Line_InGrabExecuting; | 
 |  |  |                 } | 
 |  |  |                 else if (status == 2 && (task.TaskType == (int)TaskOutboundTypeEnum.Outbound || task.TaskType == (int)TaskOutboundTypeEnum.OutInventory)) | 
 |  |  |                 { | 
 |  |  |                     task.TaskState = (int)TaskOutStatusEnum.Line_OutGrabExecuting; | 
 |  |  |                 } | 
 |  |  |                 if (status == 3 && task.TaskType == (int)TaskInboundTypeEnum.Inbound) | 
 |  |  |                 { | 
 |  |  |                     task.TaskState = (int)TaskInStatusEnum.Line_InDownExecuting; | 
 |  |  |                 } | 
 |  |  |                 else if (status == 3 && task.TaskType == (int)TaskOutboundTypeEnum.Outbound || task.TaskType == (int)TaskOutboundTypeEnum.OutInventory) | 
 |  |  |                 { | 
 |  |  |                     task.TaskState = (int)TaskOutStatusEnum.Line_OutWownExecuting; | 
 |  |  |                 } | 
 |  |  |                 else if(status == 4 && task.TaskType == (int)TaskMoveEnum.Mowe) | 
 |  |  |                 { | 
 |  |  |                     task.TaskState = (int)TaskMoveStatusEnum.Line_OutMove; | 
 |  |  |                 } | 
 |  |  |                 task.ModifyDate = DateTime.Now; | 
 |  |  |                 BaseDal.UpdateData(task); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 UpdateTaskExceptionMessage(taskNum, ex.Message); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         /// <summary> | 
 |  |  | 
 |  |  |         /// </summary> | 
 |  |  |         /// <param name="taskNum">ä»»å¡ç¼å·</param> | 
 |  |  |         /// <returns>è¿åå¤çç»æ</returns> | 
 |  |  |         public WebResponseContent StackCraneTaskCompleted(int taskNum) | 
 |  |  |         public WebResponseContent StackCraneTaskCompleted(int taskNum,float weight) | 
 |  |  |         { | 
 |  |  |             WebResponseContent content = new WebResponseContent(); | 
 |  |  |             try | 
 |  |  |             { | 
 |  |  |                 Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); | 
 |  |  |                 if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); | 
 |  |  |  | 
 |  |  |                 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) | 
 |  |  |                 var nawtask = BaseDal.QueryFirst(v=>v.TaskId== taskNum); | 
 |  |  |                 if (nawtask == null) | 
 |  |  |                 { | 
 |  |  |                     List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); | 
 |  |  |                     if (!routers.Any()) return WebResponseContent.Instance.Error($"æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); | 
 |  |  |  | 
 |  |  |                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); | 
 |  |  |                     task.TaskState = nextStatus; | 
 |  |  |                     task.CurrentAddress = task.NextAddress; | 
 |  |  |                     task.NextAddress = routers.FirstOrDefault().ChildPosi; | 
 |  |  |                     task.ModifyDate = DateTime.Now; | 
 |  |  |                     task.Modifier = "System"; | 
 |  |  |                     BaseDal.UpdateData(task); | 
 |  |  |  | 
 |  |  |                     _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); | 
 |  |  |                     //todo åæ¥å°WMS | 
 |  |  |  | 
 |  |  |                     //æä¸èèå¤ä¸ªåºåºå£ | 
 |  |  |                     throw new Exception(string.Format("天车æ¾è´§å®æä»»å¡æªæ¥è¯¢å°ä»»å¡å·{0}", taskNum)); | 
 |  |  |                 } | 
 |  |  |                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) | 
 |  |  |                 if (nawtask.TaskType == (int)TaskInboundTypeEnum.Inbound) | 
 |  |  |                 { | 
 |  |  |                     //todo  | 
 |  |  |                     int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); | 
 |  |  |                     task.TaskState = nextStatus; | 
 |  |  |                     task.ModifyDate = DateTime.Now; | 
 |  |  |                     task.Modifier = "System"; | 
 |  |  |                     BaseDal.UpdateData(task); | 
 |  |  |                     _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå
¥åºå®æ"); | 
 |  |  |  | 
 |  |  |                     WMSTaskDTO taskDTO = new WMSTaskDTO() | 
 |  |  |                     var batck = _batchinfoRepository.QueryFirst(v=>v.Id==1); | 
 |  |  |                     //æ°å»ºåºå | 
 |  |  |                     Dt_StockInfo stock = new Dt_StockInfo(); | 
 |  |  |                     stock.LocationCode = nawtask.TargetAddress; | 
 |  |  |                     stock.Weight = (decimal)weight; | 
 |  |  |                     stock.StockStatus = (int)stockEnum.Free; | 
 |  |  |                     stock.BatchNo = batck.InBatch; | 
 |  |  |                     if (nawtask.Remark== (int)MateTypeEnum.ZiChan) | 
 |  |  |                     { | 
 |  |  |                         TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), | 
 |  |  |                         Grade = 1, | 
 |  |  |                         PalletCode = task.PalletCode + "S", | 
 |  |  |                         RoadWay = "SC01", | 
 |  |  |                         SourceAddress = task.TargetAddress, | 
 |  |  |                         TargetAddress = "CLOutAreaA", | 
 |  |  |                         TaskState = (int)TaskOutStatusEnum.OutNew, | 
 |  |  |                         Id = 0, | 
 |  |  |                         TaskType = (int)TaskOutboundTypeEnum.Outbound | 
 |  |  |                     }; | 
 |  |  |  | 
 |  |  |                     content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); | 
 |  |  |                         stock.Remark = (int)MateTypeEnum.ZiChan; | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         stock.Remark = (int)MateTypeEnum.WaiGou; | 
 |  |  |                     } | 
 |  |  |                     Dt_StockInfo stockTow = new Dt_StockInfo(); | 
 |  |  |                     stockTow.LocationCode = nawtask.NextAddress; | 
 |  |  |                     stockTow.Weight = (decimal)weight; | 
 |  |  |                     stockTow.StockStatus = (int)stockEnum.Free; | 
 |  |  |                     stockTow.BatchNo = batck.InBatch; | 
 |  |  |                     if (nawtask.Remark == (int)MateTypeEnum.ZiChan) | 
 |  |  |                     { | 
 |  |  |                         stockTow.Remark = (int)MateTypeEnum.ZiChan; | 
 |  |  |                     } | 
 |  |  |                     else | 
 |  |  |                     { | 
 |  |  |                         stockTow.Remark = (int)MateTypeEnum.WaiGou; | 
 |  |  |                     } | 
 |  |  |                     //ä¿®æ¹è´§ä½ä¿¡æ¯ | 
 |  |  |                     var location = _locationRepository.QueryFirst(v=>v.LocationCode==nawtask.TargetAddress); | 
 |  |  |                     location.LocationStatus = (int)LocationStatusEnum.InStock; | 
 |  |  |                     //ä¿®æ¹è´§ä½ä¿¡æ¯ | 
 |  |  |                     var locationtow = _locationRepository.QueryFirst(v => v.LocationCode == nawtask.NextAddress); | 
 |  |  |                     locationtow.LocationStatus = (int)LocationStatusEnum.InStock; | 
 |  |  |                     //å¤çä»»å¡ä¿¡æ¯ | 
 |  |  |                     Dt_Task_hty taskhty = new Dt_Task_hty(); | 
 |  |  |                     taskhty.TaskNum = nawtask.TaskNum; | 
 |  |  |                     taskhty.Roadway = nawtask.Roadway; | 
 |  |  |                     taskhty.TaskType = nawtask.TaskType; | 
 |  |  |                     taskhty.TaskState = (int)TaskInStatusEnum.Line_InFinish; | 
 |  |  |                     taskhty.SourceAddress = nawtask.SourceAddress; | 
 |  |  |                     taskhty.TargetAddress = nawtask.TargetAddress; | 
 |  |  |                     taskhty.ExceptionMessage = nawtask.ExceptionMessage; | 
 |  |  |                     taskhty.Grade = nawtask.Grade; | 
 |  |  |                     taskhty.Dispatchertime = nawtask.Dispatchertime; | 
 |  |  |                     taskhty.Remark = nawtask.Remark; | 
 |  |  |                     taskhty.PalletCode = nawtask.PalletCode; | 
 |  |  |                     taskhty.NextAddress = nawtask.NextAddress; | 
 |  |  |                     taskhty.CurrentAddress = nawtask.CurrentAddress; | 
 |  |  |                     //å¼å§æ°æ®åºäºå¡ | 
 |  |  |                     _unitOfWorkManage.BeginTran(); | 
 |  |  |                     _stockRepository.AddData(stock); | 
 |  |  |                     _stockRepository.AddData(stockTow); | 
 |  |  |                     _locationRepository.UpdateData(location); | 
 |  |  |                     _locationRepository.UpdateData(locationtow); | 
 |  |  |                     _taskhtyRepository.AddData(taskhty); | 
 |  |  |                     BaseDal.DeleteData(nawtask); | 
 |  |  |                     //æäº¤äºå¡ | 
 |  |  |                     _unitOfWorkManage.CommitTran(); | 
 |  |  |                 } | 
 |  |  |                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) | 
 |  |  |                 else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.Outbound) | 
 |  |  |                 { | 
 |  |  |                     //todo è°ç¨WMSç§»åºå®æ | 
 |  |  |                     //æ¥æ¾åºå | 
 |  |  |                     var stock = _stockRepository.QueryFirst(v=>v.LocationCode== nawtask.SourceAddress); | 
 |  |  |                     if (stock == null)  | 
 |  |  |                     { | 
 |  |  |                         throw new Exception($"æªæ¾å°åºåä¿¡æ¯è´§ä½å·:ã{nawtask.TargetAddress}ã"); | 
 |  |  |                     } | 
 |  |  |                     var Towstock = _stockRepository.QueryFirst(v => v.LocationCode == nawtask.NextAddress); | 
 |  |  |                     //ä¿®æ¹è´§ä½ç¶æ | 
 |  |  |                     var location = _locationRepository.QueryFirst(v => v.LocationCode == nawtask.SourceAddress); | 
 |  |  |                     location.LocationStatus = (int)LocationStatusEnum.Free; | 
 |  |  |                     //ä¿®æ¹è´§ä½ç¶æ | 
 |  |  |                     var locationTow = _locationRepository.QueryFirst(v => v.LocationCode == nawtask.NextAddress); | 
 |  |  |                     locationTow.LocationStatus = (int)LocationStatusEnum.Free; | 
 |  |  |                     //åå¤åå²ä»»å¡æ°æ® | 
 |  |  |                     Dt_Task_hty taskhty = new Dt_Task_hty(); | 
 |  |  |                     taskhty.TaskNum = nawtask.TaskNum; | 
 |  |  |                     taskhty.Roadway = nawtask.Roadway; | 
 |  |  |                     taskhty.TaskType = nawtask.TaskType; | 
 |  |  |                     taskhty.TaskState = (int)TaskOutStatusEnum.OutFinish; | 
 |  |  |                     taskhty.SourceAddress = nawtask.SourceAddress; | 
 |  |  |                     taskhty.TargetAddress = nawtask.TargetAddress; | 
 |  |  |                     taskhty.ExceptionMessage = nawtask.ExceptionMessage; | 
 |  |  |                     taskhty.Grade = nawtask.Grade; | 
 |  |  |                     taskhty.Dispatchertime = nawtask.Dispatchertime; | 
 |  |  |                     taskhty.Remark = nawtask.Remark; | 
 |  |  |                     taskhty.PalletCode = nawtask.PalletCode; | 
 |  |  |                     taskhty.NextAddress = nawtask.NextAddress; | 
 |  |  |                     taskhty.CurrentAddress = nawtask.CurrentAddress; | 
 |  |  |                     //å¼å§æ°æ®åºäºå¡ | 
 |  |  |                     _unitOfWorkManage.BeginTran(); | 
 |  |  |                     _stockRepository.DeleteData(stock); | 
 |  |  |                     _stockRepository.DeleteData(Towstock); | 
 |  |  |                     _locationRepository.UpdateData(location); | 
 |  |  |                     _locationRepository.UpdateData(locationTow); | 
 |  |  |                     _taskhtyRepository.AddData(taskhty); | 
 |  |  |                     BaseDal.DeleteData(nawtask); | 
 |  |  |                     //æäº¤äºå¡ | 
 |  |  |                     _unitOfWorkManage.CommitTran(); | 
 |  |  |                 } | 
 |  |  |                 else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup) | 
 |  |  |                 else if (nawtask.TaskType == (int)TaskOutboundTypeEnum.OutInventory || nawtask.TaskType == (int)TaskMoveEnum.Mowe) | 
 |  |  |                 { | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |                 else | 
 |  |  |                 { | 
 |  |  |                     throw new Exception($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{taskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã"); | 
 |  |  |                     //å¤çä»»å¡ä¿¡æ¯ | 
 |  |  |                     Dt_Task_hty taskhty = new Dt_Task_hty(); | 
 |  |  |                     taskhty.TaskNum = nawtask.TaskNum; | 
 |  |  |                     taskhty.Roadway = nawtask.Roadway; | 
 |  |  |                     taskhty.TaskType = nawtask.TaskType; | 
 |  |  |                     taskhty.TaskState = (int)TaskOutStatusEnum.OutFinish; | 
 |  |  |                     taskhty.SourceAddress = nawtask.SourceAddress; | 
 |  |  |                     taskhty.TargetAddress = nawtask.TargetAddress; | 
 |  |  |                     taskhty.ExceptionMessage = nawtask.ExceptionMessage; | 
 |  |  |                     taskhty.Grade = nawtask.Grade; | 
 |  |  |                     taskhty.Dispatchertime = nawtask.Dispatchertime; | 
 |  |  |                     taskhty.Remark = nawtask.Remark; | 
 |  |  |                     taskhty.PalletCode = nawtask.PalletCode; | 
 |  |  |                     taskhty.NextAddress = nawtask.NextAddress; | 
 |  |  |                     taskhty.CurrentAddress = nawtask.CurrentAddress; | 
 |  |  |                     //å¼å§æ°æ®åºäºå¡ | 
 |  |  |                     _unitOfWorkManage.BeginTran(); | 
 |  |  |                     _taskhtyRepository.AddData(taskhty); | 
 |  |  |                     BaseDal.DeleteData(nawtask); | 
 |  |  |                     //æäº¤äºå¡ | 
 |  |  |                     _unitOfWorkManage.CommitTran(); | 
 |  |  |                 } | 
 |  |  |                 content = WebResponseContent.Instance.OK(); | 
 |  |  |             } | 
 |  |  |             catch (Exception ex) | 
 |  |  |             { | 
 |  |  |                 //åæ»äºå¡ | 
 |  |  |                 _unitOfWorkManage.RollbackTran(); | 
 |  |  |                 content = WebResponseContent.Instance.Error($"ä»»å¡å®æå¼å¸¸,ä»»å¡å·:ã{taskNum}ã"); | 
 |  |  |                 UpdateTaskExceptionMessage(taskNum,ex.Message); | 
 |  |  |             } | 
 |  |  |             return content; | 
 |  |  |         } |