| | |
| | | using WIDESEAWCS_DTO.WMS; |
| | | using WIDESEAWCS_Model.Models; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_DTO; |
| | | using WIDESEAWCS_DTO.AGV.HIKROBOT; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.Reflection.PortableExecutable; |
| | | |
| | | namespace WIDESEAWCS_TaskInfoService |
| | | { |
| | |
| | | /// <returns></returns> |
| | | public WebResponseContent CreateHKNewInTask(TaskDTO taskDTO, int taskType) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_HKLocationInfo? hKLocationInfo = null; |
| | | #region ç¹å°ç¹ |
| | | if (!string.IsNullOrEmpty(taskDTO.toLocationCode)) |
| | | { |
| | | hKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.toLocationCode) ?? throw new Exception($"æªæ¾å°ç»ç¹è´§ä½ã{taskDTO.toLocationCode}ã"); |
| | | if (hKLocationInfo.LocationStatus != (int)LocationStatusEnum.Free) throw new Exception($"ç»ç¹è´§ä½ã{taskDTO.toLocationCode}ãè´§ä½ç¶æä¸ä¸ºç©ºè´§ä½"); |
| | | } |
| | | #endregion |
| | | //è·åè´§ä½ä¿¡æ¯ |
| | | Dt_HKLocationInfo? hKLocationInfo = _hKLocationInfoService.GetFreeLocationInfo(taskDTO.toAreaCode) ?? throw new Exception($"æªæ¾å°ç»ç¹åºåºã{taskDTO.toAreaCode}ãå¯ç¨ç©ºè´§ä½ï¼"); ; |
| | | else |
| | | hKLocationInfo = _hKLocationInfoService.GetFreeLocationInfo(taskDTO.toAreaCode) ?? throw new Exception($"æªæ¾å°ç»ç¹åºåºã{taskDTO.toAreaCode}ãå¯ç¨ç©ºè´§ä½ï¼"); |
| | | Dt_Task dt_Task = new Dt_Task() |
| | | { |
| | | TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | |
| | | Creater = "WMS", |
| | | }; |
| | | hKLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt(); |
| | | Db.Ado.BeginTran(); |
| | | BaseDal.AddData(dt_Task); |
| | | _hKLocationInfoService.Repository.UpdateData(hKLocationInfo); |
| | | Db.Ado.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | |
| | | #region ä¸å海康AGVä»»å¡ |
| | | content = SendHIKROBOTTask(dt_Task); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | dt_Task.TaskState = (int)TaskStatusEnum.Execut; |
| | | dt_Task.Dispatchertime = DateTime.Now; |
| | | #endregion |
| | | try |
| | | { |
| | | Db.Ado.BeginTran(); |
| | | BaseDal.AddData(dt_Task); |
| | | _hKLocationInfoService.Repository.UpdateData(hKLocationInfo); |
| | | Db.Ado.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | |
| | | content.OK(data: new |
| | | { |
| | | taskCode = taskDTO.taskCode, |
| | | Message = "æåï¼" |
| | | }); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | content.Data = new |
| | | { |
| | | taskCode = taskDTO.taskCode, |
| | | Message = $"失败ï¼{ex.Message}" |
| | | }; |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// å建海康AGVåºåºä»»å¡ |
| | |
| | | /// <returns></returns> |
| | | public WebResponseContent CreateHKNewOutTask(TaskDTO taskDTO, int taskType) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_HKLocationInfo? hKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == taskDTO.fromLocationCode) ?? throw new Exception($"æªæ¾å°èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãï¼"); |
| | | if (hKLocationInfo.LocationStatus != LocationStatusEnum.InStock.ObjToInt()) throw new Exception($"èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãå½ååºä½ç¶æä¸å¯åºåºï¼"); |
| | | if (hKLocationInfo.PalletCode != taskDTO.containerCode) throw new Exception($"èµ·ç¹åºä½ã{taskDTO.fromLocationCode}ãç»å®æç®±å·ã{hKLocationInfo.PalletCode}ãä¸ä»»å¡æç®±å·ã{taskDTO.containerCode}ãä¸å¹é
ï¼"); |
| | | Dt_Task dt_Task = new Dt_Task() |
| | | { |
| | | TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | |
| | | Creater = "WMS", |
| | | }; |
| | | hKLocationInfo.LocationStatus = LocationStatusEnum.OutLock.ObjToInt(); |
| | | Db.Ado.BeginTran(); |
| | | BaseDal.AddData(dt_Task); |
| | | _hKLocationInfoService.Repository.UpdateData(hKLocationInfo); |
| | | Db.Ado.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | #region ä¸å海康AGVä»»å¡ |
| | | content = SendHIKROBOTTask(dt_Task); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | dt_Task.TaskState = (int)TaskStatusEnum.Execut; |
| | | dt_Task.Dispatchertime = DateTime.Now; |
| | | #endregion |
| | | try |
| | | { |
| | | Db.Ado.BeginTran(); |
| | | BaseDal.AddData(dt_Task); |
| | | _hKLocationInfoService.Repository.UpdateData(hKLocationInfo); |
| | | Db.Ado.CommitTran(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | return content.OK(data: new |
| | | { |
| | | taskCode = taskDTO.taskCode, |
| | | Message = "æåï¼" |
| | | }); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | throw new Exception(ex.Message); |
| | | content.Data = new |
| | | { |
| | | taskCode = taskDTO.taskCode, |
| | | Message = $"失败ï¼{ex.Message}" |
| | | }; |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region ä¸å海康AGVä»»å¡ |
| | | public WebResponseContent SendHIKROBOTTask([NotNull] Dt_Task task) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | HIKROBOTReturn hIKROBOTReturn = null; |
| | | HIKROBOTTaskSubmit hIKROBOTTaskSubmit = null; |
| | | try |
| | | { |
| | | Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskSubmit)) ?? throw new Exception("æªæ¾å°æµ·åº·AGVä»»å¡ä¸åæ¥å£é
置信æ¯ï¼è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | #region å®ä½ç±»è½¬æ¢ |
| | | hIKROBOTTaskSubmit = HIKROBOTTask(task); |
| | | if (hIKROBOTTaskSubmit == null) throw new Exception("海康AGVä»»å¡å®ä½è½¬æ¢å¤±è´¥"); |
| | | var json = hIKROBOTTaskSubmit.Serialize(); |
| | | #endregion |
| | | // å建Headersåå
¸ |
| | | var headers = new Dictionary<string, string> |
| | | { |
| | | { "X-lr-request-id", DateTimeOffset.Now.ToUnixTimeSeconds().ToString()+task.TaskNum } |
| | | // 妿éè¦å
¶ä»Headerï¼å¯ä»¥ç»§ç»æ·»å |
| | | // { "Content-Type", "application/json" } |
| | | }; |
| | | |
| | | // ä¼ éHeadersåæ° |
| | | string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskSubmit.Serialize(), headers: headers); |
| | | //string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskSubmit.Serialize()); |
| | | hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>(); |
| | | if (hIKROBOTReturn.code == "SUCCESS") |
| | | { |
| | | var data = hIKROBOTReturn.data.ToString().DeserializeObject<HIKROBOTReturnData>(); |
| | | content.OK(data: data); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(hIKROBOTReturn.message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | _trackloginfoService.AddTrackLog(hIKROBOTTaskSubmit, content, "ä¸å海康AGVä»»å¡", "", hIKROBOTReturn.message); |
| | | } |
| | | return content; |
| | | } |
| | | #endregion |
| | | /// <summary> |
| | | /// 海康任å¡å®ä½ç±»è½¬æ¢ |
| | | /// </summary> |
| | | /// <param name="task"></param> |
| | | /// <returns></returns> |
| | | public HIKROBOTTaskSubmit HIKROBOTTask(Dt_Task task) |
| | | { |
| | | HIKROBOTTaskSubmit hIKROBOTTaskSubmit = new HIKROBOTTaskSubmit(); |
| | | try |
| | | { |
| | | var tasktype = (TaskTypeEnum)Enum.GetValues(typeof(TaskTypeEnum)).GetValue(task.TaskType - 1); |
| | | |
| | | hIKROBOTTaskSubmit.initPriority = task.Grade; |
| | | hIKROBOTTaskSubmit.robotTaskCode = task.WMSTaskNum; |
| | | hIKROBOTTaskSubmit.taskType = tasktype.ToString(); ExtraDto extraDto = new ExtraDto(); |
| | | CarrierInfoDto carrierInfoDto = new CarrierInfoDto() |
| | | { |
| | | carrierCode = task.PalletCode, |
| | | carrierType = task.PalletCode.Contains("LXM") ? "DX" : "SX" |
| | | }; |
| | | extraDto.carrierInfo.Add(carrierInfoDto); |
| | | hIKROBOTTaskSubmit.extra = extraDto; |
| | | switch (tasktype) |
| | | { |
| | | case TaskTypeEnum.CPInbound: |
| | | case TaskTypeEnum.CPOutbound: |
| | | case TaskTypeEnum.MLInbound: |
| | | case TaskTypeEnum.MLOutbound: |
| | | break; |
| | | case TaskTypeEnum.F01: |
| | | break; |
| | | case TaskTypeEnum.RK3F: |
| | | case TaskTypeEnum.CK3F: |
| | | case TaskTypeEnum.F02: |
| | | case TaskTypeEnum.F03: |
| | | case TaskTypeEnum.F04: |
| | | { |
| | | TargetRouteDto target = new TargetRouteDto() |
| | | { |
| | | code = task.CurrentAddress, |
| | | operation = "DELIVERY",//åè´§ |
| | | seq = 0, |
| | | type = "SITE", |
| | | }; |
| | | TargetRouteDto targetRoute = new TargetRouteDto() |
| | | { |
| | | code = task.NextAddress, |
| | | operation = "DELIVERY",//éè´§ |
| | | seq = 1, |
| | | type = "SITE" |
| | | }; |
| | | hIKROBOTTaskSubmit.targetRoute.Add(target); |
| | | hIKROBOTTaskSubmit.targetRoute.Add(targetRoute); |
| | | } |
| | | break; |
| | | case TaskTypeEnum.Q1TSJ4: |
| | | { |
| | | TargetRouteDto target = new TargetRouteDto() |
| | | { |
| | | code = task.CurrentAddress, |
| | | operation = "DELIVERY",//åè´§ |
| | | seq = 0, |
| | | type = "SITE", |
| | | }; |
| | | TargetRouteDto targetRoute = new TargetRouteDto() |
| | | { |
| | | code = task.NextAddress, |
| | | operation = "DELIVERY",//éè´§ |
| | | seq = 1, |
| | | type = "STORAGE" |
| | | }; |
| | | hIKROBOTTaskSubmit.targetRoute.Add(target); |
| | | hIKROBOTTaskSubmit.targetRoute.Add(targetRoute); |
| | | } |
| | | break; |
| | | case TaskTypeEnum.STU0003: |
| | | case TaskTypeEnum.CHUKU1: |
| | | { |
| | | TargetRouteDto target = new TargetRouteDto() |
| | | { |
| | | code = task.CurrentAddress, |
| | | operation = "DELIVERY",//åè´§ |
| | | seq = 0, |
| | | type = "STORAGE", |
| | | }; |
| | | TargetRouteDto targetRoute = new TargetRouteDto() |
| | | { |
| | | code = task.NextAddress, |
| | | operation = "DELIVERY",//éè´§ |
| | | seq = 1, |
| | | type = "SITE", |
| | | }; |
| | | hIKROBOTTaskSubmit.targetRoute.Add(target); |
| | | hIKROBOTTaskSubmit.targetRoute.Add(targetRoute); |
| | | } |
| | | break; |
| | | case TaskTypeEnum.Q3RK: |
| | | case TaskTypeEnum.Q3CK: |
| | | case TaskTypeEnum.Move: |
| | | { |
| | | TargetRouteDto target = new TargetRouteDto() |
| | | { |
| | | code = task.CurrentAddress, |
| | | operation = "DELIVERY",//åè´§ |
| | | seq = 0, |
| | | type = "SITE", |
| | | }; |
| | | TargetRouteDto targetRoute = new TargetRouteDto() |
| | | { |
| | | code = task.NextAddress, |
| | | operation = "DELIVERY",//éè´§ |
| | | seq = 1, |
| | | type = "SITE", |
| | | }; |
| | | hIKROBOTTaskSubmit.targetRoute.Add(target); |
| | | hIKROBOTTaskSubmit.targetRoute.Add(targetRoute); |
| | | } |
| | | break; |
| | | case TaskTypeEnum.CPMoveInventory: |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | return hIKROBOTTaskSubmit; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 海康AGVä»»å¡ç»§ç»æ§è¡ |
| | | /// </summary> |
| | | /// <param name="TaskCode">ä»»å¡å·</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent Hikvisiontaskscontinue(string TaskCode, string Address = null) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | HIKROBOTReturn hIKROBOTReturn = null; |
| | | HIKROBOTTaskContinue hIKROBOTTaskContinue = null; |
| | | try |
| | | { |
| | | // 1. åæ°éªè¯ |
| | | if (string.IsNullOrWhiteSpace(TaskCode)) |
| | | { |
| | | throw new Exception("ä»»å¡ç¼ç ä¸è½ä¸ºç©º"); |
| | | } |
| | | Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskContinue)) ?? throw new Exception("æªæ¾å°æµ·åº·AGVç»§ç»æ§è¡æ¥å£é
置信æ¯ï¼è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | hIKROBOTTaskContinue = new HIKROBOTTaskContinue() |
| | | { |
| | | triggerCode = TaskCode, |
| | | triggerType = "TASK",//åºå®å¼ |
| | | targetRoute = string.IsNullOrEmpty(Address) ? null : |
| | | new TargetRouteDto() |
| | | { |
| | | code = Address, |
| | | type = "SITE", |
| | | } |
| | | }; |
| | | var headers = new Dictionary<string, string> |
| | | { |
| | | { "X-lr-request-id", DateTimeOffset.Now.ToUnixTimeSeconds().ToString()+TaskCode } |
| | | }; |
| | | string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskContinue.Serialize(), headers: headers); |
| | | hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>(); |
| | | |
| | | if (hIKROBOTReturn.code == "SUCCESS") |
| | | { |
| | | var data = hIKROBOTReturn.data.ToString().DeserializeObject<HIKROBOTReturnData>(); |
| | | content.OK(data: data); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(hIKROBOTReturn.message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | _trackloginfoService.AddTrackLog(hIKROBOTTaskContinue, content, "海康AGVç»§ç»æ§è¡ä»»å¡", "", hIKROBOTReturn.message); |
| | | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | } |
| | | } |