From 74ca5a83f24c53c48ad7e6f5b7739649fb411546 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期四, 17 七月 2025 17:19:53 +0800 Subject: [PATCH] 优化部分日志和未使用代码 --- api/ApiHelper.cs | 1535 +++++++++++++++++++++++++--------------------------------- 1 files changed, 656 insertions(+), 879 deletions(-) diff --git a/api/ApiHelper.cs b/api/ApiHelper.cs index beda0c6..805fb09 100644 --- a/api/ApiHelper.cs +++ b/api/ApiHelper.cs @@ -1,1064 +1,685 @@ 锘縰sing System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using HH.WCS.Mobox3.DSZSH.core; using HH.WCS.Mobox3.DSZSH.models; using HH.WCS.Mobox3.DSZSH.util; using HH.WCS.Mobox3.DSZSH.wms; using Newtonsoft.Json; -using Org.BouncyCastle.Asn1.Tsp; - using SqlSugar; using Swashbuckle.Swagger; using static HH.WCS.Mobox3.DSZSH.api.ApiModel; using static HH.WCS.Mobox3.DSZSH.api.OtherModel; -using static HH.WCS.Mobox3.DSZSH.Config; - namespace HH.WCS.Mobox3.DSZSH.api { public class ApiHelper { /// <summary> - /// 濂借繍绠�婊℃墭涓嬬嚎鍏ュ簱(PDA) + /// 婊$涓嬬嚎鍏ュ簱 /// </summary> /// <param name="model"></param> /// <returns></returns> public static SimpleResult GoodpackOffline(GoodpackOfflineInfo model) { - var taskName = TaskName.H濂借繍绠盻婊$涓嬬嚎鍏ュ簱; // 鐢ㄤ簬鐢熸垚浠诲姟绫诲瀷銆佹墦鍗版棩蹇椾俊鎭� var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var taskInfo = ETask.M婊$涓嬬嚎鍏ュ簱.Info(); + const string preLog = "API锛氭弧绠变笅绾垮叆搴擄細"; + const string cntrType = "濂借繍绠�; + try { - // 灏哖DA鎻愪緵鐨勭墿鏂欑紪鐮佷笌璐存爣鏈虹殑淇℃伅姣斿 - var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo) // 鎸囧畾锛氱墿鏂欑紪鐮併�鎵规鍙�- .Where(d => d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") // 鏂板鐗╂枡锛屾晠鐗╂枡鐘舵�搴旇涓�1寰呮 - .First(); + if (model.Num <= 0) { + return NewSimpleResult(400, preLog + $"鐗╂枡鏁伴噺'{model.Num}'涓嶅悎娉曪紒瑕佹眰锛氱墿鏂欐暟閲忥紴0"); + } + // 妫�煡璐у搧瀹瑰櫒琛細鏄惁宸茬粡瀛樺湪璐存爣鏈轰紶閫掔殑寰呭叆搴撶墿鏂欎俊鎭�+ // TODO锛氭暟閲忋�瑙勬牸鏄惁涔熷弬涓庢瘮瀵癸紵 + var cgDetail = db.Queryable<TN_CG_Detail>().Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮").First(); if (cgDetail == null) { - info = $"PDA鎵爜鐗╂枡淇℃伅涓庤创鏍囨満浼犻�鐨勪俊鎭笉涓�嚧锛� + JsonConvert.SerializeObject(model); - LogHelper.Info(info); - return NewSimpleResult(1, info); + return NewSimpleResult(1, preLog + $"娌℃湁鍦╗璐у搧鏄庣粏琛╙涓壘鍒癧鐗╂枡缂栫爜='{model.ItemCode}',鎵规鍙�'{model.BatchNo}']鐨勭墿鏂欙紒璇锋鏌ワ細PDA鎵爜鐗╂枡淇℃伅涓庤创鏍囨満浼犻�鐨勪俊鎭槸鍚︿竴鑷达紒瑕佹眰锛氱墿鏂欑姸鎬�'寰呮'"); } - // 璧风偣璐т綅缁戝畾鍚庯紝鍙互涓嶇珛鍗宠缃甆_CURRENT_NUM涓� - // 鍥犱负AGV鍙栬揣鍚庡氨浼氭仮澶�锛岃�涓旇揣浣嶄笂閿佸悗涓嶄細琚闂埌 - var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == model.StartLoc) // 鎸囧畾锛氳捣鐐硅揣浣嶅彿 - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) // 璧风偣缁戝畾鍓嶆病鏈夊鍣�- .Where(l => Settings.AreaMap[AreaName.M婊$鎿嶄綔鍖篯.Contains(l.S_AREA_CODE)) - .First(); - + // 鏌ヨ璧风偣璐т綅锛氭暟閲�0 + var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First(); if (startLoc == null) { - info = $"鍦�{AreaName.M婊$鎿嶄綔鍖簘'涓病鏈夋壘鍒拌捣鐐硅揣浣�{model.StartLoc}'锛屾垨涓嶅叿澶囧彇璐ц姹傦細鏈笂閿併�缁戝畾鍓嶆棤璐х墿"; - LogHelper.Info(info); - return NewSimpleResult(3, info); + return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}"); } - // 缁戝畾璐т綅鍜屽鍣ㄥ彿 - var locCntrRel = new TN_Loc_Container { - S_LOC_CODE = model.StartLoc, - S_CNTR_CODE = cgDetail.S_CNTR_CODE, - S_CNTR_TYPE = "濂借繍绠�, - }; + // 鍜屾弧鎵樹笅绾垮叆搴撶殑閫昏緫涓�嚧锛岀敱浜庡鍣ㄧЩ鍔ㄤ笉浼氭洿鏀圭粦瀹氫俊鎭紝鎵�互蹇呴』鍒犻櫎鏃ф暟鎹�+ var locCntrRelOld = db.Queryable<TN_Loc_Container>() + .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First(); - // TODO 婊$鍏ュ簱绠楁硶寰呬紭鍖�- var endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.M婊$璐ф灦鍖篯.Contains(l.S_AREA_CODE)) // 缁堢偣璐у尯绗﹀悎浠诲姟瑕佹眰 - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 - .OrderBy(l => l.N_LAYER) - .First(); + // 缁戝畾璐т綅瀹瑰櫒锛岃捣鐐硅揣浣嶅綋鍓嶆暟閲�1 + var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_CNTR_TYPE = cntrType,}; + startLoc.N_CURRENT_NUM = 1; + // 鏌ヨ缁堢偣璐т綅 + // Order锛氭寜璐т綅灞傛暟锛屼粠灏忓埌澶ф帓鍒�+ var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") + .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER }).First(); if (endLoc == null) { - info = "婊$鍏ュ簱鏆傛椂娌℃湁鍚堥�鐨勮揣浣嶅彲浠ュ叆搴�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}"); } - var cntId = locCntrRel.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�- - // TODO - var record = new TN_Record_Table { - S_ITEM_CODE = cgDetail.S_ITEM_CODE, - S_BATCH_NO= cgDetail.S_BATCH_NO, - S_ITEM_NAME= cgDetail.S_ITEM_NAME, - S_START_LOC = startLoc.S_CODE, - S_END_LOC = endLoc.S_CODE, - S_CNTR_CODE = cntId, - S_ITEM_SPEC = cgDetail.S_ITEM_SPEC, - S_NET_WEIGHT= cgDetail.S_NET_WEIGHT, - S_QUALITY_GRADE= cgDetail.S_QUALITY_GRADE, - S_STANDARD = cgDetail.S_STANDARD, - S_TASK_NO = task.S_CODE, - }; + // 璧风偣缁堢偣涓婇攣锛屽垱寤轰换鍔�+ WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); + var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName); using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { - info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴澶辫触锛� + JsonConvert.SerializeObject(locCntrRel); - tran.RollbackTran(); - LogHelper.Info(info); - return NewSimpleResult(4, info); + if (locCntrRelOld != null) { + if (db.Deleteable(locCntrRelOld).ExecuteCommand() <= 0 && + db.Updateable<TN_Location>().SetColumns(l => l.N_CURRENT_NUM == 0).Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewSimpleResult(500, preLog + $"鍒犻櫎鏃ц揣浣嶅鍣ㄥ叧绯昏〃澶辫触锛佽揣浣嶇紪鐮�{locCntrRelOld.S_LOC_CODE}锛屽鍣ㄧ紪鐮�{locCntrRelOld.S_CNTR_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) { + if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鎻掑叆[瀹瑰櫒璐т綅缁戝畾琛╙澶辫触锛佹暟鎹細{LogObject(locCntrRel)}"); } - 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) { + if (db.Updateable(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(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�"); } - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); + } + + if (db.Insertable(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(0, info); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } - ///// <summary> - ///// 绌烘墭鐩樼粦瀹�PDA) - ///// </summary> - ///// <param name="model"></param> - ///// <returns></returns> - //public static SimpleResult EmptyBindPallet(EmptyBindInfo model) { - // var db = DbHelper.GetDbClient(); - - // try { - // var loc = db.Queryable<TN_Location>() - // .Where(ExprHelper.LocCode(model.LocCode)) - // .Where(ExprHelper.LocBelongsToArea(AreaName.绌烘墭鐩樻帴椹冲尯)) - // .Where(ExprHelper.LocIsFree) - // .Where(ExprHelper.LocIsEmpty).First(); - - // if (loc == null) { - // return BuildSimpleResult(2, $"褰撳墠璐т綅 '{model.LocCode}' 鏃犳硶鍐嶇粦瀹氬鍣�); - // } - - // var locCntrRel = db.Queryable<TN_Loc_Container>() - // .Where(lc => lc.S_CNTR_CODE == model.LocCode).First(); - - // if (locCntrRel != null) { - // return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); - // } - - // //loc.N_CURRENT_NUM = model.PalletCount; - - // locCntrRel = new TN_Loc_Container { - // S_LOC_CODE = model.LocCode, - // S_CNTR_CODE = model.CntrCode - // }; - - // using (var tran = db.Ado.UseTran()) { - // if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 - // && db.Updateable<TN_Location>(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0) { - // tran.CommitTran(); - // return BuildSimpleResult(0, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 鎴愬姛"); - // } - // else { - // tran.RollbackTran(); - // return BuildSimpleResult(4, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 澶辫触"); - // } - // } - // } - // catch (Exception ex) { - // return BuildSimpleEx(ex); - // } - //} - - ///// <summary> - ///// 绌虹缁戝畾(PDA) - ///// </summary> - ///// <param name="model"></param> - ///// <returns></returns> - //public static SimpleResult EmptyBindGoodpack(EmptyBindInfo model) { - // var db = DbHelper.GetDbClient(); - - // try { - // var loc = db.Queryable<TN_Location>() - // .Where(ExprHelper.LocCode(model.LocCode)) - // .Where(ExprHelper.LocBelongsToArea(AreaName.绌虹鎺ラ┏鍖�) - // .Where(ExprHelper.LocIsFree) - // .Where(ExprHelper.LocIsEmpty).First(); - - // if (loc == null) { - // return BuildSimpleResult(2, $"褰撳墠璐т綅 '{model.LocCode}' 鏃犳硶鍐嶇粦瀹氬鍣�); - // } - - // var locCntrRel = db.Queryable<TN_Loc_Container>() - // .Where(lc => lc.S_CNTR_CODE == model.LocCode).First(); - - // if (locCntrRel != null) { - // return BuildSimpleResult(3, $"褰撳墠瀹瑰櫒 '{model.CntrCode}' 宸茬粡涓�'{locCntrRel.S_LOC_CODE}' 缁戝畾"); - // } - - // loc.N_CURRENT_NUM = 1; // 绌虹缁戝畾鏃跺鍣ㄦ暟蹇呯劧涓�1 - - // locCntrRel = new TN_Loc_Container { - // S_LOC_CODE = model.LocCode, - // S_CNTR_CODE = model.CntrCode - // }; - - // using (var tran = db.Ado.UseTran()) { - // if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() > 0 - // && db.Updateable<TN_Location>(loc).UpdateColumns(it => it.N_CURRENT_NUM).ExecuteCommand() > 0) { - // tran.CommitTran(); - // return BuildSimpleResult(0, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 鎴愬姛"); - // } - // else { - // tran.RollbackTran(); - // return BuildSimpleResult(4, $"缁戝畾瀹瑰櫒 '{model.CntrCode}' 涓庤揣浣�'{model.LocCode}' 澶辫触"); - // } - // } - // } - // catch (Exception ex) { - // return BuildSimpleEx(ex); - // } - //} - /// <summary> - /// 鎵樼洏-绌烘墭鍏ュ簱(PDA) + /// 绌烘墭鍏ュ簱 /// </summary> /// <param name="model"></param> /// <returns></returns> public static SimpleResult EmptyInboundPallet(EmptyInboundInfo model) { - var taskName = TaskName.T鎵樼洏_绌烘墭鍏ュ簱; var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var taskInfo = ETask.K绌烘墭鍏ュ簱.Info(); + const string preLog = "API锛氱┖鎵樺叆搴擄細"; + const string cntrType = "鎵樼洏"; + try { - // 鐜板湪PDA娌℃湁鍗曠嫭鐨勭粦瀹氭祦绋嬶紝缁戝畾鍦ㄥ叆搴撴椂瀹屾垚 - var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == model.StartLoc) // 鎸囧畾锛氳捣鐐硅揣浣�- .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) // 缁戝畾鍓嶈揣浣嶄负绌�- .Where(l => Settings.AreaMap[AreaName.K绌烘墭鍏ュ簱鎺ラ┏鍖篯.Contains(l.S_AREA_CODE)) // 璧风偣璐у尯绗﹀悎浠诲姟瑕佹眰 - .First(); - + // 鏌ヨ璧风偣璐т綅锛氭暟閲�0 + var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First(); if (startLoc == null) { - info = $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�; - LogHelper.Info(info); - return NewSimpleResult(2, info); + return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}"); } - // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹�- //var locCntrRel = db.Queryable<TN_Loc_Container>() - // .Where(c => c.S_LOC_CODE == model.StartLoc && c.S_CNTR_CODE == model.CntrCode) - // .First(); + // 鏌ヨ瀹瑰櫒琛細瀹瑰櫒绫诲瀷瀛楁 + var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntrCode).First(); + if (cntr == null) { + return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�); + } + if (cntr.S_TYPE != cntrType) { + return NewSimpleResult(3, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}'锛屼笌杈撳叆鐨勫鍣ㄧ被鍨�{cntrType}'涓嶅悓锛�); + } - //if (locCntrRel == null) { - // info = $"璧风偣浣嶇疆{model.StartLoc}娌℃湁缁戝畾瀹瑰櫒{model.CntrCode}"; - // LogHelper.Info(info); - // return NewSimpleResult(3, info); - //} + // 绌虹鍏ュ簱鏃讹紝濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁锛屽垹闄�+ var cgDetailOld = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == model.CntrCode).First(); + var locCntrRelOld = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == model.CntrCode).First(); + TN_Location locOld = null; + if (locCntrRelOld != null) { + locOld = db.Queryable<TN_Location>().Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).First(); + if (locOld != null) { + locOld.N_CURRENT_NUM = 0; // 濡傛灉鏃ц揣浣嶅瓨鍦紝灏嗘棫璐т綅鐨勬暟閲忚缃负 0 + locOld.T_MODIFY = DateTime.Now; + } + } - // 缁戝畾璐т綅鍜屽鍣ㄥ彿 - var locCntrRel = new TN_Loc_Container { - S_LOC_CODE = model.StartLoc, - S_CNTR_CODE = model.CntrCode, - S_CNTR_TYPE = "鎵樼洏", - }; + // 缁戝畾璐т綅瀹瑰櫒锛岃捣鐐硅揣浣嶅綋鍓嶆暟閲�1 + var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cntr.S_CODE, S_CNTR_TYPE = cntrType }; + startLoc.N_CURRENT_NUM = 1; - // TODO 鏆傚畾閫夋嫨鏈�綆灞傛寜鍖轰綅椤哄簭鍏ュ簱锛屽悗闈㈠緟淇敼 - var endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.K绌烘墭瀛樻斁鍖篯.Contains(l.S_AREA_CODE)) // 缁堢偣璐у尯绗﹀悎浠诲姟瑕佹眰 - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) - .OrderBy(l => new { l.N_LAYER, row=SqlFunc.Desc(l.S_AREA_CODE) }) - .First(); - + // 鏌ヨ缁堢偣璐т綅 + // Order锛氬眰鏁颁粠浣庡埌楂樸�琛屻�鍒�+ var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First(); if (endLoc == null) { - info = $"鏆傛椂娌℃湁绗﹀悎鏉′欢鐨勭粓鐐规斁璐т綅"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}"); } - var cntId = locCntrRel.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ // 璧风偣缁堢偣涓婇攣锛屽垱寤轰换鍔�+ WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); + var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName); using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { - info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴澶辫触锛� + JsonConvert.SerializeObject(locCntrRel); + if (cgDetailOld != null && db.Deleteable(cgDetailOld).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃х墿鏂欎俊鎭痌澶辫触锛佹暟鎹細{LogObject(cgDetailOld)}"); } - 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) { + if (locCntrRelOld != null && db.Deleteable(locCntrRelOld).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃ц揣浣嶅鍣ㄥ叧绯籡澶辫触锛佹暟鎹細{LogObject(locCntrRelOld)}"); } - 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) { + if (locOld != null && db.Updateable(locOld).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[鏃ц揣浣峾褰撳墠瀹瑰櫒鏁伴噺]澶辫触锛佽揣浣�'{locOld.S_CODE}'锛屾暟閲�>{locOld.N_CURRENT_NUM}"); } - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鎻掑叆[璐т綅瀹瑰櫒缁戝畾琛╙澶辫触锛佹暟鎹細{LogObject(locCntrRel)}"); + } + + if (db.Updateable(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 NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�"); + } + + if (db.Updateable(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, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); + } + + if (db.Insertable(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(0, info); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } /// <summary> - /// 濂借繍绠�绌虹鍏ュ簱(PDA) + /// 绌虹鍏ュ簱 /// </summary> /// <returns></returns> public static SimpleResult EmptyInboundGoodpack(EmptyInboundInfo model) { - var taskName = TaskName.H濂借繍绠盻绌虹鍏ュ簱; var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var taskInfo = ETask.K绌虹鍏ュ簱.Info(); + const string preLog = "API锛氱┖绠卞叆搴擄細"; + const string cntrType = "濂借繍绠�; + try { - var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == model.StartLoc) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") - .Where(l => l.N_CURRENT_NUM == 0) // 缁戝畾鍓嶈揣浣嶄负绌�- .Where(l => Settings.AreaMap[AreaName.K绌虹鍏ュ簱鎺ラ┏鍖篯.Contains(l.S_AREA_CODE)) // 璧风偣璐у尯绗﹀悎浠诲姟瑕佹眰 - .First(); - + // 鏌ヨ璧风偣璐т綅锛氭暟閲�0 + var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == model.StartLoc && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First(); if (startLoc == null) { - info = $"璧风偣浣嶇疆{model.StartLoc}涓嶅瓨鍦ㄦ垨涓嶅叿澶囧彇璐ц姹�; - LogHelper.Info(info); - return NewSimpleResult(2, info); + return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}"); } - // 鏌ョ湅瀹瑰櫒涓庤捣鐐硅揣浣嶆槸鍚︾粦瀹�- //var locCntrRel = db.Queryable<TN_Loc_Container>() - // .Where(c => c.S_LOC_CODE == model.StartLoc && c.S_CNTR_CODE == model.CntrCode) - // .First(); + // 鏌ヨ瀹瑰櫒琛細瀹瑰櫒绫诲瀷瀛楁 + var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntrCode).First(); + if (cntr == null) { + return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�); + } + if (cntr.S_TYPE != cntrType) { + return NewSimpleResult(3, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}'锛屼笌杈撳叆鐨勫鍣ㄧ被鍨�{cntrType}'涓嶅悓锛�); + } - //if (locCntrRel == null) { - // info = $"璧风偣浣嶇疆{model.StartLoc}娌℃湁缁戝畾瀹瑰櫒{model.CntrCode}"; - // LogHelper.Info(info); - // return NewSimpleResult(3, info); - //} + // 绌虹鍏ュ簱鏃讹紝濡傛灉瀛樺湪鏃х殑缁戝畾鏁版嵁锛屽垹闄�+ var cgDetailOld = db.Queryable<TN_CG_Detail>().Where(d => d.S_CNTR_CODE == model.CntrCode).First(); + var locCntrRelOld = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == model.CntrCode).First(); + TN_Location locOld = null; + if (locCntrRelOld != null) { + locOld = db.Queryable<TN_Location>().Where(l => l.S_CODE == locCntrRelOld.S_LOC_CODE).First(); + if (locOld != null) { + locOld.N_CURRENT_NUM = 0; // 濡傛灉鏃ц揣浣嶅瓨鍦紝灏嗘棫璐т綅鐨勬暟閲忚缃负 0 + locOld.T_MODIFY = DateTime.Now; + } + } - // 缁戝畾璐т綅鍜屽鍣ㄥ彿 - var locCntrRel = new TN_Loc_Container { - S_LOC_CODE = model.StartLoc, - S_CNTR_CODE = model.CntrCode, - S_CNTR_TYPE = "濂借繍绠�, - }; + // 缁戝畾璐т綅瀹瑰櫒锛岃捣鐐硅揣浣嶅綋鍓嶆暟閲�1 + var locCntrRel = new TN_Loc_Container { S_LOC_CODE = startLoc.S_CODE, S_CNTR_CODE = cntr.S_CODE, S_CNTR_TYPE = cntrType }; + startLoc.N_CURRENT_NUM = 1; - // TODO 鏆傚畾閫夋嫨鏈�綆灞傞『搴忓叆搴擄紝鍚庨潰寰呬慨鏀�- var endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.K绌虹璐ф灦鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") - .Where(l => l.N_CURRENT_NUM == 0) - .OrderBy(l => new { l.N_LAYER }) - .First(); - + // 鏌ヨ缁堢偣璐т綅 + // Order锛氬眰鏁颁粠浣庡埌楂樸�琛屻�鍒�+ var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).OrderBy(l => new { l.N_LAYER, l.N_ROW, l.N_COL }).First(); if (endLoc == null) { - return NewSimpleResult(4, $"鏆傛椂娌℃湁绗﹀悎鏉′欢鐨勭粓鐐规斁璐т綅"); + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}"); } - var cntId = locCntrRel.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); + var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName); using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { - info = $"鎻掑叆璐т綅瀹瑰櫒鍏崇郴澶辫触锛� + JsonConvert.SerializeObject(locCntrRel); + if (cgDetailOld != null && db.Deleteable(cgDetailOld).ExecuteCommand() <= 0) { tran.RollbackTran(); - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃х墿鏂欎俊鎭痌澶辫触锛佹暟鎹細{LogObject(cgDetailOld)}"); } - 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) { + if (locCntrRelOld != null && db.Deleteable(locCntrRelOld).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鍒犻櫎[鏃ц揣浣嶅鍣ㄥ叧绯籡澶辫触锛� + LogObject(locCntrRelOld)); } - 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) { + if (locOld != null && db.Updateable(locOld).UpdateColumns(l => new { l.N_CURRENT_NUM, l.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[鏃ц揣浣峾瀹瑰櫒鏁伴噺]澶辫触锛� + LogObject(locOld)); } - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鎻掑叆[璐т綅瀹瑰櫒鍏崇郴]澶辫触锛� + LogObject(locCntrRel)); + } + + if (db.Updateable(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 NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�"); + } + + if (db.Updateable(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, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); + } + + if (db.Insertable(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(0, info); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } /// <summary> - /// 鎵樼洏-绌烘墭涓婄嚎(PDA) + /// 绌烘墭涓婄嚎鍑哄簱 /// </summary> /// <param name="model"></param> /// <returns></returns> public static SimpleResult EmptyOnlinePallet(EmptyOnlinePalletInfo model) { - var taskName = TaskName.T鎵樼洏_绌烘墭涓婄嚎; var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var taskInfo = ETask.K绌烘墭涓婄嚎鍑哄簱.Info(); + const string preLog = "API锛氱┖鎵樹笂绾垮嚭搴擄細"; + const string cntrType = "鎵樼洏"; + try { - // 鎵剧鍚堢墿鏂欎俊鎭殑璐т綅 - //var startLoc = db.Queryable<TN_Location>() - // .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) // 鑱旇〃锛氳揣浣嶅鍣ㄥ叧绯昏〃 - // .LeftJoin<TN_Container_Item>((l, c, i) => c.S_CNTR_CODE == i.S_CNTR_CODE) // 鑱旇〃锛氬鍣ㄤ笌鐗╂枡绫诲瀷缁戝畾琛�- // .Where(l => taskInfo.StartAreas.Contains(l.S_AREA_CODE)) // 闄愬畾鍦ㄧ┖鎵樺瓨鏀惧尯涓壘瀹瑰櫒璐т綅 - // .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭病鏈夐攣鐘舵� - // .Where(l => l.N_CURRENT_NUM == 1) // 绛涢�锛氭湁璐ц揣浣�- // .Where((l, c) => c.S_CNTR_CODE == model.CntId) // 鎵炬寚瀹氬鍣ㄥ彿 - // .Where((l, c, i) => i.S_ITEM_CODE == model.ItemCode) // 纭繚瀹瑰櫒缂栫爜缁戝畾鐨勭墿鏂欑紪鐮佷笌鎵�渶涓�嚧 - // .First(); - - //if (startLoc == null) { - // info = $"鍦ㄧ┖鎵樺瓨鏀惧尯涓紝鎵句笉鍒扮鍚坽model.ItemCode}鐗╂枡锛屼笖缂栫爜涓簕model.CntId}鐨勭┖鎵樼洏"; - // LogHelper.Info(info); - // return NewSimpleResult(2, info); - //} - - //var locCntrRel = db.Queryable<TN_Loc_Container>().First( - // a => a.S_LOC_CODE == startLoc.S_CODE - // && a.S_CNTR_CODE == model.CntId); - - //if (locCntrRel == null) { - // return NewSimpleResult(3, $"璧风偣浣嶇疆 '{startLoc.S_CODE}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'"); - //} - - var cntrItemRel = db.Queryable<TN_Container_Item>() - .Where(i => i.S_CNTR_CODE == model.CntId && i.S_ITEM_CODE == model.ItemCode) - .First(); - - if (cntrItemRel == null) { - info = $"瀹瑰櫒{model.CntId}涓嶇鍚堢墿鏂檣model.ItemCode}锛氭病鏈夊湪瀹瑰櫒鐗╂枡绫诲瀷鐧昏琛ㄤ腑鎵惧埌"; - LogHelper.Info(info); - return NewSimpleResult(2, info); + // 鏌ヨ瀹瑰櫒琛細瀹瑰櫒绫诲瀷瀛楁 + var cntr = db.Queryable<TN_Container>().Where(c => c.S_CODE == model.CntId).First(); + if (cntr == null) { + return NewSimpleResult(1, $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�); + } + if (cntr.S_TYPE != cntrType) { + return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷鏄�{cntr.S_TYPE}锛屼笉鏄�{cntrType}'锛�); } - var startLoc = db.Queryable<TN_Location>() - .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) // 鑱旇〃锛氳揣浣嶅鍣ㄥ叧绯昏〃 - .Where(l => Settings.AreaMap[AreaName.K绌烘墭瀛樻斁鍖篯.Contains(l.S_AREA_CODE)) // 闄愬畾鍦ㄧ┖鎵樺瓨鏀惧尯涓壘瀹瑰櫒璐т綅 - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭病鏈夐攣鐘舵� - .Where(l => l.N_CURRENT_NUM == 1) // 绛涢�锛氭湁璐ц揣浣�- .Where((l, c) => c.S_CNTR_CODE == model.CntId) // 鎵炬寚瀹氬鍣ㄥ彿 - .First(); + var needUpdateContainer = false; + if (string.IsNullOrEmpty(cntr.S_SPEC)) { + // TEMP 鐩墠娴佺▼锛氬鏋滃鍣ㄨ〃涓鏍硷紙鐗╂枡缂栫爜锛変负绌猴紝鏍规嵁娴佺▼鐨勭墿鏂欎俊鎭啓鍏�+ // 寰呭畾锛氬悗闈㈠彲鑳戒細鏇存敼娴佺▼锛屾垨鑰呯敤鍏朵粬淇℃伅锛堝鐗╂枡绫诲瀷/瑙勬牸锛変綔涓哄鍣ㄧ殑瑙勬牸 + needUpdateContainer = true; + cntr.S_SPEC = model.ItemCode; + LogHelper.Info($"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓璠瑙勬牸(鐗╂枡缂栫爜)]涓虹┖锛屽皢鐗╂枡缂栫爜'{model.ItemCode}'鍐欏叆瀹瑰櫒鐨勮鏍�); + } + else if (cntr.S_SPEC != model.ItemCode) { + return NewSimpleResult(3, $"瀹瑰櫒'{model.CntId}'宸茬粡涓庣墿鏂欑被鍨�{cntr.S_SPEC}'缁戝畾锛屾棤娉曠敤浜庤杞界墿鏂�{model.ItemCode}'锛�); + } + + var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First(); if (startLoc == null) { - info = $"鍦ㄧ┖鎵樺瓨鏀惧尯涓紝鎵句笉鍒扮鍚坽model.ItemCode}鐗╂枡锛屼笖缂栫爜涓簕model.CntId}鐨勭┖鎵樼洏"; - LogHelper.Info(info); - return NewSimpleResult(3, info); + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�1锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}锛岀粦瀹氬鍣ㄧ紪鐮�'{model.CntId}'锛岀粦瀹氬鍣ㄧ被鍨�'{cntrType}'"); } - var endLoc = db.Queryable<TN_Location>() - //.Where(l => Settings.AreaMap[AreaName.B鍖呰鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 - .First(); - + // 鏌ヨ缁堢偣璐т綅 + var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - info = $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(5, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛涘綋鍓嶅鍣ㄦ暟閲�0锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}"); } - var cntId = model.CntId; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); + var task = WCSHelper.BuildTask(startLoc, endLoc, model.CntId, taskInfo.TaskName); - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ cntr.S_SOURCE = task.S_CODE; // 鐢ㄤ换鍔″彿浣滀负瀹瑰櫒鏇存柊鐨勪緷鎹�+ cntr.T_MODIFY = DateTime.Now; 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(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + if (needUpdateContainer && db.Updateable(cntr).UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) { + return NewSimpleResult(500, preLog + $"鏇存柊[瀹瑰櫒琛╙澶辫触锛佹暟鎹細{LogObject(cntr)}"); } - 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) { + if (db.Updateable(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(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�"); } - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); + } + + if (db.Insertable(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(0, info); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } /// <summary> - /// 濂借繍绠�绌虹涓婄嚎(PDA) + /// 绌虹涓婄嚎鍑哄簱 /// </summary> /// <param name="model"></param> /// <returns></returns> public static SimpleResult EmptyOnlineGoodpack(EmptyOnlineGoodpackInfo model) { - var taskName = TaskName.H濂借繍绠盻绌虹涓婄嚎; var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var taskInfo = ETask.K绌虹涓婄嚎鍑哄簱.Info(); + const string preLog = "API锛氱┖绠变笂绾垮嚭搴擄細"; + const string cntrType = "濂借繍绠�; + try { - var startLoc = db.Queryable<TN_Location>() - .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - .Where(l => Settings.AreaMap[AreaName.K绌虹璐ф灦鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") - .Where(l => l.N_CURRENT_NUM == 1) - .Where((l, c) => c.S_CNTR_CODE == model.CntId) + var cntr = db.Queryable<TN_Container>() + .Where(c => c.S_CODE == model.CntId) .First(); + if (cntr == null) { + return NewSimpleResult(1, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�); + } + if (cntr.S_TYPE != cntrType) { + return NewSimpleResult(2, preLog + $"瀹瑰櫒'{model.CntId}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷='{cntr.S_TYPE}'锛屼笉鏄�{cntrType}'锛�); + } + + var startLoc = db.Queryable<TN_Location>().LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE).Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where((l, c) => taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1 && c.S_CNTR_CODE == model.CntId && c.S_CNTR_TYPE == cntrType).First(); if (startLoc == null) { - info = $"鍦ㄧ┖绠卞瓨鏀惧尯涓紝鎵句笉鍒扮紪鐮佷负{model.CntId}鐨勭┖濂借繍绠�; - LogHelper.Info(info); - return NewSimpleResult(2, info); + return NewSimpleResult(2, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�1锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}锛岀粦瀹氬鍣ㄧ紪鐮�'{model.CntId}'锛岀粦瀹氬鍣ㄧ被鍨�'{cntrType}'"); } - //var locCntrRel = db.Queryable<TN_Loc_Container>().First( - // a => a.S_LOC_CODE == startLoc.S_CODE - // && a.S_CNTR_CODE == model.CntId); - - //if (locCntrRel == null) { - // return NewSimpleResult(3, $"璧风偣浣嶇疆 '{startLoc.S_CODE}' 娌℃湁缁戝畾瀹瑰櫒 '{model.CntId}'"); - //} - - var endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.B鍖呰鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) - .First(); - + var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") + .Where(l => taskInfo.EndAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - return NewSimpleResult(4, $"缁堢偣浣嶇疆 涓嶅瓨鍦ㄦ垨涓嶅叿澶囨斁璐ц姹�); + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.EndAreas)}"); } - var cntId = model.CntId; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�- + WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); + var task = WCSHelper.BuildTask(startLoc, endLoc, model.CntId, taskInfo.TaskName); + 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) { + if (db.Updateable(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(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂拌捣鐐硅揣浣峽startLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.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) { + if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛氭洿鏂扮粓鐐硅揣浣峽endLoc.S_CODE}閿佺姸鎬佸け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); } - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Insertable(task).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚浠诲姟'{taskName}'澶辫触锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } tran.CommitTran(); - info = $"鐢熸垚浠诲姟'{taskName}'鎴愬姛锛屽鍣ㄥ彿{cntId}锛岃捣鐐箋startLoc.S_CODE}锛岀粓鐐硅揣鏋秢endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(0, info); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } - /// <summary> - /// 鎶芥-鍚堟牸鍥炲簱(PDA) + /// 鎶芥鍚堟牸鍥炲簱 /// </summary> /// <param name="model"></param> /// <returns></returns> public static SimpleResult QualifiedBack(QualifiedBackInfo model) { - var taskName = TaskName.C鎶芥_鍚堟牸鍥炲簱; var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var taskInfo = ETask.C鎶芥鍚堟牸鍥炲簱.Info(); + const string preLog = "API锛氭娊妫�悎鏍煎洖搴�; + try { var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode) - .First(); - + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First(); if (cgDetail == null) { - return NewSimpleResult(2, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡锛� + JsonConvert.SerializeObject(model)); + return NewSimpleResult(2, preLog + "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡锛� + LogObject(model)); } var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE) - .First(); - - //var startLoc = db.Queryable<TN_Location>() - // .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - // .Where((l, c) => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE) // 鎸囧畾瀹瑰櫒鍙�- // .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - // .First(); + .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First(); + if (locCntrRel == null) { + return NewSimpleResult(3, preLog + $"瀹瑰櫒{model.CntrCode}鍦ㄨ揣浣嶅鍣ㄥ叧绯昏〃涓笉瀛樺湪"); + } var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == locCntrRel.S_LOC_CODE) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 1) - .Where(l => Settings.AreaMap[AreaName.C鎶芥鍖篯.Contains(l.S_AREA_CODE)) // 璧风偣璐у尯绗﹀悎浠诲姟瑕佹眰 - .First(); - + .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First(); if (startLoc == null) { - info = "娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�; - LogHelper.Info(info); - return NewSimpleResult(0, info); + return NewSimpleResult(4, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�1锛屾墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}"); } - var endLoc = new TN_Location(); - if (locCntrRel.S_CNTR_TYPE == "鎵樼洏") { - endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.M婊℃墭璐ф灦鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) // 绛涢�锛氱┖璐т綅 - .First(); - } - else if (locCntrRel.S_CNTR_TYPE == "濂借繍绠�) { - endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.M婊$璐ф灦鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) - .First(); - } - else { - return NewSimpleResult(2, $"鎵樼洏绫诲瀷{locCntrRel.S_CNTR_TYPE}涓嶅悎娉曪細鎵樼洏鍙穥locCntrRel.S_CNTR_CODE}"); - } - - + var endAreas = locCntrRel.S_CNTR_CODE == "鎵樼洏" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack; + var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") + .Where(l => endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - return NewSimpleResult(3, "鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(endAreas)}"); } cgDetail.N_ITEM_STATE = 0; cgDetail.S_ITEM_STATE = "鍚堟牸"; + cgDetail.T_MODIFY = DateTime.Now; var cntId = locCntrRel.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); + var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskInfo.TaskName); - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => - new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + if (db.Updateable(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE, it.T_MODIFY }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = "淇敼鐗╂枡鐘舵�涓哄悎鏍�澶辫触"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[鐗╂枡鏄庣粏琛╙澶辫触锛佺墿鏂欏彿='{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) { + if (db.Updateable(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(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.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) { - + if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); } - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Insertable(task).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } tran.CommitTran(); - return NewSimpleResult(0, - $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } - public static SimpleResult UnqualifiedShift(UnqualifiedShiftInfo model) { - var taskName = TaskName.C鎶芥_涓嶅悎鏍肩Щ搴� - var db = new SqlHelper<object>().GetInstance(); - var info = ""; - try { - if (!Settings.AreaMap[AreaName.C鎶芥寮傚父鍖篯.Contains(model.EndArea)) { - info = $"缁堢偣搴撳尯{model.EndArea}涓嶅睘浜巤AreaName.C鎶芥寮傚父鍖簘"; - LogHelper.Info(info); - return NewSimpleResult(1, info); + /// <summary> + /// 鎶芥涓嶅悎鏍肩Щ搴�+ /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public static SimpleResult UnqualifiedShift(UnqualifiedShiftInfo model) { + var db = new SqlHelper<object>().GetInstance(); + var taskInfo = ETask.C鎶芥涓嶅悎鏍肩Щ搴�Info(); + const string preLog = "API锛氭娊妫�笉鍚堟牸绉诲簱锛�; + + try { + if (!taskInfo.EndAreas.Contains(model.EndArea)) { + return NewSimpleResult(1, preLog + $"缁堢偣搴撳尯'{model.EndArea}'涓嶆弧瓒虫潯浠讹紒闇�锛氳揣鍖�{LogObject(taskInfo.EndAreas)}"); } var cgDetail = db.Queryable<TN_CG_Detail>() - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode) - .First(); - + .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_CNTR_CODE == model.CntrCode).First(); if (cgDetail == null) { - - return NewSimpleResult(2, "娌℃湁鎵惧埌寰呭洖搴撶殑鎶芥鐗╂枡"); + return NewSimpleResult(2, preLog + $"娌℃湁鍦╗鐗╂枡鏄庣粏琛╙涓壘鍒扮墿鏂欙紒瑕佹眰锛氱墿鏂欑紪鐮�'{model.ItemCode}'锛屽鍣ㄧ紪鐮�'{model.CntrCode}'"); } - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE) - .First(); + var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE).First(); + if (locCntrRel == null) { + return NewSimpleResult(3, preLog + $"鍦╗璐т綅瀹瑰櫒鍏崇郴琛╙涓病鏈夋壘鍒板鍣�{model.CntrCode}'锛�); + } - //var startLoc = db.Queryable<TN_Location>() - // .LeftJoin<TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - // .Where((l, c) => c.S_CNTR_CODE == cgDetail.S_CNTR_CODE) // 鎸囧畾瀹瑰櫒鍙�- // .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - // .First(); - - var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == locCntrRel.S_LOC_CODE) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 1) - .Where(l => Settings.AreaMap[AreaName.C鎶芥鍖篯.Contains(l.S_AREA_CODE)) // 璧风偣璐у尯绗﹀悎浠诲姟瑕佹眰 - .First(); - + // 鏌ヨ璧风偣璐т綅锛氭暟閲�1 + var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y").Where(l => l.S_CODE == locCntrRel.S_LOC_CODE && taskInfo.StartAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 1).First(); if (startLoc == null) { - info = "娌℃湁鎵惧埌鍚堥�鐨勮捣鐐硅揣浣�; - LogHelper.Info(info); - return NewSimpleResult(0, info); + return NewSimpleResult(1, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅'{locCntrRel.S_LOC_CODE}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�1锛涙墍鍦ㄥ簱鍖�{LogObject(taskInfo.StartAreas)}"); } - var endLoc = db.Queryable<TN_Location>() - .Where(l => l.S_AREA_CODE == model.EndArea) - .Where(a => a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃� && a.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(a => a.N_CURRENT_NUM == 0) - .First(); - + var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") + .Where(l => l.S_AREA_CODE == model.EndArea && l.N_CURRENT_NUM == 0).First(); if (endLoc == null) { - return NewSimpleResult(3, "鏌ヨ锛氭病鏈夋壘鍒板悎閫傜殑缁堢偣璐т綅"); + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�'{model.EndArea}'"); } cgDetail.N_ITEM_STATE = 2; cgDetail.S_ITEM_STATE = "涓嶅悎鏍�; - var cntId = locCntrRel.S_CNTR_CODE; - var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); - - LocationHelper.LockLoc(ref startLoc, 2); // 璧风偣鍑哄簱閿�- LocationHelper.LockLoc(ref endLoc, 1); // 缁堢偣鍏ュ簱閿�+ WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); + var task = WCSHelper.BuildTask(startLoc, endLoc, locCntrRel.S_CNTR_CODE, taskInfo.TaskName); using (var tran = db.Ado.UseTran()) { - if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => - new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { + if (db.Updateable(cgDetail).UpdateColumns(it => new { it.N_ITEM_STATE, it.S_ITEM_STATE }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = "淇敼鐗╂枡鐘舵�涓哄悎鏍�澶辫触"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[璐у搧鏄庣粏琛╙澶辫触锛佺墿鏂欏彿='{cgDetail}'锛岀墿鏂欑姸鎬�>'{cgDetail.S_ITEM_STATE}'"); } - 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) { + if (db.Updateable(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(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.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) { - + if (db.Updateable(endLoc).UpdateColumns(it => new { it.N_LOCK_STATE, it.S_LOCK_STATE, it.S_LOCK_OP, it.T_MODIFY, }).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); } - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { + if (db.Insertable(task).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } tran.CommitTran(); - return NewSimpleResult(0, - $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); - } - } - - public static SimpleResult RestBack(RestBackInfo model) { - var taskName = TaskName.W灏剧鍥炲簱; - var db = new SqlHelper<object>().GetInstance(); - var info = ""; - try { - var startLoc = db.Queryable<TN_Location>() - .Where(l => l.S_CODE == model.StartLoc) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 1) - .First(); - - var locCntrRel = db.Queryable<TN_Loc_Container>() - .Where(c => c.S_LOC_CODE == model.StartLoc) - .First(); - - if (locCntrRel == null) { - return NewSimpleResult(2, $"璧风偣璐т綅 {model.StartLoc}"); - } - - var endLoc = new TN_Location(); - if (locCntrRel.S_CNTR_TYPE == "鎵樼洏") { - endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.M婊℃墭璐ф灦鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) // 璧风偣缁戝畾鍓嶆病鏈夊鍣�- .First(); - } - else if (locCntrRel.S_CNTR_TYPE =="濂借繍绠�){ - endLoc = db.Queryable<TN_Location>() - .Where(l => Settings.AreaMap[AreaName.M婊$璐ф灦鍖篯.Contains(l.S_AREA_CODE)) - .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - .Where(l => l.N_CURRENT_NUM == 0) // 璧风偣缁戝畾鍓嶆病鏈夊鍣�- .First(); - } - else { - endLoc = null; - } - - //var endLoc = db.Queryable<TN_Location, TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) - // .Where((l, c) => c.S_CNTR_TYPE == locCntrRel.S_CNTR_TYPE) - // .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") // 绛涢�锛氭湭涓婇攣 - // .Where(l => l.N_CURRENT_NUM == 0) // 璧风偣缁戝畾鍓嶆病鏈夊鍣�- // .First(); - - if (endLoc == null) { - return NewSimpleResult(3, $"涓嶅瓨鍦ㄥ悎閫傜殑缁堢偣璐т綅鍙互鍥炲簱"); - } - 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(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣浣�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); - } - - 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(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); - } - - if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = $"鐢熸垚 {taskName} 澶辫触锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(4, info); - } - - tran.CommitTran(); - info = $"鐢熸垚 {taskName} 鎴愬姛锛屽鍣ㄥ彿 {cntId} 锛岃捣鐐�{startLoc.S_CODE} 锛岀粓鐐硅揣鏋�{endLoc.S_CODE}"; - LogHelper.Info(info); - return NewSimpleResult(0, info); - } - } - catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } /// <summary> - /// 鎴愬搧鑳跺嚭搴�WMS) + /// 灏炬枡鍥炲簱/浣欐枡鍥炲簱 /// </summary> - /// <remarks> - /// WMS鎻愪緵鍑哄簱鐨勭墿鏂欑被鍨嬩笌鏁伴噺锛岃皟鐢ㄦ帴鍙g敱WCS鐢熸垚鍏蜂綋鐨勫嚭搴撲换鍔★紝鐒跺悗WCS鍚庡彴杞澶勭悊 - /// </remarks> + /// <param name="model"></param> + /// <returns></returns> + public static SimpleResult RestBack(RestBackInfo model) { + var db = new SqlHelper<object>().GetInstance(); + var taskInfo = ETask.W灏炬枡鍥炲簱.Info(); + const string preLog = "API锛氬熬鏂欏洖搴擄細"; + + try { + var startLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") + .Where(l => l.S_CODE == model.StartLoc && l.N_CURRENT_NUM == 1).First(); + if (startLoc == null) { + return NewSimpleResult(2, $"娌℃湁鎵惧埌璧风偣璐т綅'{model.StartLoc}'锛佽姹傦細閿佺姸鎬�'鏃�锛涘綋鍓嶅鍣ㄦ暟閲�1"); + } + + var locCntrRel = db.Queryable<TN_Loc_Container>().Where(c => c.S_LOC_CODE == model.StartLoc).First(); + if (locCntrRel == null) { + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌璧风偣璐т綅{model.StartLoc}鎵�粦瀹氱殑瀹瑰櫒"); + } + + var endAreas = locCntrRel.S_CNTR_CODE == "鎵樼洏" ? taskInfo.EndAreas_Pallet : taskInfo.EndAreas_Goodpack; + var endLoc = db.Queryable<TN_Location>().Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "鏃� && l.C_ENABLE == "Y") + .Where(l => endAreas.Contains(l.S_AREA_CODE) && l.N_CURRENT_NUM == 0).First(); + if (endLoc == null) { + return NewSimpleResult(3, preLog + $"娌℃湁鎵惧埌鍚堥�鐨勭粓鐐硅揣浣嶏紒瑕佹眰锛氶攣鐘舵�='鏃�锛屽綋鍓嶅鍣ㄦ暟閲�0锛屾墍鍦ㄥ簱鍖�{LogObject(endAreas)}"); + } + + var cntId = locCntrRel.S_CNTR_CODE; + + WCSHelper.LockStartLoc(ref startLoc); + WCSHelper.LockEndLoc(ref endLoc); + var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskInfo.TaskName); + + using (var tran = db.Ado.UseTran()) { + //if (db.Insertable(locCntrRel).ExecuteCommand() <= 0) { + // tran.RollbackTran(); + // return NewSimpleResult(500, preLog + $"鎻掑叆[瀹瑰櫒璐т綅缁戝畾琛╙澶辫触锛佹暟鎹細{LogObject(locCntrRel)}"); + //} + + if (db.Updateable(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 NewSimpleResult(500, preLog + $"鏇存柊[璧风偣璐т綅閿佺姸鎬乚澶辫触锛佽捣鐐�'{startLoc.S_CODE}'锛岄攣鐘舵�=>'鍑哄簱閿�"); + } + + if (db.Updateable(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, preLog + $"鏇存柊[缁堢偣璐т綅閿佺姸鎬乚澶辫触锛佺粓鐐�'{endLoc.S_CODE}'锛岄攣鐘舵�=>'鍏ュ簱閿�"); + } + + if (db.Insertable(task).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewSimpleResult(500, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'澶辫触锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); + } + + tran.CommitTran(); + return NewSimpleResult(0, preLog + $"鐢熸垚浠诲姟'{task.S_TYPE}'鎴愬姛锛佷换鍔″彿={task.S_CODE}锛屽鍣ㄥ彿={task.S_CNTR_CODE}锛岃捣鐐�{task.S_START_LOC}锛岀粓鐐�{task.S_END_LOC}"); + } + } + catch (Exception ex) { + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); + } + } + + /// <summary> + /// 鎴愬搧鑳跺嚭搴�PDA) 寰呭畾锛屾殏鏃朵笉闇�姝ゅ姛鑳�+ /// </summary> /// <param name="model"></param> /// <returns></returns> public static SimpleResult FinishedOutbound(FinishedOutboundInfo model) { var db = new SqlHelper<object>().GetInstance(); - var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "ON"); - var info = ""; - try { - if (string.IsNullOrEmpty(orderNo)) { - info = "鍑哄簱鍗曞彿涓嶈兘涓虹┖"; - LogHelper.Info(info); - return NewSimpleResult(2, info); - } + var taskInfo = ETask.C鎴愬搧鑳跺嚭搴�Info(); + const string preLog = "API锛氭垚鍝佽兌鍑哄簱锛�; - var cgDetailList = SelectCgByTotalQty(model); + try { + var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "CKD"); + + var cgDetailList = SelectCgByTotalQty(model.Qty, model.ItemCode, model.BatchNo, model.CntrType, model.ForcedOut); if (cgDetailList.Count == 0) { - info = "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�; - LogHelper.Info(info); - return NewSimpleResult(3, info); + return NewSimpleResult(3, preLog + $"娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); } var order = new TN_Outbound_Order { @@ -1066,7 +687,6 @@ S_ITEM_CODE = model.ItemCode, S_BATCH = model.BatchNo, N_END_NUM = model.Qty, - //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -1084,29 +704,23 @@ } using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { + if (db.Insertable(order).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order); - LogHelper.Info(info); - return NewSimpleResult(2, info); + return NewSimpleResult(2, preLog + "鐢熸垚鍑哄簱鍗曞け璐ワ細" + LogObject(order)); } - if (db.Insertable<TN_Outbound_Detail>(detailList).ExecuteCommand() <= 0) { + if (db.Insertable(detailList).ExecuteCommand() <= 0) { tran.RollbackTran(); - info = "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐�; - LogHelper.Info(info); - return NewSimpleResult(4, info); + return NewSimpleResult(4, preLog + "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + LogObject(detailList)); } tran.CommitTran(); } - return NewSimpleResult(0, "鐢熸垚鍑哄簱鍗曟垚鍔�); + return NewSimpleResult(0, preLog + "鐢熸垚鍑哄簱鍗曟垚鍔�); } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } @@ -1116,71 +730,69 @@ /// <returns></returns> public static SimpleResult FinishedOutboundForce(FinishedOutboundInfo model) { var db = new SqlHelper<object>().GetInstance(); - var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "ON"); - var info = ""; + var taskInfo = ETask.C鎴愬搧鑳跺嚭搴�Info(); + const string preLog = "API锛氭垚鍝佽兌鍑哄簱锛�; + try { - if (string.IsNullOrEmpty(orderNo)) { - return NewSimpleResult(2, "鍑哄簱鍗曞彿涓嶈兘涓虹┖"); + var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "CKD"); + + var cgDetailList = SelectCgByTotalQty(model.Qty, model.ItemCode, model.BatchNo, model.CntrType, model.ForcedOut); + + if (cgDetailList.Count == 0) { + return NewSimpleResult(3, preLog + $"娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); + } + + var order = new TN_Outbound_Order { + S_NO = orderNo, + S_ITEM_CODE = model.ItemCode, + S_BATCH = model.BatchNo, + N_END_NUM = model.Qty, + S_END_AREA = model.EndArea + }; + + var detailList = new List<TN_Outbound_Detail>(); + foreach (var cgDetail in cgDetailList) { + var detail = new TN_Outbound_Detail { + S_OO_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + N_COUNT = cgDetail.N_ITEM_NUM, + S_END_AREA = model.EndArea + }; + detailList.Add(detail); } using (var tran = db.Ado.UseTran()) { - - var cgDetailList = SelectCgByTotalQty(model); - - if (cgDetailList.Count == 0) { - return NewSimpleResult(3, "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�); - } - - foreach (var cgDetail in cgDetailList) { - var detail = new TN_Outbound_Detail { - S_OO_NO = orderNo, - S_ITEM_CODE = cgDetail.S_ITEM_CODE, - S_BATCH_NO = cgDetail.S_BATCH_NO, - S_CNTR_CODE = cgDetail.S_CNTR_CODE, - S_END_AREA = model.EndArea - }; - - if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0) { - tran.RollbackTran(); - return NewSimpleResult(4, "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + JsonConvert.SerializeObject(detail)); - } - } - - var order = new TN_Outbound_Order { - S_NO = orderNo, - S_ITEM_CODE = model.ItemCode, - S_BATCH = model.BatchNo, - N_END_NUM = model.Qty, - //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), - S_END_AREA = model.EndArea - }; - - if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { + if (db.Insertable(order).ExecuteCommand() <= 0) { tran.RollbackTran(); - return NewSimpleResult(5, "鐢熸垚鍑哄簱鍗曞け璐ワ細" + JsonConvert.SerializeObject(order)); + return NewSimpleResult(2, preLog + "鐢熸垚鍑哄簱鍗曞け璐ワ細" + LogObject(order)); + } + + if (db.Insertable(detailList).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewSimpleResult(4, preLog + "鐢熸垚鍑哄簱鍗曟槑缁嗗け璐ワ細" + LogObject(detailList)); } tran.CommitTran(); } - return NewSimpleResult(0, "鐢熸垚鍑哄簱鍗曟垚鍔�); + return NewSimpleResult(0, preLog + "鐢熸垚鍑哄簱鍗曟垚鍔�); } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewSimpleResult(1, info); + return NewSimpleResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } - public static List<TN_CG_Detail> SelectCgByTotalQty(FinishedOutboundInfo model) { + public static List<TN_CG_Detail> SelectCgByTotalQty(int qty, string itemCode, string batchNo, string cntrType = "", bool forcedOut = true) { var db = new SqlHelper<object>().GetInstance(); var result = new List<TN_CG_Detail>(); - var targetNum = model.Qty; - var info = ""; + var targetNum = qty; try { - var targetCg = db.Queryable<TN_CG_Detail>().Where(a => a.S_ITEM_CODE == model.ItemCode - && a.N_ITEM_NUM > targetNum). - OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); + var targetCg = db.Queryable<TN_CG_Detail>() + .Where(a => a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo) + .Where(a => a.N_ITEM_NUM > targetNum) + .OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First(); if (targetCg != null) //鍒氬ソ鏈変竴琛屾弧瓒虫潯浠� { result.Add(targetCg); @@ -1191,10 +803,18 @@ var sortedMaterials = new List<TN_CG_Detail>(); - if (model.ForcedOut) { + var cntrTypeList = new List<string>(); + if (cntrType == "") { + cntrTypeList = new List<string> { "鎵樼洏", "濂借繍绠� }; // 涓嶆寚瀹氭墭鐩樼被鍨嬶紝浜岃�鍧囧彲 + } + else { + cntrTypeList.Add(cntrType); + } + + if (forcedOut) { sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE) - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_ITEM_NUM > 0) - .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.S_ITEM_CODE == itemCode && d.S_BATCH_NO == batchNo && d.N_ITEM_NUM > 0) + .Where((d, c) => cntrTypeList.Contains(c.S_CNTR_TYPE)) .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸" || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "寰呮") .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) @@ -1202,13 +822,12 @@ } else { sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE) - .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_ITEM_NUM > 0) - .Where((d, c) => c.S_CNTR_TYPE == model.CntrType) + .Where(d => d.S_ITEM_CODE == itemCode && d.S_BATCH_NO == batchNo && d.N_ITEM_NUM > 0) + .Where((d, c) => cntrTypeList.Contains(c.S_CNTR_TYPE)) .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "鍚堟牸") .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc) .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList(); } - if (sortedMaterials.Count == 0) //娌℃湁婊¤冻鏉′欢鐨� { @@ -1232,7 +851,6 @@ } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; LogHelper.InfoEx(ex); return result; } @@ -1241,75 +859,234 @@ private static string GenerateOrderNo(string snType, string prefix) { var id = SYSHelper.GetSerialNumber(snType, prefix); var date = DateTime.Now.ToString("yyMMdd"); - return $"{prefix}{date}{id.ToString().PadLeft(4, '0')}"; + return $"{prefix}{date}-{id.ToString().PadLeft(4, '0')}"; } /// <summary> - /// 鍗氬疄鐗╂枡淇℃伅涓嬪彂鍚屾 + /// 鍗氬疄鐗╂枡淇℃伅涓嬪彂鍚屾锛堝彧閽堝濂借繍绠憋級 /// </summary> /// <param name="model"></param> /// <returns></returns> public static MesResult CgInfoSync(CgInfoSyncInfo model) { var db = new SqlHelper<object>().GetInstance(); - var random = new Random(); - var info = ""; + const string preLog = "API锛氬崥瀹炰笅鍙戠墿鏂欎俊鎭細"; + const string cntrType = "濂借繍绠�; try { + if (string.IsNullOrEmpty(model.ItemCode)) { + return NewMesResult(400, preLog + $"鐗╂枡缂栫爜'{model.ItemCode}'涓嶈兘涓虹┖锛�); + } + if (string.IsNullOrEmpty(model.CntrCode)) { + return NewMesResult(400, preLog + $"瀹瑰櫒缂栫爜'{model.CntrCode}'涓嶈兘涓虹┖锛�); + } + if (string.IsNullOrEmpty(model.BatchNo)) { + return NewMesResult(400, preLog + $"鎵规鍙�{model.BatchNo}'涓嶈兘涓虹┖锛�); + } + if (model.ItemNum <= 0) { + return NewMesResult(400, preLog + $"鐗╂枡鏁伴噺'{model.ItemNum}'涓嶅悎娉曪紒瑕佹眰锛氱墿鏂欐暟閲忥紴0"); + } + + // TEMP 鐩墠娴佺▼锛氬鍗氬疄涓嬪彂鐨勪俊鎭篃杩涜妫�煡锛屾湭鎵惧埌灏辨姤閿欙紝鍚庨潰鏈夐渶姹傚啀鏇存敼 + var cntr = db.Queryable<TN_Container>() + .Where(c => c.S_CODE == model.CntrCode) // 瀵逛簬鍓嶅彴绋嬪簭鑰岃█锛孲_CODE灏辨槸涓婚敭锛岀淮鎶ゆ椂蹇呭畾鍞竴 + .First(); + + if (cntr == null) { + return NewMesResult(1, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓笉瀛樺湪锛岃鍦ㄥ墠鍙伴〉闈腑缁存姢锛�); + } + if (cntr.S_TYPE != cntrType) { + return NewMesResult(2, preLog + $"瀹瑰櫒'{model.CntrCode}'鍦╗瀹瑰櫒琛╙涓殑绫诲瀷涓�{cntr.S_TYPE}'锛屼笌褰撳墠瀹瑰櫒绫诲瀷'{cntrType}'涓嶅悓锛�); + } + + // 灏嗕笅鍙戠殑淇℃伅鍏堝瓨鍌ㄥ埌CG琛ㄤ腑锛堟鏃舵墭鐩樻病鏈変笌浜х嚎澶勭殑璐т綅缁戝畾锛� var detail = new TN_CG_Detail { - S_ITEM_CODE = model.ItemCode, - S_ITEM_NAME = model.ItemName, - S_CNTR_CODE = GenerateOrderNo("瀹瑰櫒鍙�, "CN"), // NOTE 瀹瑰櫒鍙凤細鐩墠闅忔満锛堝悗鏈熷彲鑳戒細鎸囧畾锛屾垨鑰匬DA缁戝畾鏃跺啀濉叆锛�- S_BATCH_NO = model.BatchNo, + S_ITEM_CODE = model.ItemCode, // NOT NULL + S_ITEM_NAME = model.ItemName, + S_CNTR_CODE = model.CntrCode, // NOT NULL 鏂欑缂栧彿锛堝緟瀹氾紝鐜板湪鏆傛椂璁惧畾涓哄崥瀹炰笅鍙戯級 + S_BATCH_NO = model.BatchNo, // NOT NULL S_STANDARD = model.Standard, S_NET_WEIGHT = model.NetWeight, S_QUALITY_GRADE = model.QualityGrade, - //N_PRODUCT_LINE = random.Next(0, 3), // NOTE 浜х嚎鍙凤細鐩墠闅忔満锛堝悗鏈熷彲鑳戒細鎸囧畾锛屾垨鑰匬DA缁戝畾鏃跺啀濉叆锛� }; - //var locCntrRel = new TN_Loc_Container { - // //S_LOC_CODE = Settings.Config.ProductionLines[detail.N_PRODUCT_LINE].OffLoc[0], // 濂借繍绠辩殑浣嶇疆鏄搷浣滃尯锛屼笉鏄骇绾�- // S_CNTR_CODE = detail.S_CNTR_CODE, - // S_CNTR_TYPE = "濂借繍绠�, // 璐存爣鏈哄彧閽堝濂借繍绠�- //}; + // 浜х嚎鍙风殑閫昏緫寰呭畾锛岀幇鍦ㄨ瀹氫负鍗氬疄涓嬪彂浜х嚎鍙凤紝鐪嬪悗缁渶姹傚彉鏇�+ // 濂借繍绠辫捣鐐逛负浜х嚎璐т綅锛屼汉宸ュ皢濂借繍绠变粠浜х嚎涓婂彇涓嬶紝鎼繍鍒版弧濂借繍绠辨搷浣滃尯 + //var startLocCode = ""; + //if (model.ProdLineId.Trim() == "3") { + // startLocCode = ""; + //} - using (var tran = db.Ado.UseTran()) { - if (db.Insertable<TN_CG_Detail>(detail).ExecuteCommand() <= 0) { - tran.RollbackTran(); - info = "鎻掑叆鐗╂枡淇℃伅澶辫触锛� + JsonConvert.SerializeObject(detail); - return NewMesResult(2, info); - } + //if (model.ProdLineId.Trim() != "3" || model.ProdLineId.Trim() != "4") { + // info = $"涓嶅悎娉曠殑浜х嚎鍙穥model.ProdLineId}锛氬ソ杩愮浜х嚎鍙峰繀椤讳负 3 鎴�4"; + // LogHelper.Info(info); + // return NewMesResult(2, info); + //} - //if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { - // tran.RollbackTran(); - // info = "鎻掑叆鐗╂枡淇℃伅澶辫触锛� + JsonConvert.SerializeObject(detail); - // return NewWmsResult(2, info); - //} - - tran.CommitTran(); + if (db.Insertable(detail).ExecuteCommand() <= 0) { + return NewMesResult(500, preLog + $"鎻掑叆[鐗╂枡鏄庣粏琛╙澶辫触锛佹暟鎹細{LogObject(detail)}"); } - info = "鎻掑叆鐗╂枡淇℃伅鎴愬姛"; - return NewMesResult(0, info); + return NewMesResult(500, preLog + $"鎻掑叆[鐗╂枡鏄庣粏琛╙鎴愬姛锛佹暟鎹細{LogObject(detail)}"); } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewMesResult(1, info); + return NewMesResult(-1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } - public static ErpResult ErpSendOutboundOrder(ErpSendOutboundOrderInfo model) { + public static ErpResult ErpSendOutboundPlan(ErpSendOutboundPlanInfo model) { var db = new SqlHelper<object>().GetInstance(); - var info = ""; + var orderNo = GenerateOrderNo("鍑哄簱鍗曞彿", "CKD"); + const string preLog = "API锛欵RP涓嬪彂鍑哄簱璁″垝鍗曪細"; try { - // TODO - return NewErpResult(0, info); + if (model.pzjs <= 0) { + return NewErpResult(400, preLog + $"鐗╂枡鏁伴噺(pzjs)'{model.pzjs}'涓嶅悎娉曪紒瑕佹眰锛氱墿鏂欐暟閲忥紴0"); + } + + var outboundPlan = db.Queryable<TN_Outbound_Plan>() + .Where(p => p.JHDH == model.jhdh).First(); + if (outboundPlan != null) { + return NewErpResult(1, preLog + $"璁″垝鍗曞彿'{model.jhdh}'宸插湪[鍑哄簱璁″垝鍗昡涓瓨鍦紒"); + } + + outboundPlan = new TN_Outbound_Plan { + JHDH = model.jhdh, // 璁″垝鍗曞彿锛堝敮涓�爣璇嗭級 + CKZT = model.ckzt, // 鍑哄簱鐘舵�锛堥渶瑕佽繑鍥烇級 + JHLB = model.jhlb, // 璁″垝绫诲埆 + CKDH = model.ckdh, // 鍙傝�鍗曞彿 + CPH = model.cph, // 杞︾墝鍙�+ YSFS = model.ysfs, // 杩愯緭鏂瑰紡 + CPZT = model.cpzt, // 浜у搧鐘舵� + MDDW = model.mddw, // 涔版柇鍗曚綅 + CPDM = model.cpdm, // 浜у搧浠g爜 + CPLB = model.cplb, // 浜у搧绫诲埆 + CPLBMX = model.cplbmx, // 浜у搧绫诲埆鏄庣粏 + PP = model.pp, // 鍝佺墝 + DJ = model.dj, // 绛夌骇锛堥渶瑕佽繑鍥烇級 + GH = model.gh, // 缃愬彿 + PH = model.ph, // 鎵瑰彿锛堥渶瑕佽繑鍥烇級 + BZLX = model.bzlx, // 鍖呰绫诲瀷 + PZDH = model.pzdh, // 娲捐鍗曞彿 + PZD_DW = model.pzd_dw, // 娲捐鍗曞崟浣�+ PZD_DYBH = model.pzd_dybh, // 娲捐鍗曡皟杩愮紪鍙�+ PZJS = model.pzjs, // 娲捐浠舵暟 + PZSL = model.pzsl, // 娲捐鏁伴噺 + PZ_RQ = model.pz_rq, // 娲捐鏃ユ湡(yyyy-mm-dd) + PZ_CZRQ = model.pz_czrq, // 娲捐鎿嶄綔鏃ユ湡 + PZ_ZFBJ = model.pz_zfbj, // 娲捐浣滃簾鏍囪 + PZ_ZFRQ = model.pz_zfrq, // 娲捐浣滃簾鏃ユ湡 + PZ_BZ = model.pz_bz, // 娲捐澶囨敞 + CKDBH = model.ckdbh, // 鍑哄簱鍗曠紪鍙�+ SFJS = model.sfjs, // 瀹炲彂浠舵暟锛堥渶瑕佽繑鍥烇級 + SFSL = model.sfsl, // 瀹炲彂鏁伴噺锛堥渶瑕佽繑鍥烇級 + SFCS = model.sfcs, // 瀹炲彂杞︽暟锛堥渶瑕佽繑鍥烇級 + ZCSJ = model.zcsj, // 瑁呰溅鏃堕棿锛堥渶瑕佽繑鍥烇級 + JLDW = model.jldw, // 璁¢噺鍗曚綅锛堥渶瑕佽繑鍥烇級 + FHRQ = model.fhrq, // 鍙戣揣鏃ユ湡锛堥渶瑕佽繑鍥烇級 + CKDM = model.ckdm, // 浠撳簱浠g爜锛堥渶瑕佽繑鍥烇級 + FHR = model.fhr, // 鍙戣揣浜猴紙闇�杩斿洖锛�+ CZYDM = model.czydm, // 鎿嶄綔鍛橈紙闇�杩斿洖锛�+ SHR_USERNAME = model.shr_username, // 瀹℃牳浜�+ SHRQ = model.shrq, // 瀹℃牳鏃ユ湡 + ZFBJ = model.zfbj, // 浣滃簾鏍囪 + ZFRQ = model.zfrq, // 浣滃簾鏃ユ湡 + JSDW = model.jsdw, // 缁撶畻鍗曚綅 + SHDW = model.shdw, // 鏀惰揣鍗曚綅 + YSDW = model.ysdw, // 杩愯緭鍗曚綅 + LXR = model.lxr, // 鑱旂郴浜�+ RY_ZXG = model.ry_zxg, // 瑁呭嵏宸ワ紙闇�杩斿洖锛�+ RY_CCSJ = model.ry_ccsj, // 鍙夎溅鍙告満锛堥渶瑕佽繑鍥烇級 + ERPHX_JHDH = model.erphx_jhdh, // erp浜よ揣鍗曞彿 + ERPHX_WLBM = model.erphx_wlbm, // erp鐗╂枡缂栫爜 + ERPHX_WLMC = model.erphx_wlmc, // erp鐗╂枡鍚嶇О + ERPHX_CJRQ = model.erphx_cjrq, // erp鍒涘缓鏃ユ湡 + HW = model.hw, // 璐т綅锛堥渶瑕佽繑鍥烇級 + HWZT = model.hwzt // 璐т綅鐘舵�锛堥渶瑕佽繑鍥烇級 + }; + + //var cgDetailList = SelectCgByTotalQty( + // qty: (int)model.pzsl, + // itemCode: model.cpdm, + // batchNo: model.ph + // ); + + //if (cgDetailList.Count == 0) { + // info = "娌℃湁鍚堥�鐨勭墿鏂欏彲浠ュ嚭搴�; + // LogHelper.Info(info); + // return NewErpResult(3, info); + //} + + var cgDetail = db.Queryable<TN_CG_Detail>() + .Where(d => d.S_ITEM_CODE == model.cpdm && d.N_ITEM_NUM >= model.pzjs).First(); + if (cgDetail == null ) { + return NewErpResult(2, preLog + $"鍦╗璐у搧鏄庣粏琛╙涓病鏈夋壘鍒板悎閫傜殑鐗╂枡锛佽姹傦細鐗╂枡缂栫爜='{model.cpdm}'锛岀墿鏂欐暟閲�={model.pzjs}"); + } + + var order = new TN_Outbound_Order { + S_NO = orderNo, + //S_ITEM_CODE = model.cpdm, + //S_BATCH = model.ph, + //N_END_NUM = (int)model.pzsl, + S_ITEM_CODE = model.cpdm, + S_BATCH = cgDetail.S_BATCH_NO, + N_END_NUM = (int)model.pzjs, + S_END_AREA = "QCCKQ", // ERP涓嬪彂鍑哄簱浠诲姟涓烘苯杞﹀嚭搴撳尯 + S_BS_NO = model.jhdh, + S_BS_TYPE = "ERP", + }; + + var detailList = new List<TN_Outbound_Detail>(); + //foreach (var cgDetail in cgDetailList) { + // var detail = new TN_Outbound_Detail { + // S_OO_NO = orderNo, + // S_ITEM_CODE = cgDetail.S_ITEM_CODE, + // S_BATCH_NO = cgDetail.S_BATCH_NO, + // S_CNTR_CODE = cgDetail.S_CNTR_CODE, + // N_COUNT = cgDetail.N_ITEM_NUM, + // S_END_AREA = order.S_END_AREA, // order涓篸etail鐨勬瘡涓�釜璐т綅璁剧疆缁堢偣鍊�+ // S_BS_NO = order.S_BS_NO, + // S_BS_TYPE= order.S_BS_TYPE, + // }; + // detailList.Add(detail); + //} + var detail = new TN_Outbound_Detail { + S_OO_NO = orderNo, + S_ITEM_CODE = cgDetail.S_ITEM_CODE, + S_BATCH_NO = cgDetail.S_BATCH_NO, + S_CNTR_CODE = cgDetail.S_CNTR_CODE, + N_COUNT = cgDetail.N_ITEM_NUM, + S_END_AREA = order.S_END_AREA, // order涓篸etail鐨勬瘡涓�釜璐т綅璁剧疆缁堢偣鍊�+ S_BS_NO = order.S_BS_NO, + S_BS_TYPE = order.S_BS_TYPE, + }; + detailList.Add(detail); + + using (var tran = db.Ado.UseTran()) { + if (db.Insertable(order).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗昡澶辫触锛佹暟鎹細{LogObject(order)}"); + } + + if (db.Insertable(detailList).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗曟槑缁哴澶辫触锛佹暟鎹細{LogObject(detailList)}"); + } + + if (db.Insertable(outboundPlan).ExecuteCommand() <= 0) { + tran.RollbackTran(); + return NewErpResult(500, preLog + $"鐢熸垚[鍑哄簱鍗曡鍒掕褰曡〃]澶辫触锛佹暟鎹細{LogObject(outboundPlan)}"); + } + + tran.CommitTran(); + return NewErpResult(0, preLog + $"鐢熸垚[鍑哄簱鍗昡鎴愬姛锛佸嚭搴撳崟锛歿LogObject(order)}\n鍑哄簱鍗曟槑缁嗭細{LogObject(detail)}"); + } } catch (Exception ex) { - info = $"鍙戠敓浜嗗紓甯革細{ex.Message}"; - LogHelper.InfoEx(ex); - return NewErpResult(1, info); + return NewErpResult(1, preLog + $"鍙戠敓浜嗗紓甯革細{ex.Message}\n{ex.StackTrace}"); } } + + private static string LogObject(object obj) { + return JsonConvert.SerializeObject(obj).Replace("\"", "'"); + } } } -- Gitblit v1.9.1