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
using IWareCC.CacheInfo.Container;
using IWareCC.ChaiDie.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.Tasks;
 
namespace IWareCC.ChaiDie.Handle.FinishChaiDieTaskAuto
{
   public class 获取当前的拆叠机任务: IHandler
    {
        /// <summary>
        /// 该节点的下一个节点
        /// </summary>
        private IHandler nextHandler = null;
        public IHandler NextHandler
        {
            set { nextHandler = value; }
        }
 
        private ChaiDieEntity Chaidie;
 
        /// <summary>
        /// 任务容器
        /// </summary>
        private PartTaskContainer DecompositionTaskContainer;
 
 
        public 获取当前的拆叠机任务(ChaiDieEntity chaidie, PartTaskContainer decompositionTaskContainer)
        {
            this.Chaidie = chaidie;
            this.DecompositionTaskContainer = decompositionTaskContainer;
        }
 
 
        public void Handle()
        {
            using (var dbModel = new DbModel())
            {
                try
                {
                    #region 确认各位置是否需要空托或者满托需要运走
                    if (Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.空盘 || Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.满盘)
                    {
                        LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行拆叠机任务流程/" + Chaidie.ChaiDieName, "选择一个未执行的拆叠机的任务:拆叠机{0}收到{1}", Chaidie.ChaiDieName, Chaidie.EmptyStatus);
                        bool bl = false;
                        if (Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.空盘 && (Chaidie.ChaiDieName == "ChaiDei3" || Chaidie.ChaiDieName == "ChaiDei4"))
                        {
                            if (Chaidie.PH1 == 2 && Chaidie.PH2 == 2)
                            {
                                bl = true;
                                LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "空盘触发:{0}{1}", Chaidie.EmptyStatus, Chaidie.ChaiDieName);
                            }else
                            {
                                bl = false;
                                LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行拆叠机任务流程/" + Chaidie.ChaiDieName, "拆盘机异常触发:拆叠机{0}还有托盘,不能下发任务", Chaidie.ChaiDieName);
                            }
                            
                        }
                        if (Chaidie.EmptyStatus == (int)EChaiDieEmptyStatus.满盘 && (Chaidie.ChaiDieName == "ChaiDei1" || Chaidie.ChaiDieName == "ChaiDei2"))
                        {
                            bl = true;
                            LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "满盘触发:{0}{1}", Chaidie.EmptyStatus,Chaidie.ChaiDieName);
                        }
                        if (!bl)
                        {
                            return;
                        }
                        bool f1 = Chaidie.WriteValue(Chaidie.OpcReadItems.EmptyStatus, 0);
                        if (f1)
                        {
                            var cdttask = dbModel.ChaiDieTransports.FirstOrDefault(x => (x.status == 1 || x.status == 0) && x.dev == Chaidie.DeviceId);
                            if (cdttask == null || cdttask.status == 2)
                            {
                           
                                dbModel.ChaiDieTransports.Add(new ChaiDieTransport()
                                {
                                    dev = Chaidie.DeviceId,
                                    devname = Chaidie.ChaiDieName,
                                    createtime = DateTime.Now,
                                    type = Chaidie.EmptyStatus,
                                    status = 0,
                                    updatetime = DateTime.Now,
                                    name = ((EChaiDieEmptyStatus)Chaidie.EmptyStatus).ToString(),
                                });
                                dbModel.SaveChanges();
                            }
                        }
                    }
                    #endregion
 
                    if (Chaidie.RACK)
                    {
                        Chaidie.WriteValue(Chaidie.OpcWriteItems.STP, 0);
                        Chaidie.WriteValue(Chaidie.OpcWriteItems.NeedCon, 0);
                        LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行拆叠机任务流程/" + Chaidie.ChaiDieName, "选择一个未执行的拆叠机的任务:拆叠机{0}已在任务中,不能再下发任务", Chaidie.ChaiDieName);
                        return;
                    }
 
                    var task = dbModel.PartTasks.OrderBy(x => x.finishtimes).FirstOrDefault(x => x.iscurrent == (int)EYesOrNo.是 && x.isreleased == (int)EYesOrNo.是 && x.isfinished == (int)EYesOrNo.否 && x.eqtype == (int)EPartTaskType.拆叠机任务 && x.eqid == Chaidie.DeviceId);
 
                    if (task == null)
                    {
                       // LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "获取当前的拆叠机任务:{0}", "没有找到待完成的任务");
                        return;
                    }
 
 
                    task.finishtimes += 1;
 
                    dbModel.SaveChanges();
 
                    DecompositionTaskContainer.DecompositionTask = task;
                    LogTextHelper.WriteLine(Resources.LogDir + @"/完成拆叠机任务/" + Chaidie.ChaiDieName, "获取当前的拆叠机任务:{0}", DecompositionTaskContainer.DecompositionTask.id);
 
                    if (nextHandler != null)
                    {
                        nextHandler.Handle();
                    }
 
                }
                catch (Exception ex)
                {
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
                }
            }
        }
    }
}