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
|
{
|
|
List<Dt_Task> agvtasks = _taskService.GetTasks();
|
foreach (Dt_Task agvtask in agvtasks)
|
{
|
bool text = true;
|
bool text1 = true;
|
bool text2 = true;
|
bool text3 = true;
|
Thread.Sleep(500);
|
Dt_CachePoint CachePointSO = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.SourceAddress);//查询起点
|
Dt_CachePoint CachePoint = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.TargetAddress && x.PointCode.Contains("成品库"));//|| x.PointCode.Contains("原材料库")) && x.Remark != null
|
|
Dt_CachePoint dt_CachePoint = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.TargetAddress && x.Remark != null);//查询终点
|
Dt_CachePoint CachePointYCl = _cachePointRepository.QueryFirst(x => x.PointCode == agvtask.SourceAddress && x.Remark != null && x.PointCode.Contains("原材料库"));
|
if (CachePoint != null && CachePointSO != null)
|
{
|
var pointnames = _cachePointRepository.QueryData(x => x.Remark == CachePoint.Remark && x.Remark != "0").ToList();
|
foreach (var item in pointnames)
|
{
|
var a = CachePoint.Depth.ObjToInt();
|
var b = item.Depth.ObjToInt();
|
if (a > b)
|
{
|
Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.TargetAddress == item.PointCode);
|
if (dt_Task != null)
|
{
|
text = false;
|
continue;
|
}
|
}
|
}
|
if (CachePointSO.Remark != null)
|
{
|
var pointname = _cachePointRepository.QueryData(x => x.Remark == CachePointSO.Remark && x.Remark != "0").ToList();
|
foreach (var item1 in pointname)
|
{
|
var c = CachePointSO.Depth.ObjToInt();
|
var d = item1.Depth.ObjToInt();
|
if (c > d)
|
{
|
Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == item1.PointCode);
|
if (dt_Task != null)
|
{
|
text1 = false;
|
continue;
|
}
|
}
|
}
|
}
|
if (text == true && text1 == true)
|
{
|
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, "无人叉车任务下发失败");
|
}
|
}
|
}
|
else if (CachePointYCl != null && dt_CachePoint != null)
|
{
|
var pointnames = _cachePointRepository.QueryData(x => x.Remark == CachePointYCl.Remark).ToList();
|
foreach (var item in pointnames)
|
{
|
var a = CachePointYCl.Depth.ObjToInt();
|
var b = item.Depth.ObjToInt();
|
if (a > b)
|
{
|
Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.SourceAddress == item.PointCode);
|
if (dt_Task != null)
|
{
|
text2 = false;
|
continue;
|
}
|
}
|
}
|
var pointname = _cachePointRepository.QueryData(x => x.Remark == dt_CachePoint.Remark).ToList();
|
foreach (var item1 in pointname)
|
{
|
var c = dt_CachePoint.Depth.ObjToInt();
|
var d = item1.Depth.ObjToInt();
|
if (c > d)
|
{
|
Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.TargetAddress == item1.PointCode);
|
if (dt_Task != null)
|
{
|
text3 = false;
|
continue;
|
}
|
}
|
}
|
if (text2 == true && text3 == true)
|
{
|
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, "无人叉车任务下发失败");
|
}
|
}
|
}
|
//if (dt_CachePoint != null)
|
//{
|
// var pointname = _cachePointRepository.QueryData(x => x.Remark == dt_CachePoint.Remark).ToList();
|
// foreach (var item in pointname)
|
// {
|
// var a = dt_CachePoint.Depth.ObjToInt();
|
// var b = item.Depth.ObjToInt();
|
// if (b > a)
|
// {
|
// //Dt_CachePoint c = _cachePointRepository.QueryFirst(x => x.PointCode == item.PointCode && x.PointStatus == 0);
|
// Dt_Task dt_Task = _taskRepository.QueryFirst(x => x.TargetAddress == item.PointCode);
|
// if (dt_Task != null)
|
// {
|
// continue;
|
// }
|
// }
|
// }
|
//}
|
else
|
{
|
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;
|
}
|
}
|
|
}
|