From 968d603a08117e7e6707ffe07c6da9c325e36c08 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期一, 12 五月 2025 17:04:17 +0800
Subject: [PATCH] 完成并测试抽检出库的逻辑,修复相关问题

---
 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ee67d919-8fb8-437c-9ad5-1a7b40e37bbd.vsidx |    0 
 Models/TN_Outbound_Order.cs                                                         |   24 +
 Program.cs                                                                          |    9 
 Models/BaseModel.cs                                                                 |    3 
 Models/TN_Task.cs                                                                   |    8 
 Controllers/DebugController.cs                                                      |   38 --
 config/config.json                                                                  |    2 
 Models/TN_Check_Order.cs                                                            |    7 
 ServiceCore/OutboundCore.cs                                                         |  191 ++++-------
 HH.WCS.Mobox3.DSZSH.csproj                                                          |   10 
 ServiceCore/TaskCore.cs                                                             |   94 +++++
 Controllers/MoboxController.cs                                                      |    5 
 Helpers/Model/TaskHelper.cs                                                         |  103 ------
 Models/TN_Check_Detail.cs                                                           |   26 +
 Helpers/LogHelper.cs                                                                |    2 
 Consts/SpotStateCode.cs                                                             |   25 +
 /dev/null                                                                           |   27 -
 Models/TN_Outbound_Detail.cs                                                        |   14 
 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b9ecb874-f2d6-4f8b-b5d4-8934da36989f.vsidx |    0 
 Models/DebugModel.cs                                                                |    3 
 Dtos/Request/AgvRequest.cs                                                          |    2 
 Services/DebugService.cs                                                            |   31 +
 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/dd1ab403-8a29-4f20-93da-995fa81d8fa6.vsidx |    0 
 Services/AgvService.cs                                                              |   23 +
 ServiceCore/CheckCore.cs                                                            |  123 +++++--
 Services/MoboxService.cs                                                            |   92 +++--
 Models/TN_CG_Detail.cs                                                              |   11 
 Dtos/Request/MoboxRequest.cs                                                        |   33 +-
 .vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/142d45e0-bdbd-4ea2-8872-a4527bb762c2.vsidx |    0 
 29 files changed, 467 insertions(+), 439 deletions(-)

diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/142d45e0-bdbd-4ea2-8872-a4527bb762c2.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/142d45e0-bdbd-4ea2-8872-a4527bb762c2.vsidx
new file mode 100644
index 0000000..1b57b66
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/142d45e0-bdbd-4ea2-8872-a4527bb762c2.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/6f64c2b7-09d5-4b3c-9a79-72745b90527c.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/6f64c2b7-09d5-4b3c-9a79-72745b90527c.vsidx
deleted file mode 100644
index a81c146..0000000
--- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/6f64c2b7-09d5-4b3c-9a79-72745b90527c.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/99192c56-0abe-4e3f-b3f8-5389c9d993a4.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/99192c56-0abe-4e3f-b3f8-5389c9d993a4.vsidx
deleted file mode 100644
index 60b568e..0000000
--- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/99192c56-0abe-4e3f-b3f8-5389c9d993a4.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b73147f2-b5c8-4121-b1aa-5fa60c01a097.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b73147f2-b5c8-4121-b1aa-5fa60c01a097.vsidx
deleted file mode 100644
index 371ed53..0000000
--- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b73147f2-b5c8-4121-b1aa-5fa60c01a097.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b9ecb874-f2d6-4f8b-b5d4-8934da36989f.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b9ecb874-f2d6-4f8b-b5d4-8934da36989f.vsidx
new file mode 100644
index 0000000..02db22c
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/b9ecb874-f2d6-4f8b-b5d4-8934da36989f.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/bed55563-1884-46d9-8f7f-fb19ae6beec5.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/bed55563-1884-46d9-8f7f-fb19ae6beec5.vsidx
deleted file mode 100644
index c8c5a9c..0000000
--- a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/bed55563-1884-46d9-8f7f-fb19ae6beec5.vsidx
+++ /dev/null
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/dd1ab403-8a29-4f20-93da-995fa81d8fa6.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/dd1ab403-8a29-4f20-93da-995fa81d8fa6.vsidx
new file mode 100644
index 0000000..5963178
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/dd1ab403-8a29-4f20-93da-995fa81d8fa6.vsidx
Binary files differ
diff --git a/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ee67d919-8fb8-437c-9ad5-1a7b40e37bbd.vsidx b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ee67d919-8fb8-437c-9ad5-1a7b40e37bbd.vsidx
new file mode 100644
index 0000000..0808b3b
--- /dev/null
+++ b/.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/ee67d919-8fb8-437c-9ad5-1a7b40e37bbd.vsidx
Binary files differ
diff --git a/Consts/SpotStateCode.cs b/Consts/SpotStateCode.cs
new file mode 100644
index 0000000..acbeaad
--- /dev/null
+++ b/Consts/SpotStateCode.cs
@@ -0,0 +1,25 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.WCS.Mobox3.DSZSH.Consts {
+    /// <summary>
+    /// 鍗曟嵁浠诲姟鐘舵�
+    /// </summary>
+    /// <remarks>
+    /// N_B_STATE<br/>
+    /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
+    /// </remarks>
+    public class SpotStateCode {
+        public const int 寰呮墽琛�= 0;
+        public const int 宸叉墽琛屽緟鐢熸垚浠诲姟 = 1;
+        /// <summary>
+        /// 瀵逛簬Order锛氭墍鏈塂etail閮藉垱寤轰簡浠诲姟锛屾墠杩涘叆姝ょ姸鎬�br/>
+        /// 瀵逛簬Detail锛氬彧瑕佸垱寤轰簡浠诲姟锛屽氨杩涘叆姝ょ姸鎬�+        /// </summary>
+        public const int 浠诲姟鎵ц涓�= 2;
+        public const int 浠诲姟鎵ц瀹屾垚 = 3;
+    }
+}
diff --git a/Controllers/DebugController.cs b/Controllers/DebugController.cs
index 174d012..04585b2 100644
--- a/Controllers/DebugController.cs
+++ b/Controllers/DebugController.cs
@@ -35,41 +35,9 @@
         /// </summary>
         /// <returns></returns>
         [HttpPost]
-        [Route("BuildDB")]
-        public string BuildDB()
-        {
-            try
-            {
-                var db = DbHelper.GetDbClient();
-                //db.CodeFirst.InitTables<WCSTask>(); //鎵�湁搴撻兘鏀寔     
-                //db.CodeFirst.InitTables<Zone>();
-                //db.CodeFirst.InitTables<Area>();
-
-                //db.CodeFirst.InitTables<Location>();
-                //db.CodeFirst.InitTables<LocCntrRel>();
-                //db.CodeFirst.InitTables<Container>();
-                //db.CodeFirst.InitTables<SYSHelper.OI_SYS_MAXID>();
-
-                db.CodeFirst.InitTables<TN_CG_Detail>();
-                db.CodeFirst.InitTables<TN_WorkOrder>();
-                db.CodeFirst.InitTables<TN_CAR_IN>();
-
-                db.CodeFirst.InitTables<TN_Task_Action>();
-                db.CodeFirst.InitTables<TN_Task>();
-                db.CodeFirst.InitTables<TN_Location>();
-                db.CodeFirst.InitTables<TN_Loc_Container>();
-
-                db.CodeFirst.InitTables<TN_Outbound_Order>();
-                db.CodeFirst.InitTables<TN_Outbound_Detail>();
-                db.CodeFirst.InitTables<TN_Outbound_Task>();
-            }
-            catch (Exception ex)
-            {
-                LogHelper.Info($"鍙戠敓浜嗗紓甯�);
-                return "鍒濆鍖栨暟鎹簱閿欒" + ex.Message;
-            }
-            //return res ? "鎴愬姛" : "澶辫触";
-            return "鎴愬姛";
+        [Route("CreateDatabase")]
+        public string CreateDatabase() {
+            return DebugService.CreateDatabase();
         }
 
         [HttpPost]
diff --git a/Controllers/MoboxController.cs b/Controllers/MoboxController.cs
index 1af0231..e563422 100644
--- a/Controllers/MoboxController.cs
+++ b/Controllers/MoboxController.cs
@@ -120,11 +120,12 @@
         }
 
         /// <summary>
-        /// 鍒涘缓鎶芥鍗曪紙鍙兘鐢盤DA/WMS鑷瀹屾垚锛�+        /// 鍒涘缓鎶芥鍗�         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        public SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) { 
+        public SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) {
+            
             return MoboxService.CreateCheckOrder(model);
         }
 
