From 06a8b6963d6d4f229d4e196b4b09ce57e2cbf2dd Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期四, 24 七月 2025 17:21:40 +0800
Subject: [PATCH] 印尼佳通-GT服务开发

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_PT/api/ApiHelper.cs |  787 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 534 insertions(+), 253 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 aa058eb..eff5c04 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
@@ -4,19 +4,23 @@
 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.Globalization;
 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;
@@ -34,25 +38,27 @@
         /// 鎴愬瀷鏈轰笅绾胯褰�         /// </summary>
         /// <param name="model"></param>
-        public static ResponseResult cxjOffLineRecord(OffLineModel model) 
+        public static ResponseResult cxjOffLineRecord(NotifyDeviceSignalModel model) 
         {
             ResponseResult response = new ResponseResult();
-            var container = ContainerHelper.GetCntr(model.rfid);
+            var container = ContainerHelper.GetCntr(model.cntrNo);
             if (container == null)
             {
-                ContainerHelper.AddCntr(model.rfid);
+                ContainerHelper.AddCntr(model.cntrNo);
             }
 
             try
             {
+                OffLineModel extData1 = JsonConvert.DeserializeObject<OffLineModel>(model.extData.ToString());
                 OffLineRecord record = new OffLineRecord()
                 {
-                    S_RFID = model.rfid,
+                    S_RFID = model.cntrNo,
                     S_DEVICE_NO = model.deviceNo,
-                    N_IS_URGENT = model.isUrgent,
+                    N_IS_URGENT = extData1.isUrgent,
                     T_OFF_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
-                    N_IS_FULL = model.isFull,
-
+                    N_IS_FULL = extData1.isFull,
+                    N_NEED_PAIR = extData1.needPair,
+                    S_LOC = model.loc
                 };
                 WMSHelper.addOffLineRecord(record);
             }
@@ -75,7 +81,7 @@
             var startLoc = LocationHelper.GetLoc(model.loc);
             if (startLoc != null)
             {
-                List<BarcodeModel> extData = model.extData;
+                List<BarcodeModel> extData = JsonConvert.DeserializeObject<List<BarcodeModel>>(model.extData.ToString());
                 int dataCount = extData.Count;
                 if (dataCount > 0)
                 {
@@ -105,7 +111,7 @@
                                     var offLineRecord = WMSHelper.getOffLineRecord(rfid);
                                     if (offLineRecord != null)
                                     {
-                                        if (offLineRecord.N_IS_FULL == 1) 
+                                        if (offLineRecord.N_IS_FULL == 1)
                                         {
                                             if (ext.barcode.Contains("99999999"))
                                             {
@@ -118,11 +124,13 @@
                                                 var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
                                                 if (itemBarcodeInfo != null)
                                                 {
+                                                    itemBarcodeInfo.N_URGENT_FLAG = offLineRecord.N_IS_URGENT;
+                                                    ContainerHelper.addCntrItemRel(rfid, itemBarcodeInfo);
                                                     barcodeList.Add(ext);
                                                 }
                                                 else
                                                 {
-                                                   // 璁板綍鏌ヨ鏉$爜淇℃伅寮傚父
+                                                    // 璁板綍鏌ヨ鏉$爜淇℃伅寮傚父
 
                                                 }
                                             }
@@ -134,7 +142,13 @@
                             EndLocGroup endLocGroup = null;
                             if (barcodeList.Count > 0) 
                             {
-                               endLocGroup = WMSHelper.getInStockEndLoc(barcodeList.Count);
+                               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)
@@ -197,9 +211,9 @@
                                                 wmsTask.N_B_STATE = 1;
                                                 WMSHelper.UpdateTaskState(wmsTask);
 
-                                                // 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
+                                                /*// 缁戝畾瀹瑰櫒鐗╂枡淇℃伅
                                                 var itemBarcodeInfo = WMSHelper.GetGreenTireInformation(ext.barcode);
-                                                WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);
+                                                WMSHelper.bindBarcodeItemInfo(wmsTask.S_CNTR_CODE, itemBarcodeInfo);*/
                                             }
                                         }
                                     }
@@ -207,8 +221,8 @@
                                 else
                                 {
                                     // 寮傚父鎵樼洏鎺掗櫎
-                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�-                                    endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                                    var middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.鎺掑嚭浣�+                                    endLoc = WMSHelper.getOnlneLoc(2);  // 2.绌烘墭涓婄嚎浣嶏紙鎺掑嚭鐨勬墭鐩橀兘鍑哄簱鍒扮┖鎵樹笂绾夸綅杩涜澶勭悊锛�                                     if (endLoc != null && middleLoc != null)
                                     {
                                         var wmsTask = new WMSTask()
@@ -281,6 +295,7 @@
 
         /// <summary>
         /// 璇荤爜璇锋眰
+        /// 鍦烘櫙锛�.
         /// </summary>
         public static ResponseResult readCodeRequest(NotifyDeviceSignalModel model) 
         {
@@ -289,62 +304,51 @@
             {
                 verifyResult = true
             };
-            var wmsTask = WMSHelper.GetWmsTask(model.taskNo);
-            if (wmsTask != null)
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+            if (wcsTask != null && wmsTask != null)
             {
-                if (wmsTask.S_TYPE != "寮傚父鎵樼洏鍑哄簱浠诲姟") 
+                Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);   // 鍘熺粓鐐�+                if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟")
                 {
-                    Location endLoc = null;
-                    Location middleLoc = null;
                     // 鍒ゆ柇rfid鏄惁寮傚父
-                    if (model.cntrNo != wmsTask.S_CNTR_CODE)
+                    if (model.cntrNo != wcsTask.S_CNTR_CODE)
                     {
-                        endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);
-                        var connectLoc = Settings.connectLocList.Where(a => a.roadway == endLoc.N_ROADWAY && a.type == 1).FirstOrDefault();
-                        middleLoc = LocationHelper.GetLoc(connectLoc.locCode);
-                        endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
+                        // 鏌ヨ鎺掑嚭鍙�+                        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);
 
-                        var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE);
-                        if (wcsTask != null)
-                        {
-                            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;
-                        response.data = readCodeFeedbackResponse;
                     }
-                    else 
+                }
+                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")
                     {
-                        var cntrItemRels = ContainerHelper.GetCntrItemRel(wmsTask.S_CNTR_CODE);
-                        if (cntrItemRels.Count > 0) 
-                        {
-                            if (cntrItemRels[0].S_ITEM_STATE != "OK") 
-                            {
-                                middleLoc = WMSHelper.getMinTaskMiddleLoc(1);  // 1.寮傚父鎺掑嚭浣�-                                endLoc = WMSHelper.getAbnormalAreaEmptyLoc(Settings.abnormalArea);
-                                wmsTask.S_END_LOC = endLoc.S_CODE;
-                                wmsTask.S_END_AREA = endLoc.S_AREA_CODE;
-                                WMSHelper.UpdateTaskEnd(wmsTask);
+                        // 璁$畻鎺掑嚭鍙�+                        endLoc = WMSHelper.getCallOutLoc(endLoc.N_ROW);
 
-                                var wcsTask = WCSHelper.GetTaskBySrcNo(wmsTask.S_CODE);
-                                if (wcsTask != null)
-                                {
-                                    wcsTask.S_END_LOC = middleLoc.S_CODE;
-                                    wcsTask.S_END_AREA = middleLoc.S_AREA_CODE;
-                                    WCSHelper.updateTaskEnd(wcsTask);
-                                }
+                        wcsTask.S_END_LOC = endLoc.S_CODE;
+                        wcsTask.S_END_AREA = endLoc.S_AREA_CODE;
+                        WCSHelper.updateTaskEnd(wcsTask);
 
-                                readCodeFeedbackResponse.verifyResult = false;
-                                readCodeFeedbackResponse.endLoc = middleLoc.S_CODE;
-                                response.data = readCodeFeedbackResponse;
-                            }
-                        }
+                        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;
                     }
                 }
             }
@@ -358,133 +362,226 @@
         }
 
         /// <summary>
-        /// 纭寲鏈哄懠鍙儦鑳庡嚭搴�+        /// 寮傚父鐢宠锛堝彇娑堜换鍔★級
         /// </summary>
         /// <param name="model"></param>
-        public static ResponseResult callItemOutStock(CallItemModel model)
+        /// <returns></returns>
+        public static ResponseResult anomalyRequest(NotifyDeviceSignalModel model) 
         {
             ResponseResult response = new ResponseResult();
-
-            //鍙傛暟鏍¢獙
-            if (model.locCodes.Count == 0) 
+            readCodeFeedbackResponse readCodeFeedbackResponse = new readCodeFeedbackResponse()
             {
-                string msg = $"纭寲鏈猴細{model.mcn}鍛煎彨鑳氳儙鍑哄簱锛屽弬鏁版牎楠屽け璐ワ紝缂哄皯璐т綅淇℃伅";
-                LogHelper.Info(msg, "WMS");
-                response.code = 1;
-                response.msg = msg;
-                return response;
-            }
-
-            // 1.涓�釜纭寲鏈哄伐浣嶅彧鑳藉悓鏃跺瓨鍦ㄤ竴涓鍦ㄦ墽琛屼腑鐨勪换鍔�-            WCSTask existTask = WCSHelper.GetTaskByEqNo(model.mcn);
-            if (existTask == null)
+                verifyResult = true
+            };
+            var wcsTask = WCSHelper.GetTask(model.taskNo);
+            var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
+            if (wcsTask != null && wmsTask != null)
             {
-                // 2.鏍规嵁褰撳墠鏃堕棿锛屽垽鏂彮娆℃棩鏈熷拰鐝
-                var currentTime = DateTime.Now;
-                var shift = getShift(currentTime.TimeOfDay);
-                var dateShift = DateTime.Now.ToString("dd/MM/yyyy");
-                TimeSpan shiftIII_Start = new TimeSpan(7, 00, 0); // 7:00:00
-                if (shift == "III" && currentTime.TimeOfDay < shiftIII_Start)
+                Location endLoc = LocationHelper.GetLoc(wmsTask.S_END_LOC);   // 鍘熺粓鐐�+                if (wcsTask.S_TYPE == "婊℃枡涓嬬嚎鍏ュ簱浠诲姟")
                 {
-                    dateShift = DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy");
+                    // 鏌ヨ鎺掑嚭鍙�+                    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);
                 }
-
-                // 3.鏍规嵁鐝鏃ユ湡+鐝+纭寲鏈哄伐浣嶅彿鏌ヨ鍛煎彨鐨勭墿鏂欑紪鐮併�棰勮鐢熶骇鏁伴噺
-                var productionShedule = WMSHelper.getProductionShedule(dateShift, model.mcn, shift);
-                if (productionShedule != null && productionShedule.QTY != 0)
+                else if (wcsTask.S_TYPE == "鑳氳儙鍙枡鍑哄簱浠诲姟")
                 {
-                    // 4.鏌ヨ銆愯儦鑳庡凡瀹屾垚鐨勬潯鐮佷腑闂磋〃銆戝苟璁$畻褰撳墠鐝鐨勫凡瀹屾垚鏁伴噺
-                    int finishNum = WMSHelper.getEmbryoFinishNum(dateShift, model.mcn, shift);
+                    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;
+        }
 
-                    if (productionShedule.QTY > finishNum)
+        /// <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)
                     {
-                        // 5.璁$畻锛�.宸烽亾涓嶆姤璀︺�2.鐗╂枡鐘舵�OK銆�.灏忎簬澶辨晥鏃堕棿 澶т簬绛変簬鐢熸晥鏃堕棿 4.鍔犳�鏂欏厛鍑恒�5.鍏堝叆鍏堝嚭锛堢敓浜ф椂闂达級锛夊嚭搴撶墿鏂欙紝鐢熸垚浠诲姟
-                        int locNum = model.locCodes.Count;
-                        var startLocData = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE,locNum);
-                        if (startLocData.startLocList != null && startLocData.startLocList.Count == locNum)
-                        {
-                            var startLocList = startLocData.startLocList;
-                            for (int i = 0; i < locNum; i++)
-                            {
-                                Location startLoc = startLocList[i];
-                                Location endLoc =  LocationHelper.GetLoc(model.locCodes[i]);
-                                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 = startLocData.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,
-                                            };
+                        itemCode = cntrItemRels[0].S_ITEM_CODE;
+                    }
 
-                                            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 
+                    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)
                         {
-                            string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�;
-                            LogHelper.Info(msg, "WMS");
-                            response.code = 1;
-                            response.msg = msg;
+                            endLoc = endLocGroup.endLocList[0];
+                            applyDest.endLoc = endLoc.S_CODE;
                         }
                     }
