From a93b0e99036c24b9bd58c79bf5e7364b1ba28bae Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期二, 01 七月 2025 16:02:33 +0800
Subject: [PATCH] 福建佳通-流程优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs | 1111 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 964 insertions(+), 147 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
index 03a5549..c8f040b 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs
@@ -1,17 +1,28 @@
-锘縰sing HH.WCS.Mobox3.YNJT_PT.device;
+锘縰sing HH.WCS.Mobox3.YNJT_PT.core;
+using HH.WCS.Mobox3.YNJT_PT.device;
+using HH.WCS.Mobox3.YNJT_PT.models;
 using HH.WCS.Mobox3.YNJT_PT.process;
 using HH.WCS.Mobox3.YNJT_PT.util;
 using HH.WCS.Mobox3.YNJT_PT.wms;
+using MySqlX.XDevAPI.Common;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 using SqlSugar;
+using Swashbuckle.Swagger;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Reflection;
+using System.Text.RegularExpressions;
 using System.Threading;
+using Ubiety.Dns.Core;
 using static HH.WCS.Mobox3.YNJT_PT.api.ApiModel;
 using static HH.WCS.Mobox3.YNJT_PT.api.OtherModel;
+using static HH.WCS.Mobox3.YNJT_PT.api.WmsController;
+using static HH.WCS.Mobox3.YNJT_PT.dispatch.WCSDispatch;
+using static HH.WCS.Mobox3.YNJT_PT.util.Settings;
+using static HH.WCS.Mobox3.YNJT_PT.wms.WMSHelper;
+using static System.Net.Mime.MediaTypeNames;
 
 namespace HH.WCS.Mobox3.YNJT_PT.api {
     /// <summary>
@@ -21,6 +32,951 @@
         static ApiHelper() {
 
         }
+
+        /// <summary>
+        /// 鎴愬瀷鏈轰笅绾胯褰�+        /// </summary>
+        /// <param name="model"></param>
+        public static ResponseResult cxjOffLineRecord(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            var container = ContainerHelper.GetCntr(model.cntrNo);
+            if (container == null)
+            {
+                ContainerHelper.AddCntr(model.cntrNo);
+            }
+
+            try
+            {
+                OffLineModel extData1 = JsonConvert.DeserializeObject<OffLineModel>(model.extData.ToString());
+                OffLineRecord record = new OffLineRecord()
+                {
+                    S_RFID = model.cntrNo,
+                    S_DEVICE_NO = model.deviceNo,
+                    N_IS_URGENT = extData1.isUrgent,
+                    T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    N_IS_FULL = extData1.isFull,
+                    N_NEED_PAIR = extData1.needPair,
+                    S_LOC = model.loc
+                };
+                WMSHelper.addOffLineRecord(record);
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"娣诲姞鎴愬瀷鏈轰笅绾胯褰曢敊璇紝閿欒鍘熷洜锛歿ex.Message}", "WMS");
+                response.code = 500;
+                response.msg = "WMS绯荤粺鍐呴儴閿欒锛岃鑱旂郴寮�彂浜哄憳鎺掓煡闂";
+            }
+            return response;
+        }
+
+        /// <summary>
+        /// 涓嬬嚎璇锋眰
+        /// </summary>
+        /// <returns></returns>
+        public static ResponseResult offLineRequest(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            var startLoc = LocationHelper.GetLoc(model.loc);
+            if (startLoc != null)
+            {
+                List<BarcodeModel> extData = JsonConvert.DeserializeObject<List<BarcodeModel>>(model.extData.ToString());
+                int dataCount = extData.Count;
+                if (dataCount > 0)
+                {
+                    var rfidExistNull = extData.Where(a => string.IsNullOrEmpty(a.rfid)).Count()>0;
+                    if (rfidExistNull)
+                    {
+                        response.code = 1;
+                        response.msg = "rfid涓嶈兘涓虹┖";
+                        return response;
+                    }
+                    else 
+                    {
+                        if (extData.Count > 0)
+                        {
+                            List<BarcodeModel> barcodeList = new List<BarcodeModel>();
+                            foreach (var ext in extData)
+                            {
+                                string rfid = ext.rfid;
+                                if (rfid == "88888888")
+                                {
+                                    // 璁板綍鎵樼洏寮傚父
+
+                                }
+                                else 
+                                {
+                                    // 鏌ヨ鎴愬瀷鏈轰腑闂磋〃锛宺fid 鏄惁瀛樺湪
+                                    var offLineRecord = WMSHelper.getOffLineRecord(rfid);
+                                    if (offLineRecord != null)
+                                    {
+                                        if (offLineRecord.N_IS_FULL == 1)
+                                        {
+                                            if (ext.barcode.Contains("99999999"))
+                                            {
+                                                // 璁板綍鏉$爜鎵弿寮傚父
+
+                                            }
+                                            else
+                                            {
+                                                // 2.鏌ヨ鐗╂枡鏉$爜淇℃伅琛紝鏉$爜淇℃伅鏄惁瀛樺湪
+                                                var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
+                                                if (itemBarcodeInfo != null)
+                                                {
+                                                    itemBarcodeInfo.N_URGENT_FLAG = offLineRecord.N_IS_URGENT;
+                                                    // 璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂�+                                                    var overage = WMSHelper.getOverage(itemBarcodeInfo.BARCODE);
+                                                    LogHelper.Info($"璁$畻鐢熸晥鏃堕棿銆佸け鏁堟椂闂达紝杩斿洖鍊硷細{JsonConvert.SerializeObject(overage)}", "WMS");
+                                                    if (overage != null)
+                                                    {
+                                                        DateTime txndate = DateTime.Parse(itemBarcodeInfo.TXNDATE);
+                                                        DateTime minTime = txndate.AddHours(overage.MINHOUR);
+                                                        DateTime maxTime = txndate.AddDays(overage.OVERAGE);
+                                                        itemBarcodeInfo.S_EFFECTIVE_TIME = minTime.ToString("yyyy-MM-dd HH:mm:ss");
+                                                        itemBarcodeInfo.S_EXPIRATION_TIME = maxTime.ToString("yyyy-MM-dd HH:mm:ss");
+                                                    }
+                                                    else
+                                                    {
+                                                        response.code = 1;
+                                                        response.msg = $"鏈煡璇㈠埌鐗╂枡瀛樻斁鏃堕棿閰嶇疆淇℃伅锛屾潯褰㈢爜锛歿itemBarcodeInfo.BARCODE}";
+                                                        return response;
+                                                    }
+
+                                                    ContainerHelper.addCntrItemRel(rfid, itemBarcodeInfo);
+                                                    barcodeList.Add(ext);
+                                                }
+                                                else
+                                                {
+                                                    // 璁板綍鏌ヨ鏉$爜淇℃伅寮傚父
+
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
+                            EndLocGroup endLocGroup = null;
+                            if (barcodeList.Count > 0) 
+                            {
+                               string itemCode = null;
+                               var cntrItemRels = ContainerHelper.GetCntrItemRel(barcodeList[0].rfid);
+                               if (cntrItemRels.Count > 0) 
+                               {
+                                    itemCode = cntrItemRels[0].S_ITEM_CODE;
+                               }
+                               endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count, itemCode);
+                            }
+
+                            foreach (var ext in extData)
+                            {
+                                Location endLoc = null;
+                                string groupNo = null;
+                                if (barcodeList.Contains(ext))
+                                {
+                                    // 婊℃枡鍏ュ簱
+                                    if (endLocGroup != null)
+                                    {
+                                        groupNo = endLocGroup.groupNo;
+                                        endLoc = endLocGroup.endLocList[0];
+                                        endLocGroup.endLocList.Remove(endLoc);
+                                    }
+
+                                    if (endLoc != null) 
+                                    {
+                                        var wmsTask = new WMSTask()
+                                        {
+                                            S_CNTR_CODE = ext.rfid,
+                                            S_CODE = WMSHelper.GenerateTaskNo(),
+                                            S_START_LOC = startLoc.S_CODE,
+                                            S_START_AREA = startLoc.S_AREA_CODE,
+                                            S_END_LOC = endLoc.S_CODE,
+                                            S_END_AREA = endLoc.S_AREA_CODE,
+                                            S_TYPE = "婊℃枡涓嬬嚎鍏ュ簱浠诲姟",
+                                            S_OP_DEF_CODE = model.reqId,
+                                            S_OP_DEF_NAME = "鎴愬瀷鏈烘弧鏂欎笅绾垮叆搴�,
+                                            N_PRIORITY = 1,
+                                            T_START_TIME = DateTime.Now,
+                                            S_GROUP_NO = groupNo,
+                                        };
+                                        if (WMSHelper.CreateWmsTask(wmsTask))
+                                        {
+                                            // 鍒涘缓涓�鍏ュ簱浠诲姟
+                                            WCSTask wcsTask = new WCSTask()
+                                            {
+                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                                S_OP_CODE = wmsTask.S_CODE,
+                                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                                S_TYPE = wmsTask.S_TYPE,
+                                                S_START_LOC = startLoc.S_CODE,
+                                                S_START_AREA = startLoc.S_AREA_CODE,
+                                                S_END_LOC = endLoc.S_CODE,
+                                                S_END_AREA = endLoc.S_AREA_CODE,
+                                                S_SCHEDULE_TYPE = "WCS",
+                                                N_PRIORITY = 1,
+                                                T_START_TIME = DateTime.Now,
+                                            };
+
+                                            if (WCSHelper.CreateTask(wcsTask))
+                                            {
+                                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                                wmsTask.N_B_STATE = 1;
+                                                WMSHelper.UpdateTaskState(wmsTask);
+
+                                                /*// 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
+                                                var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
+                                                WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);*/
+                                            }
+                                        }
+                                    }
+                                }
+                                else
+                                {
+                                    // 寮傚父鎵樼洏鎺掗櫎
+                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.鎺掑嚭浣�+                                    endLoc = WMSHelper.getOnlneLoc(2);  // 2.绌烘墭涓婄嚎浣嶏紙鎺掑嚭鐨勬墭鐩橀兘鍑哄簱鍒扮┖鎵樹笂绾夸綅杩涜澶勭悊锛�+                                    if (endLoc != null && middleLoc != null)
+                                    {
+                                        var wmsTask = new WMSTask()
+                                        {
+                                            S_CNTR_CODE = ext.rfid,
+                                            S_CODE = WMSHelper.GenerateTaskNo(),
+                                            S_START_LOC = startLoc.S_CODE,
+                                            S_START_AREA = startLoc.S_AREA_CODE,
+                                            S_END_LOC = endLoc.S_CODE,
+                                            S_END_AREA = endLoc.S_AREA_CODE,
+                                            S_TYPE = "寮傚父鎵樼洏鍑哄簱浠诲姟",
+                                            S_OP_DEF_CODE = model.reqId,
+                                            S_OP_DEF_NAME = "寮傚父鎵樼洏鍑哄簱妫�慨",
+                                            N_PRIORITY = 1,
+                                            T_START_TIME = DateTime.Now,
+                                        };
+                                        if (WMSHelper.CreateWmsTask(wmsTask))
+                                        {
+                                            // 鍒涘缓涓�鍏ュ簱浠诲姟
+                                            WCSTask wcsTask = new WCSTask()
+                                            {
+                                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                                S_OP_CODE = wmsTask.S_CODE,
+                                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                                S_TYPE = wmsTask.S_TYPE,
+                                                S_START_LOC = startLoc.S_CODE,
+                                                S_START_AREA = startLoc.S_AREA_CODE,
+                                                S_END_LOC = middleLoc.S_CODE,
+                                                S_END_AREA = middleLoc.S_AREA_CODE,
+                                                S_SCHEDULE_TYPE = "WCS",
+                                                N_PRIORITY = 1,
+                                                T_START_TIME = DateTime.Now,
+                                            };
+
+                                            if (WCSHelper.CreateTask(wcsTask))
+                                            {
+                                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                                wmsTask.N_B_STATE = 1;
+                                                WMSHelper.UpdateTaskState(wmsTask);
+                                            }
+                                        }
+                                    }
+                                    else 
+                                    {
+                                        LogHelper.Info("寮傚父鎵樼洏鎺掑嚭锛屾湭鑾峰彇寮傚父鎺掗櫎鎺ラ┏浣�, "WMS");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                else 
+                {
+                    response.code = 1;
+                    response.msg = "鍏ュ弬缂哄皯鎵樼洏鍜屾潯鐮佷俊鎭�;
+                }
+            }
+            else 
+            {
+                response.code = 1;
+                response.msg = "璧风偣璐т綅涓嶅瓨鍦�;
+            }
+            return response;
+        }
+
+        /// <summary>
+        /// 璇荤爜璇锋眰
+        /// 鍦烘櫙锛�.
+        /// </summary>
+        public static ResponseResult readCodeRequest(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            readCodeFeedbackResponse readCodeFeedbackResponse = new readCodeFeedbackResponse() 
+            {
+                verifyResult = true
+            };
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+            if (wcsTask != null && wmsTask != null)
+            {
+                Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);   // 鍘熺粓鐐�+                if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟")
+                {
+                    // 鍒ゆ柇rfid鏄惁寮傚父
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE)
+                    {
+                        // 鏌ヨ鎺掑嚭鍙�+                        Location middleLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, endLoc.N_ROADWAY);
+                        // 鏌ヨ鏂扮粓鐐�+                        endLoc = WMSHelper.getOnlneLoc(2);
+
+                        wcsTask.S_END_LOC = middleLoc.S_CODE;
+                        wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
+                        WCSHelper.updateTaskEnd(wcsTask);
+
+                        wmsTask.S_END_LOC = endLoc.S_CODE;
+                        wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                        WMSHelper.UpdateTaskEnd(wmsTask);
+
+                        readCodeFeedbackResponse.verifyResult = false;
+                        readCodeFeedbackResponse.endLoc = middleLoc.S_CODE;
+                    }
+                }
+                else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟")
+                {
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE || cntrItemRels.Count == 0 || cntrItemRels.Count > 0 && cntrItemRels[0].S_ITEM_STATE != "OK")
+                    {
+                        // 璁$畻鎺掑嚭鍙�+                        endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW);
+
+                        wcsTask.S_END_LOC = endLoc.S_CODE;
+                        wcsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                        WCSHelper.updateTaskEnd(wcsTask);
+
+                        wmsTask.S_END_LOC = endLoc.S_CODE;
+                        wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                        WMSHelper.UpdateTaskEnd(wmsTask);
+
+                        readCodeFeedbackResponse.verifyResult = false;
+                        readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
+                    }
+                }
+            }
+            else 
+            {
+                response.code = 1;
+                response.msg = $"浠诲姟鍙凤細{model.taskNo},鏈煡璇㈠埌鎵ц涓殑浠诲姟";
+            }
+            response.data = readCodeFeedbackResponse;
+            return response;
+        }
+
+        /// <summary>
+        /// 寮傚父鐢宠锛堝彇娑堜换鍔★級
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult anomalyRequest(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            readCodeFeedbackResponse readCodeFeedbackResponse = new readCodeFeedbackResponse()
+            {
+                verifyResult = true
+            };
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+            if (wcsTask != null && wmsTask != null)
+            {
+                Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);   // 鍘熺粓鐐�+                if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟")
+                {
+                    // 鏌ヨ鎺掑嚭鍙�+                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, endLoc.N_ROADWAY);
+                    wcsTask.S_END_LOC = middleLoc.S_CODE;
+                    wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
+                    WCSHelper.updateTaskEnd(wcsTask);
+                    readCodeFeedbackResponse.verifyResult = false;
+                    readCodeFeedbackResponse.endLoc = middleLoc.S_CODE;
+
+                    // 鏌ヨ鏂扮粓鐐�+                    endLoc = WMSHelper.getOnlneLoc(2);
+                }
+                else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟")
+                {
+                    endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW);
+                    readCodeFeedbackResponse.verifyResult = false;
+                    readCodeFeedbackResponse.endLoc = endLoc.S_CODE;
+                }
+                wmsTask.S_END_LOC = endLoc.S_CODE;
+                wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                WMSHelper.UpdateTaskEnd(wmsTask);
+            }
+            else
+            {
+                response.code = 1;
+                response.msg = $"浠诲姟鍙凤細{model.taskNo},鏈煡璇㈠埌鎵ц涓殑浠诲姟";
+            }
+            response.data = readCodeFeedbackResponse;
+            return response;
+        }
+
+        /// <summary>
+        /// 鐢宠鏂扮粓鐐�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult applyDest(ApplyDestModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            ApplyDest applyDest = new ApplyDest();
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            if (wcsTask != null)
+            {
+                var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+                if (wcsTask != null)
+                {
+                    string itemCode = null;
+                    var endLoc = LocationHelper.GetLoc(wcsTask.S_END_LOC);
+                    var cntrItemRels = ContainerHelper.GetCntrItemRel(wcsTask.S_CNTR_CODE);
+                    if (cntrItemRels.Count > 0)
+                    {
+                        itemCode = cntrItemRels[0].S_ITEM_CODE;
+                    }
+
+                    if (model.applyType == 1)
+                    {
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 3);  // 灏嗗師璐т綅閿佸畾锛堝叾浠栭攣锛�+                        var endLocGroup = WMSHelper.getInStockEndLoc(1, itemCode, endLoc.N_ROADWAY);
+                        if (endLocGroup.endLocList.Count > 0)
+                        {
+                            endLoc = endLocGroup.endLocList[0];
+                            applyDest.endLoc = endLoc.S_CODE;
+                        }
+                    }
+                    else if (model.applyType == 2)
+                    {
+                        var endLocGroup = WMSHelper.getInStockEndLoc(1, cntrItemRels[0].S_ITEM_CODE, 0, endLoc.N_ROADWAY);
+                        if (endLocGroup.endLocList.Count > 0)
+                        {
+                            endLoc = endLocGroup.endLocList[0];
+                            applyDest.endLoc = endLoc.S_CODE;
+                        }
+                    }
+                }
+            }
+            else 
+            {
+                response.code = 1;
+                response.msg = $"浠诲姟:{model.taskNo}涓嶅瓨鍦�;
+            }
+            return response;
+        }
+
+        public class ApplyDest 
+        {
+            public string endLoc { get; set; }
+        }
+
+        /// <summary>
+        /// 4.纭寲鏈哄懠鍙儦鑳庡嚭搴�+        /// 閫昏緫锛�+        /// 1.鏍规嵁鏈哄彴鍙锋煡璇€�纭寲鏈哄伐鍗曡〃銆戙�銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戠瓫閫夊綋鍓嶇彮娆$殑鐢熶骇璁″垝鏁伴噺鏄惁婊¤冻锛屽綋棰勮鐢熶骇鏁伴噺 = 瀹為檯鏁�鍦ㄩ�鏁伴噺 锛屽垯鍋滄鍙枡
+        /// 2.鏌ヨ鏈哄彴鍙峰湪銆愮~鍖栨満宸ュ崟琛ㄣ�瀵瑰簲鐨勭墿鏂欑紪鐮侊紝
+        ///   寮�璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
+        /// </summary>
+        /// <param name="model"></param>
+        public static ResponseResult callItemOutStock(NotifyDeviceSignalModel model)
+        {
+            ResponseResult response = new ResponseResult();
+
+            var locCodes = model.loc.Split(',').ToList();
+
+            int locNum = locCodes.Count;
+            if (locNum > 0) 
+            {
+                Location prevLoc = null;
+                Dictionary<string,Location> outLocDic = new Dictionary<string,Location>();
+                foreach (var mcn in locCodes)
+                {
+                    // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�+                    var existTask = WCSHelper.GetTaskByEnd(mcn);
+                    if (existTask.Count == 0) 
+                    {
+                        // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝
+                        var currentTime = DateTime.Now;
+                        var shift = getShift(currentTime.TimeOfDay);  // 鐝
+                        var dateShift = currentTime.ToString("dd/MM/yyyy");
+                        TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00
+                        if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start)
+                        {
+                            dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy");
+                        }
+
+                        // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ 纭寲鏈哄伐鍗�涓殑鐗╂枡缂栫爜銆侀璁$敓浜ф暟閲�+                        var productionShedule = WMSHelper.getProductionShedule(dateShift, mcn, shift);
+
+                        if (productionShedule != null && productionShedule.QTY != 0)
+                        {
+                            // 4鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺
+                            int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, mcn, shift);
+                            if (productionShedule.QTY > finishNum)
+                            {
+                                // 5.鍑哄簱绛栫暐 1.浼樺厛鏌ヨ鍓嶄竴鎷栬揣浣嶇殑宸﹀彸涓よ竟鏄惁婊¤冻鏉′欢  2.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
+                                var startLoc = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE, prevLoc);
+                                if (startLoc != null) 
+                                {
+                                    outLocDic.Add(mcn, startLoc);
+                                    prevLoc = startLoc;
+                                }
+                            }
+                        }
+                    }
+                }
+
+                // 6.鍒ゆ柇鍑哄簱璐т綅鏄惁鏄悓涓�贩閬擄紝鍚屼竴宸烽亾鐢熸垚浠诲姟缁勫彿
+                string groupNo = null;
+                if (outLocDic.Count > 1) 
+                {
+                    var groupNum = outLocDic.Select(a => a.Value).ToList().GroupBy(a => a.N_ROADWAY).Count();
+                    if (groupNum == 1) 
+                    {
+                        groupNo = GenerateTaskGroupNo();
+                    }
+                }
+
+                // 7.鐢熸垚鍑哄簱浠诲姟
+                if (outLocDic.Count > 0) 
+                {
+                    foreach (var item in outLocDic)
+                    {
+                        Location endLoc = LocationHelper.GetLoc(item.Key);
+                        Location startLoc = item.Value;
+                        if (endLoc != null)
+                        {
+                            var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                            if (locCntrRels != null && locCntrRels.Count > 0)
+                            {
+                                var wmsTask = new WMSTask()
+                                {
+                                    S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                                    S_CODE = WMSHelper.GenerateTaskNo(),
+                                    S_START_LOC = startLoc.S_CODE,
+                                    S_START_AREA = startLoc.S_AREA_CODE,
+                                    S_END_LOC = endLoc.S_CODE,
+                                    S_END_AREA = endLoc.S_AREA_CODE,
+                                    S_TYPE = "鑳氳儙鍙枡鍑哄簱浠诲姟",
+                                    S_OP_DEF_CODE = model.reqId,
+                                    S_OP_DEF_NAME = "纭寲鏈哄懠鍙儦鑳庡嚭搴�,
+                                    N_PRIORITY = 1,
+                                    T_START_TIME = DateTime.Now,
+                                    S_GROUP_NO = groupNo,
+                                };
+                                if (WMSHelper.CreateWmsTask(wmsTask))
+                                {
+                                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                                    WCSTask wcsTask = new WCSTask()
+                                    {
+                                        S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                        S_OP_CODE = wmsTask.S_CODE,
+                                        S_CODE = WCSHelper.GenerateTaskNo(),
+                                        S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                        S_TYPE = wmsTask.S_TYPE,
+                                        S_START_LOC = startLoc.S_CODE,
+                                        S_START_AREA = startLoc.S_AREA_CODE,
+                                        S_END_LOC = endLoc.S_CODE,
+                                        S_END_AREA = endLoc.S_AREA_CODE,
+                                        S_SCHEDULE_TYPE = "WCS",
+                                        N_PRIORITY = 1,
+                                        T_START_TIME = DateTime.Now,
+                                    };
+
+                                    if (WCSHelper.CreateTask(wcsTask))
+                                    {
+                                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                        // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                        wmsTask.N_B_STATE = 1;
+                                        WMSHelper.UpdateTaskState(wmsTask);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            return response;
+        }
+
+        /// <summary>
+        /// 绌烘墭鍏ュ簱
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult emptyTrayInStock(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult response = new ResponseResult();
+            Location startLoc = LocationHelper.GetLoc(model.loc);
+
+            var cntrCodeList = model.loc.Split(',').ToList();
+            if (cntrCodeList.Count > 0) 
+            {
+                var endLocGroup = WMSHelper.getInStockEndLoc(cntrCodeList.Count, null);
+                if (endLocGroup.endLocList.Count > 0)
+                {
+                    foreach (var endLoc in endLocGroup.endLocList)
+                    {
+                        var wmsTask = new WMSTask()
+                        {
+                            S_CNTR_CODE = model.cntrNo,
+                            S_CODE = WMSHelper.GenerateTaskNo(),
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = endLoc.S_CODE,
+                            S_END_AREA = endLoc.S_AREA_CODE,
+                            S_TYPE = "绌烘墭鍏ュ簱浠诲姟",
+                            S_OP_DEF_CODE = model.reqId,
+                            S_OP_DEF_NAME = "绌烘墭鐩樺洖搴撲换鍔�,
+                            N_PRIORITY = 1,
+                            T_START_TIME = DateTime.Now,
+                            S_GROUP_NO = endLocGroup.groupNo,
+                        };
+                        if (WMSHelper.CreateWmsTask(wmsTask))
+                        {
+                            // 鍒涘缓涓�鍏ュ簱浠诲姟
+                            WCSTask wcsTask = new WCSTask()
+                            {
+                                S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                S_OP_CODE = wmsTask.S_CODE,
+                                S_CODE = WCSHelper.GenerateTaskNo(),
+                                S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                S_TYPE = wmsTask.S_TYPE,
+                                S_START_LOC = startLoc.S_CODE,
+                                S_START_AREA = startLoc.S_AREA_CODE,
+                                S_END_LOC = endLoc.S_CODE,
+                                S_END_AREA = endLoc.S_AREA_CODE,
+                                S_SCHEDULE_TYPE = "WCS",
+                                N_PRIORITY = 1,
+                                T_START_TIME = DateTime.Now,
+                            };
+
+                            if (WCSHelper.CreateTask(wcsTask))
+                            {
+                                // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                wmsTask.N_B_STATE = 1;
+                                WMSHelper.UpdateTaskState(wmsTask);
+                            }
+                        }
+                    }
+                }
+                else
+                {
+                    response.code = 1;
+                    response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
+                }
+            }
+            
+            return response;
+        }
+
+        /// <summary>
+        /// 鍛煎彨绌烘墭鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        public static ResponseResult callEmptyTrayOutStock(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult responseResult = new ResponseResult();
+            int executeNum = 0;
+            string startLocCode = null;
+            for (int i = 1; i <= 2; i++) 
+            {
+                Location startLoc = WMSHelper.getOutStockStartLoc(startLocCode);
+                if (startLoc != null)
+                {
+                    startLocCode = startLoc.S_CODE;
+                    Location endLoc = WMSHelper.getMinTaskMiddleLoc(1, 0, startLoc.N_ROADWAY);
+                    if (endLoc != null)
+                    {
+                        var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
+                        if (locCntrRels != null && locCntrRels.Count > 0)
+                        {
+                            var wmsTask = new WMSTask()
+                            {
+                                S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                                S_CODE = WMSHelper.GenerateTaskNo(),
+                                S_START_LOC = startLoc.S_CODE,
+                                S_START_AREA = startLoc.S_AREA_CODE,
+                                S_END_LOC = endLoc.S_CODE,
+                                S_END_AREA = endLoc.S_AREA_CODE,
+                                S_TYPE = "鍛煎彨绌烘墭鍑哄簱",
+                                S_OP_DEF_CODE = model.reqId,
+                                S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱",
+                                N_PRIORITY = 1,
+                                T_START_TIME = DateTime.Now
+                            };
+                            if (WMSHelper.CreateWmsTask(wmsTask))
+                            {
+                                // 鍒涘缓涓�鍏ュ簱浠诲姟
+                                WCSTask wcsTask = new WCSTask()
+                                {
+                                    S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                                    S_OP_CODE = wmsTask.S_CODE,
+                                    S_CODE = WCSHelper.GenerateTaskNo(),
+                                    S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                                    S_TYPE = wmsTask.S_TYPE,
+                                    S_START_LOC = startLoc.S_CODE,
+                                    S_START_AREA = startLoc.S_AREA_CODE,
+                                    S_END_LOC = endLoc.S_CODE,
+                                    S_END_AREA = endLoc.S_AREA_CODE,
+                                    S_SCHEDULE_TYPE = "WCS",
+                                    N_PRIORITY = 1,
+                                    T_START_TIME = DateTime.Now,
+                                };
+
+                                if (WCSHelper.CreateTask(wcsTask))
+                                {
+                                    // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                                    // 鏇存柊浣滀笟浠诲姟鐘舵�
+                                    wmsTask.N_B_STATE = 1;
+                                    WMSHelper.UpdateTaskState(wmsTask);
+
+                                    executeNum += 1;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (executeNum < 1) 
+            {
+                responseResult.code = 1;
+                responseResult.msg = "绔嬪簱鍐呯┖鎵樼洏鏁伴噺涓嶈冻";
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鑳氳儙鎶芥鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        public static SimpleResult embryoCheckOutStock(EmbryoCheckOutStockModel model) 
+        {
+            SimpleResult result = new SimpleResult();
+            var locCntrs = LocationHelper.GetLocCntrRelByCntr(model.trayCode);
+            if (locCntrs.Count == 1)
+            {
+                Location startLoc = LocationHelper.GetLoc(locCntrs[0].S_LOC_CODE);
+                var connectLoc = Settings.connectLocList.Where(a => a.roadway == startLoc.N_ROADWAY).First();
+                Location middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
+                Location endLoc = LocationHelper.GetLoc("");
+                if (endLoc != null)
+                {
+                    var wmsTask = new WMSTask()
+                    {
+                        S_CNTR_CODE = model.trayCode,
+                        S_CODE = WMSHelper.GenerateTaskNo(),
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = endLoc.S_CODE,
+                        S_END_AREA = endLoc.S_AREA_CODE,
+                        S_TYPE = "鑳氳儙鎶芥鍑哄簱浠诲姟",
+                        S_OP_DEF_CODE = model.reqId,
+                        S_OP_DEF_NAME = "鑳氳儙鎶芥鍑哄簱鍑哄簱浠诲姟",
+                        N_PRIORITY = 1,
+                        T_START_TIME = DateTime.Now,
+                    };
+                    if (WMSHelper.CreateWmsTask(wmsTask))
+                    {
+                        // 鍒涘缓涓�鍏ュ簱浠诲姟
+                        WCSTask wcsTask = new WCSTask()
+                        {
+                            S_OP_NAME = wmsTask.S_OP_DEF_NAME,
+                            S_OP_CODE = wmsTask.S_CODE,
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_CNTR_CODE = wmsTask.S_CNTR_CODE,
+                            S_TYPE = wmsTask.S_TYPE,
+                            S_START_LOC = startLoc.S_CODE,
+                            S_START_AREA = startLoc.S_AREA_CODE,
+                            S_END_LOC = middleLoc.S_CODE,
+                            S_END_AREA = middleLoc.S_AREA_CODE,
+                            S_SCHEDULE_TYPE = "WCS",
+                            N_PRIORITY = 1,
+                            T_START_TIME = DateTime.Now,
+                        };
+
+                        if (WCSHelper.CreateTask(wcsTask))
+                        {
+                            // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                            LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                            LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+
+                            // 鏇存柊浣滀笟浠诲姟鐘舵�
+                            wmsTask.N_B_STATE = 1;
+                            WMSHelper.UpdateTaskState(wmsTask);
+                        }
+                    }
+                }
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 寮傚父鎵樼洏鍥炲簱娴佺▼
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ResponseResult anomalyTrayInStock(NotifyDeviceSignalModel model) 
+        {
+            ResponseResult responseResult = new ResponseResult();
+            LocationHelper.UnBindingLoc(model.loc, new List<string>() { model.cntrNo });
+            ContainerHelper.deleteCntrItemRelByCntr(model.cntrNo);
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 浠诲姟鐘舵�鍥炴姤
+        /// 浠诲姟鐘舵� 1锛氬紑濮�鎵ц涓紱瀹屾垚锛�锛氬噯澶囧彇璐э紱4锛氬彇璐у畬鎴愶紱5锛氬噯澶囧嵏璐э紱6锛氬嵏璐у畬鎴愶紱7锛氬紓甯稿彇娑堬紱8锛氬己鍒跺畬鎴�+        /// 1.鏍规嵁浠诲姟鐘舵�鍥炴姤鏇存柊璐т綅鐘舵�銆佷换鍔$姸鎬�+        /// 2.鏇存柊浠诲姟涓棿琛ㄧ姸鎬�+        /// 4.鏇存柊鍑哄簱浠诲姟涓棿琛ㄧ姸鎬�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public static ReturnResult taskStatusFeedback(TaskStatusFeedbackModel model)
+        {
+            ReturnResult responseResult = new ReturnResult();
+            WCSTask cst = WCSHelper.GetTask(model.taskNo);
+            if (cst != null)
+            {
+                bool isExist = WCSHelper.CheckActionRecordExist(cst.S_CODE, model.status);
+                if (!isExist)
+                {
+                    WMSTask mst = WMSHelper.GetWmsTask(cst.S_OP_CODE);
+                    if (mst != null)
+                    {
+                        switch (model.status)
+                        {
+                            case 1:
+                                WCSHelper.Begin(cst);
+                                break;
+                            case 2:
+                                WCSHelper.End(cst);
+                                break;
+                            case 3:
+                                WCSHelper.UpdateStatus(cst, "鍑嗗鍙栬揣");
+                                break;
+                            case 4:
+                                WCSHelper.UpdateStatus(cst, "鍙栬揣瀹屾垚");
+                                TaskProcess.OperateStatus(cst, 4);
+                                break;
+                            case 5:
+                                WCSHelper.UpdateStatus(cst, "鍑嗗鍗歌揣");
+                                break;
+                            case 6:
+                                WCSHelper.UpdateStatus(cst, "鍗歌揣瀹屾垚");
+                                TaskProcess.OperateStatus(cst, 6);
+                                break;
+                            case 7:
+                                WCSHelper.Cancel(cst);
+                                WCSHelper.UpdateStatus(cst, "鍙栨秷");
+                                TaskProcess.OperateStatus(cst, 7);
+                                break;
+                            case 8:
+                                WCSHelper.UpdateStatus(cst, "寮哄埗瀹屾垚");
+                                WCSHelper.End(cst);
+                                break;
+                        }
+                        // 娣诲姞WCS鍔ㄤ綔璁板綍
+                        WCSHelper.AddActionRecord(model.taskNo, model.status, model.deviceNo, model.loc);
+
+                        if (model.status == 2 || model.status == 8)
+                        {
+                            if (mst != null && mst.N_B_STATE != 2)
+                            {
+                                if (mst.S_END_LOC != cst.S_END_LOC)
+                                {
+                                    WCSCore.createLastTask(cst.S_END_LOC, mst);
+                                }
+                                else 
+                                {
+                                    mst.N_B_STATE = 2;
+                                    WMSHelper.UpdateTaskState(mst);
+                                }
+
+                                if (mst.S_TYPE == "鍛煎彨绌烘墭鍑哄簱") 
+                                {
+                                    LocationHelper.UnBindingLoc(mst.S_END_LOC, new List<string>() { mst.S_CNTR_CODE });
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鏌ヨ鐝
+        /// </summary>
+        /// <param name="time"></param>
+        /// <returns></returns>
+        public static string getShift(TimeSpan time)
+        {
+            TimeSpan shiftI_Start = new TimeSpan(07, 00, 0);  // 07:00:00
+            TimeSpan shiftI_End = new TimeSpan(14, 59, 59);    // 14:59:59
+
+            TimeSpan shiftII_Start = new TimeSpan(15, 00, 0); // 15:00:00
+            TimeSpan shiftII_End = new TimeSpan(22, 59, 59);    // 22:59:59
+
+            TimeSpan shiftIII_Start = new TimeSpan(23, 00, 0); // 23:00:00
+            TimeSpan shiftIII_End = new TimeSpan(06, 59, 59);   // 06:59:59
+
+            // 鍒ゆ柇鏄惁鍦�Shift III锛堣法澶╅渶鐗规畩澶勭悊锛�+            bool isShiftIII = time >= shiftIII_Start || time <= shiftIII_End;
+
+            // 杩斿洖缁撴灉
+            if (time >= shiftI_Start && time <= shiftI_End)
+                return "I";
+            else if (time >= shiftII_Start && time <= shiftII_End)
+                return "II";
+            else if (isShiftIII)
+                return "III";
+            else
+                return "No shift"; // 鐞嗚涓婁笉浼氳Е鍙�+        }
+
+        /// <summary>
+        /// 绌烘墭瑙g粦
+        /// </summary>
+        public static ReturnResult emptyTrayUnBind(EmptyTrayUnBindModel model) 
+        {
+            ReturnResult responseResult = new ReturnResult();
+            ContainerHelper.deleteCntrItemRelByCntr(model.rfid);
+            return responseResult;
+        }
+
+        public class readCodeFeedbackResponse
+        {
+            public bool verifyResult { get; set; }
+            public string endLoc { get; set; }
+        }
+
         /// <summary>
         /// 鍒涘缓浠诲姟
         /// </summary>
@@ -118,117 +1074,6 @@
                 cacheInstockInfos.Add(pair);
             }
         }
-        
-        
-        internal static object in_lock = new object();
-
-        /// <summary>
-        /// pad鍏ュ簱
-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        internal static SimpleResult Instock(InstockInfo model) {
-            var result = new SimpleResult();
-            //pda鍏ュ簱
-            //1 鍒ゆ柇璧风偣鏈夋病鏈変换鍔★紝鏈夋病鏈夊叆搴撻攣
-            lock (in_lock) {
-                var loc = LocationHelper.GetLoc(model.start);
-                if (loc != null && loc.N_LOCK_STATE == 0)
-                {
-                    //2 鏍规嵁缁堢偣搴撳尯璁$畻缁堢偣
-                    var end = WMSHelper.GetInstockEnd(model.item, model.endArea);
-                    LogHelper.Info("缁堢偣璐т綅锛� + JsonConvert.SerializeObject(end), "TSSG");
-                    if (end != null)
-                    {
-                        var cntrCode = ContainerHelper.GenerateCntrNo();
-                        var wcsTask = new WCSTask
-                        {
-                            S_OP_NAME = "鍏ュ簱",
-                            S_CODE = WCSHelper.GenerateTaskNo(),
-                            S_TYPE = "涓嬬嚎鍏ュ簱",
-                            S_START_LOC = model.start,
-                            S_END_LOC = end.S_CODE,
-                            S_SCHEDULE_TYPE = "NDC",
-                            N_CNTR_COUNT = 1,
-                            S_CNTR_CODE = cntrCode,
-                            N_START_LAYER = 1,
-                            N_END_LAYER = end.N_CURRENT_NUM + 1
-                        };
-                        if (ContainerHelper.BindNewCntrItem(model.start, cntrCode, model.item) && WCSHelper.CreateTask(wcsTask))
-                        {
-                            LocationHelper.LockLoc(model.start, 2);
-                            LocationHelper.LockLoc(end.S_CODE, 1);
-                            result.resultCode = 0;
-                            result.resultMsg = $"浠诲姟鍒涘缓鎴愬姛,浠诲姟鍙蜂负{wcsTask.S_CODE},缁堢偣涓簕end.S_CODE}";
-                        }
-                    }
-                    else
-                    {
-                        addKeyValuePair(model.ip, model);
-                        LogHelper.Info("缂撳瓨鍏ュ簱淇℃伅锛� + JsonConvert.SerializeObject(model), "TSSG");
-                        result.resultCode = 2;
-                        result.resultMsg = "鏈幏鍙栧埌鍏ュ簱缁堢偣";
-                    }
-                }
-                else
-                {
-                    result.resultCode = 1;
-                    result.resultMsg = "璧风偣鏈変换鍔℃湭瀹屾垚";
-                }
-            }
-            return result;
-        }
-
-        /// <summary>
-        /// 绉诲簱
-        /// </summary>
-        /// <param name="model"></param>
-        /// <returns></returns>
-        internal static SimpleResult shiftStock(ShiftStockInfo model)
-        {
-            var result = new SimpleResult();
-            //1 鏍规嵁璧风偣搴撳尯銆佹帓 纭畾璧峰璐т綅
-            var startLoc = WMSHelper.GetShiftStockStart(model.startArea, model.startRow);
-            if (startLoc != null && startLoc.N_LOCK_STATE == 0)
-            {
-                //2 鏍规嵁缁堢偣搴撳尯璁$畻缁堢偣
-                var end = WMSHelper.GetShiftStockEnd( model.endArea, model.endRow);
-                if (end != null && end.N_LOCK_STATE == 0)
-                {
-                    var wcsTask = new WCSTask
-                    {
-                        S_OP_NAME = "绉诲簱",
-                        S_CODE = WCSHelper.GenerateTaskNo(),
-                        S_TYPE = "绉诲簱",
-                        S_START_LOC = startLoc.S_CODE,
-                        S_END_LOC = end.S_CODE,
-                        S_SCHEDULE_TYPE = "NDC",
-                        N_CNTR_COUNT = 1,
-                        S_CNTR_CODE = startLoc.LocCntrRel.S_CNTR_CODE,
-                        N_START_LAYER = startLoc.N_CURRENT_NUM,
-                        N_END_LAYER = end.N_CURRENT_NUM + 1
-                    };
-                    if (WCSHelper.CreateTask(wcsTask))
-                    {
-                        LocationHelper.LockLoc(startLoc.S_CODE, 2);
-                        LocationHelper.LockLoc(end.S_CODE, 1);
-                        result.resultCode = 0;
-                        result.resultMsg = $"浠诲姟鍒涘缓鎴愬姛,浠诲姟鍙蜂负{wcsTask.S_CODE},缁堢偣涓簕end.S_CODE}";
-                    }
-                }
-                else
-                {
-                    result.resultCode = 2;
-                    result.resultMsg = "缁堢偣搴撳尯娌℃湁鍙叆鐨勮揣浣�;
-                }
-            }
-            else
-            {
-                result.resultCode = 1;
-                result.resultMsg = "鏈壘鍒版寚瀹氱墿鏂�;
-            }
-            return result;
-        }
 
             internal static CodeInfo GetCodeInfo(string code, string org) {
             //return new CodeInfo {  Fitemid_XK=code, FSourceNo="123456"};
@@ -258,43 +1103,15 @@
         public static void agvCarAlarm(string  forkliftNo, string errCode , string errCode2 , string failCode) {
             bool turnLight = false;
 
-            var errCodeList = Settings.agvAlarmNoList.Where(a => a.type == 1).Select(a => a.dex).ToList();
-            var errCode2List = Settings.agvAlarmNoList.Where(a => a.type == 2).Select(a => a.dex).ToList();
-            var failCodeList = Settings.agvAlarmNoList.Where(a => a.type == 3).Select(a => a.dex).ToList();
-
-            if (errCodeList.Contains(int.Parse(errCode)))
-            {
-                turnLight = true;
-                LogHelper.Info("StopWord 閿欒鐮侊細" + errCode, "HosttoagvCar");
-            }
-            if (errCode2List.Contains(int.Parse(errCode2)))
-            {
-                turnLight = true;
-                LogHelper.Info("StopWord2 閿欒鐮侊細" + errCode2, "HosttoagvCar");
-            }
-            if (failCodeList.Contains(int.Parse(failCode)))
-            {
-                turnLight = true;
-                LogHelper.Info("failCode 閿欒鐮侊細" + failCode, "HosttoagvCar");
-            }
-
-            var alertorDevices = Settings.alertorLightInfos.Where(a => a.deviceNo == 5 || a.deviceNo == 6).ToList();
-            foreach (var alertorDevice in alertorDevices)
-            {
-                if (turnLight)
-                {
-                    var result = HH.WCS.Mobox3.YNJT_PT.device.PlcHelper.SendHex(alertorDevice.address, alertorDevice.turnLight);
-                    LogHelper.Info("寮�伅锛宮odbus 杩斿洖淇″彿锛� + result, "HosttoagvCar");
-                }
-                /*else
-                {
-                    var result = HH.WCS.Mobox3.YNJT_PT.device.PlcHelper.SendHex(alertorDevice.address, alertorDevice.offLight);
-                    LogHelper.Info("鍏崇伅锛宮odbus 杩斿洖淇″彿锛� + result, "HosttoagvCar");
-                }*/
-            }
+         
         }
 
-
+        public class OffLineModel
+        {
+            public int isUrgent { get; set; } // N_IS_URGENT 鏄惁鍔犳�锛�.鍚�1.鏄級
+            public int isFull { get; set; } // 鏄惁婊℃嫋 0.鍚�1.鏄�+            public int needPair { get; set; } // 0.鍚� 1.鏄紙褰撳墠绌烘墭鐩樹负閰嶅鎵樼洏锛�+        }
         public class AddTaskModel {
             public string From { get; set; }
             public string To { get; set; }

--
Gitblit v1.9.1