From c2d2f4eb78c54bdfdb6ffb0df5932751d538ed14 Mon Sep 17 00:00:00 2001 From: 杨张扬 <634643841@qq.com> Date: 星期一, 14 七月 2025 17:35:02 +0800 Subject: [PATCH] 新增PDA搬送,线边空托到原材料上线口 --- device/TcpServer.cs | 2 wms/SpecHelper.cs | 8 + util/Settings.cs | 6 + api/ApiHelper.cs | 204 ++++++++++++++++++++++++++++++++++++++-- config/config.json | 5 api/ApiModel.cs | 5 + core/WCSCore.cs | 7 - config/configDesc.txt | 8 api/MoboxController.cs | 12 ++ 9 files changed, 233 insertions(+), 24 deletions(-) diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index 39fb574..b5da79d 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -123,10 +123,12 @@ internal static SimpleResult PDAFullCheckIn(PDAFullCheckInfo model) { LogHelper.Info("瑙﹀彂API锛歅DA婊℃墭澶嶆鍒ゆ柇" + JsonConvert.SerializeObject(model), "API"); - var db = new SqlHelper<object>().GetInstance(); + var result = new SimpleResult();//杩斿洖缁撴灉 try { + var db = new SqlHelper<object>().GetInstance(); + var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == model.rfId); if (locCnt == null) { @@ -323,6 +325,179 @@ } /// <summary> + /// 绾胯竟绌烘墭鍒板師鏉愭枡杈撻�绾�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static SimpleResult EmptyLineToLine(EmptyLineToLineInfo model) + { + LogHelper.Info("瑙﹀彂API锛氱嚎杈圭┖鎵樺埌鍘熸潗鏂欒緭閫佺嚎" + JsonConvert.SerializeObject(model), "API"); + var result = new SimpleResult();//杩斿洖缁撴灉 + try + { + var db = new SqlHelper<object>().GetInstance(); + + var startLoc = db.Queryable<TN_Location>().First(o => o.S_CODE == model.startLoc); + if (startLoc == null) + { + result.resultCode = 1; + result.resultMsg = $"鏁版嵁搴撲腑鏈壘鍒版璐т綅锛歿model.startLoc}"; + LogHelper.Info(result.resultMsg); + return result; + } + if (startLoc.N_CURRENT_NUM == 1 || db.Queryable<TN_Loc_Container>().Any(a=>a.S_LOC_CODE==model.startLoc)) + { + result.resultCode = 2; + result.resultMsg = $"姝よ揣浣嶏細{model.startLoc}锛屽凡缁戝畾鎵樼洏"; + LogHelper.Info(result.resultMsg); + return result; + } + if (startLoc.N_LOCK_STATE != 0 || startLoc.S_LOCK_STATE != "鏃�) + { + result.resultCode = 3; + result.resultMsg = $"姝よ揣浣嶏細{model.startLoc}锛屽凡涓婇攣"; + LogHelper.Info(result.resultMsg); + return result; + } + if (startLoc.C_ENABLE != "Y") + { + result.resultCode = 4; + result.resultMsg = $"姝よ揣浣嶏細{model.startLoc}锛屾湭鍚敤"; + LogHelper.Info(result.resultMsg); + return result; + } + var startLocArea = Settings.Areas[13]; + if (startLoc.S_AREA_CODE != startLocArea) + { + result.resultCode = 5; + result.resultMsg = $"姝よ揣浣嶏細{model.startLoc}锛屼笉灞炰簬绾胯竟绌烘墭鍖簕startLocArea}"; + LogHelper.Info(result.resultMsg); + return result; + } + + + var endLocIndex = Settings.LineSorting; + var endLocLine = Settings.ProductionLines.FirstOrDefault(a => a.Sorting == endLocIndex); + if (endLocLine == null) + { + result.resultCode = 6; + result.resultMsg = $"閰嶇疆鏂囦欢涓湭鎵惧埌搴忓彿涓猴細{endLocIndex}鐨勫師鏉愭枡浜х嚎鐨勪俊鎭�; + LogHelper.Info(result.resultMsg); + return result; + } + var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == endLocLine.PointIn); + if (endLoc == null) + { + result.resultCode = 7; + result.resultMsg = $"鏁版嵁搴撲腑鏈壘鍒板師鏉愭枡浜х嚎绌烘墭涓婄嚎鍙o細{endLocLine.PointIn}"; + LogHelper.Info(result.resultMsg); + return result; + } + var endLocArea = Settings.Areas[14]; + if (endLoc.S_AREA_CODE != endLocArea) + { + result.resultCode = 8; + result.resultMsg = $"姝よ揣浣嶏細{endLoc.S_CODE}锛屼笉灞炰簬鍘熸潗鏂欎骇绾跨┖鎵樺尯{endLocArea}"; + LogHelper.Info(result.resultMsg); + return result; + } + if (endLoc.N_CURRENT_NUM == 1 || db.Queryable<TN_Loc_Container>().Any(a => a.S_LOC_CODE == endLocLine.PointIn)) + { + result.resultCode = 9; + result.resultMsg = $"姝よ揣浣嶏細{model.startLoc}锛屽凡缁戝畾鎵樼洏"; + LogHelper.Info(result.resultMsg); + return result; + } + if (endLoc.N_LOCK_STATE != 0 || endLoc.S_LOCK_STATE != "鏃�) + { + result.resultCode = 10; + result.resultMsg = $"姝よ揣浣嶏細{model.startLoc}锛屽凡涓婇攣"; + LogHelper.Info(result.resultMsg); + return result; + } + if (endLoc.C_ENABLE != "Y") + { + result.resultCode = 11; + result.resultMsg = $"姝よ揣浣嶏細{model.startLoc}锛屾湭鍚敤"; + LogHelper.Info(result.resultMsg); + return result; + } + var Cnt = Guid.NewGuid().ToString("D"); + + + using (var trans = db.Ado.UseTran()) + { + startLoc.N_CURRENT_NUM = 1; + startLoc.N_LOCK_STATE = 2; + startLoc.S_LOCK_STATE = "鍑哄簱閿�; + + endLoc.N_LOCK_STATE = 1; + endLoc.S_LOCK_STATE = "鍏ュ簱閿�; + + var locCnt = new TN_Loc_Container() + { + S_LOC_CODE = startLoc.S_CODE, + S_CNTR_CODE = Cnt, + }; + + var task = new TN_Task() + { + S_CODE = WCSHelper.GenerateTaskNo(), + S_START_AREA = startLoc.S_AREA_CODE, + S_END_AREA = endLoc.S_AREA_CODE, + S_START_LOC = startLoc.S_CODE, + S_END_LOC = endLoc.S_CODE, + S_TYPE = "绾胯竟绌烘墭涓婄嚎", + N_PRIORITY = 3, + N_SCHEDULE_TYPE = 1, + N_B_STATE = 0, + S_B_STATE = "绛夊緟", + S_CNTR_CODE = Cnt, + }; + + if ( + db.Updateable<TN_Location>(startLoc).UpdateColumns(it=>new {it.N_CURRENT_NUM,it.N_LOCK_STATE,it.S_LOCK_STATE }).ExecuteCommand() == 1 && + db.Updateable<TN_Location>(endLoc).UpdateColumns(it=>new {it.N_LOCK_STATE,it.S_LOCK_STATE }).ExecuteCommand() == 1 && + db.Insertable<TN_Loc_Container>(locCnt).ExecuteCommand() == 1 && + db.Insertable<TN_Task>(task).ExecuteCommand() == 1 + ) + { + if (Settings.LineSorting < Settings.ProductionLines.Count - 1) + { + Settings.LineSorting++; + } + else + { + Settings.LineSorting = 0; + } + + + trans.CommitTran(); + result.resultCode = 0; + result.resultMsg = $"鍒涘缓 绾胯竟绌烘墭涓婄嚎 浠诲姟鎴愬姛锛岃捣鐐癸細{startLoc.S_CODE}锛岀粓鐐癸細{endLoc.S_CODE}"; + LogHelper.Info(result.resultMsg); + return result; + } + else + { + trans.RollbackTran(); + result.resultCode = 12; + result.resultMsg = $"鍒涘缓 绾胯竟绌烘墭涓婄嚎 浠诲姟澶辫触锛岃捣鐐癸細{startLoc.S_CODE}锛岀粓鐐癸細{endLoc.S_CODE}"; + LogHelper.Info(result.resultMsg); + return result; + } + } + } + catch(Exception ex) + { + result.resultCode = -1; + result.resultMsg = $"PDA婊℃墭澶嶆鍒ゆ柇锛屽彂鐢熶簡寮傚父锛歿ex.Message}"; + LogHelper.Info(result.resultMsg); + return result; + } + } + + /// <summary> /// 浜哄伐娆″搧鍥炵倝 /// </summary> /// <param name="model"></param> @@ -330,11 +505,13 @@ internal static SimpleResult PDAReturnReset(PDAReturnResetInfo model) { LogHelper.Info("瑙﹀彂API锛氫汉宸ユ鍝佸洖鐐� + JsonConvert.SerializeObject(model), "API"); - var db = new SqlHelper<object>().GetInstance(); + var result = new SimpleResult();//杩斿洖缁撴灉 try { + var db = new SqlHelper<object>().GetInstance(); + var startLoc = db.Queryable<TN_Location>().First(o => o.S_CODE == model.startLoc && o.N_CURRENT_NUM ==0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE=="鏃� && o.S_AREA_CODE == Settings.Areas[4]); if (startLoc == null) { @@ -679,11 +856,13 @@ /// </summary> internal static SimpleResult PDAFullInArea(PDAFullInAreaInfo model) { - var db = new SqlHelper<object>().GetInstance(); + var result = new SimpleResult();//杩斿洖缁撴灉 LogHelper.Info("瑙﹀彂API锛歅DA婊℃墭涓嬬嚎鍏ュ簱" + JsonConvert.SerializeObject(model), "API"); try { + var db = new SqlHelper<object>().GetInstance(); + if (model.RfId.Length < 16) { result.resultCode = 1; @@ -971,10 +1150,11 @@ LogHelper.Info("瑙﹀彂API锛氭弧鎵樺嚭搴撲笂绾� + JsonConvert.SerializeObject(model), "API"); var result = new SimpleResult(); - var db = new SqlHelper<object>().GetInstance(); + TN_Location endLoc = new TN_Location(); try { + var db = new SqlHelper<object>().GetInstance(); if (model.EndLoc != string.Empty)//鎸囧畾缁堢偣璐т綅 { endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.EndLoc); @@ -1120,13 +1300,14 @@ { LogHelper.Info("瑙﹀彂API锛氱┖鎵樹笅绾垮爢鍙� + JsonConvert.SerializeObject(model), "API"); - var result = new SimpleResult(); - var db = new SqlHelper<object>().GetInstance(); + TN_Location startLoc = new TN_Location(); try { + var db = new SqlHelper<object>().GetInstance(); + var startLocCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc && a.S_CNTR_CODE == model.cntID); if (startLocCntrRel != null) { @@ -1221,13 +1402,13 @@ LogHelper.Info("瑙﹀彂API锛氫綑鏂欎笅绾垮叆搴� + JsonConvert.SerializeObject(model), "API"); var result = new SimpleResult(); - var db = new SqlHelper<object>().GetInstance(); + TN_Location startLoc_Old = new TN_Location(); TN_Location startLoc_New = new TN_Location(); try { - + var db = new SqlHelper<object>().GetInstance(); var cG_Detail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == model.cntID); if (cG_Detail == null) { @@ -1500,10 +1681,12 @@ LogHelper.Info("瑙﹀彂API锛氫汉宸ユ媶鐩樺叆搴� + JsonConvert.SerializeObject(model), "API"); var result = new SimpleResult(); - var db = new SqlHelper<object>().GetInstance(); + string cntLog = $"鏃х殑瀹瑰櫒鍙穥model.old_CntId}"; try { + var db = new SqlHelper<object>().GetInstance(); + if (model.new_IsOK == model.old_IsOK) { result.resultCode = 19; @@ -1840,9 +2023,10 @@ LogHelper.Info("瑙﹀彂API锛氫汉宸ュ垱寤虹偣鍒扮偣浠诲姟" + JsonConvert.SerializeObject(model), "API"); var result = new SimpleResult(); - var db = new SqlHelper<object>().GetInstance(); try { + var db = new SqlHelper<object>().GetInstance(); + var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc); if(!(startLoc != null && startLoc.N_LOCK_STATE == 0 && startLoc.S_LOCK_STATE == "鏃�)) diff --git a/api/ApiModel.cs b/api/ApiModel.cs index a0005e7..7e0e8f7 100644 --- a/api/ApiModel.cs +++ b/api/ApiModel.cs @@ -464,5 +464,10 @@ public string staff { get; set; } = "None";//鎿嶄綔浜� public string shift { get; set; } = "None";//鐝 } + + public class EmptyLineToLineInfo + { + public string startLoc { get; set; }//璧风偣 + } } } diff --git a/api/MoboxController.cs b/api/MoboxController.cs index b163687..a21f68b 100644 --- a/api/MoboxController.cs +++ b/api/MoboxController.cs @@ -224,5 +224,17 @@ { return ApiHelper.CreateP2PTask(model); } + + /// <summary> + /// 绾胯竟绌烘墭鍒板師鏉愭枡杈撻�绾�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + [HttpPost] + [Route("EmptyLineToLine")] + public SimpleResult EmptyLineToLine(EmptyLineToLineInfo model) + { + return ApiHelper.EmptyLineToLine(model); + } } } diff --git a/config/config.json b/config/config.json index b8e6c1e..9d81c1b 100644 --- a/config/config.json +++ b/config/config.json @@ -4,7 +4,7 @@ "SqlServer": "Data Source=127.0.0.1;Initial Catalog=DoubleCoinTest;User ID=sa;Password=123456;", "TCPServerIP": "127.0.0.1", "TCPServerPort": 8085, - "Areas": [ "SQKQ1", "SQKQ2", "SQKQ3", "SQKQ4", "SQKQ5", "SQKQ6", "SQKQ7", "SQKQ8", "SQKQ9", "SQKQ10", "SQKQ11", "SQKQ12", "SQKQ13" ], + "Areas": [ "SQKQ0", "SQKQ1", "SQKQ2", "SQKQ3", "SQKQ4", "SQKQ5", "SQKQ6", "SQKQ7", "SQKQ8", "SQKQ9", "SQKQ10", "SQKQ11", "SQKQ12", "线边空托区编码", "原材料产线空托区编码" ], "S7TestMoni": true, "IsOpenScanCode": true, "ProductionLine": [ @@ -14,7 +14,8 @@ "ProductionLine_Rack": 0, "ProductionLine_Slot": 1, "PointIn": "SQKQ1-1", - "PointOut": "SQKQ1-2" + "PointOut": "SQKQ1-2", + "Sorting": 0 } ], "AgvScanDevice": [ diff --git a/config/configDesc.txt b/config/configDesc.txt index 080f22a..158f271 100644 --- a/config/configDesc.txt +++ b/config/configDesc.txt @@ -4,10 +4,10 @@ "HostToAgvServerUrl": "http://127.0.0.1:9988/HostToAGV.cgi",//杩炴帴AGV绠$悊绯荤粺鐨勫湴鍧� "TCPServerIP": "127.0.0.1",//Socket鏈嶅姟绔湴鍧�紝鐢ㄤ簬杩炴帴AGV璇诲崱鍣ㄥ苟閫氳 "TCPServerPort": 8085,//Socket鏈嶅姟绔鍙o紝鐢ㄤ簬杩炴帴AGV璇诲崱鍣ㄥ苟閫氳 -"Areas": [ "SQKQ1", "SQKQ2", "SQKQ3", "SQKQ4", "SQKQ5" , "SQKQ6", "SQKQ7", "SQKQ8", "SQKQ9", "SQKQ10" , "SQKQ11", "SQKQ12" ], -// 鍘熸潗鏂欎骇绾垮簱鍖篠QKQ1鈥斺�銆嬫弧鎵樼紦瀛樺簱鍖篠QKQ2鈥斺�銆嬪姞宸ョ嚎绾胯竟鍖篠QKQ3鈥斺�銆嬬┖鎵樺爢鍙犲尯SQKQ4鈥斺�銆嬬┖鎵樼紦瀛樺簱鍖篠QKQ5鈥斺�銆�-//浜哄伐鎷嗙洏鍖篠QKQ6鈥斺�銆嬩汉宸ョ┖鎵樺尯SQKQ7鈥斺�銆嬩汉宸ユ娊妫�尯SQKQ8鈥斺�銆嬫媶鐩樹笉鍚堟牸鍖篠QKQ9鈥斺�銆嬬О閲嶅尯SQKQ10 -//鈥斺�銆嬩綑鏂欒捣鐐瑰尯SQKQ11鈥斺�銆嬫鍝佸洖鐐夊尯SQKQ12 鈥斺�銆嬭繃鏈熸殏瀛樺尯SQKQ13 +"Areas": [ "SQKQ0", "SQKQ1", "SQKQ2", "SQKQ3", "SQKQ4" , "SQKQ5", "SQKQ6", "SQKQ7", "SQKQ8", "SQKQ9" , "SQKQ10", "SQKQ11" , "SQKQ12", "SQKQ13", "SQKQ14" ], +// 鍘熸潗鏂欎骇绾垮簱鍖篠QKQ0鈥斺�銆嬫弧鎵樼紦瀛樺簱鍖篠QKQ1鈥斺�銆嬪姞宸ョ嚎绾胯竟鍖篠QKQ2鈥斺�銆嬬┖鎵樺爢鍙犲尯SQKQ3鈥斺�銆嬬┖鎵樼紦瀛樺簱鍖篠QKQ4鈥斺�銆�+//浜哄伐鎷嗙洏鍖篠QKQ5鈥斺�銆嬩汉宸ョ┖鎵樺尯SQKQ6鈥斺�銆嬩汉宸ユ娊妫�尯SQKQ7鈥斺�銆嬫媶鐩樹笉鍚堟牸鍖篠QKQ8鈥斺�銆嬬О閲嶅尯SQKQ9 +//鈥斺�銆嬩綑鏂欒捣鐐瑰尯SQKQ10鈥斺�銆嬫鍝佸洖鐐夊尯SQKQ11 鈥斺�銆嬭繃鏈熸殏瀛樺尯SQKQ12 鈥斺�銆嬬嚎杈圭┖鎵樺尯SQKQ13 鈥斺�銆嬪師鏉愭枡浜х嚎绌烘墭搴撳尯SQKQ14 "S7TestMoni": true,//濡傛灉涓簍rue锛岃烦杩嘢7閫氳娴嬭瘯锛屽彧鑳戒娇鐢≒DA "IsOpenScanCode": true,//濡傛灉涓簍rue锛屽紑鍚鍗″櫒鎵爜鍔熻兘锛屽鏋滀负false锛屼笉寮�惎 diff --git a/core/WCSCore.cs b/core/WCSCore.cs index 0d76837..073e06f 100644 --- a/core/WCSCore.cs +++ b/core/WCSCore.cs @@ -103,6 +103,8 @@ WCSHelper.UpdateStatus(tN_Task, "鍗歌揣瀹屾垚");//浠诲姟鐘舵�鏀规垚鍗歌揣瀹屾垚 TaskProcess.OperateStatus(tN_Task, 6);//缁堢偣瀹瑰櫒璐т綅缁戝畾,瑙i攣缁堢偣 + SpecHelper.RestEndLoc(tN_Task); + Task task2 = Task.Run(() => { if (tN_Task.S_TYPE == "绌烘墭鍑哄簱鍏ョ嚎") @@ -163,11 +165,6 @@ break; case 2: WCSHelper.End(tN_Task);//浠诲姟鐘舵�鏀规垚缁撴潫 - - Task task16 = Task.Run(() => - { - SpecHelper.RestEndLoc(tN_Task); - }); break; case 7: diff --git a/device/TcpServer.cs b/device/TcpServer.cs index d72eef8..1b17450 100644 --- a/device/TcpServer.cs +++ b/device/TcpServer.cs @@ -142,7 +142,7 @@ { saoMa.Add(remote_ip, 3); } - if (messageBytes.Length <= 20 && messageBytes.Length > 0) + if (messageBytes.Length <= 20 && messageBytes.Length > 0)//闀垮害涓嶅鏃剁洿鎺ュ垽鏂壂鐮佸け璐� { saoMa[remote_ip] = 3;//鏈壂鍒扮爜 } diff --git a/util/Settings.cs b/util/Settings.cs index f01f441..2220bfd 100644 --- a/util/Settings.cs +++ b/util/Settings.cs @@ -28,6 +28,11 @@ public static List<ProductionLine> ProductionLines { get; set; } /// <summary> + /// 浜х嚎鐨勫簭鍙风储寮�+ /// </summary> + public static int LineSorting { get; set; } = 0; + + /// <summary> /// 鎵�湁绉伴噸璁惧淇℃伅鍒楄〃 /// </summary> public static List<WeightDevice> WeightDevices { get; set; } @@ -127,6 +132,7 @@ public int ProductionLine_Slot { get; set; }//浜х嚎鐨勬彃妲藉彿 public string PointIn { get; set; }//浜х嚎鐨勭┖鎵樹笂绾夸綅 public string PointOut { get; set; }//浜х嚎鐨勬弧鎵樹笅绾夸綅 + public int Sorting { get; set; }//浜х嚎鐨勬帓搴� } /// <summary> diff --git a/wms/SpecHelper.cs b/wms/SpecHelper.cs index afce956..539ffa8 100644 --- a/wms/SpecHelper.cs +++ b/wms/SpecHelper.cs @@ -280,14 +280,18 @@ } /// <summary> - /// 閲嶇疆缁堢偣璐т綅锛屽彧閽堝鍘荤嚎杈圭殑璐у搧 + /// 閲嶇疆缁堢偣璐т綅锛屽彧閽堝鍘荤嚎杈圭殑璐у搧鍜屽幓鍘熸潗鏂欎骇绾跨殑绌烘墭 /// </summary> /// <param name="tN_Task"></param> internal static void RestEndLoc(TN_Task tN_Task) { try { - if (tN_Task.S_END_AREA == Settings.Areas[2] || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎")) + if ( + tN_Task.S_END_AREA == Settings.Areas[2] || tN_Task.S_TYPE.Contains("婊℃墭鍑哄簱涓婄嚎") || + Settings.ProductionLines.Select(a=>a.PointIn).ToList().Contains(tN_Task.S_END_LOC) || + tN_Task.S_TYPE.Contains("绾胯竟绌烘墭涓婄嚎") + ) { var db = new SqlHelper<object>().GetInstance(); -- Gitblit v1.9.1