-                    else
+                    else if (model.applyType == 2)
                     {
-                        string msg = $"纭寲鏈�{model.mcn}鐨勫綋鍓嶇彮娆′换鍔″凡瀹屾垚锛屽仠姝㈠彨鏂�;
-                        LogHelper.Info(msg, "WMS");
-                        response.code = 1;
-                        response.msg = msg;
+                        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 
             {
-                string msg = $"纭寲鏈猴細{model.mcn}鐨勫瓨鍦ㄦ鍦ㄦ墽琛屼腑鐨勪换鍔★紝璇峰嬁閲嶅鍙枡";
-                LogHelper.Info(msg, "WMS");
                 response.code = 1;
-                response.msg = msg;
+                response.msg = $"浠诲姟:{model.taskNo}涓嶅瓨鍦�;
+            }
+            return response;
+        }
+
+        public class ApplyDest 
+        {
+            public string endLoc { get; set; }
+        }
+
+        /// <summary>
+        /// 4.纭寲鏈哄懠鍙儦鑳庡嚭搴�+        /// 閫昏緫锛�+        /// 
+        /// </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 shift = ApiHelper.getShift(DateTime.Now.TimeOfDay);
+                        string planStartDate = shift == "III" ? DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") : DateTime.Now.ToString("yyyy-MM-dd");
+                        var productionShedule = WMSHelper.getProductionShedule(mcn, shift , planStartDate);
+                        if (productionShedule.SCHSTATUS == 1 && productionShedule.N_4M == 0) 
+                        {
+                            var startLoc = WMSHelper.getOutStockStartLoc(productionShedule.ITEMCODE,prevLoc);
+                            if (startLoc != null)
+                            {
+                                prevLoc = startLoc;
+                                outLocDic.Add(mcn, startLoc);
+                            }
+                            else 
+                            {
+                                LogHelper.Info($"纭寲鏈哄彨鏂欙紝鏈煡璇㈠埌寮�璐т綅锛佺墿鏂欑紪鐮侊細{productionShedule.ITEMCODE}", "WMS");
+                            }
+                        }
+                    }
+                }
+
+                // 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;
         }