diff --git a/Dtos/Request/AgvRequest.cs b/Dtos/Request/AgvRequest.cs
index 6227225..f914a22 100644
--- a/Dtos/Request/AgvRequest.cs
+++ b/Dtos/Request/AgvRequest.cs
@@ -33,7 +33,7 @@
             /// 璇锋眰鐮�             /// </summary>
             public string apply_code { get; set; }
-            public string task_no { set; get; }
+            public string TaskNo { set; get; }
         }
     }
 }
diff --git a/Dtos/Request/MoboxRequest.cs b/Dtos/Request/MoboxRequest.cs
index 8d35242..b1b570c 100644
--- a/Dtos/Request/MoboxRequest.cs
+++ b/Dtos/Request/MoboxRequest.cs
@@ -1,10 +1,4 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using Newtonsoft.Json;
+锘縰sing Newtonsoft.Json;
 
 namespace HH.WCS.Mobox3.DSZSH.Dtos.Request {
     public class MoboxRequest {
@@ -95,10 +89,14 @@
         public class EmptyOnlineGoodpackInfo : StartCntEndInfo { }
 
         public class CreateCheckOrderInfo {
+            public string No { get; set; }
             public string CgId { get; set; }
             public string ItemName { get; set; }
             public string BatchNo { get; set; }
-            public string Qty { get; set; }
+            /// <summary>
+            /// 鎶芥鏁伴噺
+            /// </summary>
+            public int Count { get; set; }
             public string EndArea { get; set; }
         }
         #endregion
@@ -113,20 +111,21 @@
             /// </summary>
             public string No { get; set; }
 
-            public bool Forced { get; set; }
-            public List<FinishedOutboundDetailInfo> OutboundDetails { get; set; }
-        }
-
-        public class FinishedOutboundDetailInfo {
-            public string CgCode { get; set; }
+            public string CgId { get; set; }
             public string CgName { get; set; }
-            public string PatchNo { get; set; }
+            public string BatchNo { get; set; }
             public string CntrType { get; set; }
-            public int Qty { get; set; }
+            public int Count { get; set; }
 
             public string EndArea { get; set; }
-            //public bool Forced { get; set; }
+
+            /// <summary>
+            /// 鏄惁寮哄埗鍑哄簱
+            /// </summary>
+            public bool Forced { get; set; }
         }
+
+        
         #endregion
 
         //------------------------------------------------------------------------------
diff --git a/HH.WCS.Mobox3.DSZSH.csproj b/HH.WCS.Mobox3.DSZSH.csproj
index f1bfe8c..ec63747 100644
--- a/HH.WCS.Mobox3.DSZSH.csproj
+++ b/HH.WCS.Mobox3.DSZSH.csproj
@@ -222,12 +222,14 @@
     <Compile Include="Consts\AreaName.cs" />
     <Compile Include="Consts\LockStateCode.cs" />
     <Compile Include="Consts\LockStateName.cs" />
+    <Compile Include="Consts\SpotStateCode.cs" />
     <Compile Include="Consts\TaskName.cs" />
     <Compile Include="Controllers\DebugController.cs" />
     <Compile Include="Controllers\ErpController.cs" />
     <Compile Include="Controllers\MoboxController.cs" />
     <Compile Include="Controllers\AgvController.cs" />
     <Compile Include="AppStart\SwaggerControllerDescProvider.cs" />
+    <Compile Include="Models\DebugModel.cs" />
     <Compile Include="Dtos\Request\DebugRequest.cs" />
     <Compile Include="Dtos\Response\BaseResponse.cs" />
     <Compile Include="Dtos\Response\DebugResponse.cs" />
@@ -236,13 +238,12 @@
     <Compile Include="Helpers\PathHelper.cs" />
     <Compile Include="Helpers\ResultHelper.cs" />
     <Compile Include="Helpers\DbHelper.cs" />
-    <Compile Include="Models\DebugModel.cs" />
+    <Compile Include="Models\TN_Check_Detail.cs" />
     <Compile Include="Models\TN_Check_Order.cs" />
     <Compile Include="Models\TN_Inbound_Order.cs" />
     <Compile Include="Models\TN_Order_Task.cs" />
     <Compile Include="Models\TN_Outbound_Order.cs" />
     <Compile Include="Models\TN_Outbound_Detail.cs" />
-    <Compile Include="Models\TN_Outbound_Task.cs" />
     <Compile Include="ServiceCore\CheckCore.cs" />
     <Compile Include="ServiceCore\OutboundCore.cs" />
     <Compile Include="Services\DebugService.cs" />
@@ -302,7 +303,6 @@
   </ItemGroup>
   <ItemGroup>
     <None Include="debug\outbound_order.csv" />
-    <Content Include="readme.dev.md" />
     <Content Include="readme.md" />
     <EmbeddedResource Include="swagger.js">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -320,6 +320,8 @@
       <Install>false</Install>
     </BootstrapperPackage>
   </ItemGroup>
-  <ItemGroup />
+  <ItemGroup>
+    <Folder Include="Dtos\Internal\" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/Helpers/LogHelper.cs b/Helpers/LogHelper.cs
index 61b8534..fbf1233 100644
--- a/Helpers/LogHelper.cs
+++ b/Helpers/LogHelper.cs
@@ -74,7 +74,7 @@
 
         #region 鑷畾涔夋柟娉�         public static void InfoEx(Exception ex) {
-            Info($"鍙戠敓浜嗗紓甯革細{ex.Message}");
+            Info($"寮傚父锛歿ex.Message}");
         } 
 
         public static void InfoApi(string taskType, object model) {
diff --git a/Helpers/Model/TaskHelper.cs b/Helpers/Model/TaskHelper.cs
index ec1c5d5..f9cdfad 100644
--- a/Helpers/Model/TaskHelper.cs
+++ b/Helpers/Model/TaskHelper.cs
@@ -56,6 +56,7 @@
                 N_SCHEDULE_TYPE = 1,
                 N_B_STATE = 0,
                 S_CNTR_CODE = cnt,
+                T_START_TIME = DateTime.Now,
             };
 
             var db = DbHelper.GetDbClient();
@@ -238,103 +239,7 @@
         private static object locLocker = new object();
 
 
