From 8633a0b6e52d9899fda4f3ec2decc1c39b960e5f Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期二, 27 五月 2025 14:42:00 +0800
Subject: [PATCH] 恢复拍照模块,优化任务号生成机制

---
 api/ApiHelper.cs |  342 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 247 insertions(+), 95 deletions(-)

diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs
index 317676f..8fe1e34 100644
--- a/api/ApiHelper.cs
+++ b/api/ApiHelper.cs
@@ -27,24 +27,27 @@
                     .Where(a => a.S_CODE == model.StartLoc)
                     .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                     .Where(a => a.N_CURRENT_NUM == 0)
-                    .Where(a => a.S_AREA_CODE == "SFQ")
+                    .Where(a => Settings.Areas[0].Contains(a.S_AREA_CODE)) // 鏀跺彂鍖�                     .First();
 
                 if (startLoc == null) {
-                    return NewSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦紒");
+                    return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細闇�锛�锛夋病鏈夐攣鐘舵�锛�锛夊綋鍓嶆棤瀹瑰櫒锛�锛夊睘浜庡彇鏀捐揣鍖�);
                 }
 
                 // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�-                var cntId = Guid.NewGuid().ToString("D");
-                var CgId = Guid.NewGuid().ToString("D");
+                //var cntId = Guid.NewGuid().ToString("D");
+                //var CgId = Guid.NewGuid().ToString("D");
+                var cntId = GenerateNo("瀹瑰櫒鍙�, "CN");
+                var cgId = GenerateNo("鐗╂枡鍙�, "CG");
 
                 // 鍒濆鏄病鏈夌粦瀹氫俊鎭殑锛屽厛灏嗚捣鐐逛綅缃笌瀹瑰櫒缁戝畾锛屽鍣ㄤ笌鐗╂枡缁戝畾
                 var locCntrRel = new TN_Loc_Container() {
                     S_LOC_CODE = startLoc.S_CODE,
                     S_CNTR_CODE = cntId,
                 };
+
                 var cgDetail = new TN_CG_Detail() {
-                    S_ITEM_CODE = CgId,
+                    S_ITEM_CODE = cgId,
                     S_CNTR_CODE = cntId,
                 };
 
@@ -54,53 +57,59 @@
                 if (model.Row != null && model.Row.Trim() != "") {
                     endLocCode = model.Row; // 鐢ㄦ帓鍙峰瓧绗︿覆褰撳仛鍋囧湴鍧�                     if (!int.TryParse(model.Row.Trim(), out int row)) {
-                        return NewSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
+                        return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷");
                     }
                     // 璐ф灦鎺掑彿鍙兘鏄�0 - 8
                     if (row <= 0 || row > 8) {
-                        return NewSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�);
+                        return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�);
                     }
                 }
 
                 var task = WCSHelper.BuildInboundTask(startLoc, endLocCode, cntId);