@@ -494,98 +591,33 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        public static ResponseResult emptyTrayInStock(EmptyTrayInStockModel model) 
+        public static ResponseResult emptyTrayInStock(NotifyDeviceSignalModel model) 
         {
             ResponseResult response = new ResponseResult();
-            Location startLoc = LocationHelper.GetLoc(model.startLoc);
-            var endLocGroup = WMSHelper.getInStockEndLoc(1);
-            if (endLocGroup.endLocList.Count == 1)
-            {
-                Location endLoc = endLocGroup.endLocList[0];
-                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 = endLoc.S_CODE,
-                        S_END_AREA = endLoc.S_AREA_CODE,
-                        S_SCHEDULE_TYPE = "WCS",
-                        N_PRIORITY = 1,
-                        T_START_TIME = DateTime.Now,
-                    };
+            Location startLoc = LocationHelper.GetLoc(model.loc);
 
-                    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
+            var cntrCodeList = model.loc.Split(',').ToList();
+            if (cntrCodeList.Count > 0) 
             {
-                response.code = 1;
-                response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
-            }
-            return response;
-        }
-
-        /// <summary>
-        /// 鍛煎彨绌烘墭鍑哄簱
-        /// </summary>
-        /// <returns></returns>
-        public static ResponseResult callEmptyTrayOutStock(CallEmptyTrayOutStockModel model) 
-        {
-            ResponseResult responseResult = new ResponseResult();
-            Location endLoc = LocationHelper.GetLoc(model.endLoc);
-            var startLocData = WMSHelper.getOutStockStartLoc(null, 1);
-            if (startLocData.startLocList != null && startLocData.startLocList.Count == 1)
-            {
-                Location startLoc = startLocData.startLocList[0];
-                if (endLoc != null)
+                var endLocGroup = WMSHelper.getInStockEndLoc(cntrCodeList.Count, null);
+                if (endLocGroup.endLocList.Count > 0)
                 {
-                    var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
-                    if (locCntrRels != null && locCntrRels.Count > 0)
+                    foreach (var endLoc in endLocGroup.endLocList)
                     {
                         var wmsTask = new WMSTask()
                         {
-                            S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
+                            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_TYPE = "绌烘墭鍏ュ簱浠诲姟",
                             S_OP_DEF_CODE = model.reqId,
-                            S_OP_DEF_NAME = "鍛煎彨绌烘墭鍑哄簱",
+                            S_OP_DEF_NAME = "绌烘墭鐩樺洖搴撲换鍔�,
                             N_PRIORITY = 1,
                             T_START_TIME = DateTime.Now,
-                            S_GROUP_NO = startLocData.groupNo,
+                            S_GROUP_NO = endLocGroup.groupNo,
                         };
                         if (WMSHelper.CreateWmsTask(wmsTask))
                         {
@@ -619,13 +651,92 @@
                         }
                     }
                 }
+                else
+                {
+                    response.code = 1;
+                    response.msg = "搴撳尯娌℃湁鍙叆鐨勭┖璐т綅";
+                }
             }
-            else
+            
+            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++) 
             {
-                string msg = $"搴撳唴娌℃湁婊¤冻鏉′欢鐨勭墿鏂�;
-                LogHelper.Info(msg, "WMS");
+                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 = msg;
+                responseResult.msg = "绔嬪簱鍐呯┖鎵樼洏鏁伴噺涓嶈冻";
             }
             return responseResult;
         }
