huangxiaoqiang
6 小时以前 16749e23b489ee24f993fe9e87346680b7bcf63a
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
using AngleSharp.Io;
using HslCommunication;
using LogLibrary.Log;
using Mapster;
using Newtonsoft.Json;
using SkiaSharp;
using System.Diagnostics.CodeAnalysis;
using WIDESEAWCS_Common;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_Core.LogHelper;
using WIDESEAWCS_DTO.AGV;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
 
namespace WIDESEAWCS_TaskInfoService
{
    public partial class TaskService
    {
        #region 调用AGV接口
        private string GetAGVIPAddress(string baseIp, string name)
        {
            var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress);
            var wcsBasez = configz.Where(x => x.ConfigKey == baseIp).FirstOrDefault()?.ConfigValue;
            var address = configz.Where(x => x.ConfigKey == name).FirstOrDefault()?.ConfigValue;
            if (wcsBasez == null || address == null)
            {
                throw new InvalidOperationException("WMS IP 未配置");
            }
            return wcsBasez + address;
        }
 
        /// <summary>
        /// 发送任务
        /// </summary>
        /// <param name="modelProcessCode"></param>
        /// <param name="task"></param>
        /// <returns></returns>
        public async Task<WebResponseContent> SendAgvTask(string modelProcessCode, int taskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                List<taskOrderDetail> orderDetails = new List<taskOrderDetail>()
                {
                    new taskOrderDetail()
                    {
                        taskPath = $"{task.CurrentAddress},{task.NextAddress}",
                        shelfNumber = "",
                    }
                };
                SendTask sendTask = new SendTask()
                {
                    modelProcessCode = modelProcessCode,
                    priority = 1,
                    fromSystem = "WMS",
                    orderId = task.AGVTaskNum,
                    taskOrderDetail = orderDetails
 
                };
                var AgvSendTaskAddrss = GetAGVIPAddress(SysConfigKeyConst.AGVIP_BASE, SysConfigKeyConst.SendAGVTask);
                // 发送请求并等待响应
                var result = await HttpHelper.PostAsync(AgvSendTaskAddrss, sendTask.ToJsonString());
 
                LogFactory.WriteInfo("下发AGV任务回调", $"{JsonConvert.SerializeObject(result)}");
 
                var respone = JsonConvert.DeserializeObject<AgvRespone>(result.ToString());
 
                if (respone.code != 1000)
                {
                    content.Error(respone.desc);
                }
                content.OK(respone.desc);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
 
        public async Task<WebResponseContent> ContinueAgvTask(string AGVTaskNum)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                SendTask sendTask = new SendTask()
                {
                    orderId = AGVTaskNum.ToString(),
                };
                var AgvSendTaskAddrss = GetAGVIPAddress(SysConfigKeyConst.AGVIP_BASE, SysConfigKeyConst.ContinueAGVTask);
                // 发送请求并等待响应
                var result = await HttpHelper.PostAsync(AgvSendTaskAddrss, sendTask.ToJsonString());
 
                var respone = JsonConvert.DeserializeObject<AgvRespone>(result.ToString());
 
                if (respone.code != 1000)
                {
                    content.Error(respone.desc);
                }
                content.OK("任务下发至AGV系统");
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        #endregion
 
    }
}