schangxiang@126.com
2025-09-23 ea04aef49691444ed8ac1e7e7b94feabcbb5326f
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
using iWareCc.Conveyor.Entity;
using iWareCc.Conveyor.EnumType;
using iWareCc.DecomposeTask.Entity;
using iWareCcTest.Properties;
using iWareCommon.Common.Entity;
using iWareCommon.Common.EnumType;
using iWareCommon.Utils;
using iWareDataCore.BASE.EnumType;
using iWareDataCore.ORM;
using iWareDataCore.TASK.Entity;
using iWareDataCore.TASK.EnumType;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace iWareCc.CreateMainTask.chain
{
  public  class 根据扫码生成入库主任务: IHandler
    {
        /// <summary>
        /// 该节点的下一个节点
        /// </summary>
        private IHandler nextHandler = null;
        public IHandler NextHandler
        {
            set { nextHandler = value; }
        }
 
        private ConveyorEntity Conveyor;
 
        private MainTaskContainer MainTaskContainer;
 
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="resultContainer">结果容器</param>
        /// <param name="decompositionTaskContainer">WIP任务容器</param>
        public 根据扫码生成入库主任务(ConveyorEntity c, MainTaskContainer mainTaskContainer)
        {
            this.Conveyor = c;
            this.MainTaskContainer = mainTaskContainer;
        }
 
 
        public void Handle()
        {
 
            using (var dbModel = new DbModelCore())
            {
                try
                {
                    var alarm = Conveyor.Gates.Find(x => x.Place.PlaceTypeName == "alarm");
                    var sc = Conveyor.Gates.Find(x => x.Place.PlaceTypeName == "sc");
                    if (sc != null && !string.IsNullOrEmpty(sc.RCheckMaterialCode) && !string.IsNullOrWhiteSpace(sc.RCheckMaterialCode) && !sc.RCheckMaterialCode.Contains("ERROR"))
                    {
                        var material = dbModel.BASEMaterialViews.FirstOrDefault(x => x.code == sc.RCheckMaterialCode.Trim());
                        //判断物料是否入库,如果入库直接发送入库任务,不入库生成退库记录
                        if (material != null)
                        {
                            var placematerial = dbModel.BASEPlaceMaterialViews.FirstOrDefault(x => x.materialcode == sc.RCheckMaterialCode.Trim());
                            if (placematerial != null)
                            {
                                
                                // alarm.SendGateAlarmTask((int)ESendCode.已在立库中不能入库);
                                LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", sc.RCheckMaterialCode + "已在立库中");
                                sc.RCheckMaterialCode = "";
                                return;
                            }
                            var tasknew = dbModel.TASKPartTasks.FirstOrDefault(x => x.type == (int)EPartTaskType.输送机任务 && x.isreleased == (int)EYesOrNo.否 && x.isfinished == (int)EYesOrNo.否 && x.materialcode == material.code && x.maintasktype == (int)EMainTaskType.入库任务);
                            if (tasknew != null)
                            {
                                // LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成主任务流程", "物料号:{0}", sc.RCheckMaterialCode + "已在要执行的任务序列中");
                                return;
                            }
                            var emptyPlace = dbModel.BASEEmptyPlaceViews.Where(x => x.isexecute == (int)EYesOrNo.否 && x.islock == (int)EYesOrNo.否 && x.typeid == 4 && x.status == (int)EPlaceStatus.空库位).OrderBy(x => new { x.layer, x.col }).FirstOrDefault();
                            if (emptyPlace == null)
                            {
                                alarm.SendGateAlarmTask((int)ESendCode.入库库位不足);
                                LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "寻找空库位:{0}", "空库位不足");
                                return;
                            }
 
                            var task = dbModel.TASKMainTasks.FirstOrDefault(x => x.materialcode == sc.RCheckMaterialCode.Trim() && x.tasktype == (int)EMainTaskType.入库任务);
                            if (task != null)
                            {
                                //alarm.SendGateAlarmTask((int)ESendCode.已存在该任务);
                                LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", "该任务已存在");
                                return;
                            }
                            int materialid = material.id;
                            var inoutlistdetail = dbModel.BASEInOutListDetails.FirstOrDefault(x => x.materialid == materialid && x.isfinish != 1);
                            if (inoutlistdetail == null)
                            {
                                alarm.SendGateAlarmTask((int)ESendCode.物料不在入库清单中);
                                LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", "不在入库清单中");
                                sc.RCheckMaterialCode = "";
                                return;
                            }
                            TASKMainTask matask = new TASKMainTask()
                            {
                                taskno = DateTime.Now.ToFileTime().ToString(),
                                tasktype = (int)EMainTaskType.入库任务,
                                materialcode = sc.RCheckMaterialCode,
                                syscode = "1",
                                sendtime = DateTime.Now,
                                sourceplace = "100101",
                                toplace = emptyPlace.code,
                                packageno = "",
                                processcardnumber = "",
                                quantity = 1,
                                status = 0,
                                decompositiontime = DateTime.Now,
                                wipstatus = 0,
                                decompositiontimes = 0,
                                islots = 0,
                                priority = 0,
 
                            };
                            MainTaskContainer.MainTask = new MainTaskEntity(matask);
                        }
                        else
                        {
                            alarm.SendGateAlarmTask((int)ESendCode.物料不存在);
                            LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "物料号:{0}", sc.RCheckMaterialCode + "不存在此物料");
                            sc.RCheckMaterialCode = "";
                            return;
                        }
 
                        if (nextHandler != null)
                        {
                            nextHandler.Handle();
                        }
                    }
                    else 
                    {
                        LogTextHelper.WriteLine(Resources.LogDir + @"/自动生成入库主任务流程", "未检测到有扫码信息");
                        return;
                    }
      
                }
                catch (Exception ex)
                {
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
                }
            }
 
 
        }
    }
}