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 + "&timestamp=" + 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 + "&timestamp=" + 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 + "&timestamp=" + 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