| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Reflection.Metadata; |
| | | using System.Security.Cryptography; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Newtonsoft.Json; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| | | using SqlSugar; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Common.AGVEunm; |
| | | using WIDESEA_Core; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_Core.Log; |
| | | using WIDESEA_ITaskInfoService; |
| | | using WIDESEA_Model.Models; |
| | | using static WIDESEA_Common.AGVEunm.AGVTaskrevoke; |
| | | |
| | | |
| | | namespace WIDESEA_TaskInfoService |
| | | { |
| | | |
| | | public partial class TaskService |
| | | { |
| | | public string url1 = AppSettings.Configuration["AGVTaskrevokes"]; |
| | | /// <summary> |
| | | /// ç«åºåºåºAGVæ¬è¿ |
| | | /// </summary> |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private Dt_CachePoint GetCachePointByStartPoint(string startPoint) |
| | | { |
| | |
| | | |
| | | return new { code = 200, message = "æå" }; |
| | | } |
| | | /// <summary> |
| | | /// æ¥è¯¢AGVæ°å»ºä»»å¡ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public List<Dt_Task> GetTasks() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | //Expression<Func<Dt_Task, bool>> expressionOrder = x => true; |
| | | return BaseDal.QueryData(x => x.TaskStatus == AGVTaskStatusEnum.AGV_New.ObjToInt() || x.TaskStatus == AGVTaskStatusEnum.AGV_Wait.ObjToInt()).ToList(); |
| | | } |
| | | /// <summary> |
| | | /// æ¥è¯¢åææåºåºä»»å¡ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public Dt_Task GetTasksout() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | //Expression<Func<Dt_Task, bool>> expressionOrder = x => true; |
| | | return BaseDal.QueryFirst(x => x.TaskType == TaskTypeEnum.Outbound.ObjToInt() && x.SourceAddress.Contains("åææ") && x.TaskStatus == AGVTaskStatusEnum.AGV_Query.ObjToInt()); |
| | | } |
| | | /// <summary> |
| | | /// æ¥è¯¢æåæè´§è´§ä½ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public Dt_CachePoint GetTasksoin() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | Expression<Func<Dt_CachePoint, bool>> expressionOrder = x => true; |
| | | return _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode.Contains("æååº") && x.PointStatus == LocationStatusEnum.InStock.ObjToInt()); |
| | | } |
| | | /// <summary> |
| | | /// AGVåè¦åé¦ |
| | | /// </summary> |
| | | /// <param name="saveModel"></param> |
| | | /// <returns></returns> |
| | | public WCSback EquipmentTask(AGVTaskEquipment saveModel) |
| | | { |
| | | WCSback content = new WCSback(); |
| | | try |
| | | { |
| | | var broad = saveModel.data.detail.FirstOrDefault(); |
| | | Dt_Equipment equipment = new Dt_Equipment |
| | | { |
| | | deviceId = broad.deviceId.ToString(), |
| | | deviceName = broad.deviceName.ToString(), |
| | | taskNo = broad.taskNo.ToString(), |
| | | eventId = broad.eventId.ToString(), |
| | | title = broad.title.ToString(), |
| | | message = broad.message.ToString(), |
| | | status = broad.status.ToString(), |
| | | Creater = App.User.UserId > 0 ? App.User.UserName : "System", |
| | | }; |
| | | _basicService.EquipmentService.AddData(equipment); |
| | | content = WCSback.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content = WCSback.Instance.Error($"å¼å¸¸,é误信æ¯:{ex.Message}"); |
| | | throw; |
| | | } |
| | | return content; |
| | | } |
| | | public WebResponseContent PrintStatusUp(int tasknum, string palletCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == tasknum && x.PalletCode == palletCode); |
| | | if (task == null) |
| | | { |
| | | return content.Error("æå°ä¿¡æ¯ä¸åå¨"); |
| | | } |
| | | task.Status = PrintEnum.Printed.ObjToInt(); |
| | | BaseDal.UpdateData(task); |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error("é误:" + ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// å车æ¥è¦ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetConfig() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | DateTime currentTime = DateTime.Now; // è·åå½åæ¶é´ |
| | | DateTime twoSecondsBefore = currentTime.AddSeconds(-1000); |
| | | Dt_Equipment equipment = _basicService.EquipmentService.Repository.QueryFirst(x => x.CreateDate > twoSecondsBefore); |
| | | if (equipment != null) |
| | | { |
| | | content = WebResponseContent.Instance.OK(data: "设å¤id" + equipment.deviceId.ToString() + " " + "设å¤åç§°" + equipment.deviceName.ToString() + " " + "ä»»å¡å·" + equipment.taskNo.ToString() |
| | | + " " + equipment.eventId.ToString() + " " + "åè¦æ é¢" + equipment.title.ToString() + " " + "åè¦å
容" + equipment.message.ToString() + " " + "åè¦ç¶æ" + equipment.status.ToString()); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// ä»»å¡å®æ |
| | | /// </summary> |
| | | /// <param name="feedback"></param> |
| | | /// <returns></returns> |
| | | public WCSback UpdateAgvTask(AGVTaskFeedback feedback) |
| | | { |
| | | try |
| | | { |
| | | WCSback content = new WCSback(); |
| | | var bored = feedback.data.detail.FirstOrDefault(); |
| | | //æ¥åä»»å¡å·å¯¹åºwcsä»»å¡å·ï¼ä»»å¡ç¶æå¤æ.......éä¿®æ¹ |
| | | int tasknum = bored.taskNo.ObjToInt();//ä»»å¡å· |
| | | int taskState = bored.taskState.ObjToInt();//ä»»å¡ç¶æ |
| | | var task = BaseDal.QueryData(x => x.TaskNum == tasknum).First(); |
| | | if (task != null) |
| | | { |
| | | Update(task, taskState); |
| | | content.code = 200; |
| | | content.message = "å¤çæå"; |
| | | } |
| | | return content; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WCSback.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | private void Update(Dt_Task task, int taskState) |
| | | { |
| | | Thread.Sleep(1000); |
| | | if (taskState == 99) |
| | | { |
| | | int TaskStatus = AGVTaskStatusEnum.AGV_Finish.ObjToInt(); |
| | | _taskHtyService.AddTaskHty(task, TaskStatus); |
| | | HCJFree(task, TaskStatus); |
| | | BaseDal.DeleteData(task); |
| | | WriteLog.GetLog("æ 人å车任å¡å®æ").Write("ä»»å¡å·ï¼" + task.TaskNum, "æ 人å车任å¡å®æ"); |
| | | } |
| | | else if (taskState == 90) |
| | | { |
| | | int TaskStatus = AGVTaskStatusEnum.AGV_Cancel.ObjToInt(); |
| | | _taskHtyService.AddTaskHty(task, TaskStatus); |
| | | HCJFree(task, TaskStatus); |
| | | BaseDal.DeleteData(task); |
| | | WriteLog.GetLog("æ 人å车任å¡åæ¶").Write("ä»»å¡å·ï¼" + task.TaskNum, "æ 人å车任å¡åæ¶"); |
| | | } |
| | | else if (taskState == 91) |
| | | { |
| | | int TaskStatus = AGVTaskStatusEnum.AGV_Fail.ObjToInt(); |
| | | _taskHtyService.AddTaskHty(task, TaskStatus); |
| | | HCJFree(task, TaskStatus); |
| | | BaseDal.DeleteData(task); |
| | | } |
| | | else if (taskState == 93) |
| | | { |
| | | int TaskStatus = AGVTaskStatusEnum.AGV_Complete.ObjToInt(); |
| | | if (task.SourceAddress.Contains("åææåº")) |
| | | { |
| | | HCJCope(task, TaskStatus); |
| | | } |
| | | BaseDal.UpdateData(task); |
| | | } |
| | | else if (taskState == 60) |
| | | { |
| | | task.TaskStatus = AGVTaskStatusEnum.AGV_Executing.ObjToInt(); |
| | | BaseDal.UpdateData(task); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// æ¤éå·²ä¸åä»»å¡ |
| | | /// </summary> |
| | | /// <param name="taskNum">ä»»å¡å·</param> |
| | | /// <returns>è¿åå¤çç»æ</returns> |
| | | public WebResponseContent AGVTaskrevokes(int tasknum) |
| | | { |
| | | try |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == tasknum); |
| | | AGVTaskrevoke taskrevoke = new AGVTaskrevoke(); |
| | | revoke data = new revoke(); |
| | | Taskrevoke taskrevoke1 = new Taskrevoke(); |
| | | { |
| | | taskrevoke1.taskNo = task.TaskNum.ToString(); |
| | | DateTime date = DateTime.Now; |
| | | taskrevoke1.stateTime = date.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | taskrevoke1.taskState = "90"; |
| | | taskrevoke1.toLoc = task.TargetAddress.ToString(); |
| | | DateTime date1 = task.CreateDate; |
| | | taskrevoke1.taskDate = date1.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | } |
| | | data.detail.Add(taskrevoke1); |
| | | taskrevoke.data = data; |
| | | var time = new DateTimeOffset(DateTime.Now); |
| | | long timestampStr = time.ToUnixTimeMilliseconds();//æ¶é´æ³ |
| | | |
| | | string appkeystr = "appsalt=" + AGVopenApi.appsalt + "&appkey=" + AGVopenApi.appkey; |
| | | |
| | | string appkeyEcrypt = GetMD5Hex(appkeystr); |
| | | |
| | | string origin = appkeyEcrypt + "&appsecret=" + AGVopenApi.appsecret + "×tamp=" + timestampStr + "&uniquestr=" + timestampStr; |
| | | |
| | | string signstr = GetMD5Hex(origin); |
| | | |
| | | Dictionary<string, string> headers = new Dictionary<string, string>() |
| | | { |
| | | {"appkey",AGVopenApi.appkey }, |
| | | {"timestamp",timestampStr.ToString() }, |
| | | {"sign",signstr } |
| | | }; |
| | | |
| | | string posy = JsonConvert.SerializeObject(taskrevoke); |
| | | var respone = HttpHelper.Post(url1, posy, headers: headers); |
| | | var res = JsonConvert.DeserializeObject<WebResponseContent>(respone); |
| | | if (res.success) |
| | | { |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error(res.msg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// ç»§ç»ä»»å¡ |
| | | /// </summary> |
| | | /// <param name="tasknum"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public WebResponseContent AGVTaskConts(int tasknum) |
| | | { |
| | | try |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == tasknum); |
| | | AGVTaskCont taskCont = new AGVTaskCont(); |
| | | Cont data = new Cont(); |
| | | TaskCont taskconts = new TaskCont(); |
| | | { |
| | | taskconts.taskNo = task.TaskNum.ToString(); |
| | | } |
| | | data.detail.Add(taskconts); |
| | | taskCont.data = data; |
| | | |
| | | var time = new DateTimeOffset(DateTime.Now); |
| | | long timestampStr = time.ToUnixTimeMilliseconds();//æ¶é´æ³ |
| | | |
| | | string appkeystr = "appsalt=" + AGVopenApi.appsalt + "&appkey=" + AGVopenApi.appkey; |
| | | |
| | | string appkeyEcrypt = GetMD5Hex(appkeystr); |
| | | |
| | | string origin = appkeyEcrypt + "&appsecret=" + AGVopenApi.appsecret + "×tamp=" + timestampStr + "&uniquestr=" + timestampStr; |
| | | |
| | | string signstr = GetMD5Hex(origin); |
| | | |
| | | Dictionary<string, string> headers = new Dictionary<string, string>() |
| | | { |
| | | {"appkey",AGVopenApi.appkey }, |
| | | {"timestamp",timestampStr.ToString() }, |
| | | {"sign",signstr } |
| | | }; |
| | | |
| | | string posy = JsonConvert.SerializeObject(taskCont); |
| | | var respone = HttpHelper.Post(url1, posy, headers: headers); |
| | | var res = JsonConvert.DeserializeObject<WebResponseContent>(respone); |
| | | if (res.success) |
| | | { |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error(res.msg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// å®æä»»å¡ |
| | | /// </summary> |
| | | /// <param name="tasknum"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public WebResponseContent AGVTaskEnds(int tasknum) |
| | | { |
| | | try |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == tasknum); |
| | | AGVTaskEnd taskEnd = new AGVTaskEnd(); |
| | | End data = new End(); |
| | | TaskEnd taskEnds = new TaskEnd(); |
| | | { |
| | | taskEnds.taskNo = task.TaskNum.ToString(); |
| | | taskEnds.goBack = "1"; |
| | | } |
| | | data.detail.Add(taskEnds); |
| | | taskEnd.data = data; |
| | | var time = new DateTimeOffset(DateTime.Now); |
| | | long timestampStr = time.ToUnixTimeMilliseconds();//æ¶é´æ³ |
| | | |
| | | string appkeystr = "appsalt=" + AGVopenApi.appsalt + "&appkey=" + AGVopenApi.appkey; |
| | | |
| | | string appkeyEcrypt = GetMD5Hex(appkeystr); |
| | | |
| | | string origin = appkeyEcrypt + "&appsecret=" + AGVopenApi.appsecret + "×tamp=" + timestampStr + "&uniquestr=" + timestampStr; |
| | | |
| | | string signstr = GetMD5Hex(origin); |
| | | |
| | | Dictionary<string, string> headers = new Dictionary<string, string>() |
| | | { |
| | | {"appkey",AGVopenApi.appkey }, |
| | | {"timestamp",timestampStr.ToString() }, |
| | | {"sign",signstr } |
| | | }; |
| | | |
| | | string posy = JsonConvert.SerializeObject(taskEnd); |
| | | var respone = HttpHelper.Post(url1, posy, headers: headers); |
| | | var res = JsonConvert.DeserializeObject<WebResponseContent>(respone); |
| | | if (res.success) |
| | | { |
| | | int TaskStatus = AGVTaskStatusEnum.AGV_Finish.ObjToInt(); |
| | | //_taskHtyService.AddTaskHty(task, TaskStatus); |
| | | BaseDal.DeleteData(task); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error(res.msg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// æåä»»å¡ |
| | | /// </summary> |
| | | /// <param name="tasknum"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public WebResponseContent AGVTaskSuspends(int tasknum) |
| | | { |
| | | try |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == tasknum); |
| | | AGVTaskSuspend suspend = new AGVTaskSuspend(); |
| | | spend data = new spend(); |
| | | TaskSuspend suspends = new TaskSuspend(); |
| | | { |
| | | suspends.taskNo = task.TaskNum.ToString(); |
| | | } |
| | | data.detail.Add(suspends); |
| | | suspend.data = data; |
| | | var respone = HttpHelper.Post<WebResponseContent>(url + "AGVTaskSuspend/" + suspend, "æåä»»å¡"); |
| | | int TaskStatus = AGVTaskStatusEnum.AGV_Finish.ObjToInt(); |
| | | _taskHtyService.AddTaskHty(task, TaskStatus); |
| | | BaseDal.DeleteData(task); |
| | | if (respone.success) |
| | | { |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error(respone.msg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// æ¢å¤ä»»å¡ |
| | | /// </summary> |
| | | /// <param name="tasknum"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="Exception"></exception> |
| | | public WebResponseContent AGVTaskRecoverys(int tasknum) |
| | | { |
| | | try |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == tasknum); |
| | | AGVTaskRecovery recovery = new AGVTaskRecovery(); |
| | | Recovery data = new Recovery(); |
| | | TaskRecovery recoverys = new TaskRecovery(); |
| | | { |
| | | recoverys.taskNo = task.TaskNum.ToString(); |
| | | } |
| | | data.detail.Add(recoverys); |
| | | recovery.data = data; |
| | | var respone = HttpHelper.Post<WebResponseContent>(url + "AGVTaskRecovery/" + recovery, "æ¢å¤ä»»å¡"); |
| | | if (respone.success) |
| | | { |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | else |
| | | { |
| | | return WebResponseContent.Instance.Error(respone.msg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | |
| | | } |
| | | |
| | | public string GetMD5Hex(string appkeystr) |
| | | { |
| | | using MD5 md5Hash = MD5.Create(); |
| | | |
| | | // å°è¾å
¥å符串转æ¢ä¸ºåèæ°ç»å¹¶è®¡ç®å
¶MD5åå¸ã |
| | | byte[] dataBytes = Encoding.UTF8.GetBytes(appkeystr); |
| | | byte[] hashBytes = md5Hash.ComputeHash(dataBytes); |
| | | |
| | | // å建ä¸ä¸ªæ°çStringbuilderæ¥æ¶éåèå¹¶å建ä¸ä¸ªå符串ã |
| | | StringBuilder builder = new StringBuilder(); |
| | | |
| | | // 循ç¯éè¿æ¯ä¸ªåèçåå¸ï¼å¹¶æ ¼å¼å为åå
è¿å¶å符串ã |
| | | for (int i = 0; i < hashBytes.Length; i++) |
| | | { |
| | | builder.Append(hashBytes[i].ToString("x2")); |
| | | } |
| | | |
| | | string appkeyEcrypt = builder.ToString(); |
| | | |
| | | return appkeyEcrypt; |
| | | } |
| | | } |
| | | } |