1
wankeda
2025-03-25 e0fb00cb3bb37f519b8444b3c5408111207fb069
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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
            {
                Console.WriteLine("开始   " + DateTime.Now);
                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 + "&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(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;
        }
    }
 
}