| | |
| | | using System; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection.Emit; |
| | | using System.Reflection.Metadata; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using WIDESEAWCS_Common; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.Helper; |
| | | using WIDESEAWCS_DTO; |
| | |
| | | { |
| | | foreach (var item in tasks) |
| | | { |
| | | var content = SendHIKROBOTTask(item); |
| | | var content = _taskService.SendHIKROBOTTask(item); |
| | | } |
| | | } |
| | | #endregion |
| | |
| | | { |
| | | foreach (var item in tasks) |
| | | { |
| | | var content = SendHIKROBOTTask(item); |
| | | var content = _taskService.SendHIKROBOTTask(item); |
| | | } |
| | | |
| | | } |
| | | #endregion |
| | | |
| | | #region ä¸å海康AGVä»»å¡ |
| | | public WebResponseContent SendHIKROBOTTask(Dt_Task task) |
| | | #region ä¸å海康1-6楼çAGVä»»å¡ |
| | | public void SendAGVTask(List<Dt_Task> tasks) |
| | | { |
| | | foreach (var item in tasks) |
| | | { |
| | | // åºåºä»»å¡å¤ç (ä»1楼åºåºå°6楼) |
| | | if (item.TaskType == (int)TaskTypeEnum.Q3CK) |
| | | { |
| | | // è°ç¨æ¥å£è·åå°è½¦ä¿¡æ¯ |
| | | var result = _agvcartInfoService.CheckTheCar(); |
| | | if (result != null && result.Status) |
| | | { |
| | | var dataList = result.Data as List<HIKROBOTQueryData>; |
| | | if (dataList != null && dataList.Any()) |
| | | { |
| | | // åºåºä»»å¡ï¼æ£æ¥æ¯å¦æå¨1楼(AA)çå°è½¦ |
| | | // Q3CK æ¯AAâFFç跨楼å±ä»»å¡ï¼åªè½ä½¿ç¨ä¸ç¨å°è½¦ |
| | | var specialCarInAA = dataList.FirstOrDefault(d => d.mapCode == "AA" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)"); |
| | | |
| | | if (specialCarInAA != null) |
| | | { |
| | | // æå¨1楼çå°è½¦ï¼ç´æ¥æ§è¡ä»»å¡ |
| | | var content = _taskService.SendHIKROBOTTask(item); |
| | | if (content.Status) |
| | | { |
| | | item.TaskState = (int)TaskStatusEnum.Execut; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 没æä¸ç¨å°è½¦å¨1楼ï¼éè¦å¼å«ä¸ç¨å°è½¦æ¥å°1楼 |
| | | var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)"); |
| | | if (anySpecialCar != null) |
| | | { |
| | | // èµ·ç¹ï¼å°è½¦å½åæå¨æ¥¼å±çç¹ä½ï¼ç®æ ï¼1楼ç¹ä½ |
| | | var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "AA"); |
| | | if (callCarResult.Status) |
| | | { |
| | | // åä»»å¡ç¶ææ¹ä¸ºçå¾
空车 |
| | | item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.ExceptionMessage = "æªæ¾å°å¯ç¨AGVå°è½¦"; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.ExceptionMessage = "è·åAGVå°è½¦ä¿¡æ¯å¤±è´¥"; |
| | | } |
| | | } |
| | | // å
¥åºä»»å¡å¤ç (ä»6楼å
¥åºå°1楼) |
| | | else if (item.TaskType == (int)TaskTypeEnum.Q3RK) |
| | | { |
| | | var result = _agvcartInfoService.CheckTheCar(); |
| | | |
| | | if (result != null && result.Status) |
| | | { |
| | | var dataList = result.Data as List<HIKROBOTQueryData>; |
| | | if (dataList != null && dataList.Any()) |
| | | { |
| | | // Q3RK æ¯FFâAAç跨楼å±ä»»å¡ï¼åªè½ä½¿ç¨ä¸ç¨å°è½¦ |
| | | var specialCarInFF = dataList.FirstOrDefault(d => d.mapCode == "FF" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)"); |
| | | |
| | | if (specialCarInFF!=null) |
| | | { |
| | | // æå¨1楼çå°è½¦ï¼ç´æ¥æ§è¡ä»»å¡ |
| | | var content = _taskService.SendHIKROBOTTask(item); |
| | | item.TaskState = (int)TaskStatusEnum.Execut; |
| | | } |
| | | else |
| | | { |
| | | // 没æä¸ç¨å°è½¦å¨6楼ï¼éè¦å¼å«ä¸ç¨å°è½¦æ¥å°6楼 |
| | | var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)"); |
| | | if (anySpecialCar != null) |
| | | { |
| | | // èµ·ç¹ï¼å°è½¦å½åæå¨æ¥¼å±çç¹ä½ï¼ç®æ ï¼6楼ç¹ä½ |
| | | var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "FF"); |
| | | if (callCarResult.Status) |
| | | { |
| | | item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.ExceptionMessage = "æªæ¾å°å¯ç¨AGVå°è½¦"; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.ExceptionMessage = "è·åAGVå°è½¦ä¿¡æ¯å¤±è´¥"; |
| | | } |
| | | } |
| | | else if (item.TaskType == (int)TaskTypeEnum.F01) |
| | | { |
| | | // F01ä»»å¡å¤çï¼æ ¹æ®ç®æ å°å夿éè¦åªä¸ªæ¥¼å±çå°è½¦ |
| | | var result = _agvcartInfoService.CheckTheCar(); |
| | | |
| | | if (result != null && result.Status) |
| | | { |
| | | var dataList = result.Data as List<HIKROBOTQueryData>; |
| | | if (dataList != null && dataList.Any()) |
| | | { |
| | | // ä»ä»»å¡çèµ·å§å°å䏿åéè¦ç楼å±ä»£ç |
| | | string requiredMapCode = GetMapCodeFromAddress(item.SourceAddress); |
| | | if (string.IsNullOrEmpty(requiredMapCode)) |
| | | { |
| | | item.ExceptionMessage = $"æ æ³ä»ç®æ å°å {item.SourceAddress} ä¸è¯å«æ¥¼å±ä¿¡æ¯"; |
| | | _taskService.UpdateData(item); |
| | | continue; |
| | | } |
| | | |
| | | // æ£æ¥æ¯å¦æå¨ç®æ 楼å±çå°è½¦ |
| | | var hasRequiredCar = dataList.FirstOrDefault(d => d.mapCode == requiredMapCode&&d.CarType== "MR-Q3-600LE-D(M)"); |
| | | |
| | | if (hasRequiredCar!=null) |
| | | { |
| | | // æå¨ç®æ 楼å±çå°è½¦ï¼ç´æ¥æ§è¡ä»»å¡ |
| | | var content = _taskService.SendHIKROBOTTask(item); |
| | | if (content.Status) |
| | | { |
| | | item.TaskState = (int)TaskStatusEnum.Execut; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 没æç®æ 楼å±çå°è½¦ï¼éè¦å¼å«ç©ºè½¦ä»å½åä½ç½®å°ç®æ æ¥¼å± |
| | | var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)"); |
| | | |
| | | if (anySpecialCar != null) |
| | | { |
| | | var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, requiredMapCode); |
| | | if (callCarResult.Status) |
| | | { |
| | | item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | item.ExceptionMessage = "æªæ¾å°å¯ç¨AGVå°è½¦"; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | _taskService.UpdateData(item); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | |
| | | #region å¤ç海康agvæ¬è¿ä»»å¡ |
| | | /// <summary> |
| | | /// å建空车å¼å«ä»»å¡ï¼æ ¹æ®å°è½¦å½åä½ç½®åç®æ 楼å±ï¼è®¾ç½®ä»»å¡çèµ·ç¹ãå½åä½ç½®åç®æ ç¹ï¼å¹¶ä¸åç»æµ·åº·æ¥å£ |
| | | /// </summary> |
| | | /// <param name="task"></param> |
| | | /// <param name="currentMapCode">å½åä½ç½®</param> |
| | | /// <param name="targetMapCode">ç®æ å°å</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent AddAGVCartInfo(Dt_Task task, string currentMapCode, string targetMapCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskSubmit)) ?? throw new Exception("æªæ¾å°æµ·åº·AGVä»»å¡ä¸åæ¥å£é
置信æ¯ï¼è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | |
| | | #region ä»»å¡ä¿¡æ¯è½¬æ¢ |
| | | HIKROBOTTaskSubmit hIKROBOTTaskSubmit = new HIKROBOTTaskSubmit() |
| | | // è·åèµ·ç¹æ¥¼å±ä¿¡æ¯ |
| | | if (!FloorMapping.FloorMap.ContainsKey(currentMapCode)) |
| | | { |
| | | taskType = "", |
| | | initPriority = task.Grade, |
| | | targetRoute = new List<TargetRouteDto> |
| | | { |
| | | new TargetRouteDto |
| | | { |
| | | type= "SITE", |
| | | code=task.CurrentAddress, |
| | | operation="COLLECT",//åè´§ |
| | | }, |
| | | new TargetRouteDto |
| | | { |
| | | type= "SITE", |
| | | code=task.NextAddress, |
| | | operation="DELIVERY",//éè´§ |
| | | } |
| | | } |
| | | content.Error($"æ æçèµ·ç¹æ¥¼å±ä»£ç ï¼{currentMapCode}"); |
| | | return content; |
| | | } |
| | | |
| | | // è·åç®æ 楼å±ä¿¡æ¯ |
| | | if (!FloorMapping.FloorMap.ContainsKey(targetMapCode)) |
| | | { |
| | | content.Error($"æ æçç®æ 楼å±ä»£ç ï¼{targetMapCode}"); |
| | | return content; |
| | | } |
| | | |
| | | var currentFloorInfo = FloorMapping.FloorMap[currentMapCode]; |
| | | var targetFloorInfo = FloorMapping.FloorMap[targetMapCode]; |
| | | |
| | | // 设置任å¡ä¿¡æ¯ |
| | | //task.SourceAddress = currentFloorInfo.PointCode; // èµ·ç¹ï¼å°è½¦å½åä½ç½®çç¹ä½ |
| | | //task.CurrentAddress = currentFloorInfo.PointCode; // å½åä½ç½®ï¼å°è½¦å½åä½ç½®çç¹ä½ |
| | | //task.TargetAddress = targetFloorInfo.PointCode; // ç®æ ç¹ï¼ç®æ 楼å±ç¹ä½ |
| | | //task.NextAddress = targetFloorInfo.PointCode; // è®°å½ç®æ 楼å±ä»£ç |
| | | |
| | | Dt_Task newTask = new Dt_Task |
| | | { |
| | | WMSTaskNum="HKkc"+ DateTime.Now.ToString("yyyyMMddHHmmss"), // çæå¯ä¸çWMSä»»å¡å· |
| | | TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), |
| | | SourceAddress = currentFloorInfo.PointCode, |
| | | CurrentAddress = currentFloorInfo.PointCode, |
| | | TargetAddress = targetFloorInfo.PointCode, |
| | | NextAddress = targetFloorInfo.PointCode, |
| | | TaskType = (int)TaskTypeEnum.MOVE, |
| | | Grade = task.Grade, |
| | | PalletCode = null, |
| | | TaskState = (int)TaskStatusEnum.CallingHKtransportation, |
| | | // å¤å¶å
¶ä»å¿
è¦å段 |
| | | CreateDate = DateTime.Now, |
| | | Creater = "System" |
| | | }; |
| | | #endregion |
| | | |
| | | string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskSubmit.Serialize()); |
| | | var hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>(); |
| | | if (hIKROBOTReturn.code == "SUCCESS") |
| | | _taskService.AddData(newTask); // æ·»å æ°ä»»å¡ |
| | | var result = _taskService.SendHIKROBOTTask(newTask); |
| | | if (result.Status) |
| | | { |
| | | var data = hIKROBOTReturn.data.ToString().DeserializeObject<HIKROBOTReturnData>(); |
| | | content.OK(data: data); |
| | | //task.Remark = data.robotTaskCode; |
| | | content.OK("空车å¼å«ä»»å¡å建æå", newTask); |
| | | } |
| | | else |
| | | { |
| | | throw new Exception(hIKROBOTReturn.message); |
| | | content.Error("空车å¼å«ä»»å¡ä¸å失败"); |
| | | } |
| | | //_taskService.UpdateData(task); |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | |
| | | content.Error($"å建空车å¼å«ä»»å¡å¤±è´¥ï¼{ex.Message}"); |
| | | } |
| | | return content; |
| | | } |
| | | #endregion |
| | | |
| | | #region å¤çagvå¾
空车æ¬è¿ä»»å¡ |
| | | public void SendHKWaitTask() |
| | | { |
| | | try |
| | | { |
| | | List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.MOVE); |
| | | if (reslut.Count<=0) |
| | | { |
| | | List<Dt_Task> reslut2 = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Q3RK||x.TaskType==(int)TaskTypeEnum.Q3CK || x.TaskType == (int)TaskTypeEnum.F01); |
| | | foreach (var item in reslut2) |
| | | { |
| | | var content = _taskService.SendHIKROBOTTask(item); |
| | | } |
| | | reslut.ForEach(x => |
| | | { |
| | | x.TaskState =(int)TaskStatusEnum.Execut; |
| | | }); |
| | | |
| | | } |
| | | _taskService.UpdateData(reslut); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteError(nameof(TaskJob), ex.Message, ex); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | /// <summary> |
| | | /// ä»å°å䏿忥¼å±ä»£ç ï¼AAãBBãCCãDDãEEãFFï¼ |
| | | /// </summary> |
| | | /// <param name="address">ç¹ä½å°å</param> |
| | | /// <returns>楼å±ä»£ç </returns> |
| | | private string GetMapCodeFromAddress(string address) |
| | | { |
| | | if (string.IsNullOrEmpty(address)) |
| | | return null; |
| | | |
| | | // å°åæ ¼å¼ç¤ºä¾ ï¼AA å¯¹åº 0339050AA0309145 |
| | | // keys æ¯ AAãBBãCCãDDãEEãFFï¼vuleæ¯å¯¹åºçç¹ä½ä¿¡æ¯ |
| | | foreach (var floorCode in FloorMapping.FloorMap.Keys) |
| | | { |
| | | if (address.Contains(floorCode)) |
| | | { |
| | | return floorCode;//è¿åçå°±æ¯AAãBBãCCãDDãEEãFFä¸çä¸ä¸ªï¼ä»£è¡¨å¯¹åºçæ¥¼å± |
| | | } |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | } |
| | | } |