-                LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿� 
                 // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣�                 using (var tran = db.Ado.UseTran()) {
                     if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRel.S_LOC_CODE}锛屽鍣▄locCntrRel.S_CNTR_CODE}");
                     }
 
                     if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鎻掑叆瀹瑰櫒璐у搧鏄庣粏琛ㄥけ璐ワ細瀹瑰櫒{cgDetail.S_CNTR_CODE}锛岀墿鏂檣cgDetail.S_ITEM_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鏇存柊璧风偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{startLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚浠诲姟 {taskName} 澶辫触锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚浠诲姟 {taskName} 鎴愬姛锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
+
+        //internal static string GenerateNo(string snType, string prefix) {
+        //    var id = SYSHelper.GetSerialNumber(snType, prefix);
+        //    var date = DateTime.Now.ToString("yyMMdd");
+        //    return $"TN{date}{id.ToString().PadLeft(4, '0')}";
+        //}
 
         /// <summary>
         /// PDA閫夋嫨缁堢偣璐т綅
@@ -114,51 +123,57 @@
             try {
                 // 浠诲姟鍙峰瓨鍦細缁堢偣璐ф灦鍜岀粓鐐逛綅缃负绌猴紝涓斾换鍔′负浜у搧鍏ュ簱(PDA)
                 var task = db.Queryable<TN_Task>()
+                    .Where(a => a.S_CODE == model.TaskNo)
                     .Where(a => a.S_B_STATE == "鍙栬揣瀹屾垚" && a.S_TYPE == TaskName.浜у搧鍏ュ簱)
                     .OrderBy(a => a.T_CREATE, SqlSugar.OrderByType.Desc).First();
 
                 if (task == null) {
-                    return NewSimpleResult(2, $"褰撳墠涓嶅瓨鍦ㄧ姸鎬佷负 鍙栬揣瀹屾垚 鐨�浜у搧鍏ュ簱 浠诲姟");
+                    return BuildSimpleResult(2, $"褰撳墠涓嶅瓨鍦ㄧ姸鎬佷负 鍙栬揣瀹屾垚 鐨�浜у搧鍏ュ簱 浠诲姟");
                 }
 
                 if (task.S_END_LOC != null && task.S_END_LOC != "0") {
-                    return NewSimpleResult(3, $"璇ヤ换鍔″凡鏈夌粓鐐�);
+                    return BuildSimpleResult(3, $"璇ヤ换鍔″凡鏈夌粓鐐�);
                 }
 
                 var cgDetail = db.Queryable<TN_CG_Detail>()
                     .Where(a => a.S_CNTR_CODE == task.S_CNTR_CODE).First();
 
                 if (cgDetail == null) {
-                    return NewSimpleResult(4, $"鎵樼洏鐗╂枡涓嶅瓨鍦�);
+                    return BuildSimpleResult(4, $"鎵樼洏鐗╂枡涓嶅瓨鍦�);
                 }
 
                 var endLoc = new TN_Location();
-                if (cgDetail.F_QTY > 1500) {
-                    // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-3灞傝揣鏋�+                if (cgDetail.F_QTY > 2000) {
+                    // 閲嶉噺瓒呰繃2t锛屾姤閿�+                    return BuildSimpleResult(8, $"鐗╂枡閲嶉噺{cgDetail.F_QTY}瓒呰繃2t");
+                }
+                else if (cgDetail.F_QTY > 1500) {
+                    // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋�                     endLoc = db.Queryable<TN_Location>()
-                        .Where(a => a.S_CODE == model.endLoc)
+                        .Where(a => a.S_CODE == model.EndLoc)
                         .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                         .Where(a => a.N_CURRENT_NUM == 0)
-                        .Where(a => a.S_AREA_CODE == "HJQ")
-                        .Where(a => a.N_LAYER <= 3)
+                        .Where(a => Settings.Areas[1].Contains(a.S_AREA_CODE))
+                        .Where(a => a.N_LAYER <= 2)
                         .First();
                 }
                 else if (cgDetail.F_QTY > 0) {
                     endLoc = db.Queryable<TN_Location>()
-                        .Where(a => a.S_CODE == model.endLoc)
+                        .Where(a => a.S_CODE == model.EndLoc)
                         .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y")
                         .Where(a => a.N_CURRENT_NUM == 0)
-                        .Where(a => a.S_AREA_CODE == "HJQ")
+                        .Where(a => Settings.Areas[1].Contains(a.S_AREA_CODE))
+                        .OrderBy(a => a.N_LAYER > 2 ? 0 : 1) // 浼樺厛鍙栧ぇ浜�鐨�                         //.Where(a => a.N_LAYER <= 3)
                         .First();
                 }
                 else {
-                    return NewSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_QTY}");
+                    return BuildSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_QTY}");
                 }
 
                 // 娌℃湁绗﹀悎鏉′欢鐨勮揣浣�                 if (endLoc == null) {
-                    return NewSimpleResult(6, $"璐т綅{model.endLoc}涓嶅瓨鍦紝鎴栦笉婊¤冻绉伴噸鏀剧疆瑕佹眰");
+                    return BuildSimpleResult(6, $"璐т綅{model.EndLoc}涓嶅瓨鍦紝鎴栦笉婊¤冻绉伴噸鏀剧疆瑕佹眰");
                 }
 
                 // 淇敼浠诲姟缁堢偣涓篜DA鎸囧畾缁堢偣
@@ -168,21 +183,21 @@
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable<TN_Task>(task).UpdateColumns(a => a.S_END_LOC).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
+                        return BuildSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
+                        return BuildSimpleResult(7, $"浠诲姟{task.S_CODE}淇敼澶辫触锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0, $"浠诲姟{task.S_CODE}淇敼鎴愬姛锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
+                    return BuildSimpleResult(0, $"浠诲姟{task.S_CODE}淇敼鎴愬姛锛屼慨鏀圭粓鐐逛綅缃负{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -204,32 +219,32 @@
                     .First();
 
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
 
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡");
+                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡");
                 }
 
-                var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == "SFQ");
+                var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && Settings.Areas[0].Contains(a.S_AREA_CODE));
 
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntId = locCntrRel.S_CNTR_CODE;
                 var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
 
-                LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�-                LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+                LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� 
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
@@ -237,23 +252,23 @@
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
 
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -268,55 +283,139 @@
 
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == "SFQ");
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && Settings.Areas[0].Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
                 }
 
                 // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�                 var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntId = locCntrRel.S_CNTR_CODE;
                 var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName);
