dengjunjie
2025-03-27 bb56b2b6f21acb7c69c02585e5bc534d2f67715f
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_DTO.WMSInfo;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_TaskInfoService;
 
namespace WIDESEAWCS_TaskInfoService
{
    public partial class TaskService
    {
        /// <summary>
        /// 更新AGV任务状态
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent AGVUpdateTaskState(AGVUpdateTaskDTO saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (saveModel == null) throw new Exception("更新任务信息为空");
                Dt_Task dt_Task = GetTaskInfo(Convert.ToInt32(saveModel.outID));
                if (dt_Task == null) throw new Exception($"未找到任务号为【{saveModel.outID}】的任务");
                if (dt_Task.TaskState >= (int)TaskInStatusEnum.AGV_InFinish)
                {
                    return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{dt_Task.TaskNum}】,任务状态:【{GetEnumDescription(Enum.Parse<TaskInStatusEnum>(Enum.GetName(typeof(TaskInStatusEnum), dt_Task.TaskState)))}】");
                }
                switch (saveModel.status)
                {
                    case "02":
                        dt_Task.TaskState = (int)TaskInStatusEnum.AGV_InExecuting;
                        break;
                    case "08":
                        {
                            dt_Task.TaskState = (int)TaskInStatusEnum.AGV_InFinish;
                            dt_Task.CurrentAddress = dt_Task.NextAddress;
                            List<Dt_Router> routers = _routerService.QueryNextRoutes(dt_Task.CurrentAddress, dt_Task.TargetAddress);
                            if (routers.Count > 0)
                            {
                                dt_Task.NextAddress = routers.FirstOrDefault().ChildPosi;
                            }
                        }
                        break;
                    default:
                        throw new Exception($"未定义任务状态【{saveModel.status}】");
                }
                //dt_Task.TaskState = saveModel.status switch
                //{
                //    "02" => (int)TaskInStatusEnum.AGV_InExecuting,
                //    "08" => (int)TaskInStatusEnum.AGV_InFinish,
                //    _ => throw new Exception($"未定义任务状态【{saveModel.status}】"),
                //};
                content = UpdateData(dt_Task);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
            //return new AGVReturnInfo()
            //{
            //    code = content.Status ? "20000" : "90000",
            //    message = content.Message,
            //};
        }
        /// <summary>
        /// 出库任务完成
        /// </summary>
        /// <param name="Address"></param>
        /// <returns></returns>
        public WebResponseContent OutTaskFinish(string Address)
        {
            try
            {
                Dt_Task dt_Task = BaseDal.QueryFirst(x => x.TargetAddress == Address);
                if (dt_Task != null && dt_Task.TaskState != TaskOutStatusEnum.AGV_OutFinish.ObjToInt())
                    throw new Exception($"地址【{Address}】存在未完成AGV任务");
                Dt_Router _Router = _routerRepository.QueryFirst(x => x.NextPosi == Address);
                if (_Router == null) throw new Exception($"地址【{Address}】未配置路由");
                _Router.Remark = "未占用";
                Db.Ado.BeginTran();
                _routerRepository.UpdateData(_Router);
                if (dt_Task != null)
                {
                    dt_Task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt();
                    WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(dt_Task);
                    AddTask_Hty(dt_Task, TaskOperateTypeEnum.AutoComplete);
                    HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
                }
                Db.Ado.CommitTran();
 
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public static string GetEnumDescription<T>(T value) where T : Enum
        {
            FieldInfo fieldInfo = typeof(T).GetField(value.ToString());
            DescriptionAttribute attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute));
            return attribute?.Description ?? value.ToString();
        }
    }
}