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<string, string> headers = new Dictionary<string, string>()
|
{
|
{"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<WebResponseContent>(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;
|
}
|
}
|
|
}
|