From 24de88ebbbb3597bb2043840bc685e3d59363967 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期一, 07 七月 2025 16:48:39 +0800 Subject: [PATCH] 优化轮询ERP信息流程、添加AGV接口报文打印、执行中任务强制取消的功能 --- api/ApiHelper.cs | 280 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 242 insertions(+), 38 deletions(-) diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index 3fe27af..a5aa9e5 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -11,6 +11,8 @@ using Newtonsoft.Json; +using Swashbuckle.Swagger; + using static HH.WCS.Mobox3.AnGang.api.ApiModel; using static HH.WCS.Mobox3.AnGang.api.OtherModel; @@ -40,16 +42,16 @@ return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栨斁璐у尯"); } - var locCntrRelOld = db.Queryable<TN_Loc_Container>() - .Where(c => c.S_LOC_CODE == model.StartLoc).First(); + //var locCntrRelOld = db.Queryable<TN_Loc_Container>() + // .Where(c => c.S_LOC_CODE == model.StartLoc).First(); - // 浜у搧鍏ュ簱锛氬亣瀹氱敤鎴蜂笉浼氬皢鏂板叆搴撶墿鏂欙紝鏀惧埌宸叉湁鐗╂枡鐨勬敹鍙戣揣鍖哄叆搴�- // 鏂颁骇鍝佸叆搴撴椂锛屽鏋滃瓨鍦ㄦ棫鐨勮揣浣嶇粦瀹氭暟鎹紙鍑哄簱閬楃暀椤圭洰锛夌洿鎺ュ垹闄�- TN_CG_Detail cgDetailOld = null; - if (locCntrRelOld != null) { - cgDetailOld = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_CNTR_CODE == locCntrRelOld.S_CNTR_CODE).First(); - } + //// 浜у搧鍏ュ簱锛氬亣瀹氱敤鎴蜂笉浼氬皢鏂板叆搴撶墿鏂欙紝鏀惧埌宸叉湁鐗╂枡鐨勬敹鍙戣揣鍖哄叆搴�+ //// 鏂颁骇鍝佸叆搴撴椂锛屽鏋滃瓨鍦ㄦ棫鐨勮揣浣嶇粦瀹氭暟鎹紙鍑哄簱閬楃暀椤圭洰锛夌洿鎺ュ垹闄�+ //TN_CG_Detail cgDetailOld = null; + //if (locCntrRelOld != null) { + // cgDetailOld = db.Queryable<TN_CG_Detail>() + // .Where(d => d.S_CNTR_CODE == locCntrRelOld.S_CNTR_CODE).First(); + //} // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴� //var cntId = Guid.NewGuid().ToString("D"); @@ -89,20 +91,20 @@ // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣� using (var tran = db.Ado.UseTran()) { - if (locCntrRelOld != null) { - if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(500, - $"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRelOld.S_LOC_CODE}锛屽鍣▄locCntrRelOld.S_CNTR_CODE}"); - } - } - if (cgDetailOld != null) { - if (db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildSimpleResult(500, - $"鍒犻櫎鏃у鍣ㄨ揣鍝佹槑缁嗚〃澶辫触锛氬鍣▄cgDetailOld.S_CNTR_CODE}锛岀墿鏂檣cgDetailOld.S_ITEM_CODE}"); - } - } + //if (locCntrRelOld != null) { + // if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // return BuildSimpleResult(500, + // $"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRelOld.S_LOC_CODE}锛屽鍣▄locCntrRelOld.S_CNTR_CODE}"); + // } + //} + //if (cgDetailOld != null) { + // if (db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // return BuildSimpleResult(500, + // $"鍒犻櫎鏃у鍣ㄨ揣鍝佹槑缁嗚〃澶辫触锛氬鍣▄cgDetailOld.S_CNTR_CODE}锛岀墿鏂檣cgDetailOld.S_ITEM_CODE}"); + // } + //} if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran(); @@ -118,6 +120,132 @@ if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, it.N_CURRENT_NUM }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鏇存柊璧风偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{startLoc.S_CODE}"); + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚浠诲姟 {taskName} 澶辫触锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, + $"鐢熸垚浠诲姟 {taskName} 鎴愬姛锛氬鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLocCode} 锛岀粓鐐硅揣浣嶆湭鎸囧畾"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + public static SimpleResult InboundData(InboundDataInfo model) { + var taskName = TaskName.浜у搧鍏ュ簱; + var db = new SqlHelper<object>().GetInstance(); + + var startAreas = Settings.Areas[AreaIndex.Q鍙栬揣鍖篯; + + try { + // 璧风偣浣嶇疆蹇呴』锛氫负绌恒�鏃犻攣銆佸惎鐢ㄣ�灞炰簬鏀跺彂鍖哄煙 + var startLoc = db.Queryable<TN_Location>() + .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 => startAreas.Contains(a.S_AREA_CODE)) + .First(); + + if (startLoc == null) { + return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栨斁璐у尯"); + } + + //var locCntrRelOld = db.Queryable<TN_Loc_Container>() + // .Where(c => c.S_LOC_CODE == model.StartLoc).First(); + + //// 浜у搧鍏ュ簱锛氬亣瀹氱敤鎴蜂笉浼氬皢鏂板叆搴撶墿鏂欙紝鏀惧埌宸叉湁鐗╂枡鐨勬敹鍙戣揣鍖哄叆搴�+ //// 鏂颁骇鍝佸叆搴撴椂锛屽鏋滃瓨鍦ㄦ棫鐨勮揣浣嶇粦瀹氭暟鎹紙鍑哄簱閬楃暀椤圭洰锛夌洿鎺ュ垹闄�+ //TN_CG_Detail cgDetailOld = null; + //if (locCntrRelOld != null) { + // cgDetailOld = db.Queryable<TN_CG_Detail>() + // .Where(d => d.S_CNTR_CODE == locCntrRelOld.S_CNTR_CODE).First(); + //} + + // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�+ //var cntId = Guid.NewGuid().ToString("D"); + //var CgId = Guid.NewGuid().ToString("D"); + var cntId = GenerateNo("瀹瑰櫒鍙�, "CN"); + //var cgId = GenerateNo("鐗╂枡鍙�, "CG"); + var cgId = string.IsNullOrEmpty(model.ItemCode) ? GenerateNo("鐗╂枡鍙�, "CG") : model.ItemCode ; + + // 棣栨鍏ュ簱锛氱粦瀹氫俊鎭紝鍏堝皢璧风偣浣嶇疆涓庡鍣ㄧ粦瀹氾紝瀹瑰櫒涓庣墿鏂欑粦瀹�+ var locCntrRel = new TN_Loc_Container() { + S_LOC_CODE = startLoc.S_CODE, + S_CNTR_CODE = cntId, + N_LOCK_STATE = string.IsNullOrEmpty(model.ItemCode) ? 0 : 1, + }; + + var cgDetail = new TN_CG_Detail() { + S_ITEM_CODE = cgId, + S_CNTR_CODE = cntId, + //S_ITEM_NAME = model.ItemName, + }; + + startLoc.N_CURRENT_NUM = 1; + + var endLocCode = "0"; // 鍋囩殑榛樿缁堢偣鍦板潃 + + // 鎸囧畾璐т綅鎺掑彿锛堜笉鑳戒负绌恒�绌哄瓧绗︿覆鎴栫┖鏍硷級 + if (model.Row != null && model.Row.Trim() != "") { + endLocCode = model.Row; // 鐢ㄦ帓鍙峰瓧绗︿覆褰撳仛鍋囧湴鍧�+ if (!int.TryParse(model.Row.Trim(), out int row)) { + return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷"); + } + // 璐ф灦鎺掑彿鍙兘鏄�0 - 8锛�11-118锛�+ if (row <= 110 || row > 118) { + return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�11-118涔嬮棿鐨勬暣鏁�); + } + } + + var task = WCSHelper.BuildInboundTask(startLoc, endLocCode, cntId); + LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ + // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣�+ using (var tran = db.Ado.UseTran()) { + //if (locCntrRelOld != null) { + // if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // return BuildSimpleResult(500, + // $"鍒犻櫎璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRelOld.S_LOC_CODE}锛屽鍣▄locCntrRelOld.S_CNTR_CODE}"); + // } + //} + //if (cgDetailOld != null) { + // if (db.Deleteable<TN_CG_Detail>(cgDetailOld).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // return BuildSimpleResult(500, + // $"鍒犻櫎鏃у鍣ㄨ揣鍝佹槑缁嗚〃澶辫触锛氬鍣▄cgDetailOld.S_CNTR_CODE}锛岀墿鏂檣cgDetailOld.S_ITEM_CODE}"); + // } + //} + + if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRel.S_LOC_CODE}锛屽鍣▄locCntrRel.S_CNTR_CODE}"); + } + + if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { + tran.RollbackTran(); + 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, + it.N_CURRENT_NUM + }).ExecuteCommand() <= 0) { tran.RollbackTran(); return BuildSimpleResult(500, $"鏇存柊璧风偣璐т綅閿佺姸鎬佸け璐ワ細璧风偣璐т綅{startLoc.S_CODE}"); @@ -352,7 +480,6 @@ LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask"); } - using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Task>(task).UpdateColumns(a => a.S_END_LOC).ExecuteCommand() <= 0) { tran.RollbackTran(); @@ -396,13 +523,17 @@ .First(); if (startLoc == null) { - return BuildSimpleResult(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 BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡"); + return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙嚭搴撶殑鐗╂枡锛�); + } + + if (locCntrRel.N_LOCK_STATE == 0) { + return BuildSimpleResult(5, $"璧风偣浣嶇疆'{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" && endAreas.Contains(a.S_AREA_CODE)); @@ -597,9 +728,9 @@ } else { - return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�); + //return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�); - // return CancelTaskIfForced(model, task); // 澶囩敤鍑芥暟锛屽鏋滅敳鏂硅姹備换鍔℃墽琛屼腑涔熷彇娑堬紝鍐嶈皟鐢�+ return CancelTaskIfForced(model, task); // 澶囩敤鍑芥暟锛屽鏋滅敳鏂硅姹備换鍔℃墽琛屼腑涔熷彇娑堬紝鍐嶈皟鐢� } } @@ -608,18 +739,91 @@ } } - public static SimpleResult CancelTaskIfForced(CancleTaskInfo model, TN_Task task) { - return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�); - } + public static SimpleResult CancelTaskIfForced(CancelTaskInfo model, TN_Task task) { - + var db = new SqlHelper<object>().GetInstance(); + var info = ""; + try { + var startloc = 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 (startloc != null) { + startloc.N_LOCK_STATE = 0; + startloc.S_LOCK_STATE = "鏃�; + //starloc.N_CURRENT_NUM = 0; + startloc.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; + } + + if (task.N_B_STATE == 1) { + if (!int.TryParse(task.S_EQ_TASK_CODE, out var code)) { + LogHelper.Info($"褰撳墠浠诲姟{task.S_CODE}娌℃湁鎵惧埌瀵瑰簲鐨勫浗鑷狝GV orderId锛�); + } + else { + var res = GZRobot.CancelGZOrder(code); + if (!res) { + LogHelper.Info($"鍥借嚜AGV鍙栨秷浠诲姟澶辫触锛�, "HosttoagvTask"); + } + else { + LogHelper.Info($"鍥借嚜AGV鍙栨秷浠诲姟鎴愬姛锛�, "HosttoagvTask"); + } + } + } + + task.N_B_STATE = 4; + task.S_B_STATE = "鍙栨秷"; + + // 鍓嶉潰閿佺姸鎬佺殑閮ㄥ垎涓嶉渶瑕佷慨鏀癸細鏃犺鏈夋病鏈夋仮澶嶏紝閮藉己鍒舵仮澶嶏紝鏈�粓缁撴灉閮芥槸鏃犻攣鐘舵� + + // 宸叉墽琛岋細闇�娣诲姞鐨勯�杈戯細閽堝瑙i攣/缁戝畾鐨勮揣浣嶅鍣ㄨ〃锛堝ソ鍍忎笉闇�鍏冲績锛屽厛涓嶅仛浠讳綍鎿嶄綔锛�+ + using (var tran = db.Ado.UseTran()) { + if (db.Updateable<TN_Location>(startloc).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触锛氫慨鏀硅捣鐐硅揣浣嶉攣鐘舵�澶辫触"; + return BuildSimpleResult(500, info); + } + + if (endloc != null) { + if (db.Updateable<TN_Location>(endloc).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触锛氫慨鏀圭粓鐐硅揣浣嶉攣鐘舵�澶辫触"; + return BuildSimpleResult(500, info); + } + } + + if (db.Updateable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + info = $"浠诲姟{task.S_CODE}鍙栨秷澶辫触"; + return BuildSimpleResult(500, info); + } + + tran.CommitTran(); + info = $"浠诲姟{task.S_CODE}鍙栨秷鎴愬姛"; + return BuildSimpleResult(0, info); + } + } + catch (Exception) { + throw; // 澶栭儴catch + } + + //return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�); + } public static ErpResult InboundDataSync(InboundDataSyncInfo model) { //return BuildErpResult(1, "娴嬭瘯"); var db = new SqlHelper<object>().GetInstance(); try { - if (model.stockTransactions.Count == 0) { + if (model.stockTransactions == null && model.stockTransactions.Count == 0) { return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃"); } @@ -631,7 +835,7 @@ foreach (var transaction in model.stockTransactions) { var recordOld = db.Queryable<TN_Inbound_DataRecord>() - .Where(r => r.S_LOCATION_CODE == transaction.locationCode).First(); + .Where(r => r.S_LOCATION_CODE == "HJQ-" + transaction.locationCode.Trim()).First(); if (recordOld != null) { deleteRecordOldList.Add(recordOld); //errList.Add(recordOld); @@ -640,7 +844,7 @@ // 鍐欏叆璁板綍琛� var record = new TN_Inbound_DataRecord { - S_LOCATION_CODE = transaction.locationCode, + S_LOCATION_CODE = "HJQ-" + transaction.locationCode.Trim(), S_STOCK_TRANS = transaction.stockTransactionId, S_ITEM_CODE = transaction.itemCode, S_ITEM_NAME = transaction.itemName, @@ -718,7 +922,7 @@ var db = new SqlHelper<object>().GetInstance(); try { - if (model.materialIssues.Count == 0) { + if (model.materialIssues == null || model.materialIssues.Count == 0) { return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃"); } @@ -729,7 +933,7 @@ var deleteRecordOldList = new List<TN_Outbound_DataRecord>(); foreach (var issue in model.materialIssues) { var recordOld = db.Queryable<TN_Outbound_DataRecord>() - .Where(r => r.S_LOCATION_CODE == issue.locationCode).First(); + .Where(r => r.S_LOCATION_CODE == "HJQ-" + issue.locationCode.Trim()).First(); if (recordOld != null) { deleteRecordOldList.Add(recordOld); //errList.Add(recordOld); @@ -738,7 +942,7 @@ // 鍐欏叆璁板綍琛� var record = new TN_Outbound_DataRecord { - S_LOCATION_CODE = issue.locationCode, + S_LOCATION_CODE = "HJQ-" + issue.locationCode.Trim(), S_ORDER_NO = issue.withdrawalOrderNo, S_ITEM_CODE = issue.itemCode, S_ITEM_NAME = issue.itemName, -- Gitblit v1.9.1