From abf782e4e9d505184652635aa0912781f572f843 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期四, 24 七月 2025 17:26:41 +0800 Subject: [PATCH] 后端实现添加物料绑定货位, 优化货位容器绑定时容器表插入, 多个物料信息记录的功能 --- api/ApiHelper.cs | 1014 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 764 insertions(+), 250 deletions(-) diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index 9b0fc26..2466c03 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -9,17 +9,16 @@ using HH.WCS.Mobox3.AnGang.util; using HH.WCS.Mobox3.AnGang.wms; +using Newtonsoft.Json; + +using Swashbuckle.Swagger; + using static HH.WCS.Mobox3.AnGang.api.ApiModel; using static HH.WCS.Mobox3.AnGang.api.OtherModel; namespace HH.WCS.Mobox3.AnGang.api { public class ApiHelper { - /// <summary> - /// 浜у搧鍏ュ簱(PDA) - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - internal static SimpleResult Inbound(InboundInfo model) { + public static SimpleResult InboundData(InboundDataInfo model) { var taskName = TaskName.浜у搧鍏ュ簱; var db = new SqlHelper<object>().GetInstance(); @@ -30,7 +29,7 @@ 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 => a.N_CURRENT_NUM == 0) .Where(a => startAreas.Contains(a.S_AREA_CODE)) .First(); @@ -38,32 +37,29 @@ 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_LOC_CODE = startLoc.S_CODE, // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞 + N_LOCK_STATE = locCntrRel.N_LOCK_STATE, + S_ITEM_SHORT_DESC = string.IsNullOrEmpty(model.ItemShortDesc) ? "" : model.ItemShortDesc, + S_ITEM_NAME = string.IsNullOrEmpty(model.ItemName) ? "" : model.ItemName, + F_QTY = model.ItemCount, // 0f by default + }; + + var cntr = new TN_Container() { + S_CODE = cntId, + N_DETAIL_COUNT = 1 }; startLoc.N_CURRENT_NUM = 1; @@ -76,9 +72,9 @@ if (!int.TryParse(model.Row.Trim(), out int row)) { return BuildSimpleResult(2, $"{model.Row} 涓嶅悎娉曪細鏃犳硶杞垚鏁存暟绫诲瀷"); } - // 璐ф灦鎺掑彿鍙兘鏄�0 - 8 - if (row <= 0 || row > 8) { - return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�); + // 璐ф灦鎺掑彿鍙兘鏄�0 - 8锛�11-118锛�+ if (row <= 110 || row > 118) { + return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�11-118涔嬮棿鐨勬暣鏁�); } } @@ -87,19 +83,10 @@ // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣� 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_Container>(cntr).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鎻掑叆瀹瑰櫒琛ㄥ叧绯诲け璐� 瀹瑰櫒{cntr.S_CODE}, 鏄庣粏鏉℃暟={cntr.N_DETAIL_COUNT}"); } if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { @@ -112,119 +99,6 @@ 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}"); - } - - 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}"); - } - } - - internal static string GenerateNo(string snType, string prefix) { - var id = SYSHelper.GetSerialNumber(snType, prefix); - var date = DateTime.Now.ToString("yyMMdd"); - return $"{prefix}{date}-{id.ToString().PadLeft(5, '0')}"; // 褰㈠锛欳N250525-00011 - } - - /// <summary> - /// 鍏煎Inbound鍜孭artInbound鐨勫姛鑳斤紝澶囩敤锛堥棶棰橈細鍑哄簱鍚庢棤娉曡嚜鍔ㄦ竻鏁版嵁锛屽鑷村叆搴撳悗鍥炲簱锛�- /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public static SimpleResult InboundTwoWays(InboundInfo 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)灞炰簬鍙栨斁璐у尯"); - } - - // 瀹瑰櫒 ID 鍜�鐗╂枡 ID 鏈寚瀹氾紝鐢辩郴缁熺洿鎺ョ敓鎴�- //var cntId = Guid.NewGuid().ToString("D"); - //var CgId = Guid.NewGuid().ToString("D"); - var cntId = GenerateNo("瀹瑰櫒鍙�, "CN"); - var cgId = GenerateNo("鐗╂枡鍙�, "CG"); - - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(c => c.S_LOC_CODE == model.StartLoc).First(); - - // 鍙湁棣栨鍏ュ簱锛堝綋鍓嶆墭鐩樻湭缁戝畾鍦ㄨ捣鐐硅揣浣嶏級鏃禼gDetail璁剧疆鍊硷紝骞舵彃鍏�- // 鍚﹀垯锛宑gDetail涓虹┖锛屼唬琛ㄦ槸鍥炲簱浣滀笟锛堟鍓嶆湁缁戝畾杩囪捣鐐癸級 - TN_CG_Detail cgDetail = null; - if (locCntrRel == null) { - // 棣栨鍏ュ簱锛氭病鏈夌粦瀹氫俊鎭紝鍏堝皢璧风偣浣嶇疆涓庡鍣ㄧ粦瀹氾紝瀹瑰櫒涓庣墿鏂欑粦瀹�- locCntrRel = new TN_Loc_Container() { - S_LOC_CODE = startLoc.S_CODE, - S_CNTR_CODE = cntId, - }; - - cgDetail = new TN_CG_Detail() { - S_ITEM_CODE = cgId, - S_CNTR_CODE = cntId, - }; - } - - 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 - if (row <= 0 || row > 8) { - return BuildSimpleResult(2, $"璐ф灦鍙�{model.Row} 蹇呴』鏄�-8涔嬮棿鐨勬暣鏁�); - } - } - - var task = WCSHelper.BuildInboundTask(startLoc, endLocCode, cntId); - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- - // 鏃犺鏄惁閫夋嫨缁堢偣璐ф灦锛岄兘绛夊埌绉伴噸涔嬪悗鍐嶈绠楃粓鐐硅揣浣�- using (var tran = db.Ado.UseTran()) { - if (cgDetail != null) { - 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 { @@ -255,6 +129,221 @@ } } + internal static string GenerateNo(string snType, string prefix) { + var id = SYSHelper.GetSerialNumber(snType, prefix); + var date = DateTime.Now.ToString("yyMMdd"); + return $"{prefix}{date}-{id.ToString().PadLeft(5, '0')}"; // 褰㈠锛欳N250525-00011 + } + + /// <summary> + /// 鎸囧畾璐т綅鍏ュ簱 + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static SimpleResult InboundLoc(InboundLocInfo model) { + var taskName = TaskName.鎸囧畾璐т綅鍏ュ簱; + var db = new SqlHelper<object>().GetInstance(); + + var startAreas = Settings.Areas[AreaIndex.Q鍙栬揣鍖篯; + var endAreas = Settings.Areas[AreaIndex.H璐ф灦鍖篯; + + try { + // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級 + var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && startAreas.Contains(a.S_AREA_CODE)); + if (startLoc == null) { + return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.startLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栨斁璐у尯"); + } + + //var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc); + //if (locCntrRel == null) { + // return BuildSimpleResult(3, $"璧风偣浣嶇疆 {model.startLoc} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡"); + //} + + 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, + S_LOC_CODE = startLoc.S_CODE, // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞 + N_LOCK_STATE = locCntrRel.N_LOCK_STATE, + S_ITEM_SHORT_DESC = string.IsNullOrEmpty(model.ItemShortDesc) ? "" : model.ItemShortDesc, + S_ITEM_NAME = string.IsNullOrEmpty(model.ItemName) ? "" : model.ItemName, + F_QTY = model.ItemCount, // 0f by default + }; + + var cntr = new TN_Container() { + S_CODE = cntId, + N_DETAIL_COUNT = 1 + }; + + startLoc.N_CURRENT_NUM = 1; + + // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�+ 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)); + if (endLoc == null) { + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�); + } + + //var cntId = locCntrRel.S_CNTR_CODE; + var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ + using (var tran = db.Ado.UseTran()) { + if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鎻掑叆瀹瑰櫒琛ㄥ叧绯诲け璐� 瀹瑰櫒{cntr.S_CODE}, 鏄庣粏鏉℃暟={cntr.N_DETAIL_COUNT}"); + } + + 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 + }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + 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 BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, + $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + public static async Task<SimpleResult> AddCgDetail(AddCgDetailInfo model) { + var db = new SqlHelper<object>().GetInstance(); + try { + await Task.Delay(500); // 绛夊緟 Mobox 娣诲姞涓昏〃瀹屾垚 + + var startLoc = db.Queryable<TN_Location>() + .Where(a => a.S_CODE == model.LocCode) + .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") + .First(); + + if (startLoc == null) { + return BuildSimpleResult(1, $"璐т綅娌℃湁鎵惧埌!"); + } + if (startLoc.N_CURRENT_NUM != 0) { + return BuildSimpleResult(2, $"褰撳墠璐т綅宸茬粡鏈夊鍣�"); + } + + startLoc.N_CURRENT_NUM = 1; + + var cntId = GenerateNo("瀹瑰櫒鍙�, "CN"); + + var locCntrRel = new TN_Loc_Container() { + S_LOC_CODE = model.LocCode, + S_CNTR_CODE = cntId, + N_LOCK_STATE = string.IsNullOrEmpty(model.ItemCode) ? 0 : 1, + }; + + //var cgDetail = new TN_CG_Detail() { + // S_ITEM_CODE = model.ItemCode, + // S_CNTR_CODE = model.CntrCode, + // S_LOC_CODE = model.LocCode, // ADD锛氳ˉ鍏呴拡瀵筆DA鍒嗘嫞 + // N_LOCK_STATE = locCntrRel.N_LOCK_STATE, + // S_ITEM_SHORT_DESC = string.IsNullOrEmpty(model.ItemShortDesc) ? "" : model.ItemShortDesc, + // S_ITEM_NAME = string.IsNullOrEmpty(model.ItemName) ? "" : model.ItemName, + // F_QTY = model.ItemCount, // 0f by default + //}; + + var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_LOC_CODE == model.LocCode && d.S_CNTR_CODE == "鑷姩鐢熸垚").First(); + if (cgDetail == null) { + return BuildSimpleResult(3, $"Mobox 瀹瑰櫒璐у搧鏄庣粏琛ㄦ湭鍒涘缓鎴愬姛!"); + } + cgDetail.S_CNTR_CODE = cntId; + + var cntr = new TN_Container() { + S_CODE = cntId, + N_DETAIL_COUNT = 1 + }; + + using (var tran = db.Ado.UseTran()) { + + if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鎻掑叆瀹瑰櫒琛ㄥ叧绯诲け璐� 瀹瑰櫒{cntr.S_CODE}, 鏄庣粏鏉℃暟={cntr.N_DETAIL_COUNT}"); + } + + if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴琛ㄥけ璐ワ細璐т綅{locCntrRel.S_LOC_CODE}锛屽鍣▄locCntrRel.S_CNTR_CODE}"); + } + + if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(d => new { d.S_CNTR_CODE }).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}"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, $"鎴愬姛!"); + } + } + catch (Exception ex) { + return BuildSimpleResult(-1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } /// <summary> /// PDA閫夋嫨缁堢偣璐т綅 @@ -290,22 +379,30 @@ } var endLoc = new TN_Location(); - if (cgDetail.F_QTY > 2000) { + if (cgDetail.F_WEIGHT > 2000) { // 閲嶉噺瓒呰繃2t锛屾姤閿�- if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo { - type_name = "GET_DST", - interaction_info_id = int.Parse(task.S_EQ_TASK_CODE), - info_status = "error", - })) { - LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅鎴愬姛", "HosttoagvTask"); + if (GZRobot.TryGetInteractionInfoId(task.S_CODE, out var id1)) { + if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo { + type_name = "GET_DST", + interaction_info_id = id1, + info_status = "error", + })) { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅鎴愬姛", "HosttoagvTask"); + } + else { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅澶辫触", "HosttoagvTask"); + //return BuildSimpleResult(7, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触"); + } } else { - LogHelper.Info($"鍥借嚜AGV鎺ュ彈瓒呴噸鍙栨秷淇℃伅澶辫触", "HosttoagvTask"); + //return BuildSimpleResult(7, $"鑾峰彇浠诲姟{task.S_CODE}鐨刟gv interaction_info_id澶辫触锛�); + LogHelper.Info($"AGV锛氳幏鍙栦换鍔task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask"); + //return BuildSimpleResult(8, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触"); } - - return BuildSimpleResult(8, $"鐗╂枡閲嶉噺{cgDetail.F_QTY}瓒呰繃2t"); + + return BuildSimpleResult(8, $"鐗╂枡閲嶉噺{cgDetail.F_WEIGHT}瓒呰繃2t"); } - else if (cgDetail.F_QTY > 1500) { + else if (cgDetail.F_WEIGHT > 1500) { // 閲嶉噺瓒呰繃1.5t锛岄渶瑕侀�鎷�-2灞傝揣鏋� endLoc = db.Queryable<TN_Location>() .Where(a => a.S_CODE == model.EndLoc) @@ -315,7 +412,7 @@ .Where(a => a.N_LAYER <= 2) .First(); } - else if (cgDetail.F_QTY > 0) { + else if (cgDetail.F_WEIGHT > 0) { endLoc = db.Queryable<TN_Location>() .Where(a => a.S_CODE == model.EndLoc) .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") @@ -326,7 +423,7 @@ .First(); } else { - return BuildSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_QTY}"); + return BuildSimpleResult(5, $"鐗╂枡閲嶉噺淇℃伅涓嶅悎娉曪細{cgDetail.F_WEIGHT}"); } // 娌℃湁绗﹀悎鏉′欢鐨勮揣浣�@@ -338,18 +435,24 @@ task.S_END_LOC = endLoc.S_CODE; LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿� - if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo { - type_name = "GET_DST", - interaction_info_id = int.Parse(task.S_EQ_TASK_CODE), - info_status = "invalid", - return_value = LocationHelper.GetAgvSite(task.S_END_LOC), // 鐩墠浣跨敤agvsite - })) { - LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅鎴愬姛", "HosttoagvTask"); + if (GZRobot.TryGetInteractionInfoId(task.S_CODE, out var id2)) { + if (GZRobot.UpdateInteractInfo(new UpdateInteractInfo { + type_name = "GET_DST", + interaction_info_id = id2, + info_status = "invalid", + return_value = LocationHelper.GetAgvSite(task.S_END_LOC), // 鐩墠浣跨敤agvsite + })) { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅鎴愬姛", "HosttoagvTask"); + } + else { + LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask"); + return BuildSimpleResult(7, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触"); + } } else { - LogHelper.Info($"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触", "HosttoagvTask"); + LogHelper.Info($"AGV锛氳幏鍙栦换鍔task.S_CODE}鐨刬nteraction_info_id澶辫触锛�, "HosttoagvTask"); + return BuildSimpleResult(8, $"鍥借嚜AGV鎺ュ彈缁堢偣淇℃伅澶辫触"); } - using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Task>(task).UpdateColumns(a => a.S_END_LOC).ExecuteCommand() <= 0) { @@ -394,13 +497,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)); @@ -461,7 +568,7 @@ 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" && startAreas.Contains(a.S_AREA_CODE)); + var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.startLoc && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && startAreas.Contains(a.S_AREA_CODE)); if (startLoc == null) { return BuildSimpleResult(2, $"璧风偣浣嶇疆 {model.startLoc} 涓嶇鍚堝洖搴撴潯浠�); } @@ -506,6 +613,61 @@ tran.CommitTran(); return BuildSimpleResult(0, $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + + + /// <summary> + /// 璐т綅瀹瑰櫒瑙g粦 + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static SimpleResult UnbindLoc(UnbindLocInfo model) { + var db = new SqlHelper<object>().GetInstance(); + + var startAreas = Settings.Areas[AreaIndex.X鍗歌揣鍖篯; + //var endAreas = Settings.Areas[AreaIndex.H璐ф灦鍖篯; + + 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" && startAreas.Contains(a.S_AREA_CODE)); + if (startLoc == null) { + return BuildSimpleResult(1, $"璧风偣浣嶇疆{model.startLoc}涓嶅瓨鍦ㄦ垨涓嶆弧瓒宠姹傦細(1)娌℃湁閿佺姸鎬�(2)灞炰簬鍙栬揣鍖�); + } + + var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == model.startLoc); + if (locCntrRel == null) { + return BuildSimpleResult(2, $"褰撳墠璐т綅{model.startLoc}娌℃湁璐т綅瀹瑰櫒缁戝畾鍏崇郴锛屾棤闇�В缁戯紒"); + } + + var cgDetail = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCntrRel.S_CNTR_CODE); + if (cgDetail != null) { + return BuildSimpleResult(3, $"褰撳墠璐т綅{model.startLoc}瀹瑰櫒瀛樻斁鐨勭墿鏂欐暟閲忎笉涓�锛屾棤娉曡В缁戯紒"); + } + + startLoc.N_CURRENT_NUM = 0; + startLoc.T_MODIFY = DateTime.Now; + + using (var tran = db.Ado.UseTran()) { + if (db.Deleteable(locCntrRel).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鍒犻櫎璐т綅瀹瑰櫒缁戝畾鍏崇郴澶辫触!" + JsonConvert.SerializeObject(locCntrRel)); + } + + if (db.Updateable(startLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.T_MODIFY }).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鍒犻櫎璐т綅瀹瑰櫒缁戝畾鍏崇郴澶辫触!" + JsonConvert.SerializeObject(locCntrRel)); + } + + tran.CommitTran(); + return BuildSimpleResult(0, "瑙g粦瀹瑰櫒璐у搧鍏崇郴鎴愬姛"); } } catch (Exception ex) { @@ -595,9 +757,9 @@ } else { - return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�); + //return BuildSimpleResult(3, $"鍙湁浠诲姟鍙风姸鎬佷负 绛夊緟 鎴�宸叉帹閫�鐨勪换鍔℃墠鑳藉彇娑�); - // return CancelTaskIfForced(model, task); // 澶囩敤鍑芥暟锛屽鏋滅敳鏂硅姹備换鍔℃墽琛屼腑涔熷彇娑堬紝鍐嶈皟鐢�+ return CancelTaskIfForced(model, task); // 澶囩敤鍑芥暟锛屽鏋滅敳鏂硅姹備换鍔℃墽琛屼腑涔熷彇娑堬紝鍐嶈皟鐢� } } @@ -606,25 +768,110 @@ } } - 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 { - var err = ""; - var cgDetailList = new List<TN_CG_Detail>(); - var recordList = new List<TN_Inbound_DataRecord>(); + if (model.stockTransactions == null && model.stockTransactions.Count == 0) { + return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃"); + } + + var insetRecordList = new List<TN_Inbound_DataRecord>(); + //var deleteRecordOldList = new List<TN_Inbound_DataRecord> (); foreach (var transaction in model.stockTransactions) { + //var recordOld = db.Queryable<TN_Inbound_DataRecord>() + // .Where(r => r.S_LOCATION_CODE == transaction.locationCode.Trim()).First(); + //if (recordOld != null) { + // deleteRecordOldList.Add(recordOld); + //} + + if (!float.TryParse(transaction.inQuantity, out var _) || !float.TryParse(transaction.stockQuantity, out var _)) { + return BuildErpResult(400, $"鍏ュ簱鏁伴噺鎴栧簱瀛樻暟閲忎笉鍚堟硶! 璇风‘淇濆瓧绗︿覆鐨勫�鍙互瑙f瀽涓烘暟鍊� 搴撳瓨浜ゆ槗鏄庣粏鍙�'{transaction.stockTransactionId}', 鍏ュ簱鏁伴噺='{transaction.inQuantity}', 搴撳瓨鏁伴噺='{transaction.stockQuantity}'"); + } + // 鍐欏叆璁板綍琛� var record = new TN_Inbound_DataRecord { - S_LOCATION_CODE = transaction.locationCode, + S_LOCATION_CODE = transaction.locationCode.Trim(), S_STOCK_TRANS = transaction.stockTransactionId, S_ITEM_CODE = transaction.itemCode, S_ITEM_NAME = transaction.itemName, @@ -639,44 +886,24 @@ S_SUPPLIER_NAME = transaction.supplierName, S_INVENTORY_MAN = transaction.inventoryManager }; - recordList.Add(record); + insetRecordList.Add(record); - // 鏌ヨ瀵瑰簲鐗╂枡 - 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 == transaction.locationCode) - .Select((l, c, d) => d) - .First(); - - if (cgDetail == null) { - err += $"鍌ㄤ綅鐮亄transaction.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�; - continue; - } - cgDetail.S_ITEM_CODE = transaction.itemCode; - cgDetail.S_ITEM_NAME = transaction.itemName; - - cgDetailList.Add(cgDetail); } - + using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Inbound_DataRecord>(recordList).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildErpResult(500, $"鍐欏叆鍏ュ簱璁板綍琛ㄥけ璐�); - } + //if (deleteRecordOldList.Count != 0 && db.Deleteable<TN_Inbound_DataRecord>(deleteRecordOldList).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // return BuildErpResult(500, $"鍒犻櫎鏃у叆搴撹褰曟暟鎹け璐ワ細{JsonConvert.SerializeObject(deleteRecordOldList)}"); + //} - if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) { + if (db.Insertable<TN_Inbound_DataRecord>(insetRecordList).ExecuteCommand() <= 0) { tran.RollbackTran(); - return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触"); + return BuildErpResult(500, $"鍐欏叆鍏ュ簱璁板綍琛ㄥけ璐�"); } tran.CommitTran(); + return BuildErpResult(0, $"鍐欏叆鍏ュ簱璁板綍琛ㄦ垚鍔�"); } - - if (err != "") { - return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�); - } - return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛"); - } catch (Exception ex) { return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); @@ -688,14 +915,26 @@ var db = new SqlHelper<object>().GetInstance(); try { - var err = ""; - var cgDetailList = new List<TN_CG_Detail>(); - var recordList = new List<TN_Outbound_DataRecord>(); + if (model.materialIssues == null || model.materialIssues.Count == 0) { + return BuildErpResult(400, "涓嶈兘浼犲叆绌虹殑鏁版嵁鍒楄〃"); + } + var insetRecordList = new List<TN_Outbound_DataRecord>(); + //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.Trim()).First(); + //if (recordOld != null) { + // deleteRecordOldList.Add(recordOld); + //} + + if (!float.TryParse(issue.actualIssuedQty, out var _)) { + return BuildErpResult(400, $"瀹炲彂鏁伴噺涓嶅悎娉� 璇风‘淇濆瓧绗︿覆鐨勫�鍙互瑙f瀽涓烘暟鍊� 棰嗙敤鍗曞彿='{issue.withdrawalOrderNo}', 瀹炲彂鏁伴噺='{issue.actualIssuedQty}'"); + } + // 鍐欏叆璁板綍琛� var record = new TN_Outbound_DataRecord { - S_LOCATION_CODE = issue.locationCode, + S_LOCATION_CODE = issue.locationCode.Trim(), S_ORDER_NO = issue.withdrawalOrderNo, S_ITEM_CODE = issue.itemCode, S_ITEM_NAME = issue.itemName, @@ -709,49 +948,324 @@ S_LINE_CODE = issue.lineCode, S_BATCH_NO = issue.batchNo }; - recordList.Add(record); - - // 鏌ヨ瀵瑰簲鐗╂枡 - 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 == issue.locationCode) - .Select((l, c, d) => d) - .First(); - - if (cgDetail == null) { - err += $"鍌ㄤ綅鐮亄issue.locationCode}瀵瑰簲鐨勮揣浣嶇墿鏂欎笉瀛樺湪锛�; - continue; - } - - cgDetail.S_ITEM_CODE = issue.itemCode; - cgDetail.S_ITEM_NAME = issue.itemName; - - cgDetailList.Add(cgDetail); + insetRecordList.Add(record); } using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Outbound_DataRecord>(recordList).ExecuteCommand() <= 0) { + //if (deleteRecordOldList.Count != 0 && db.Deleteable<TN_Outbound_DataRecord>(deleteRecordOldList).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // return BuildErpResult(500, $"鍒犻櫎鏃у嚭搴撹褰曟暟鎹け璐ワ細{JsonConvert.SerializeObject(deleteRecordOldList)}"); + //} + + if (db.Insertable<TN_Outbound_DataRecord>(insetRecordList).ExecuteCommand() <= 0) { tran.RollbackTran(); return BuildErpResult(500, $"鍐欏叆鍑哄簱璁板綍琛ㄥけ璐�); } - if (db.Updateable<TN_CG_Detail>(cgDetailList).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return BuildErpResult(500, $"鏇存敼鐗╂枡淇℃伅澶辫触"); - } - tran.CommitTran(); + return BuildErpResult(0, $"鍐欏叆鍑哄簱璁板綍琛ㄦ垚鍔�"); } - - if (err != "") { - return BuildErpResult(2, err + "鍏朵粬淇℃伅姝e父宸插啓鍏�); - } - return BuildErpResult(0, $"鏇存敼鐗╂枡淇℃伅鎴愬姛"); } catch (Exception ex) { return BuildErpResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); } } + + // 鐩樼偣鍔熻兘锛堟柊锛�----------------------------------- + + internal static SimpleResult CheckOutboundOnce(CheckOutboundOnceInfo model) { + var taskName = TaskName.鐩樼偣鐞嗚揣鍑哄簱; + var db = new SqlHelper<object>().GetInstance(); + + try { + var locCntrRel = db.Queryable<TN_Loc_Container>().First(a => a.S_CNTR_CODE == model.cntrCode); + if (locCntrRel == null) { + return BuildSimpleResult(3, $"瀹瑰櫒 {model.cntrCode} 娌℃湁鎵惧埌瀵瑰簲鐨勮揣浣�); + } + + // 璧风偣浣嶇疆锛氬彇鏀捐揣鍖猴紙鏈夎揣鐗┿�娌℃湁閿併�宸插惎鐢級 + var startLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == locCntrRel.S_LOC_CODE && a.N_CURRENT_NUM == 1 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y" && Settings.Areas[AreaIndex.H璐ф灦鍖篯.Contains(a.S_AREA_CODE)); + if (startLoc == null) { + return BuildSimpleResult(2, $"璧风偣浣嶇疆 {locCntrRel.S_LOC_CODE} 涓嶇鍚堝嚭搴撴潯浠�); + } + + // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�+ 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 BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�); + } + + var countOrder = db.Queryable<TN_AG_Count_Order>().Where(o => o.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + if (countOrder == null) { + return BuildSimpleResult(6, $"娌℃湁鎵惧埌瀵瑰簲瀹瑰櫒{model.cntrCode}鐨勭洏鐐瑰崟鍙�"); + } + countOrder.N_B_STATE = 1; + + var unFinishedCount = db.Queryable<TN_AG_Count_Order>().Where(a => a.S_CP_NO == countOrder.S_CP_NO && a.S_COUNT_NO != countOrder.S_COUNT_NO && a.N_B_STATE == 0).Count(); + + var cntID = locCntrRel.S_CNTR_CODE; + var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName); + LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�+ LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ + using (var tran = db.Ado.UseTran()) { + if (unFinishedCount == 0 && db.Updateable<TN_AG_Count_Plan>().SetColumns(a =>a.N_B_STATE == 1).Where(a => a.S_CP_NO == countOrder.S_CP_NO).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鏇存柊鐩樼偣璁″垝鍗曠姸鎬佷负1澶辫触锛佸崟鍙凤細{countOrder.S_CP_NO}"); + } + + if (db.Updateable<TN_AG_Count_Order>(countOrder).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鏇存柊鐩樼偣鍗曠姸鎬佷负1澶辫触锛�+ JsonConvert.SerializeObject(countOrder)); + } + + 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 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 BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, + $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + /// <summary> + /// 鐩樼偣鐞嗚揣鍑哄簱(WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static SimpleResult CheckOutbound(CheckOutboundInfo model) { + var taskName = TaskName.鐩樼偣鐞嗚揣鍑哄簱; + var db = new SqlHelper<object>().GetInstance(); + + 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" && Settings.Areas[AreaIndex.H璐ф灦鍖篯.Contains(a.S_AREA_CODE)); + if (startLoc == null) { + 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} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡"); + } + + // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�+ 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 BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�); + } + + var cntID = locCntrRel.S_CNTR_CODE; + var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName); + 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 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 BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, + $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + /// <summary> + /// 鐩樼偣鐞嗚揣鍥炲簱(WMS) + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + internal static SimpleResult CheckInbound(CheckInboundInfo model) { + var taskName = TaskName.鐩樼偣鐞嗚揣鍥炲簱; + var db = new SqlHelper<object>().GetInstance(); + + 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" && Settings.Areas[AreaIndex.X鍗歌揣鍖篯.Contains(a.S_AREA_CODE)); + if (startLoc == null) { + 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} 娌℃湁缁戝畾瀹瑰櫒锛屾棤鍙洖搴撶殑鐗╂枡"); + } + + // 缁堢偣浣嶇疆锛氳揣鏋讹紙娌℃湁璐х墿锛屾病鏈夐攣锛�+ 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[AreaIndex.H璐ф灦鍖篯.Contains(a.S_AREA_CODE)); + if (endLoc == null) { + return BuildSimpleResult(4, $"缁堢偣浣嶇疆 {model.endLoc} 涓嶅叿澶囨斁璐ф潯浠�); + } + + var cntID = locCntrRel.S_CNTR_CODE; + var task = WCSHelper.BuildTask(startLoc, endLoc, cntID, taskName); + 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 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 BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(500, + $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + + tran.CommitTran(); + return BuildSimpleResult(0, + $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntID} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + } + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + public static SimpleResult CountProduct(CountProductInfo model) { + var db = new SqlHelper<object>().GetInstance(); + try { + //var cgDetail = db.Queryable<TN_CG_Detail>() + // .Where(d => d.S_CNTR_CODE == model.cntrCode).First(); + + //if (cgDetail == null) { + // return BuildSimpleResult(2, $"鎵句笉鍒板鍣ㄥ彿'{model.cntrCode}'瀵瑰簲鐨勭墿鏂�); + //} + + var locCntrRel = db.Queryable<TN_Loc_Container>() + //.LeftJoin<TN_CG_Detail>((c, d) => c.S_CNTR_CODE == d.S_CNTR_CODE) + .Where(c => c.S_LOC_CODE == model.locCode).First(); + if (locCntrRel == null) { + return BuildSimpleResult(2, $"褰撳墠璐т綅{model.locCode}娌℃湁瀹瑰櫒锛�); + } + + var cgDetail = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + if (cgDetail == null) { + return BuildSimpleResult(3, $"褰撳墠璐т綅{model.locCode}涓婄殑瀹瑰櫒{locCntrRel.S_CNTR_CODE}娌℃湁鐗╁搧锛�); + } + + //var countDiff = new TN_Count_Diff { + // S_CNTR_CODE = cgDetail.S_CNTR_CODE, + // F_QTY = cgDetail.F_QTY, + // F_ACTUAL_QTY = model.qty + //}; + + var countDiff = db.Queryable<TN_AG_Count_Diff>().Where(d => d.S_CNTR_CODE == locCntrRel.S_CNTR_CODE).First(); + if (countDiff == null) { + return BuildSimpleResult(4, $"褰撳墠鐗╂枡鎵�湪瀹瑰櫒{locCntrRel.S_CNTR_CODE}鐗╂枡淇℃伅娌℃湁鐢熸垚瀵瑰簲鐨勭洏鐐瑰樊寮傝〃锛�); + } + + + countDiff.F_QTY = cgDetail.F_QTY; + countDiff.F_ACTUAL_QTY = model.qty; + //countDiff.S_ITEM_CODE = cgDetail.S_ITEM_CODE; + cgDetail.F_QTY = model.qty; + //if (db.Insertable<TN_Count_Diff>(countDiff).ExecuteCommand() <= 0) { + // return BuildSimpleResult(3, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�); + //} + using (var tran = db.Ado.UseTran()) { + if (db.Updateable<TN_AG_Count_Diff>(countDiff).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(5, $"鎻掑叆鐩樼偣宸紓琛ㄥけ璐�); + } + + if (db.Updateable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return BuildSimpleResult(5, $"鏇存柊鐗╂枡淇℃伅澶辫触"); + } + + tran.CommitTran(); + } + + return BuildSimpleResult(0, "鐩樼偣宸紓瀹屾垚"); + + } + catch (Exception ex) { + return BuildSimpleResult(1, $"鍙戠敓浜嗗紓甯革細{ex.Message}"); + } + } + + } } -- Gitblit v1.9.1