-                LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�-                LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+                LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� 
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+            }
+        }
+
+        public static SimpleResult CancelTask(CancelTaskInfo model) {
+            var db = new SqlHelper<object>().GetInstance();
+            var info = "";
+            try {
+                var task = db.Queryable<TN_Task>()
+                    .Where(a => a.S_CODE == model.TaskNo)
+                    .First();
+
+                if (task == null) {
+                    return BuildSimpleResult(2, $"浠诲姟鍙穥model.TaskNo}涓嶅瓨鍦�);
+                }
+
+                if (task.N_B_STATE == 0 && task.S_B_STATE == TN_Task.GetStateStr(0)
+                    || task.N_B_STATE == 1 && task.S_B_STATE == TN_Task.GetStateStr(1)) {
+
+                    task.N_B_STATE = 4;
+                    task.S_B_STATE = "鍙栨秷";
+
+                    var starloc = db.Queryable<TN_Location>().First(a => a.S_CODE == task.S_START_LOC);
+                    var endloc = db.Queryable<TN_Location>().First(a => a.S_CODE == task.S_END_LOC);
+                    //var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == task.S_CNTR_CODE);
+                    //var cg = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == task.S_CNTR_CODE);
+
+                    if (starloc != null) {
+                        starloc.N_LOCK_STATE = 0;
+                        starloc.S_LOCK_STATE = "鏃�;
+                        //starloc.N_CURRENT_NUM = 0;
+                        starloc.T_MODIFY = System.DateTime.Now;
+                    }
+
+                    if (endloc != null) {
+                        endloc.N_LOCK_STATE = 0;
+                        endloc.S_LOCK_STATE = "鏃�;
+                        //endloc.N_CURRENT_NUM = 0;
+                        endloc.T_MODIFY = System.DateTime.Now;
+                    }
+
+                    using (var tran = db.Ado.UseTran()) {
+                        if (db.Updateable<TN_Location>(starloc).ExecuteCommand() <= 0) {
+                            tran.RollbackTran();
+
+                            info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触";
+
+                            return BuildSimpleResult(0, info);
+                        }
+
+                        if (endloc != null) {
+                            if (db.Updateable<TN_Location>(endloc).ExecuteCommand() <= 0) {
+                                tran.RollbackTran();
+
+                                info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触";
+
+                                return BuildSimpleResult(0, info);
+                            }
+                        }
+
+                        if (db.Updateable<TN_Task>(task).ExecuteCommand() <= 0) {
+                            if (db.Updateable<TN_Location>(endloc).ExecuteCommand() <= 0) {
+                                tran.RollbackTran();
+
+                                info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触";
+
+                                return BuildSimpleResult(0, info);
+                            }
+                        }
+
+                        tran.CommitTran();
+
+                        info = $"浠诲姟{task.S_CODE}鍙栨秷鎴愬姛";
+
+                        return BuildSimpleResult(0, info);
+                    }
+
+                }
+                else {
+                    return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�);
+                }
+
+            }
+            catch (Exception ex) {
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -336,19 +435,19 @@
                     countPlan.S_ITEM_CODE = model.targetId;
                 }
                 else {
-                    return NewSimpleResult(2, $"鍒涘缓鐩樼偣璁″垝澶辫触锛氫笉鍚堟硶鐨勭洏鐐圭被鍨�'{model.countType}'");
+                    return BuildSimpleResult(2, $"鍒涘缓鐩樼偣璁″垝澶辫触锛氫笉鍚堟硶鐨勭洏鐐圭被鍨�'{model.countType}'");
                 }
 
                 if (db.Insertable<TN_Count_Plan>(countPlan).ExecuteCommand() <= 0) {
-                    return NewSimpleResult(2, "鍒涘缓鐩樼偣璁″垝澶辫触");
+                    return BuildSimpleResult(2, "鍒涘缓鐩樼偣璁″垝澶辫触");
                 }
 
-                return NewSimpleResult(0, "鍒涘缓鐩樼偣璁″垝鎴愬姛");
+                return BuildSimpleResult(0, "鍒涘缓鐩樼偣璁″垝鎴愬姛");
 
             }
             catch (Exception ex) {
 
-                return NewSimpleResult(1, ex.Message);
+                return BuildSimpleResult(1, ex.Message);
             }
         }
 
