From 1caea0fdc7ed1788d854a2aba8853984b4494e01 Mon Sep 17 00:00:00 2001 From: wankeda <Administrator@DESKTOP-HAU3ST3> Date: 星期二, 24 六月 2025 09:56:28 +0800 Subject: [PATCH] 代码提交 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs | 457 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 455 insertions(+), 2 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" index 9846deb..d5437c8 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" @@ -1,18 +1,31 @@ 锘縰sing 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> @@ -82,7 +95,7 @@ { return WebResponseContent.Instance.Error(ex.Message); } - + } /// <summary> @@ -121,7 +134,7 @@ { return WebResponseContent.Instance.Error(ex.Message); } -} + } private Dt_CachePoint GetCachePointByStartPoint(string startPoint) { @@ -191,5 +204,445 @@ 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(); + //鎺ュ彈浠诲姟鍙峰搴攚cs浠诲姟鍙凤紝浠诲姟鐘舵�佸垽鏂�.......闇�淇敼 + 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(); + + // 灏嗚緭鍏ュ瓧绗︿覆杞崲涓哄瓧鑺傛暟缁勫苟璁$畻鍏禡D5鍝堝笇銆� + byte[] dataBytes = Encoding.UTF8.GetBytes(appkeystr); + byte[] hashBytes = md5Hash.ComputeHash(dataBytes); + + // 鍒涘缓涓�涓柊鐨凷tringbuilder鏉ユ敹闆嗗瓧鑺傚苟鍒涘缓涓�涓瓧绗︿覆銆� + StringBuilder builder = new StringBuilder(); + + // 寰幆閫氳繃姣忎釜瀛楄妭鐨勫搱甯岋紝骞舵牸寮忓寲涓哄崄鍏繘鍒跺瓧绗︿覆銆� + for (int i = 0; i < hashBytes.Length; i++) + { + builder.Append(hashBytes[i].ToString("x2")); + } + + string appkeyEcrypt = builder.ToString(); + + return appkeyEcrypt; + } } } -- Gitblit v1.9.3