lss
2025-05-30 38eff4fc0100131b180ffa872009b502629743f5
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
using HH.WCS.JingyuNongfu.core;
using HH.WCS.JingyuNongfu.device;
using HH.WCS.JingyuNongfu.dispatch;
using HH.WCS.JingyuNongfu.process;
using HH.WCS.JingyuNongfu.util;
using HH.WCS.JingyuNongfu.wms;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using static HH.WCS.JingyuNongfu.api.ApiModel;
 
namespace HH.WCS.JingyuNongfu.api
{
    /// <summary>
    /// mobox调用
    /// </summary>
    // [RoutePrefix("mobox")]
    public class MoboxController : System.Web.Http.ApiController
    {
        [HttpPost]
        //[Route("CancelTask")]
        public SimpleResult CancelTask(MoboxTaskBase model)
        {
            var result = new SimpleResult();
            var task = TaskHelper.GetTask(model.TaskNo);
            if (task != null)
            {
 
                if (task.S_B_STATE.Trim() == "未执行")
                {
                    //未执行直接修改状态为取消
                    TaskHelper.UpdateStatus(model.TaskNo, "取消");
                    //var wmsTask = TaskHelper.GetTask(model.TaskNo);
                    TaskProcess.CacheBitCancelUpdate(task);
 
                }
                else if (task.S_B_STATE.Trim() == "已推送")
                {
 
                    NDCHelper.Cancel(task.S_TASK_NO.Trim());
                    result.resultMsg = "任务取消已经发送给小车";
 
                    #region 翻斗机复位信号 现在统一接收7来处理
                    //瓶坯翻斗机强制取消发送复位信号
                    //if (task.S_TYPE.Contains("翻斗机即产满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机即产空筐下线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存空筐下线(瓶胚)"))
                    //{
 
                    //    var info = Settings.deviceInfos.Where(a => a.location.Contains(task.S_END_LOC)).FirstOrDefault();
                    //    if (info != null)
                    //    {
                    //        LogHelper.Info($"取消接口 翻斗机发送复位信号", "发送信号");
                    //        PlcHelper.SendHex(info.address, "3F00100D0A");
                    //    }
                    //}
                    #endregion
 
 
                }
                else
                {
                    result.resultCode = 1;
                    result.resultMsg = "执行中任务不允许取消";
                }
            }
            else
            {
                result.resultCode = 1;
                result.resultMsg = "任务不存在";
            }
            return result;
        }
 
 
        /// <summary>
        /// 强制完成
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        //[Route("CompleteTask")]
        public SimpleResult CompleteTask(MoboxTaskBase model)
        {
            var result = new SimpleResult();
            var task = TaskHelper.GetTask(model.TaskNo);
            if (task != null)
            {
 
                if (task.S_B_STATE.Trim() == "未执行" || task.S_B_STATE.Trim() == "已推送" || task.S_B_STATE.Trim() == "完成" || task.S_B_STATE.Trim() == "强制完成" || task.S_B_STATE.Trim() == "失败")
                {
                    result.resultMsg = "任务未执行或者已完成,不允许强制完成!";
                }
                #region 强制完成流程,现在统一接收7来处理(未取货完成取消订单,取货完成订单强制完成)
                //else if (task.S_B_STATE.Trim() != "未执行" && task.S_B_STATE.Trim() != "待推送" && task.S_B_STATE.Trim() != "取消")
                //else if (task.S_B_STATE.Trim() != "未执行" && task.S_B_STATE.Trim() != "待推送" && task.S_B_STATE.Trim() != "取货失败" && task.S_B_STATE.Trim() != "完成")
                //{
                //    if (task.S_B_STATE.Trim() == "开始取货" || task.S_B_STATE.Trim() == "执行中")
                //    {
                //        //已推送但是没有完成或者取消,通知hosttoagv
                //        TaskHelper.UpdateStatus(model.TaskNo.Trim(), "失败");
                //        NDCHelper.Cancel(task.S_TASK_NO.Trim());
                //        result.resultMsg = "任务取消已经发送给小车";
                //        //起点解绑 删除托盘
                //        TaskProcess.CacheBitUpdate(task, true);
                //        TaskProcess.CacheBitCancelUpdate(task);
                //        var tpid = task.S_CNTRS.Split(',');
                //        foreach (var item in tpid)
                //        {
                //            ContainerHelper.delCntr(item);
                //        }
 
                //        //瓶坯翻斗机强制取消发送复位信号
                //        if (task.S_TYPE.Contains("翻斗机即产满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机即产空筐下线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存空筐下线(瓶胚)"))
                //        {
 
                //            var info = Settings.deviceInfos.Where(a => a.location.Contains(task.S_END_LOC)).FirstOrDefault();
                //            if (info != null)
                //            {
                //                LogHelper.Info($"强制完成 接口翻斗机发送复位信号", "发送信号");
                //                PlcHelper.SendHex(info.address, "3F00100D0A");
                //            }
                //        }
 
                //    }
                //    //取货完成货位直接加到终点,任务状态改为强制完成
                //    else if (task.S_B_STATE.Trim() == "取货完成" || task.S_B_STATE.Trim() == "开始卸货")
                //    {
 
 
                //        TaskHelper.UpdateStatus(model.TaskNo.Trim(), "强制完成");
                //        TaskProcess.CacheBitUpdate(task, false);
                //        //告诉小车取消任务
                //        NDCHelper.Cancel(task.S_TASK_NO.Trim());
                //        result.resultMsg = "任务强制完成已经发送给小车";
 
                //        //瓶坯翻斗机强制取消发送复位信号
                //        if (task.S_TYPE.Contains("翻斗机即产满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机即产空筐下线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存满筐上线(瓶胚)") || task.S_TYPE.Contains("翻斗机库存空筐下线(瓶胚)"))
                //        {
 
                //            var info = Settings.deviceInfos.Where(a => a.location.Contains(task.S_END_LOC)).FirstOrDefault();
                //            if (info != null)
                //            {
                //                LogHelper.Info($"强制完成接口 翻斗机发送复位信号", "发送信号");
                //                PlcHelper.SendHex(info.address, "3F00100D0A");
                //            }
                //        }
                //    }
                //    else
                //    {
                //        result.resultCode = 1;
                //        result.resultMsg = "任务未执行,不允许强制完成!";
                //    }
 
                //}
                #endregion
 
                else
                {
                    NDCHelper.Cancel(task.S_TASK_NO.Trim());
                    result.resultMsg = "任务强制完成已经发送给小车";
 
                    //result.resultCode = 1;
                    //result.resultMsg = "任务已结束";
                }
            }
            else
            {
                result.resultCode = 1;
                result.resultMsg = "任务不存在";
            }
            return result;
        }
 