@@ -360,7 +459,7 @@
                     .Where(a => a.S_CP_NO == model.planId).First();
 
                 if (countPlan == null) {
-                    return NewSimpleResult(2, $"鐩樼偣璁″垝鍗曞彿 '{model.planId}' 涓嶅瓨鍦�);
+                    return BuildSimpleResult(2, $"鐩樼偣璁″垝鍗曞彿 '{model.planId}' 涓嶅瓨鍦�);
                 }
 
                 var countOrder = new TN_Count_Order() {
@@ -398,30 +497,30 @@
                     }
                 }
                 else {
-                    return NewSimpleResult(3, $"璁″垝鍗�{model.planId}'鐨勭被鍨媨countPlan.S_TYPE}涓嶅悎娉�);
+                    return BuildSimpleResult(3, $"璁″垝鍗�{model.planId}'鐨勭被鍨媨countPlan.S_TYPE}涓嶅悎娉�);
                 }
 
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Insertable<TN_Count_Order>(countOrder).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
                         info = "鍒涘缓鐩樼偣鍗曞け璐�;
-                        return NewSimpleResult(2, info);
+                        return BuildSimpleResult(2, info);
                     }
 
                     if (db.Insertable<TN_Count_CG_Detail>(countDetailList).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
                         info = "鍒涘缓鐩樼偣鍗曟槑缁嗗け璐�;
-                        return NewSimpleResult(3, info); 
+                        return BuildSimpleResult(3, info); 
                     }
 
                     tran.CommitTran();
                 }
 
-                return NewSimpleResult(0, "鍒涘缓鐩樼偣鍗曟垚鍔�);
+                return BuildSimpleResult(0, "鍒涘缓鐩樼偣鍗曟垚鍔�);
             }
             catch (Exception ex) {
 
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -432,30 +531,32 @@
                     .Where(d => d.S_CNTR_CODE == model.cntrCode).First();
 
                 if (cgDetail == null) {
-                    return NewSimpleResult(2, $"鎵句笉鍒板鍣ㄥ彿'{model.cntrCode}'瀵瑰簲鐨勭墿鏂�);
+                    return BuildSimpleResult(2, $"鎵句笉鍒板鍣ㄥ彿'{model.cntrCode}'瀵瑰簲鐨勭墿鏂�);
                 }
 
                 var countDiff = new TN_Count_Diff {
                     S_CNTR_CODE = cgDetail.S_CNTR_CODE,
+                    F_QTY = cgDetail.F_QTY,
                     F_ACTUAL_QTY = model.qty
                 };
 
                 if (db.Insertable<TN_Count_Diff>(countDiff).ExecuteCommand() <= 0) {
-                    return NewSimpleResult(3, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�);
+                    return BuildSimpleResult(3, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�);
                 }
 
-                return NewSimpleResult(0, "鐩樼偣宸紓瀹屾垚");
+                return BuildSimpleResult(0, "鐩樼偣宸紓瀹屾垚");
 
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
         internal static string GenerateNo(string snType, string prefix) {
             var id = SYSHelper.GetSerialNumber(snType, prefix);
+            
             var date = DateTime.Now.ToString("yyMMdd");
-            return $"TN{date}{id.ToString().PadLeft(4, '0')}";
+            return $"{prefix}{date}-{id.ToString().PadLeft(5, '0')}"; // 褰㈠锛欳N250525-00011
         }
 
         /// <summary>
@@ -469,55 +570,55 @@
 
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == "SFQ");
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && Settings.Areas[0].Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝嚭搴撴潯浠�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝嚭搴撴潯浠�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
                 }
 
                 // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�                 var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntID = locCntrRel.S_CNTR_CODE;
                 var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName);
-                LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�-                LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+                LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� 
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
@@ -532,81 +633,132 @@
 
             try {
                 // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級
-                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && a.S_AREA_CODE == "SFQ");
+                var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && Settings.Areas[0].Contains(a.S_AREA_CODE));
                 if (startLoc == null) {
-                    return NewSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
+                    return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�);
                 }
 
                 var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc);
                 if (locCntrRel == null) {
-                    return NewSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
+                    return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡");
                 }
 
                 // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�                 var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y");
                 if (endLoc == null) {
-                    return NewSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
+                    return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�);
                 }
 
                 var cntID = locCntrRel.S_CNTR_CODE;
                 var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName);
