Tjiny
2025-05-19 4c8b2eea64bcd0ae14602a2a6e993b2d04c80ee0
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
using System;
using System.Linq;
using HH.WCS.Mobox3.RiDong.apiMethod;
using HH.WCS.Mobox3.RiDong.dto;
using HH.WCS.Mobox3.RiDong.models;
using HH.WCS.Mobox3.RiDong.models.other;
using HH.WCS.Mobox3.RiDong.util;
 
namespace HH.WCS.Mobox3.RiDong.generalMethod;
 
/// <summary>
/// 线体帮助类
/// </summary>
public class PipeLineHelper
{
    /// <summary>
    /// 读取各个线体信息
    /// </summary>
    /// <remarks>根据不同的线体数据执行不同的逻辑</remarks>
    /// <param name="conveyorLinesInfo"></param>
    public static void ReadConveyorlinesMessage(ConveyorLinesInfo conveyorLinesInfo)
    {
        if (conveyorLinesInfo != null)
        {
            if (conveyorLinesInfo.PURPOSE == "入库口")
            {
                // 查找对应的未推送的输送线任务
                var task = AdoSqlMethod<Task>.QueryFirst(p =>
                    p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE < 3 && p.N_SCHEDULE_TYPE == 1);
 
                // 判断是否需要创建作业
                if (conveyorLinesInfo.TASKCREATE == 1)
                {
                    // 更新容器货品表数据
                    var cntrItemDetails =
                        AdoSqlMethod<CntrItemDetail>.QueryList(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE);
 
                    if (cntrItemDetails.Count > 0)
                    {
                        foreach (var cntrItemDetail in cntrItemDetails)
                        {
                            cntrItemDetail.F_WEIGHT = conveyorLinesInfo.WEIGHT;
                        }
 
                        AdoSqlMethod<CntrItemDetail>.UpdateList(cntrItemDetails, p => new { p.F_WEIGHT });
                    }
 
                    // 任务存在
                    if (task != null)
                    {
                        if (task.N_B_STATE == 0)
                        {
                            // 推送目的地,目的地是当前线体的
                            var infoDto = Settings.ConveyorlinesInfos.First(p => p.enable == 1 && p.location == task.S_END_LOC);
 
                            conveyorLinesInfo.DEVICESIGN = infoDto.devicesign;
                            conveyorLinesInfo.TASKCREATE = 2;
                            AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo, p => new { p.DEVICESIGN, p.TASKCREATE });
                        }
                    }
                    // 任务不存在
                    else
                    {
                        var container = AdoSqlMethod<Container>.QueryFirst(p => p.S_CODE == conveyorLinesInfo.BARCODE);
 
                        if (container != null)
                        {
                            if (container.S_TYPE != "7a" && container.S_TYPE != "8")
                            {
                                container.S_TYPE = conveyorLinesInfo.CONTAINERTYPE;
 
                                AdoSqlMethod<Container>.UpdateFirst(container, p => new { p.S_TYPE });
                            }
                            
                            var input = new OperationDto();
 
                            input.cntrCode = container.S_CODE;
                            input.taskType = 1;
                            input.odd = "";
 
                            // 创建对应的任务数据
                            SynthesizeService.AddOperation(input);
                        }
                        else
                        {
                            Console.WriteLine("托盘不存在");
                        }
                    }
                }
                else if (conveyorLinesInfo.TASKCREATE == 3)
                {
                    // 任务存在
                    if (task != null)
                    {
                        // 任务变更为推送状态
                        task.N_B_STATE = 1;
                        task.S_B_STATE = "已推送";
                        task.T_START_TIME = DateTime.Now;
                        AdoSqlMethod<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME });
 
                        conveyorLinesInfo.TASKCREATE = 4;
                        conveyorLinesInfo.DEVICESIGN = 0;
                        conveyorLinesInfo.BARCODE = "";
                        conveyorLinesInfo.CONTAINERTYPE = "";
                        conveyorLinesInfo.WEIGHT = 0;
                        AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo,
                            p => new { p.DEVICESIGN, p.BARCODE, p.TASKCREATE, p.CONTAINERTYPE, p.WEIGHT });
                    }
                }
            }
            else if (conveyorLinesInfo.PURPOSE == "入库接驳")
            {
                // 判断当前线体编号是否为1
                if (conveyorLinesInfo.LOADSTATE == 1)
                {
                    // 读取条形码,找到对应的输送线任务
                    var pipeTask = AdoSqlMethod<Task>.QueryFirst(p =>
                        p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 1 && p.N_SCHEDULE_TYPE == 1);
 
                    if (pipeTask != null)
                    {
                        // 修改状态为完成
                        pipeTask.N_B_STATE = 3;
                        pipeTask.S_B_STATE = "完成";
                        pipeTask.T_END_TIME = DateTime.Now;
 
                        // 推送agv任务
                        var agvTask = AdoSqlMethod<Task>.QueryFirst(p =>
                            p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 0 && p.N_SCHEDULE_TYPE == 2 && p.S_OP_CODE == pipeTask.S_OP_CODE);
 
                        // 查询中间表数据
                        var dirFirst = AdoSqlMethod<ConveyorLinesInfo>.QueryFirst(p=>p.PURPOSE == "门禁");
                        
                        if (agvTask != null && dirFirst.ACCESS == 0)
                        {
                            // 推送小车的任务
                            if (TaskHelper.SendTaskFromAGV(agvTask))
                            {
                                agvTask.N_B_STATE = 1;
                                agvTask.S_B_STATE = "已推送";
 
                                // 修改中间表数据信号为2
                                conveyorLinesInfo.LOADSTATE = 2;
 
                                AdoSqlMethod<Task>.UpdateFirst(agvTask, p => new { p.N_B_STATE, p.S_B_STATE });
                                AdoSqlMethod<Task>.UpdateFirst(pipeTask, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
                                AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo, p => new { p.LOADSTATE });
                            }
                        }
                    }
                }
            }
            else if (conveyorLinesInfo.PURPOSE == "出库口")
            {
                if (conveyorLinesInfo.TASKFINISH == 1)
                {
                    var task = AdoSqlMethod<Task>.QueryFirst(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 1 && p.N_SCHEDULE_TYPE == 1);
 
                    if (task != null)
                    {
                        // 修改任务为完成
                        task.N_B_STATE = 3;
                        task.S_B_STATE = "完成";
                        task.T_END_TIME = DateTime.Now;
                        AdoSqlMethod<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
 
                        Operation queryFirst = AdoSqlMethod<Operation>.QueryFirst(p => p.S_CODE == task.S_OP_CODE);
 
                        conveyorLinesInfo.TASKFINISH = 3;
                        // 出库方向
                        conveyorLinesInfo.DIRECTION = ConveyorLinesInfo.GetDirection(queryFirst.S_OUT_TARGET);
                        AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo, p => new { p.TASKFINISH, p.DIRECTION });
 
                        // 中间表数据添加
                        // 将数据托盘号插入到中间表2中
                        var ledDemo = AdoSqlMethod<LEDDemo>.QueryFirst(p => p.LCOATIONCODE == "CKK-1");
 
                        // 该任务的类型
                        ledDemo.OUTBOUNDTYPE = task.S_OP_NAME.Trim();
 
                        // 根据配盘单号查下配盘单主表和明细
                        var disc = AdoSqlMethod<TN_Distribution_CNTR>.QueryFirst(p => p.S_DC_NO == task.S_DC_NO);
 
                        if (disc != null)
                        {
                            var outbound = AdoSqlMethod<OutboundOrder>.QueryFirst(p => p.S_NO == disc.S_BS_NO);
 
                            if (outbound != null)
                            {
                                ledDemo.DIRECTION = outbound.S_OUT_TARGET.Trim();
                            }
                        }
 
                        var discd = AdoSqlMethod<TN_Distribution_CNTR_Detail>.QueryFirst(p => p.S_DC_NO == task.S_DC_NO);
 
                        if (discd != null)
                        {
                            ledDemo.FREIGHTTYPE = discd.S_EXT_ATTR1;
                        }
 
                        AdoSqlMethod<LEDDemo>.UpdateFirst(ledDemo, p => new { p.OUTBOUNDTYPE, p.DIRECTION, p.FREIGHTTYPE });
                    }
                }
                else if (conveyorLinesInfo.TASKFINISH == 2)
                {
                    // 目前暂定人工确定
                }
            }
            else if (conveyorLinesInfo.PURPOSE == "门禁")
            {
                var dirFirst = AdoSqlMethod<ConveyorLinesInfo>.QueryFirst(p=>p.PURPOSE == "门禁");
 
                if (dirFirst != null && dirFirst.ACCESS == 2)    
                {
                    dirFirst.ACCESS = 3;
                    AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(dirFirst, p => new { p.ACCESS });
                }
            }
        }
    }
}