-        /// <summary>
-        /// 鎺ㄩ�浠诲姟
-        /// </summary>
-        /// <param name="mst"></param>
-        internal static bool SendTask(TN_Task mst) 
-        {
-            var result = false;
-            var start = "0"; var end = "0";
-            var taskType = mst.S_TYPE.Trim();
-            if (mst.N_B_STATE == 0) {
-                if (mst.N_SCHEDULE_TYPE == 1)//閫氳繃NDC锛宧osttoagv璋冨害璁惧
-                {
-                    start = LocationHelper.GetAgvSite(mst.S_START_LOC);
-                    end = LocationHelper.GetAgvSite(mst.S_END_LOC);
-
-                    if (mst.S_TYPE == "绌烘墭涓嬬嚎鍫嗗彔")
-                    {
-                        end = LocationHelper.GetAgvSite(mst.S_END_LOC,true);
-                    }
-
-                    LogHelper.Info($"NDC鎺ㄩ�浠诲姟 {mst.S_CODE};" + "start=" + start + "end= " + end);
-                    var startLoc = LocationHelper.GetLoc(mst.S_START_LOC);
-                    var endLoc = LocationHelper.GetLoc(mst.S_END_LOC);
-                    var dic = new List<param>();
-                    dic.Add(new param() { name = "IKey", value = "IKey" });
-                    dic.Add(new param() { name = "From", value = start.ToString() });
-                    dic.Add(new param() { name = "To", value = end.ToString() });
-                    dic.Add(new param() { name = "FUNC", value = startLoc.N_LAYER.ToString() });
-
-                    dic.Add(new param() { name = "Ctype", value = "0" });
-
-                    
-                    if (mst.S_TYPE == "浣欐枡涓嬬嚎鍏ュ簱" || mst.S_TYPE == "浜哄伐鎷嗙洏鍏ュ簱")
-                    {
-                        dic.Add(new param() { name = "DATA", value = "1024" });
-                    }
-                    else
-                    {
-                        dic.Add(new param() { name = "DATA", value = "0" });
-                    }
-
-                    var res = NDCApi.AddOrderNew(1, 1, mst.S_CODE, dic);//娣诲姞鏂板懡浠�-                    if (res != null && (res.err_code == 0 || res.err_code == 50009))
-                    {
-                        //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
-                        mst.N_B_STATE = 1;
-                        mst.S_B_STATE = TN_Task.GetStateStr(1);
-                        UpdateStatus(mst);//鏇存柊浠诲姟鐘舵�
-                        result = true;
-                        LogHelper.Info($"NDC鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}");
-                    }
-                    else
-                    {
-                        LogHelper.Info($"NDC鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};Res:" + JsonConvert.SerializeObject(res));
-                    }
-                }
-                else if (mst.N_SCHEDULE_TYPE == 5)//閫氳繃鏉ゥ璋冨害璁惧 
-                {
-                    //璋冪涓夋柟鎺ュ彛
-                    var model = new HanAo.TaskInfoModel
-                    {
-                        requestPk = mst.S_CODE,
-                        frmPos = mst.S_START_LOC,
-                        toPos = mst.S_END_LOC,
-                        trkType = mst.S_OP_NAME == "鍏ュ簱" ? "1" : "2",
-                        contNo = mst.S_CNTR_CODE
-                    };
-                    if (HanAo.CreateOrder(model)) {
-                        mst.N_B_STATE = 1;
-                        UpdateStatus(mst);
-                        LogHelper.Info($"鏉ゥ鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE};" + "start=" + model.frmPos + "end= " + model.toPos);
-                    }
-                    else
-                    {
-                        LogHelper.Info($"鏉ゥ鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};" + JsonConvert.SerializeObject(model));
-                    }
-                }
-                else if (mst.N_SCHEDULE_TYPE == 3) //閫氳繃鍥借嚜璋冨害璁惧
-                {
-                    var code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = mst.S_START_LOC, dst = mst.S_END_LOC }), "p2p");
-                    if (code > 0) {
-                        //鏇存柊浠诲姟鐘舵�
-                        mst.N_B_STATE = 1;
-                        mst.S_EQ_TASK_CODE = code.ToString();
-                        UpdateStatus(mst);
-                        UpdateEQNo(mst);
-                        LogHelper.Info($"鍥借嚜鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE};" + "start=" + mst.S_START_LOC + "end= " + mst.S_END_LOC);
-                    }
-                    else
-                    {
-                        LogHelper.Info($"鍥借嚜鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};" + JsonConvert.SerializeObject(mst));
-                    }
-                }
-
-            }
-            return result;
-        }
+        
 
 
         internal static bool UpdateStatus(TN_Task task, string status) {
@@ -344,6 +249,8 @@
             res = db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand() > 0;
             return res;
         }
+
+
         internal static bool UpdateStatus(TN_Task task) {
             var res = false;
             var db = DbHelper.GetDbClient();
@@ -353,7 +260,7 @@
             return res;
         }
 
-        internal static bool UpdateEQNo(TN_Task task) {
+        internal static bool UpdateEqNo(TN_Task task) {
             var res = false;
             var db = DbHelper.GetDbClient();
             task.T_MODIFY = DateTime.Now;
diff --git a/Models/BaseModel.cs b/Models/BaseModel.cs
index c76988f..54f31f6 100644
--- a/Models/BaseModel.cs
+++ b/Models/BaseModel.cs
@@ -37,9 +37,6 @@
         /// <summary>
         /// 鏁版嵁鐘舵�锛氱紪杈戙�瀹氱増
         /// </summary>
-        /// <remarks>
-        /// 濡傛灉鍏蜂綋琛ㄥ崟涓渶瑕佹寚鏄庣姸鎬侊紝鐢�S_B_STATE 浠f浛
-        /// </remarks>
         public string S_STATE { get; set; } = "缂栬緫";
     }
 }