-                LocationHelper.LockLoc(ref startLoc, 1); // 璧风偣鍑哄簱閿�-                LocationHelper.LockLoc(ref endLoc, 2); // 缁堢偣鍏ュ簱閿�+                LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+                LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� 
                 using (var tran = db.Ado.UseTran()) {
                     if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}");
                     }
 
                     if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new {
                         it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY }).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) {
                         tran.RollbackTran();
-                        return NewSimpleResult(500,
+                        return BuildSimpleResult(500,
                             $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                     }
 
                     tran.CommitTran();
-                    return NewSimpleResult(0,
+                    return BuildSimpleResult(0,
                         $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}");
                 }
             }
             catch (Exception ex) {
-                return NewSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
+                return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
         }
 
         public static ErpResult InboundDataSync(InboundDataSyncInfo model) {
             var db = new SqlHelper<object>().GetInstance();
-
             try {
+                var err = "";
+                var cgDetailList = new List<TN_CG_Detail>();
+                foreach (var inboundData in model.stockTransactions) {
+                    var cgDetail = 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 => l.S_CODE == inboundData.locationCode)
+                        .Select((l, c, d) => d)
+                        .First();
+                    
+                    if (cgDetail == null) {
+                        err += $"鍌ㄤ綅鐮亄inboundData.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
+                        continue;
+                    }
+
+                    cgDetail.S_ITEM_CODE = inboundData.itemCode;
+                    cgDetail.S_ITEM_NAME = inboundData.itemName;
+                    
+                    cgDetailList.Add(cgDetail);
+                }
+                
+                if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
+                    return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触");
+                }
+
+                if (err != "") {
+                    return BuildErpResult(2, err);
+                }
+                return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
 
             }
             catch (Exception ex) {
-                return BuildErpResult(1, ex.Message);
+                return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
-            return BuildErpResult(0, null);
         }
 
         public static ErpResult OutboundDataSync(OutboundDataSyncInfo model) {
             var db = new SqlHelper<object>().GetInstance();
-
             try {
+                var err = "";
+                var cgDetailList = new List<TN_CG_Detail>();
+                foreach (var inboundData in model.materialIssues) {
+                    var cgDetail = 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 => l.S_CODE == inboundData.locationCode)
+                        .Select((l, c, d) => d)
+                        .First();
 
+                    if (cgDetail == null) {
+                        err += $"鍌ㄤ綅鐮亄inboundData.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�;
+                        continue;
+                    }
+
+                    cgDetail.S_ITEM_CODE = inboundData.itemCode;
+                    cgDetail.S_ITEM_NAME = inboundData.itemName;
+
+                    cgDetailList.Add(cgDetail);
+                }
+
+                if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) {
+                    return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触");
+                }
+
+                if (err != "") {
+                    return BuildErpResult(2, err);
+                }
+                return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛");
 
             }
             catch (Exception ex) {
-                return BuildErpResult(1, ex.Message);
+                return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}");
             }
-            return BuildErpResult(1, null);
         }
     }
 }

--
Gitblit v1.9.1