333
schangxiang@126.com
2025-09-19 18966e02fb573c7e2bb0c6426ed792b38b910940
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
using IWareCC.CacheInfo;
using IWareCC.CacheInfo.Container;
using IWareCC.Conveyor.Entity;
using IWareCC.ORM;
using IWareCC.Properties;
using IWareCommon.Enum.Common;
using IWareCommon.Help;
using IWareCommon.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace IWareCC.Conveyor.Handle.DoConveyorTaskAuto
{
   public class 选择一个未执行的输送线的任务: IHandler
    {
        /// <summary>
        /// 该节点的下一个节点
        /// </summary>
        private IHandler nextHandler = null;
        public IHandler NextHandler
        {
            set { nextHandler = value; }
        }
 
        private ConveyorEntity Conveyor;
 
        /// <summary>
        /// 任务容器
        /// </summary>
        private PartTaskContainer DecompositionTaskContainer;
 
 
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="resultContainer">结果容器</param>
        /// <param name="decompositionTaskContainer">WIP任务容器</param>
        public 选择一个未执行的输送线的任务( PartTaskContainer decompositionTaskContainer)
        {
         
            this.DecompositionTaskContainer = decompositionTaskContainer;
        }
 
 
        public void Handle()
        {
 
            using (var dbModel = new DbModel())
            {
                try
                {
                    string msg;
 
                    var task = dbModel.PartTasks.OrderBy(x => x.priority).ThenBy(x => x.updatetime).FirstOrDefault(x => x.eqtype == (int)EPartTaskType.输送线任务 && x.isreleased == (int)EYesOrNo.否 && x.isfinished == (int)EYesOrNo.否);
 
                    if (task == null)
                    {
                       // LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送线任务流程/", "选择一个未执行的输送线的任务:{0}", "未找到相应的输送线任务");
                        return;
                    }
                    else
                    {
                        string name = "Line" + task.sourceplace;
                        var conveyor = CacheEntity.Conveyors.FirstOrDefault(x => x.ConveyorName == name);
                        Conveyor = conveyor;
                        task.updatetime = DateTime.Now;
                        dbModel.SaveChanges();
                    }
             
           
                    #region 检测起始位置是否有货
                    if (Conveyor==null)
                    {
                        return;
                    }
                    if (Conveyor.RAck && Conveyor.WSTP)
                    {
                        if (!Conveyor.WriteValue(Conveyor.OpcWriteItems.STP, 0))
                        {
                            Conveyor.WriteValue(Conveyor.OpcWriteItems.STP, 0);
                        }
                    }
 
                    if (!(Conveyor != null && (Conveyor.RPh1 == 1 && Conveyor.RPh2 == 1)))
                    {
 
                        LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送线任务流程/" + Conveyor.ConveyorName, "选择一个未执行的输送线的任务:{0}", "请先确认输送线起始位置是否有货");
                        msg = "起始位置光电未检测到";
                        if (task.filereason != msg)
                        {
                            task.filereason = msg;
                            dbModel.SaveChanges();
                        }
                        return;
                    } 
 
                    if (!Conveyor.CanSendTask(Conveyor.DeviceId, out msg))
                    {
                        LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送线任务流程/" + Conveyor.ConveyorName, "选择一个未执行的输送线的任务:输送线{0}不能执行任务--{1}", Conveyor.ConveyorName, msg);
 
                        if (task.filereason != msg)
                        {
                            task.filereason = msg;
                            dbModel.SaveChanges();
                        }
                        return;
                    }
              
                    #endregion
 
                    if ((task.toplace == "1001" || task.toplace == "1002" || task.toplace == "1007")&&task.maintasktype==(int)EMainTaskType.出库叠盘)
                    {
                        var rgvtask = dbModel.PartTasks.FirstOrDefault(x => x.eqid == 3 && x.sourceplace == task.toplace && x.isfinished == 0);
                        if (rgvtask!=null)
                        {
                            msg = "该条输送线上已有任务";
                            if (task.filereason!=msg)
                           {
                               task.filereason = msg;
                            dbModel.SaveChanges();
                           }
                           
                            return;
                        }
                    }
 
                    DecompositionTaskContainer.DecompositionTask = task;
 
                    LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送线任务流程/" + Conveyor.ConveyorName, "选择一个未执行的输送线的任务:{0}", DecompositionTaskContainer.DecompositionTask.id);
 
                    if (nextHandler != null)
                    {
                        nextHandler.Handle();
                    }
              
 
                }
                catch (Exception ex)
                {
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
                }
            }
 
 
        }
    }
}