diff --git a/Models/DebugModel.cs b/Models/DebugModel.cs
index 9573e0b..b0b7174 100644
--- a/Models/DebugModel.cs
+++ b/Models/DebugModel.cs
@@ -5,9 +5,6 @@
 using System.Threading.Tasks;
 
 namespace HH.WCS.Mobox3.DSZSH.Models {
-    /// <summary>
-    /// Debug浣跨敤鐨勬暟鎹ā鍨�-    /// </summary>
     public class DebugModel {
         public class LocCntrCg {
             public string LocCode { get; set; }
diff --git a/Models/TN_CG_Detail.cs b/Models/TN_CG_Detail.cs
index 033b46e..5d4b332 100644
--- a/Models/TN_CG_Detail.cs
+++ b/Models/TN_CG_Detail.cs
@@ -4,9 +4,6 @@
     /// <summary>
     /// 銆愭鏋躲�鐗╂枡-瀹瑰櫒 鍏崇郴琛�     /// </summary>
-    /// <remarks>
-    /// CG = Cargo Goods 璐х墿鍟嗗搧
-    /// </remarks>
     [SugarTable("TN_CG_Detail")]
     public class TN_CG_Detail : BaseModel {
         /// <summary>
@@ -27,17 +24,11 @@
         /// <summary>
         /// 璐у搧鐘舵�锛�鍚堟牸 1寰呮 2涓嶅悎鏍�3姝e湪妫�獙锛涗笅绾垮嵆寰呮
         /// </summary>
-        /// <remarks>
-        /// 绠楁硶锛氭暟瀛楄秺灏忚秺浼樺厛锛屽悎鏍硷紴寰呮锛炰笉鍚堟牸锛炴鍦ㄦ楠岋紙鐩存帴鍚﹀畾锛�-        /// </remarks>
         public string S_ITEM_STATE { get; set; } = "寰呮";
 
         /// <summary>
-        /// 璐у搧鐘舵�_瀛楀吀锛�鍚堟牸 1寰呮 2涓嶅悎鏍�3姝e湪妫�獙锛涗笅绾垮嵆寰呮
+        /// 璐у搧鐘舵�锛�鍚堟牸 1寰呮 2涓嶅悎鏍�3姝e湪妫�獙锛涗笅绾垮嵆寰呮
         /// </summary>
-        /// <remarks>
-        /// 绠楁硶锛氭暟瀛楄秺灏忚秺浼樺厛锛屽悎鏍硷紴寰呮锛炰笉鍚堟牸锛炴鍦ㄦ楠岋紙鐩存帴鍚﹀畾锛�-        /// </remarks>
         public int N_ITEM_STATE { get; set; } = 1;
 
         /// <summary>
diff --git a/Models/TN_Check_Detail.cs b/Models/TN_Check_Detail.cs
new file mode 100644
index 0000000..16e29d7
--- /dev/null
+++ b/Models/TN_Check_Detail.cs
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using SqlSugar;
+
+namespace HH.WCS.Mobox3.DSZSH.Models {
+    /// <summary>
+    /// 鎶芥鍗曟槑缁�+    /// </summary>
+    [SugarTable("TN_Check_Detail")]
+    public class TN_Check_Detail : BaseModel {
+        public string S_NO { get; set; }
+
+        public string S_CG_ID { get; set; }
+        public string S_ITEM_NAME { get; set; }
+        public string S_BATCH_NO { get; set; }
+        public string S_END_AREA { get; set; }
+        /// <summary>
+        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
+        /// </summary>
+        public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛�+    }
+}
diff --git a/Models/TN_Check_Order.cs b/Models/TN_Check_Order.cs
index 00db05c..983aff1 100644
--- a/Models/TN_Check_Order.cs
+++ b/Models/TN_Check_Order.cs
@@ -12,14 +12,15 @@
     /// </summary>
     [SugarTable("TN_Check_Order")]
     public class TN_Check_Order : BaseModel {
+        public string S_NO { get; set; }
         public string S_CG_ID { get; set; }
         public string S_ITEM_NAME { get; set; }
         public string S_BATCH_NO { get; set; }
-        public int N_QTY { get; set; }
+        public int N_COUNT { get; set; }
         public string S_END_AREA { get; set; }
         /// <summary>
-        /// 鎶芥鍗曠姸鎬侊細0鏈墽琛�1鎵ц涓�2瀹屾垚
+        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
         /// </summary>
-        public int N_B_STATE { get; set; } = 0;
+        public int N_B_STATE { get; set; } = 0; // 鍒涘缓鍚庨渶瑕佺‘璁ゆ墽琛�     }
 }
diff --git a/Models/TN_Outbound_Detail.cs b/Models/TN_Outbound_Detail.cs
index 794282c..a1a2a2d 100644
--- a/Models/TN_Outbound_Detail.cs
+++ b/Models/TN_Outbound_Detail.cs
@@ -11,15 +11,10 @@
         /// </summary>
         public string S_NO { get; set; }
 
-        ///// <summary>
-        ///// 琛屽彿
-        ///// </summary>
-        //public int N_ROW_NO { get; set; }
-
         /// <summary>
-        /// 涓氬姟鐘舵�锛�绛夊緟 1姝e湪鎵ц 2宸插畬鎴�+        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
         /// </summary>
-        public int N_B_STATE { get; set; } = 0;
+        public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛� 
         /// <summary>
         /// 鐗╂枡鍙�@@ -35,11 +30,6 @@
         /// 鍑哄簱璐у搧鏁伴噺锛堟暣鏁帮紝鐢ㄤ簬鐢熸垚浠诲姟鏁帮級
         /// </summary>
         public int N_QTY { get; set; }
-
-        /// <summary>
-        /// 宸插嚭搴撶殑璐у搧鏁伴噺
-        /// </summary>
-        public int N_O_QTY { get; set; } = 0;
 
         /// <summary>
         /// 缁堢偣搴撳尯锛堢敱WMS涓嬪彂浠诲姟鏃舵寚瀹氾級
diff --git a/Models/TN_Outbound_Order.cs b/Models/TN_Outbound_Order.cs
index f883aea..8a956a4 100644
--- a/Models/TN_Outbound_Order.cs
+++ b/Models/TN_Outbound_Order.cs
@@ -14,9 +14,29 @@
         public string S_NO { get; set; }
 
         /// <summary>
-        /// 涓氬姟鐘舵�锛�绛夊緟 1姝e湪鎵ц 2宸插畬鎴�+        /// 涓氬姟鐘舵�锛�绛夊緟鎵ц 1宸叉墽琛屽緟鐢熸垚浠诲姟 2浠诲姟鎵ц涓�3浠诲姟瀹屾垚
         /// </summary>
-        public int N_B_STATE { get; set; } = 0;
+        public int N_B_STATE { get; set; } = 1; // 鍒涘缓鍗虫墽琛�+
+        /// <summary>
+        /// 鐗╂枡鍙�+        /// </summary>
+        public string S_CG_ID { get; set; }
+
+        /// <summary>
+        /// 鎵规鍙�+        /// </summary>
+        public string S_BATCH_NO { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱璐у搧鏁伴噺锛堟暣鏁帮紝鐢ㄤ簬鐢熸垚浠诲姟鏁帮級
+        /// </summary>
+        public int N_COUNT { get; set; }
+
+        /// <summary>
+        /// 缁堢偣搴撳尯锛堢敱WMS涓嬪彂浠诲姟鏃舵寚瀹氾級
+        /// </summary>
+        public string S_END_AREA { get; set; }
 
         /// <summary>
         /// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗
diff --git a/Models/TN_Outbound_Task.cs b/Models/TN_Outbound_Task.cs
deleted file mode 100644
index af1cd62..0000000
--- a/Models/TN_Outbound_Task.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using SqlSugar;
-
-namespace HH.WCS.Mobox3.DSZSH.Models {
-    
-    [SugarTable("TN_Outbound_Task")]
-    public class TN_Outbound_Task : BaseModel {
-        public string S_CG_ID { get; set; }
-
-        public string S_BATCH_NO { get; set; }
-        public string S_END_AREA { get; set; }
-        /// <summary>
-        /// 0绛夊緟鎵ц 1鎵ц涓�2瀹屾垚
-        /// </summary>
-        public int N_STATE { get; set; }
-
-        /// <summary>
-        /// 鏄惁寮哄埗鍑哄簱锛�涓嶅己鍒�1寮哄埗
-        /// </summary>
-        public int N_FORCE { get; set; } = 0;
-    }
-}
diff --git a/Models/TN_Task.cs b/Models/TN_Task.cs
index e977ec5..28515a3 100644
--- a/Models/TN_Task.cs
+++ b/Models/TN_Task.cs
@@ -38,8 +38,14 @@
         /// </summary>
         public string S_END_LOC { get; set; }
     
-
+        /// <summary>
+        /// 寮�鏃堕棿
+        /// </summary>
         public DateTime? T_START_TIME { get; set; }
+
+        /// <summary>
+        /// 瀹屾垚鏃堕棿
+        /// </summary>
         public DateTime? T_END_TIME { get; set; }
 
         /// <summary>
diff --git a/Program.cs b/Program.cs
index 21fa639..2aa5ce7 100644
--- a/Program.cs
+++ b/Program.cs
@@ -127,9 +127,9 @@
             {
                 List<Task> tasks = new List<Task>();
 
-                tasks.Add(GetTask(OutboundCore.CheckOutboundOrder));
+                tasks.Add(GetTask(CheckCore.CheckOrderState));
 
-                tasks.Add(GetTask(OutboundCore.CheckOutboundTask));
+                tasks.Add(GetTask(OutboundCore.CheckOrderState));
 
 
                 // 娣诲姞浠诲姟鎺ㄩ�绾跨▼
@@ -144,7 +144,8 @@
                 Task.WaitAll(tasks.ToArray());
             }
             public void Stop() { Console.WriteLine("work stopped"); }
-            private Task GetTask(Action action)
+
+            private Task GetTask(Action action, int intervalMs = 3000)
             {
                 var task = Task.Run(() =>
                 {
@@ -158,7 +159,7 @@
                         {
                             LogHelper.Error(ex.Message, ex);
                         }
-                        Thread.Sleep(3000);
+                        Thread.Sleep(intervalMs);
                     }
                 });
                 return task;
diff --git a/ServiceCore/CheckCore.cs b/ServiceCore/CheckCore.cs
index 9eee55a..4fdf160 100644
--- a/ServiceCore/CheckCore.cs
+++ b/ServiceCore/CheckCore.cs
@@ -9,62 +9,103 @@
 using HH.WCS.Mobox3.DSZSH.Helpers.Model;
 using HH.WCS.Mobox3.DSZSH.Models;
 
+using Org.BouncyCastle.Asn1.X509;
+
 namespace HH.WCS.Mobox3.DSZSH.ServiceCore {
-    /// <summary>
-    /// 瀹氭椂杞浠诲姟锛氭娊妫�笟鍔℃牳蹇�-    /// </summary>
     public class CheckCore {
-        /// <summary>
-        /// 杞鏌ョ湅鎶芥鍗曟槸鍚︽湁鎵ц涓殑椤圭洰
-        /// </summary>
-        public void CheckOrderState() {
+        public static void CheckOrderState() {
             var db = DbHelper.GetDbClient();
             try {
-                var orderList = db.Queryable<TN_Check_Order>()
-                    .Where(c => c.N_B_STATE == 0)
-                    .OrderBy(c => c.T_CREATE).ToList();
+                var order = db.Queryable<TN_Check_Order>()
+                    .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟)
+                    .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First();
 
-                using (var tran = db.Ado.UseTran()) {
-                    foreach (var order in orderList) {
-                        var startLocList = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
-                            ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE)
-                            .Where((l, c, d) => d.S_CG_ID == order.S_CG_ID && d.S_BATCH_NO == order.S_BATCH_NO)
-                            .Select((l, c) => new { Location = l, Container = c })
-                            .Take(order.N_QTY).ToList(); // 鑾峰彇鎸囧畾鏁伴噺鐨勮揣浣嶆暟锛岄殢鏈烘娊鍙栨晠鏃犻渶鎺掑簭
+                if (order == null) {
+                    LogHelper.Info("鏆傛棤寰呮墽琛岀殑鎶芥鍗�);
+                    return;
+                }
 
-                        if (startLocList.Count < order.N_QTY) {
-                            LogHelper.Info($"杞 | 褰撳墠鍙娊妫�殑鐗╂枡鏁伴噺 {startLocList.Count} 鏃犳硶婊¤冻鎶芥鍗曟暟閲�{order.N_QTY} 瑕佹眰");
-                            return;
+                var detailList = db.Queryable<TN_Check_Detail>()
+                    .Where(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟).ToList();
+
+                if (detailList.Count == 0) {
+                    order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+                    db.Updateable<TN_Check_Order>(order).UpdateColumns(it => it.N_B_STATE).ExecuteCommand();
+                    return;
+                }
+
+                foreach (var detail in detailList) {
+                    var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
+                        ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE)
+                        .Where((l, c, d) => d.S_CG_ID == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO)
+                        .Select((l, c) => c) // 閫夋嫨 LocCntrRel
+                        .First(); // 闅忔満鎶芥锛屼笉鎺掑簭
+
+                    if (startLocCntrRel == null) {
+                        LogHelper.Info("娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�);
+                        continue;
+                    }
+
+                    var endLoc = db.Queryable<TN_Location>()
+                        .Where(l => l.S_AREA_CODE == detail.S_END_AREA)
+                        .Where(ExprHelper.LocIsFree)
+                        .Where(ExprHelper.LocIsEmpty).First();
+
+                    if (endLoc == null) {
+                        LogHelper.Info("鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅");
+                        continue;
+                    }
+
+                    using (var tran = db.Ado.UseTran()) {
+                        detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+                        if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            LogHelper.Info($"鏇存柊澶辫触锛氫慨鏀规娊妫�崟鏄庣粏琛ㄧ姸鎬佷负瀹屾垚");
                         }
 
-                        var endLocList = db.Queryable<TN_Location>()
-                            .Where(l => l.S_AREA_CODE == order.S_END_AREA)
-                            .Where(ExprHelper.LocIsFree)
-                            .Where(ExprHelper.LocIsEmpty)
-                            .Take(order.N_QTY).ToList(); // 鑾峰彇鎸囧畾鏁伴噺鐨勮揣浣嶆暟
-
-                        if (endLocList.Count < order.N_QTY) {
-                            LogHelper.Info($"杞 | 缁堢偣鍖哄煙鍙敤璐т綅 {startLocList.Count} 鏃犳硶婊¤冻鎶芥鍗曟暟閲�{order.N_QTY} 瑕佹眰");
-                            return;
+                        if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE,
+                            endLoc.S_CODE, TaskName.鎶芥)) {
+                            tran.CommitTran();
                         }
-
-                        // TODO 鍙傝�鍑哄簱锛屽鏋滆姹備换鍔¢『搴忎篃瑕佹柊鍒涘缓琛ㄥ瓨鍌紝鏈夐渶姹傚啀鏇存柊
-                        for (var i = 0; i < order.N_QTY; i++) {
-                            if (!TaskHelper.LogCreateTask(startLocList[i].Location.S_CODE, startLocList[i].Container.S_CNTR_CODE,
-                                endLocList[i].S_CODE, TaskName.鎶芥)) {
-                                tran.RollbackTran();
-                            }
+                        else {
+                            tran.RollbackTran();
                         }
-
-                        order.N_B_STATE = 1;
-                        db.Updateable<TN_Check_Order>(endLocList).UpdateColumns(c => c.N_B_STATE);
-                        tran.CommitTran();
-                    } 
+                    }
                 }
             }
             catch (Exception ex) {
                 LogHelper.InfoEx(ex);
             }
         }
+
+        public static void UpdateTaskState(int spotStateCode) {
+            var db = DbHelper.GetDbClient();
+
+            var detail = db.Queryable<TN_Check_Detail>()
+                .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�;
+
+            if (detail == null) {
+                LogHelper.Info("褰撳墠娌℃湁鎵ц涓殑鎶芥鍗曟槑缁嗛」鐩�);
+                return;
+            }
+
+            using (var tran = db.Ado.UseTran()) {
+                detail.N_B_STATE = spotStateCode;
+                db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand();
+
+                if (db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) ==
+                    db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO)) {
+
+                    if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚)
+                        .Where(it => it.S_NO == detail.S_NO)
+                        .ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info("淇敼Order鐘舵�閿欒");
+                    }
+                }
+
+                tran.CommitTran();
+            }
+        }
     }
 }
diff --git a/ServiceCore/OutboundCore.cs b/ServiceCore/OutboundCore.cs
index a42caae..29e3cda 100644
--- a/ServiceCore/OutboundCore.cs
+++ b/ServiceCore/OutboundCore.cs
@@ -1,171 +1,118 @@
 锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
 
 using HH.WCS.Mobox3.DSZSH.Consts;
 using HH.WCS.Mobox3.DSZSH.Helpers;
 using HH.WCS.Mobox3.DSZSH.Helpers.Model;
 using HH.WCS.Mobox3.DSZSH.Models;
 
-using Newtonsoft.Json;
-
 namespace HH.WCS.Mobox3.DSZSH.ServiceCore {
-    /// <summary>
-    /// 瀹氭椂杞浠诲姟锛氬嚭搴撲笟鍔℃牳蹇�-    /// </summary>
     public class OutboundCore {
-        /// <summary>
-        /// 鍚庡彴杞鍑哄簱鍗�鍑哄簱鏄庣粏鍗曪紝鐢熸垚鍑哄簱浠诲姟琛�-        /// </summary>
-        public static void CheckOutboundOrder() {
+        public static void CheckOrderState() {
             var db = DbHelper.GetDbClient();
-
             try {
-                // 鏌ユ壘鎵�湁鐨�绛夊緟鍑哄簱 鐨�鍑哄簱鍗曪紝鎸�鍏堝垱寤哄厛澶勭悊 鎺掑簭
-                var orders = db.Queryable<TN_Outbound_Order>()
-                    .Where(o => o.N_B_STATE == 0)
-                    .OrderBy(o => o.T_CREATE)
-                    .Mapper(
-                        o => o.Details, // 灏嗗瓙琛ㄦ暟鎹槧灏勫埌涓昏〃鐨�Details 灞炴�
-                        o => o.S_NO,    // 涓昏〃鍏宠仈瀛楁
-                        d => d.S_NO     // 瀛愯〃鍏宠仈瀛楁
-                    )
-                    .ToList();
+                var order = db.Queryable<TN_Outbound_Order>()
+                    .Where(c => c.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟) 
+                    .OrderBy(c => c.T_CREATE, SqlSugar.OrderByType.Asc).First();
 
-                if (orders.Count == 0) {
-                    LogHelper.Info("杞 | 褰撳墠娌℃湁绛夊緟鎵ц鐨勫嚭搴撳崟");
+                if (order == null) {
+                    LogHelper.Info("杞锛氭殏鏃犲緟鎵ц鐨勫嚭搴撳崟");
                     return;
                 }
 
-                using (var tran = db.Ado.UseTran()) {
-
-                    foreach (var o in orders) {
-                        foreach (var d in o.Details) {
-                            for (int i = 0; i < d.N_QTY; i++) {
-                                var task = new TN_Outbound_Task {
-                                    S_CG_ID = d.S_CG_ID,
-                                    S_END_AREA = d.S_END_AREA,
-                                    N_FORCE = o.N_FORCE,
-                                    S_BATCH_NO = d.S_BATCH_NO,
-                                    N_STATE = 0
-                                };
-                                if (db.Insertable<TN_Outbound_Task>(task).ExecuteCommand() <= 0) {
-                                    tran.RollbackTran();
-                                    LogHelper.Info("鎻掑叆浠诲姟鍑洪敊");
-                                    return;
-                                }
-                            }
-
-                            d.N_B_STATE = 1;
-                            if (db.Updateable<TN_Outbound_Detail>(d).UpdateColumns(c => c.N_B_STATE).ExecuteCommand() > 0) {
-                                LogHelper.Info("鏇存柊 N_B_STATE 鎴愬姛");
-                            }
-                            else {
-                                tran.RollbackTran();
-
-                                LogHelper.Info("鏇存柊 N_B_STATE 澶辫触");
-                                return;
-                            }
-                        }
-
-                        o.N_B_STATE = 1;
-                        if (db.Updateable<TN_Outbound_Order>(o).UpdateColumns(c => c.N_B_STATE).ExecuteCommand() > 0) {
-                            LogHelper.Info("鏇存柊 N_B_STATE 鎴愬姛");
-                        }
-                        else {
-                            tran.RollbackTran();
-
-                            LogHelper.Info("鏇存柊 N_B_STATE 澶辫触");
-                            return;
-                        }
-                    }
-
-                    tran.CommitTran();
-                }
-            }
-            catch (Exception ex) {
-                LogHelper.InfoEx(ex);
-                throw;
-            }
-        }
-
-        /// <summary>
-        /// 杞鍑哄簱
-        /// </summary>
-        public static void CheckOutboundTask() {
-            var db = DbHelper.GetDbClient();
-
-            try {
-                var task = db.Queryable<TN_Outbound_Task>()
-                    .Where(t => t.N_STATE == 0).First();
-
-                if (task == null) {
-                    LogHelper.Info("杞 | 鍑哄簱浠诲姟闃熷垪 鏆傛棤寰呮墽琛岀殑浠诲姟");
+                if (db.Queryable<TN_Outbound_Detail>()
+                    .First(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓� != null) {
+                    LogHelper.Debug("杞锛氫笂涓�釜鍑哄簱浠诲姟浠嶅湪杩涜涓�);
                     return;
                 }
 
-                var headTask = task;
-                if (headTask.N_STATE != 0) {
-                    LogHelper.Info("杞 | 鍑哄簱浠诲姟闃熷垪 闃熷ご浠诲姟灏氭湭瀹屾垚");
+                var detail = db.Queryable<TN_Outbound_Detail>()
+                    .Where(d => d.S_NO == order.S_NO && d.N_B_STATE == SpotStateCode.宸叉墽琛屽緟鐢熸垚浠诲姟)
+                    .OrderBy(d => d.T_CREATE, SqlSugar.OrderByType.Asc).First();
+
+                if (detail == null) {
+                    //order.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+
+                    LogHelper.Info("杞鍑哄簱锛氭殏鏃犲緟鎵ц鐨勪换鍔�);
                     return;
                 }
 
-                var locCntr = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
+                var startLocCntrRel = db.Queryable<TN_Location, TN_Loc_Container, TN_CG_Detail>
                     ((l, c, d) => l.S_CODE == c.S_LOC_CODE && c.S_CNTR_CODE == d.S_CNTR_CODE)
                     // 绛涢�瑕佹眰鐨勭墿鏂欑紪鐮佸拰鎵规鍙�-                    .Where((l, c, d) => d.S_CG_ID == headTask.S_CG_ID && d.S_BATCH_NO == headTask.S_BATCH_NO)
+                    .Where((l, c, d) => d.S_CG_ID == detail.S_CG_ID && d.S_BATCH_NO == detail.S_BATCH_NO)
                     // 濡傛灉涓嶆槸寮哄埗鍑哄簱锛岀墿鏂欑姸鎬佸繀椤诲繀椤诲悎鏍�-                    // 鍚﹀垯锛屽彧瑕佷笉鏄鍦ㄦ楠岀殑鐗╂枡鍗冲彲
-                    .Where((l, c, d) => (headTask.N_FORCE == 0 && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸")
-                        || (headTask.N_FORCE != 0 && d.N_ITEM_STATE != 3 && d.S_ITEM_STATE != "姝e湪妫�獙"))
-                    // 鐗╂枡鐘舵�瀵瑰簲鐨勬暟瀛楋紝瓒婂皬瓒婁紭鍏�+                    // 鍚﹀垯锛屽彧瑕佷笉鏄�姝e湪妫�獙 鐨勭墿鏂欏嵆鍙�+                    .Where((l, c, d) => (detail.N_FORCE == 0 && d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸")
+                        || (detail.N_FORCE != 0 && d.N_ITEM_STATE != 3 && d.S_ITEM_STATE != "姝e湪妫�獙"))
+                    // 鎺掑簭锛氭暟瀛楄秺灏忚秺浼樺厛锛屽悎鏍硷紴寰呮锛炰笉鍚堟牸
                     .OrderBy((l, c, d) => d.N_ITEM_STATE)
                     .OrderBy(l => l.N_LAYER)
-                    .Select((l, c) => new { Location = l, Container = c }).First();
-                    
-                if (locCntr == null) {
-                    LogHelper.Info("杞 | 涓嶅瓨鍦ㄧ鍚堟潯浠剁殑鐗╂枡璐т綅");
+                    .Select((l, c) => c).First();
+
+                if (startLocCntrRel == null) {
+                    LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�);
                     return;
                 }
 
                 var endLoc = db.Queryable<TN_Location>()
-                    .Where(l => l.S_AREA_CODE == headTask.S_END_AREA)
+                    .Where(l => l.S_AREA_CODE == detail.S_END_AREA)
                     .Where(ExprHelper.LocIsFree)
-                    .Where(ExprHelper.LocIsEmpty)
-                    .OrderBy(l => l.S_CODE)
-                    .First();
+                    .Where(ExprHelper.LocIsEmpty).First();
 
                 if (endLoc == null) {
-                    LogHelper.Info("杞 | 涓嶅瓨鍦ㄧ鍚堟潯浠剁殑鍑哄簱缁堢偣搴撲綅");
+                    LogHelper.Info("杞锛氬嚭搴擄細娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣�);
                     return;
                 }
 
                 using (var tran = db.Ado.UseTran()) {
-                    if (TaskHelper.LogCreateTask(locCntr.Location.S_CODE, locCntr.Container.S_CNTR_CODE, endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) {
-                        task.N_STATE = 1;
-                        if (db.Updateable<TN_Outbound_Task>(task).UpdateColumns(c => c.N_STATE).ExecuteCommand() <= 0) {
-                            tran.RollbackTran();
-                            LogHelper.Info("淇敼鍑哄簱浠诲姟鐘舵�閿欒");
-                        }
-                        else {
-                            tran.CommitTran();
-                            LogHelper.Info("淇敼鍑哄簱浠诲姟鐘舵�鎴愬姛");
-                        }
+                    detail.N_B_STATE = SpotStateCode.浠诲姟鎵ц涓�
+                    if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info($"杞锛氬嚭搴擄細鏇存柊澶辫触锛氫慨鏀规槑缁嗚〃鐘舵�涓哄畬鎴�);
+                    }
+
+                    if (TaskHelper.LogCreateTask(startLocCntrRel.S_LOC_CODE, startLocCntrRel.S_CNTR_CODE,
+                        endLoc.S_CODE, TaskName.鎴愬搧鑳跺嚭搴�) {
+                        tran.CommitTran();
+                    }
+                    else {
+                        tran.RollbackTran();
                     }
                 }
-                    
             }
             catch (Exception ex) {
                 LogHelper.InfoEx(ex);
             }
         }
 
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="state"></param>
-        public static void UpdateTaskState(int state = 2) {
+        public static void UpdateTaskState(int spotStateCode) {
+            var db = DbHelper.GetDbClient();
 
+            var detail = db.Queryable<TN_Outbound_Detail>()
+                    .First(d => d.N_B_STATE == SpotStateCode.浠诲姟鎵ц涓�;
+
+            if (detail == null) {
+                LogHelper.Info("褰撳墠娌℃湁鎵ц涓殑鍑哄簱鍗曟槑缁嗛」鐩�);
+                return;
+            }
+
+            using (var tran = db.Ado.UseTran()) {
+                detail.N_B_STATE = spotStateCode;
+                db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand();
+
+                if (db.Queryable<TN_Outbound_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 2) ==
+                    db.Queryable<TN_Outbound_Detail>().Count(d => d.S_NO == detail.S_NO)) {
+
+                    if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == SpotStateCode.浠诲姟鎵ц瀹屾垚)
+                        .Where(it => it.S_NO == detail.S_NO)
+                        .ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        LogHelper.Info("淇敼Order鐘舵�閿欒");
+                    }
+                }
+
+                tran.CommitTran();
+            }
         }
 
     }
diff --git a/ServiceCore/TaskCore.cs b/ServiceCore/TaskCore.cs
index dbff385..ecfd717 100644
--- a/ServiceCore/TaskCore.cs
+++ b/ServiceCore/TaskCore.cs
@@ -7,6 +7,9 @@
 
 using static HH.WCS.Mobox3.DSZSH.Dtos.Request.AgvRequest;
 using static HH.WCS.Mobox3.DSZSH.Dtos.Response.AgvResponse;
+using HH.WCS.Mobox3.DSZSH.Dispatch;
+using HH.WCS.Mobox3.DSZSH.Models;
+using System.Collections.Generic;
 
 namespace HH.WCS.Mobox3.DSZSH.ServiceCore {
     internal class TaskCore {
@@ -21,7 +24,7 @@
             if (list.Count > 0) {
                 list.ForEach(task => {
                     // 浣跨敤鑷畾涔変换鍔℃帹閫�-                    TaskHelper.SendTask(task); // 璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧
+                    SendTask(task); // 璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧
                     //TaskProcess.SendGZTask(task); // 璋冨害鍥借嚜璁惧
                 });
             }
@@ -29,5 +32,94 @@
                 LogHelper.Info("鏆傛棤浠诲姟");
             }
         }
+
+        /// <summary>
+        /// 鎺ㄩ�浠诲姟
+        /// </summary>
+        /// <param name="mst"></param>
+        internal static bool SendTask(TN_Task mst) {
+            var result = false;
+            var start = "0"; var end = "0";
+            var taskType = mst.S_TYPE.Trim();
+            if (mst.N_B_STATE == 0) {
+                if (mst.N_SCHEDULE_TYPE == 1)//閫氳繃NDC锛宧osttoagv璋冨害璁惧
+                {
+                    start = LocationHelper.GetAgvSite(mst.S_START_LOC);
+                    end = LocationHelper.GetAgvSite(mst.S_END_LOC);
+
+                    if (mst.S_TYPE == "绌烘墭涓嬬嚎鍫嗗彔") {
+                        end = LocationHelper.GetAgvSite(mst.S_END_LOC, true);
+                    }
+
+                    LogHelper.Info($"NDC鎺ㄩ�浠诲姟 {mst.S_CODE};" + "start=" + start + "end= " + end);
+                    var startLoc = LocationHelper.GetLoc(mst.S_START_LOC);
+                    var endLoc = LocationHelper.GetLoc(mst.S_END_LOC);
+                    var dic = new List<param>();
+                    dic.Add(new param() { name = "IKey", value = "IKey" });
+                    dic.Add(new param() { name = "From", value = start.ToString() });
+                    dic.Add(new param() { name = "To", value = end.ToString() });
+                    dic.Add(new param() { name = "FUNC", value = startLoc.N_LAYER.ToString() });
+
+                    dic.Add(new param() { name = "Ctype", value = "0" });
+
+
+                    if (mst.S_TYPE == "浣欐枡涓嬬嚎鍏ュ簱" || mst.S_TYPE == "浜哄伐鎷嗙洏鍏ュ簱") {
+                        dic.Add(new param() { name = "DATA", value = "1024" });
+                    }
+                    else {
+                        dic.Add(new param() { name = "DATA", value = "0" });
+                    }
+
+                    var res = NDCApi.AddOrderNew(1, 1, mst.S_CODE, dic);//娣诲姞鏂板懡浠�+                    if (res != null && (res.err_code == 0 || res.err_code == 50009)) {
+                        //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
+                        mst.N_B_STATE = 1;
+                        mst.S_B_STATE = TN_Task.GetStateStr(1);
+                        TaskHelper.UpdateStatus(mst);//鏇存柊浠诲姟鐘舵�
+                        result = true;
+                        LogHelper.Info($"NDC鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE}start= {mst.S_START_LOC} + end = {mst.S_END_LOC}");
+                    }
+                    else {
+                        LogHelper.Info($"NDC鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};Res:" + JsonConvert.SerializeObject(res));
+                    }
+                }
+                else if (mst.N_SCHEDULE_TYPE == 5)//閫氳繃鏉ゥ璋冨害璁惧 
+                {
+                    //璋冪涓夋柟鎺ュ彛
+                    var model = new HanAo.TaskInfoModel {
+                        requestPk = mst.S_CODE,
+                        frmPos = mst.S_START_LOC,
+                        toPos = mst.S_END_LOC,
+                        trkType = mst.S_OP_NAME == "鍏ュ簱" ? "1" : "2",
+                        contNo = mst.S_CNTR_CODE
+                    };
+                    if (HanAo.CreateOrder(model)) {
+                        mst.N_B_STATE = 1;
+                        TaskHelper.UpdateStatus(mst);
+                        LogHelper.Info($"鏉ゥ鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE};" + "start=" + model.frmPos + "end= " + model.toPos);
+                    }
+                    else {
+                        LogHelper.Info($"鏉ゥ鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};" + JsonConvert.SerializeObject(model));
+                    }
+                }
+                else if (mst.N_SCHEDULE_TYPE == 3) //閫氳繃鍥借嚜璋冨害璁惧
+                {
+                    var code = GZRobot.CreateOrder(mst.S_CODE, mst.N_PRIORITY, JsonConvert.SerializeObject(new { src = mst.S_START_LOC, dst = mst.S_END_LOC }), "p2p");
+                    if (code > 0) {
+                        //鏇存柊浠诲姟鐘舵�
+                        mst.N_B_STATE = 1;
+                        mst.S_EQ_TASK_CODE = code.ToString();
+                        TaskHelper.UpdateStatus(mst);
+                        TaskHelper.UpdateEqNo(mst);
+                        LogHelper.Info($"鍥借嚜鎺ㄩ�浠诲姟鎴愬姛 {mst.S_CODE};" + "start=" + mst.S_START_LOC + "end= " + mst.S_END_LOC);
+                    }
+                    else {
+                        LogHelper.Info($"鍥借嚜鎺ㄩ�浠诲姟澶辫触 {mst.S_CODE};" + JsonConvert.SerializeObject(mst));
+                    }
+                }
+
+            }
+            return result;
+        }
     }
 }
diff --git a/Services/AgvService.cs b/Services/AgvService.cs
index 593c21f..544a88d 100644
--- a/Services/AgvService.cs
+++ b/Services/AgvService.cs
@@ -11,6 +11,8 @@
 
 using static HH.WCS.Mobox3.DSZSH.Dtos.Request.AgvRequest;
 using static HH.WCS.Mobox3.DSZSH.Dtos.Response.AgvResponse;
+using System.Threading.Tasks;
+using HH.WCS.Mobox3.DSZSH.ServiceCore;
 
 namespace HH.WCS.Mobox3.DSZSH.Services {
     public class AgvService {
@@ -55,7 +57,7 @@
         }
 
         /// <summary>
-        /// 鎵ц AGV 浠诲姟锛屾煡璇笉鍒颁换鍔¤繑鍥�<see langword="false"/>锛堢鏈夋柟娉曪紝鍐呴儴璋冪敤锛�+        /// 鎵ц AGV 浠诲姟锛屾煡璇笉鍒颁换鍔¤繑鍥�<see langword="false"/>
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
@@ -81,7 +83,11 @@
                     TaskHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚
                     TaskHelper.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣
 
-
+                    if (TN_Task.S_TYPE == TaskName.鎴愬搧鑳跺嚭搴� {
+                        var nextOutboundTask = Task.Run(() => {
+                            OutboundCore.UpdateTaskState(SpotStateCode.浠诲姟鎵ц瀹屾垚);
+                        });
+                    }
 
                     break;
                 case AgvStateCode.寮�鍗歌揣:
@@ -93,6 +99,13 @@
                     break;
                 case AgvStateCode.瀹屾垚:
                     TaskHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫
+
+                    if (TN_Task.S_TYPE == TaskName.鎶芥) {
+                        var checkCompleteTask = Task.Run(() => {
+                            CheckCore.UpdateTaskState(SpotStateCode.浠诲姟鎵ц瀹屾垚);
+                        });
+                    }
+
                     break;
                 case AgvStateCode.寮傚父:
                     TaskHelper.OperateStatus(TN_Task, 7); // 寮傚父澶勭悊
@@ -115,15 +128,17 @@
             ModbusHelper.Relink();
 
             try {
+                
+
                 var prodLineInfo = AppStart.Settings.Config.ProductionLines[0];
                 var prodLineDevice = new ProductionLineDevice(prodLineInfo.PlcIp, prodLineInfo.PlcPort);
                 if (!prodLineDevice.LoadDeviceStateOk()) {
                     LogHelper.Info("鍔犺浇璁惧淇℃伅澶辫触");
                 }
 
-                var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.task_no);
+                var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.TaskNo);
                 if (tn_task == null) {
-                    LogHelper.Info($"浠诲姟鍙�'{model.task_no}' 涓嶅瓨鍦�);
+                    LogHelper.Info($"浠诲姟鍙�'{model.TaskNo}' 涓嶅瓨鍦�);
                 }
 
                 // 寰呬慨鏀癸細琛ュ厖涓嶅悓鍒嗘敮AGV鍒ゆ柇
diff --git a/Services/DebugService.cs b/Services/DebugService.cs
index 2d3cd8f..71d3d88 100644
--- a/Services/DebugService.cs
+++ b/Services/DebugService.cs
@@ -16,6 +16,7 @@
 using static HH.WCS.Mobox3.DSZSH.Dtos.Request.DebugRequest;
 using static HH.WCS.Mobox3.DSZSH.Dtos.Response.AgvResponse;
 using static HH.WCS.Mobox3.DSZSH.Dtos.Response.DebugResponse;
+using static HH.WCS.Mobox3.DSZSH.Models.DebugModel;
 
 namespace HH.WCS.Mobox3.DSZSH.Services {
     public class DebugService {
@@ -79,22 +80,24 @@
         /// 鍒濆鏁版嵁搴撳缓绔�         /// </summary>
         /// <returns></returns>
-        public string CreateDatabase() {
+        public static string CreateDatabase() {
             try {
                 var db = DbHelper.GetDbClient();
 
-                db.CodeFirst.InitTables<TN_CG_Detail>();
-                db.CodeFirst.InitTables<TN_WorkOrder>();
-                db.CodeFirst.InitTables<TN_CAR_IN>();
-                //db.CodeFirst.InitTables<SYSHelper.OI_SYS_MAXID>();
-                db.CodeFirst.InitTables<TN_Task_Action>();
-                db.CodeFirst.InitTables<TN_Task>();
-                db.CodeFirst.InitTables<TN_Location>();
-                db.CodeFirst.InitTables<TN_Loc_Container>();
+                //db.CodeFirst.InitTables<TN_CG_Detail>();
+                //db.CodeFirst.InitTables<TN_WorkOrder>();
+                //db.CodeFirst.InitTables<TN_CAR_IN>();
+                ////db.CodeFirst.InitTables<SYSHelper.OI_SYS_MAXID>();
+                //db.CodeFirst.InitTables<TN_Task_Action>();
+                //db.CodeFirst.InitTables<TN_Task>();
+                //db.CodeFirst.InitTables<TN_Location>();
+                //db.CodeFirst.InitTables<TN_Loc_Container>();
 
-                db.CodeFirst.InitTables<TN_Outbound_Order>();
-                db.CodeFirst.InitTables<TN_Outbound_Detail>();
-                db.CodeFirst.InitTables<TN_Outbound_Task>();
+                //db.CodeFirst.InitTables<TN_Outbound_Order>();
+                //db.CodeFirst.InitTables<TN_Outbound_Detail>();
+                //db.CodeFirst.InitTables<TN_Check_Order>();
+                db.CodeFirst.InitTables<TN_Check_Detail>();
+
             }
             catch (Exception ex) {
                 LogHelper.Info($"鍙戠敓浜嗗紓甯�);
@@ -118,12 +121,12 @@
                     BadDataFound = context => { }  // 澶勭悊閿欒鏁版嵁
                 };
 
-                var locCntrCgList = new List<DebugModel.LocCntrCg>();
+                var locCntrCgList = new List<LocCntrCg>();
 
                 using (var reader = new StreamReader(filePath))
                 using (var csv = new CsvReader(reader, configuration)) {
                     // 璇诲彇璁板綍
-                    locCntrCgList = csv.GetRecords<DebugModel.LocCntrCg>().ToList();
+                    locCntrCgList = csv.GetRecords<LocCntrCg>().ToList();
                 }
 
                 using (var tran = db.UseTran()) {
diff --git a/Services/MoboxService.cs b/Services/MoboxService.cs
index d2f68a6..cdc9920 100644
--- a/Services/MoboxService.cs
+++ b/Services/MoboxService.cs
@@ -383,24 +383,48 @@
             }
         }
 
+        /// <summary>
+        /// 鍒涘缓鎶芥鍗�+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
         public static SimpleResult CreateCheckOrder(CreateCheckOrderInfo model) {
             var db = DbHelper.GetDbClient();
             try {
+                // 缁戝畾鎿嶄綔锛氭彃鍏ュ嚭搴撳崟銆佹墍鏈夌殑鍑哄簱鍗曟槑缁�+                using (var tran = db.Ado.UseTran()) {
 
-                var order = new TN_Check_Order {
-                    S_CG_ID = model.CgId,
-                    S_ITEM_NAME = model.ItemName,
-                    S_BATCH_NO = model.BatchNo,
-                    N_QTY = model.Qty,
-                    S_END_AREA = model.EndArea,
-                };
+                    var order = new TN_Check_Order {
+                        S_NO = model.No,
+                        S_CG_ID = model.CgId,
+                        S_ITEM_NAME = model.ItemName,
+                        S_BATCH_NO = model.BatchNo,
+                        N_COUNT = model.Count,
+                        S_END_AREA = model.EndArea,
+                    };
 
-                if (db.Insertable<TN_Check_Order>(order).ExecuteCommand() > 0) {
-                    return BuildSimpleResult(0, "鎻掑叆鎶芥鍗曟垚鍔燂細" + JsonConvert.SerializeObject(order));
+                    if (db.Insertable<TN_Check_Order>(order).ExecuteCommand() <= 0) {
+                        tran.RollbackTran();
+                        return BuildSimpleResult(2, "鐢熸垚 鎶芥鍗�澶辫触锛� + JsonConvert.SerializeObject(order));
+                    }
+
+                    for (int i = 0; i < model.Count; i++) {
+                        var detail = new TN_Check_Detail {
+                            S_NO = model.No,
+                            S_CG_ID = model.CgId,
+                            S_BATCH_NO = model.BatchNo,
+                            S_END_AREA = model.EndArea
+                        };
+
+                        if (db.Insertable<TN_Check_Detail>(detail).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+                            return BuildSimpleResult(3, "鐢熸垚 鎶芥鍗曟槑缁�澶辫触锛� + JsonConvert.SerializeObject(detail));
+                        }
+                    }
+
+                    tran.CommitTran();
                 }
-                else {
-                    return BuildSimpleResult(2, "鎻掑叆鎶芥鍗曞け璐ワ細" + JsonConvert.SerializeObject(order));
-                }
+                return BuildSimpleResult(0, $"鍒涘缓 鎶芥鍗�鎴愬姛锛氬崟鍙�{model.No}");
             }
             catch (Exception ex) {
                 return BuildSimpleEx(ex);
@@ -425,13 +449,12 @@
                     return BuildSimpleResult(2, "鍑哄簱鍗曞彿涓嶈兘涓虹┖");
                 }
 
-                if (model.OutboundDetails.Count == 0) {
-                    return BuildSimpleResult(2, "鍑哄簱鍗曟槑缁嗘病鏈夐」鐩�);
-                }
-
                 using (var tran = db.Ado.UseTran()) {
                     var order = new TN_Outbound_Order {
                         S_NO = model.No,
+                        S_CG_ID = model.CgId,
+                        S_BATCH_NO = model.BatchNo,
+                        S_END_AREA = model.EndArea,
                         N_FORCE = model.Forced ? 1 : 0
                     };
 
@@ -440,16 +463,16 @@
                         return BuildSimpleResult(3, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order));
                     }
 
-                    foreach (var detail in model.OutboundDetails) {
-                        var newDetail = new TN_Outbound_Detail {
-                            S_NO = order.S_NO,
-                            S_CG_ID = detail.CgCode,
-                            S_BATCH_NO = detail.PatchNo,
-                            N_QTY = detail.Qty,
-                            N_FORCE = order.N_FORCE,
-                            S_END_AREA = detail.EndArea
+                    for (int i = 0; i < model.Count; i++) {
+                        var detail = new TN_Outbound_Detail {
+                            S_NO = model.No,
+                            S_CG_ID = model.CgId,
+                            S_BATCH_NO = model.BatchNo,
+                            N_FORCE = model.Forced ? 1 : 0,
+                            S_END_AREA = model.EndArea
                         };
-                        if (db.Insertable<TN_Outbound_Detail>(newDetail).ExecuteCommand() <= 0) {
+
+                        if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
                             return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail));
                         }
@@ -488,19 +511,22 @@
                         return BuildSimpleResult(3, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order));
                     }
 
-                    foreach (var detail in model.OutboundDetails) {
-                        var newDetail = new TN_Outbound_Detail {
-                            S_NO = order.S_NO,
-                            S_CG_ID = detail.CgCode,
-                            S_BATCH_NO = detail.PatchNo,
-                            N_QTY = detail.Qty,
-                            N_FORCE = order.N_FORCE
+                    for (int i = 0; i < model.Count; i++) {
+                        var detail = new TN_Outbound_Detail {
+                            S_NO = model.No,
+                            S_CG_ID = model.CgId,
+                            S_BATCH_NO = model.BatchNo,
+                            N_FORCE = model.Forced ? 1 : 0,
+                            S_END_AREA = model.EndArea
                         };
-                        if (db.Insertable<TN_Inbound_Order>(order).ExecuteCommand() <= 0) {
+
+                        if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0) {
                             tran.RollbackTran();
                             return BuildSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail));
                         }
                     }
+
+                    tran.CommitTran();
                 }
 
                 return BuildSimpleResult(0, "鐢熸垚鍑哄簱鍗曟垚鍔�);
diff --git a/config/config.json b/config/config.json
index 63727c7..04cdfe5 100644
--- a/config/config.json
+++ b/config/config.json
@@ -99,7 +99,7 @@
         },
         {
             "Name": "鎶芥"
-        }
+        },
         {
             "Name": "鎴愬搧鑳跺嚭搴�
         },

--
Gitblit v1.9.1