1
pulg
2025-05-14 5a640911f7e7ef3a003775993f077e1a0e9ac130
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
using HH.WCS.Hexafluo.util;
using HH.WCS.Hexafluo.wms;
using HH.WCS.SJML.Bll;
using HH.WCS.SJML.Dto;
using HH.WCS.SJML.Entitys;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
 
namespace HH.WCS.Hexafluo.core
{
    /// <summary>
    /// 自动出库空托
    /// </summary>
    public class AutoTransportTask
    {
        private static object locko2 = new object();
        /// <summary>
        /// 自动出库空托
        /// </summary>
        public static void CheckCamera()
        {
            try
            {
                lock (locko2)
                {
                    var chi = new SqlHelper<object>().GetInstance();
                    var newDb = chi.CopyNew();
                    var Kklock = chi.Queryable<FunctionEntitys>().Where(e => e.Autoindex == "空托自动出库到接驳位")?.First();
 
                    if (Kklock != null && Kklock.TransportLock == "Y")
                    {
                        var transportTask = chi.Queryable<ConfigJsonEntitys>().Where(e => e.Autoindex == "空托自动出库到接驳位")?.First();
 
                        var TaryJb = JsonConvert.DeserializeObject<List<TranyJb>>(transportTask.TypeJson);
                        LogHelper.DanInfo("出库到接驳位", $"配置 {JsonConvert.SerializeObject(TaryJb)}");
                        var State = new List<string> { "完成", "取消" };
                        var TaskList = newDb.Queryable<WMSTask>().Where(e => e.S_NOTE == "立库任务" && TaryJb.Select(c => c.S_LOC_CODE).ToList().Contains(e.S_END_LOC) && e.S_TYPE == "出库" && !State.Contains(e.S_B_STATE))
                .ToList();
                        if (TaskList.Count() > 0)
                        {
                            TaskList.RemoveAll(e => e.S_TASK_NO.Contains("_"));
                        }
                        foreach (var t in TaryJb)
                        {
                            var bg = chi.Queryable<JbTrayNumberEntitys>().Where(e => e.S_LOC_CODE == t.S_LOC_CODE && e.S_IS_USE == "N").ToList();
                            int fftask = 0;
                            //查询对应的任务数是多少
                            if (TaskList.Count > 0)
                            {
                                fftask = TaskList.FindAll(e => e.S_END_LOC == t.S_LOC_CODE).ToList().Count();
                            }
 
                            if ((bg.Count() + fftask) < 2)
                            {
                                List<OutWorkAreaEntity> outWorkAreaList = new List<OutWorkAreaEntity>();
                                OutWorkAreaEntity outWorkArea = new OutWorkAreaEntity();
                                outWorkArea.endBit = t.S_LOC_CODE;
                                outWorkArea.TaskFlow = t.S_TASK_FLOWNO;
                                outWorkArea.TrayType = t.S_TRAY_TYPE;
                                outWorkAreaList.Add(outWorkArea);
                                BLLCreator.CreateSingleton<OutWorkAreaBll>().OutWorkArea(outWorkAreaList);
                            }
                            var bg2 = chi.Queryable<JbTrayNumberEntitys>().Where(e => e.S_LOC_CODE == t.S_LOC_CODE && e.S_IS_USE == "Y").ToList();
                            if (bg.Count > 2)//查询是否是人工将托盘取走
                            {
                                var ggf = bg2.OrderBy(e => e.T_CREATE).ToList();
                                try
                                {
                                    newDb.BeginTran();
                                    var I = newDb.Deleteable<JbTrayNumberEntitys>().Where(e => e.S_ID == ggf.FirstOrDefault().S_ID).ExecuteCommand();
                                    if (I == 0)
                                    {
                                        throw new System.Exception("");
                                    }
                                    newDb.CommitTran();
                                }
                                catch (System.Exception ex)
                                {
                                    newDb.RollbackTran();
                                    throw;
                                }
 
 
                                // AloneWcsTaskUnbingEntitys unbin = new AloneWcsTaskUnbingEntitys();
                                //unbin.S_TASK_NO = BLLCreator.Create<IdGuid>().TaskNo("CK");
                                //unbin.JbLocation = t.S_LOC_CODE;
                                //var re = BLLCreator.CreateSingleton<WcsTask>().WcsCvstate(unbin);
                                //if (re.Success)
                                //{
                                //    try
                                //    {
                                //        newDb.BeginTran();
                                //        var I = newDb.Deleteable<JbTrayNumberEntitys>().Where(e => e.S_ID == ggf.FirstOrDefault().S_ID).ExecuteCommand();
                                //        if (I == 0)
                                //        {
                                //            throw new System.Exception("");
                                //        }
                                //        newDb.CommitTran();
                                //    }
                                //    catch (System.Exception ex)
                                //    {
                                //        newDb.RollbackTran();
                                //        throw;
                                //    }
                                //}
                            }
                        }
                    }
 
                    if (Kklock == null)
                    {
                        FunctionEntitys function = new FunctionEntitys();
                        function.Autoindex = "空托自动出库到接驳位";
                        function.TransportLock = "N";
                        try
                        {
                            newDb.BeginTran();
                            newDb.Insertable(function).ExecuteCommand();
                            newDb.CommitTran();
                        }
                        catch (System.Exception ex)
                        {
                            newDb.RollbackTran();
                            throw;
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                LogHelper.DanInfo("出库到接驳位", ex.Message);
            }
        }
    }
}