@@ -634,14 +745,14 @@
         /// 鑳氳儙鎶芥鍑哄簱
         /// </summary>
         /// <returns></returns>
-        public static ResponseResult embryoCheckOutStock(EmbryoCheckOutStockModel model) 
+        public static SimpleResult embryoCheckOutStock(EmbryoCheckOutStockModel model) 
         {
-            ResponseResult responseResult = new ResponseResult();
+            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 && a.type == 1).First();
+                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)
@@ -692,7 +803,7 @@
                     }
                 }
             }
-            return responseResult;
+            return result;
         }
 
         /// <summary>
@@ -700,11 +811,11 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        public static ResponseResult anomalyTrayInStock(AnomalyTrayInStockModel model) 
+        public static ResponseResult anomalyTrayInStock(NotifyDeviceSignalModel model) 
         {
             ResponseResult responseResult = new ResponseResult();
-            LocationHelper.UnBindingLoc(model.startLoc, new List<string>() { model.trayCode });
-            ContainerHelper.deleteCntrItemRelByCntr(model.trayCode);
+            LocationHelper.UnBindingLoc(model.loc, new List<string>() { model.cntrNo });
+            ContainerHelper.deleteCntrItemRelByCntr(model.cntrNo);
             return responseResult;
         }
 
@@ -766,17 +877,178 @@
 
                         if (model.status == 2 || model.status == 8)
                         {
-                            if (mst != null)
+                            if (mst != null && mst.N_B_STATE != 2)
                             {
-                                if (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="models"></param>
+        /// <returns></returns>
+        public static ReturnResult synMatlInformation(List<BarcodeInfoModel> models)
+        {
+            ReturnResult responseResult = new ReturnResult();
+            List<GreenTireInformation> greenTireInfoList = new List<GreenTireInformation>();
+            CultureInfo enGB = new CultureInfo("en-GB");
+            foreach (BarcodeInfoModel matl in models)
+            {
+                GreenTireInformation greenTireInfo = new GreenTireInformation()
+                {
+                    ITEMCODE = matl.itemcode,
+                    BARCODE = matl.barcode,
+                    MCN = matl.mcn,
+                    TXNDATE = matl.txndate,
+                    DATE_SHIFT = matl.date_shift,
+                    QTY = matl.qty,
+                    JDGE = matl.jdge,
+                    OVERAGE = matl.overage,
+                    MINHOUR = matl.minhour,
+                    INNER_DIAMETER = matl.inner_diameter,
+                    LAST_MODIFY_TIME = DateTime.Parse(matl.last_modify_time)
+                };
+                greenTireInfoList.Add(greenTireInfo);
+            }
+
+            var bo = WMSHelper.batchAddItemBarcodeInfo(greenTireInfoList);
+            if (!bo)
+            {
+                responseResult.ResultCode = 1;
+                responseResult.ResultMsg = "鍚屾鎴愬瀷鑳氳儙鐗╂枡淇℃伅澶辫触";
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鍚屾纭寲宸ュ崟琛�+        /// </summary>
+        /// <param name="models"></param>
+        /// <returns></returns>
+        public static ReturnResult synProductionShedule(List<ProductionSheduleModel> models)
+        {
+            ReturnResult responseResult = new ReturnResult();
+            List<ProductionShedule> productionShedules = new List<ProductionShedule>();
+            CultureInfo enGB = new CultureInfo("en-GB");
+            foreach (ProductionSheduleModel matl in models)
+            {
+                ProductionShedule productionShedule = new ProductionShedule()
+                {
+                    CUR_MCN = matl.cur_mcn,
+                    SCHSTATUS = matl.schstatus,
+                    N_4M = matl.n_4m,
+                    CUR_PLANSTARTDATE = matl.cur_planstartdate,
+                    CUR_SHIFT = matl.cur_shift,
+                    ITEMCODE = matl.itemcode,
+                    LAST_MODIFY_TIME = DateTime.Parse(matl.last_modify_time)
+                };
+                productionShedules.Add(productionShedule);
+            }
+
+            var bo = WMSHelper.batchAddProductionInfo(productionShedules);
+            if (!bo)
+            {
+                responseResult.ResultCode = 1;
+                responseResult.ResultMsg = "鍚屾纭寲宸ュ崟琛ㄥけ璐�;
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鍚屾鏉$爜鐘舵�淇℃伅
+        /// </summary>
+        /// <param name="updateMatlStatuses"></param>
+        /// <returns></returns>
+        public static ReturnResult synBarcodeStatus(List<UpdateMatlStatus> updateMatlStatuses)
+        {
+            ReturnResult responseResult = new ReturnResult();
+            List<iWMS_semi_bld_BCstatus> list = new List<iWMS_semi_bld_BCstatus>();
+            if (updateMatlStatuses.Count > 0)
+            {
+                foreach (var item in updateMatlStatuses)
+                {
+                    iWMS_semi_bld_BCstatus bCstatus = new iWMS_semi_bld_BCstatus()
+                    {
+                        S_BC_ENTRIED = item.bc_entried,
+                        S_MCNGRP = item.mcngrp,
+                        S_JDGE = item.jdge,
+                        LAST_MODIFY_TIME = DateTime.Parse(item.last_modify_time)
+                    };
+                    list.Add(bCstatus);
+                }
+
+                var bo = WMSHelper.synBarcodeStatus(list);
+                if (!bo)
+                {
+                    responseResult.ResultCode = 1;
+                    responseResult.ResultMsg = "鍚屾鏉$爜鐘舵�淇℃伅澶辫触";
+                }
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鍚屾鏉$爜鐘舵�淇℃伅
+        /// </summary>
+        /// <param name="updateMatlStatuses"></param>
+        /// <returns></returns>
+        public static ReturnResult synSampleStatus(List<UpdateMatlStatus> updateMatlStatuses)
+        {
+            ReturnResult responseResult = new ReturnResult();
+            List<iWMS_semi_bld_BCsample> list = new List<iWMS_semi_bld_BCsample>();
+            if (updateMatlStatuses.Count > 0)
+            {
+                foreach (var item in updateMatlStatuses)
+                {
+                    iWMS_semi_bld_BCsample bCstatus = new iWMS_semi_bld_BCsample()
+                    {
+                        S_BC_ENTRIED = item.bc_entried,
+                        S_MCNGRP = item.mcngrp,
+                        S_JDGE = item.jdge,
+                        LAST_MODIFY_TIME = DateTime.Parse(item.last_modify_time)
+                    };
+                    list.Add(bCstatus);
+                }
+
+                var bo = WMSHelper.synSamplingStatus(list);
+                if (!bo)
+                {
+                    responseResult.ResultCode = 1;
+                    responseResult.ResultMsg = "鍚屾鏉$爜鐘舵�淇℃伅澶辫触";
+                }
+            }
+            return responseResult;
+        }
+
+        /// <summary>
+        /// 鏌ヨ涓婁竴娆$殑鏁版嵁鍚屾鏃堕棿
+        /// </summary>
+        /// <param name="tableType"></param>
+        /// <returns></returns>
+        public static ReturnResult findDataLastSynTime(int tableType)
+        {
+            ReturnResult responseResult = new ReturnResult();
+            var synDataTime = WMSHelper.getDataLastSynTime(tableType);
+            responseResult.data = synDataTime;
             return responseResult;
         }
 
@@ -808,6 +1080,16 @@
                 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
@@ -947,10 +1229,9 @@
 
         public class OffLineModel
         {
-            public string rfid { get; set; } // 鎵樼洏鍙�-            public string deviceNo { get; set; } // 鏈哄彴鍙�             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; }

--
Gitblit v1.9.1