        [HttpPost]
        public SimpleResult CreatTask(MoboxCreatTask model)
        {
            var db = new SqlHelper<object>().GetInstance();
            SimpleResult result = new SimpleResult();
            LogHelper.Info($"CreatTask接收数据:{JsonConvert.SerializeObject(model)}");
            if (model.Location != null && model.Area != null)
            {
                var startloc = LocationHelper.GetLocListAnybycode(model.Location).FirstOrDefault();
                if (startloc.S_LOCK_STATE != "无")
                {
                    result.resultCode = 1;
                    result.resultMsg = $"起点货位有锁,不生成任务";
                    return result; 
                }
                string tray = $"{ContainerHelper.GenerateCntrNo()}";
                var container = new Container { S_CNTR_CODE = tray, S_CNTR_STATE = "" };
                if (db.Insertable<Container>(container).ExecuteCommand() > 0)
                {
 
                    var list = LocationHelper.GetLocListAny(model.Area).ToList();
                    Location endloc = ProcessHelperPP.FindEndcolByLocList(list);
                    
                    if (endloc != null)
                    {
                        string type="";
                        if (endloc.S_AREA_CODE== "LYP")
                        {
                             type = "留样品下线";
                        }
                        else if(endloc.S_AREA_CODE == "ZX")
                        {
                            type = "纸箱下线"; 
                        }
                        if (!string.IsNullOrEmpty(type))
                        {
                            TaskProcess.CreateTransport(model.Location, endloc.S_LOC_CODE, type, new List<string> { tray }, 1, 1, 1, 80);
                        }
                        else
                        {
                           
                            result.resultCode = 1;
                            result.resultMsg = $"库区编码错误,无法确认任务类型 库区编码:{endloc.S_AREA_CODE}";
                        }
                    }
 
                }
                else
                {
                    
                    result.resultCode = 1;
                    result.resultMsg = "托盘创建失败";
                }
            }
            else
            {
                result.resultCode = 1;
                result.resultMsg = "起点终点位空,不允许生成任务";
               
            }
            return result;
        }
 
        /// <summary>
        /// 解绑库区
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ReturnResult UntieArea(UntieArea model)
        {
            LogHelper.Info("UntieArea Request:" + JsonConvert.SerializeObject(model), "BindCntr");
            return ApiHelper.UntieArea(model);
        }
 
        /// <summary>
        /// 绑定库区
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public ReturnResult BindArea(BindArea model)
        {
            LogHelper.Info("BindArea Request:" + JsonConvert.SerializeObject(model), "BindCntr");
            return ApiHelper.BindArea(model);
        }
    }
}