using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_ITaskInfoService; using WIDESEA_ITaskInfoRepository; using WIDESEA_Model.Models; using WIDESEA_Common.AGVEunm; using WIDESEA_Core; using WIDESEA_Core.Helper; using WIDESEA_Core.BaseRepository; using Microsoft.VisualBasic; using System.Security.Cryptography; using Org.BouncyCastle.Crypto.Digests; using WIDESEA_Core.Const; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using WIDESEA_Core.Enums; using System.Diagnostics; using WIDESEA_Core.Log; namespace WIDESEA_Tasks { public partial class AGVjob { private readonly IUnitOfWorkManage _unitOfWorkManage; public string url = AppSettings.Configuration["AGVTaskPend"]; WebResponseContent content = new WebResponseContent(); public void SendAgvTask() { try { var agvtask = _taskService.GetTasks(); if (agvtask != null) { AGVTaskPend pend = new AGVTaskPend(); //pend.requestType = pend.requestType; //pend.accessId = pend.accessId; //pend.requestId = pend.requestId; Pend data = new Pend(); TaskPend taskPend = new TaskPend(); { taskPend.taskNo = agvtask.TaskNum.ToString(); taskPend.taskType = "MV"; DateTime date = DateTime.Now; taskPend.taskDate = date.ToString("yyyy-MM-dd HH:mm:ss"); taskPend.taskState = "00"; taskPend.priority = "1"; taskPend.wareCode = "W01"; taskPend.docNo = ""; taskPend.sku = ""; taskPend.uom = ""; taskPend.qty = 0; taskPend.trace = ""; taskPend.fmLoc = agvtask.SourceAddress.ToString(); taskPend.toLoc = agvtask.TargetAddress.ToString(); taskPend.udf01 = ""; taskPend.udf02 = ""; } data.detail.Add(taskPend); pend.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 headers = new Dictionary() { {"appkey",AGVopenApi.appkey }, {"timestamp",timestampStr.ToString() }, {"sign",signstr } }; string posy = JsonConvert.SerializeObject(pend); var respone = HttpHelper.Post(url, posy, headers: headers); var res = JsonConvert.DeserializeObject(respone); if (res.Code == 200) { agvtask.Dispatchertime = DateTime.Now; agvtask.TaskStatus = AGVTaskStatusEnum.AGV_SendOut.ObjToInt(); _taskService.UpdateData(agvtask); Thread.Sleep(1000); WriteLog.GetLog("无人叉车任务下发").Write("任务号:" + agvtask.TaskNum, "无人叉车任务下发"); } else { //_unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error($"{res.Message}"); WriteLog.GetLog("无人叉车任务下发失败").Write("任务号:" + agvtask.TaskNum + '\n' + "失败信息" + res.Message, "无人叉车任务下发失败"); } } } catch (Exception ex) { //_unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error($"{ex.Message}"); //throw new Exception($"下发任务失败" + ex); } } 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; } } }