From 21cce90e8d660954f0b89bfe25b9f5218dcbaacd Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期一, 12 五月 2025 00:32:34 +0800 Subject: [PATCH] 退料单(U9)上架事务 --- Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RETURN.cs | 543 +++++++++++++++++++++++++++++++ Tiger.Api/Language.db | 0 Tiger.Controllers.WMS/Controllers/WMSController.In_BIZ_U9_RETURN.cs | 231 +++++++++++++ Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs | 2 Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN_DTL.cs | 118 +++--- Tiger.IBusiness.WMS/Transaction/IIn_BIZ_U9_RETURN.cs | 38 ++ Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN.cs | 65 ++- 7 files changed, 915 insertions(+), 82 deletions(-) diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db index 0a86bb1..eca36b7 100644 --- a/Tiger.Api/Language.db +++ b/Tiger.Api/Language.db Binary files differ diff --git a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs index 54d990b..3d49dd0 100644 --- a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs +++ b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RECEIPT.cs @@ -70,7 +70,7 @@ action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure"); return SetOutPutMqttMsg(action, input.Locale); } - //鍒ゆ柇鎵弿鐨勬槸鍚﹁揣鏋� + //鍒ゆ柇鎵弿鐨勬槸鍚﹁揣鏋�/鍌ㄤ綅 var whUnit = await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == input.SN || t.LOCATION_CODE.ToUpper() == input.SN) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync(); //if (string.IsNullOrEmpty(CurScanShelf?.ShelfCode)) if (!whUnit.IsNullOrEmpty() || string.IsNullOrEmpty(CurScanShelf?.ShelfCode)) diff --git a/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RETURN.cs b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RETURN.cs new file mode 100644 index 0000000..5c052ee --- /dev/null +++ b/Tiger.Business.WMS/Transaction/Yada/In_BIZ_U9_RETURN.cs @@ -0,0 +1,543 @@ +using Rhea.Common; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Tiger.Model; +using Tiger.IBusiness; +using Tiger.Model.Sharetronic.Shelf; +using Tiger.Business.WMS.Sharetronic.Shelf; + +namespace Tiger.Business.WMS.Transaction +{ + /// <summary> + /// 閫�鏂欏崟(U9)涓婃灦浜嬪姟 + /// </summary> + public class In_BIZ_U9_RETURN : WmsTask, IIn_BIZ_U9_RETURN + { + public IIn_BIZ_U9_RETURN Init(string id, string userCode, string apiHost, string orgCode) + { + base.Init(id, userCode, apiHost, orgCode); + Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); + return this; + } + + #region Propertys & Variables + public BIZ_U9_RETURN CurOrder { get; set; } + #endregion + + #region Functions + /// <summary> + /// 鎵弿鍏ュ彛 + /// </summary> + public async Task<ApiAction<ScanOutput>> Scan(BaseInput input) + { + var action = new ApiAction<ScanOutput>(new ScanOutput()); + try + { + if (input.Command == "ScanOrder") + { + var inputOrder = new BaseInput<BIZ_U9_RETURN>(input); + if (inputOrder.Data?.ORDER_NO == null) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("閫夋嫨鐨勫崟鍙蜂笉鑳戒负绌�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanOrder.OrderNoEmptyFailure"); + return SetOutPutMqttMsg(action, input.Locale); + } + action = await ScanOrder(inputOrder); + } + else + { + if (CurOrder.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("涓婃灦鍓嶈鍏堥�夋嫨闇�瑕佷笂鏋剁殑閫�鏂欏崟"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RETURN.ScanItem.NoScanOrder"); + action.Data.Command = "ScanOrder"; + return SetOutPutMqttMsg(action, input.Locale); + } + if (input.SN.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鏉$爜涓嶈兘涓虹┖"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.SnEmptyFailure"); + return SetOutPutMqttMsg(action, input.Locale); + } + //鍒ゆ柇鎵弿鐨勬槸鍚﹁揣鏋�/鍌ㄤ綅 + var whUnit = await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == input.SN || t.LOCATION_CODE.ToUpper() == input.SN) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync(); + if (!whUnit.IsNullOrEmpty() || string.IsNullOrEmpty(CurScanShelf?.ShelfCode)) + { + action = await ScanShelf(input.SN, whUnit); + } + else//鎵弿鐗╂枡骞跺鏍� + { + action = await ScanItem(input); + } + } + } + catch (Exception ex) + { + //鍙栨秷褰撳墠鎿嶄綔 + ResetTrans(); + //action.CatchExceptionWithLog(ex, $"鎵弿[{input.SN}]寮傚父"); + action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.Scan.ScanException", input.SN)); + } + return SetOutPutMqttMsg(action, input.Locale); + } + + /// <summary> + /// 鎵弿閫�鏂欏崟鍙风爜 + /// </summary> + public async Task<ApiAction<ScanOutput>> ScanOrder(BaseInput<BIZ_U9_RETURN> input) + { + var action = new ApiAction<ScanOutput>(new ScanOutput()); + try + { + var returnOrder = await MainDB.Queryable<BIZ_U9_RETURN>().Where(q => q.ORDER_NO == input.Data.ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync(); + if (returnOrder.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鎵句笉鍒伴��鏂欏崟[{0}]鐨勪俊鎭紝璇烽噸鏂伴�夋嫨姝g‘鐨勯��鏂欏崟"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RETURN.ScanOrder.ReturnNotExists", input.Data.ORDER_NO); + return SetOutPutMqttMsg(action, input.Locale); + } + action.Data.Command = "Normal"; + action.Data.Data = CurOrder = returnOrder; + } + catch (Exception ex) + { + //鍙栨秷褰撳墠鎿嶄綔 + ResetTrans(); + //action.CatchExceptionWithLog(ex, $"閫夋嫨閫�鏂欏崟寮傚父(Data: {0})"); + action.CatchExceptionWithLog(ex, Biz.L("WMS.In_BIZ_U9_RETURN.ScanOrderException", input?.Data)); + } + return action; + } + + /// <summary> + /// 鎵弿鐗╂枡骞跺鏍革紝濡傛灉鐗╂枡宸茬粡瀹屾垚绉诲簱鍒欒揣鏋朵笂浜伅鎻愰啋鍌ㄤ綅 + /// </summary> + public async Task<ApiAction<ScanOutput>> ScanItem(BaseInput input) + { + var action = new ApiAction<ScanOutput>(new ScanOutput() { Command = Command }); + try + { + if (CurInvItem.IsNullOrEmpty()) + { + //瑙f瀽鏉$爜 + Result<IInventory> result = GetInventory(input.SN, input.AuthOption, true); + if (!result.IsSuccessed) + { + action.IsSuccessed = false; + action.LocaleMsg = result.LocaleMsg; + return SetOutPutMqttMsg(action, input.Locale); + } + var inv = result.Data as Inventory; + + //楠岃瘉鏉$爜鏄惁姝g‘ + if (!inv.isNormalStatus || inv.Status != WMS_ITEM.STATUSs.WaitIn) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鐘舵�乕{0}]寮傚父锛岃閲嶆柊鎵弿"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.StatusException", string.Join(',', inv.StatusList.Select(q => q.GetDesc()))); + return SetOutPutMqttMsg(action, input.Locale); + } + //鐗╂枡楠岃瘉 + if (inv.ItemInfo.IsNullOrEmpty() || inv.ItemInfo.IS_ACTIVE == "N") + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鐗╂枡缂栫爜[{0}]涓嶅瓨鍦ㄦ垨鑰呰鐗╂枡鏈惎鐢�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemCodeNotExistsOrNotActive", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode)); + return SetOutPutMqttMsg(action, input.Locale); + } + //榛樿鍌ㄤ綅楠岃瘉 + if (!inv.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty() && inv.ItemInfo.DEFAULT_LOCATION != CurScanShelf.LocationCode) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鐗╂枡[{0}]鍙厑璁镐笂鏋跺埌鍌ㄤ綅[{1}]锛岃閲嶆柊鎵弿鍌ㄤ綅"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.DefaultLocationError", inv.ItemInfo.ITEM_CODE, inv.ItemInfo.DEFAULT_LOCATION); + return SetOutPutMqttMsg(action, input.Locale); + } + //鍒ゆ柇褰撳墠鏉$爜鏄惁灞炰簬褰撳墠閫�鏂欏崟 + if (inv.Items.First().TRANS_NO != CurOrder.ORDER_NO) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鏉$爜鎵�灞炵殑鍗曟嵁[{0}]涓嶆槸閫夋嫨鐨勯��鏂欏崟[{1}]锛岃閲嶆柊鎵弿姝g‘鐨勬潯鐮佹垨閫夋嫨鍏朵粬閫�鏂欏崟"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RETURN.ScanItem.NotCurOrder", CurInvItem.Items.First().TRANS_NO, CurOrder.ORDER_NO); + return SetOutPutMqttMsg(action, input.Locale); + } + CurInvItem = inv; + } + + var returnOrder = await MainDB.Queryable<BIZ_U9_RETURN>().Where(q => q.ORDER_NO == CurOrder.ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync(); + var returnDtl = returnOrder.Details.First(q => q.LINE_NO == CurInvItem.Items.First().TRANS_LINE); + if (returnDtl.STATUS > BIZ_U9_RETURN.STATUSs.Storing.GetValue()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("閫�鏂欏崟涓[{0}]鐘舵�乕{1}]寮傚父锛岃鎵弿姝g‘鐨勬潯鐮�"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RETURN.ScanItem.ReturnDtlStatusException", returnDtl.LINE_NO, returnDtl.STATUS.GetEnumDesc<BIZ_U9_RETURN.STATUSs>()); + return SetOutPutMqttMsg(action, input.Locale); + } + var returnSn = returnOrder.SnList.Where(q => CurInvItem.Items.Any(i => i.SN == q.SN)).ToList(); + if (returnSn.Any(q => q.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue())) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("閫�鏂欏崟涓潯鐮乕{0}]鐘舵�乕{1}]寮傚父锛岃鎵弿姝g‘鐨勬潯鐮�"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RETURN.ScanItem.ReturnSnStatusException", CurInvItem.SN, returnSn.First(q => q.STATUS != WMS_ITEM.STATUSs.WaitIn.GetValue()).STATUS.GetEnumDesc<WMS_ITEM.STATUSs>()); + return SetOutPutMqttMsg(action, input.Locale); + } + + var nLocation = new WMS_LOCATION(); + // 鍒ゆ柇鏄惁鏅鸿兘璐ф灦 + if (CurScanShelf.Shelf.IsLightShelf) + { + ShelfApiResult shelfApiResult = await Share.Shelf.PutOn(TransID, CurScanShelf.Shelf, CurInvItem.Items[0]); + if (!shelfApiResult.IsSuccess) + { + action.IsSuccessed = false; + action.LocaleMsg = Biz.L(shelfApiResult.GetData<string>()); + return SetOutPutMqttMsg(action, input.Locale); + } + var reaultShelf = shelfApiResult.GetData<ShelfChangeModel>(); + + nLocation = reaultShelf.GetLocation(); + if (nLocation == null) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L($"璐ф灦[{0}]涓笉瀛樺湪id涓篬{1}]鐨勫偍浣嶏紝璇峰厛缁存姢璐ф灦淇℃伅"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationNotExistsInShelf", CurScanShelf.Shelf.SHELF_CODE, reaultShelf.ledAddr); + return SetOutPutMqttMsg(action, input.Locale); + } + var locationData = MainDB.Queryable<WMS_ITEM>().Where(q => q.LOCATION_ID == nLocation.ID).First(); + if (!locationData.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鍌ㄤ綅[{0}]宸插瓨鏈夌墿鏂橻{1}]锛岃妫�鏌ョ郴缁熷簱瀛樹俊鎭�"); + action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", nLocation.LOCATION_CODE, locationData.SN); + return SetOutPutMqttMsg(action, input.Locale); + } + CurScanShelf.Location = nLocation; + CurScanShelf.LocationCode = nLocation.LOCATION_CODE; + } + else + { + if (CurScanShelf.LocationCode.IsNullOrEmpty() || CurScanShelf.WarehouseCode.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); + return SetOutPutMqttMsg(action, input.Locale); + } + + nLocation = await MainDB.Queryable<WMS_LOCATION>().Where(t => t.LOCATION_CODE == CurScanShelf.LocationCode && t.AUTH_ORG == OrgCode).FirstAsync(); + } + + //鍒ゆ柇鍌ㄤ綅鏄惁鍗曟斁 + if (nLocation.IS_SINGLE == "Y" && CurInvItem.Items.Count > 1) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鍌ㄤ綅[{0}]鍙兘瀛樻斁涓�涓墿鏂�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.LocationSingleFailure", nLocation.LOCATION_CODE); + ResetTrans(); + return SetOutPutMqttMsg(action, input.Locale); + } + + CurOrder = returnOrder; + + //鎵ц涓婃灦鏁版嵁澶勭悊 + foreach (var item in CurInvItem.Items) + { + item.IS_LOCKED = "Y"; + item.SOURCE_CODE = item.TRANS_CODE; + item.SOURCE_ORDER = item.TRANS_NO; + item.SOURCE_LINE = item.TRANS_LINE; + item.TRANS_CODE = nameof(BIZ_U9_RETURN); + item.TRANS_NO = returnOrder.ORDER_NO; + item.TRANS_LINE = returnDtl.LINE_NO; + item.PROD_DATE = item.PROD_DATE < new DateTime(2000, 1, 1) ? DateTime.Now : item.PROD_DATE; + item.FIRST_IN_DATE = item.FIRST_IN_DATE < new DateTime(2000, 1, 1) ? DateTime.Now : item.FIRST_IN_DATE; + } + foreach (var item in CurInvItem.Packages) + { + item.SOURCE_CODE = item.TRANS_CODE; + item.SOURCE_ORDER = item.TRANS_NO; + item.SOURCE_LINE = item.TRANS_LINE; + item.TRANS_CODE = nameof(BIZ_U9_RETURN); + item.TRANS_NO = returnOrder.ORDER_NO; + item.TRANS_LINE = returnDtl.LINE_NO; + } + Result putonResult = PutOn(input.AuthOption, nLocation.LOCATION_CODE); + if (!putonResult.IsSuccessed) + { + action.IsSuccessed = false; + action.LocaleMsg = putonResult.LocaleMsg; + ResetTrans(); + return SetOutPutMqttMsg(action, input.Locale); + } + + //鏇存柊鍗曟嵁淇℃伅 + foreach (var sn in returnSn) + { + sn.STATUS = WMS_ITEM.STATUSs.InStore.GetValue(); + sn.IS_IN = "Y"; + } + //濡傛灉褰撳墠琛屼笂鏋跺畬鎴愭爣璁颁负寰呭鏍� + returnDtl.QTY_IN = returnOrder.SnList.Where(q => q.LINE_NO == returnDtl.LINE_NO && q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue()).Sum(q => q.QTY); + if (returnDtl.QTY_IN == returnDtl.QTY) + { + returnDtl.STATUS = BIZ_U9_RETURN.STATUSs.Review.GetValue(); + //褰撳墠鍗曟嵁鏄庣粏琛屽凡缁忓叏閮ㄤ笂鏋跺畬鎴愶紝鍙互璋冪敤U9瀹℃牳鎺ュ彛锛屽鏋滃鏍稿け璐ュ垯鎶ラ敊锛屾渶鍚庝竴涓笂鏋跺け璐� + //var iInput = new SubmitLineInput + //{ + // userId = UserCode, + // IsLogin = true, + // param = new() + // { + // RcvLineID = receiptDtl.ID, + // RcvDocNo = receiptDtl.ORDER_NO, + // DocLineNo = receiptDtl.LINE_NO, + // OrgCode = receiptDtl.AUTH_ORG, + // } + //}; + //var result = await DI.Resolve<IWMS_U9C>().ReceivementApproveLine(iInput); + //if (!result.IsSuccessed) + //{ + // action.IsSuccessed = false; + // action.LocaleMsg = result.LocaleMsg; + // return SetOutPutMqttMsg(action, input.Locale); + //} + //else + //{ + // receiptDtl.STATUS = BIZ_U9_RECEIPT.STATUSs.Finished.GetValue(); + //} + } + else + { + returnDtl.STATUS = BIZ_U9_RETURN.STATUSs.Storing.GetValue(); + } + //鏇存柊鍗曟嵁鐘舵�� + if (returnOrder.Details.Any(q => q.STATUS < BIZ_U9_RETURN.STATUSs.Review.GetValue())) + { + returnOrder.STATUS = BIZ_U9_RETURN.STATUSs.Storing.GetValue(); + } + else if (returnOrder.Details.Any(q => q.STATUS < BIZ_U9_RETURN.STATUSs.Finished.GetValue())) + { + returnOrder.STATUS = BIZ_U9_RETURN.STATUSs.Review.GetValue(); + } + else + { + returnOrder.STATUS = BIZ_U9_RETURN.STATUSs.Finished.GetValue(); + } + + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _returnOrder = returnOrder.Clone(); + AddCommitAction("Return", () => + { + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + //鏁版嵁淇濆瓨閫昏緫 + db.Updateable(returnOrder, UserCode).UpdateColumns(q => new { q.STATUS, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + db.Updateable(returnDtl, UserCode).UpdateColumns(q => new { q.STATUS, q.QTY_IN, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + db.Updateable(returnSn, UserCode).UpdateColumns(q => new { q.STATUS, q.IS_IN, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + }); + + //瀹屾垚鎵�鏈夊鐞嗗悗浣跨敤浜嬪姟淇濆瓨鏁版嵁 + action = DoIfFinish(action, input.Locale); + } + catch (Exception ex) + { + //鍙栨秷褰撳墠鎿嶄綔 + ResetTrans(); + //action.CatchExceptionWithLog(ex, $"鎵弿鏉$爜[{input.SN}]澶嶆牳寮傚父"); + action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanItem.ScanException", input.SN)); + } + return SetOutPutMqttMsg(action, input.Locale); + } + + /// <summary> + /// 鎵弿璐ф灦鎴栬�呭偍浣� + /// </summary> + public async Task<ApiAction<ScanOutput>> ScanShelf(string Code, V_WH_UNIT whUnit) + { + var action = new ApiAction<ScanOutput>(new ScanOutput() { Command = Command }); + try + { + if (Code.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); + return action; + } + if (!CurOrder.Details.Any(q => q.ItemInfo.DEFAULT_LOCATION.IsNullOrEmpty() || q.ItemInfo.DEFAULT_LOCATION == Code)) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("褰撳墠鍌ㄤ綅[{0}]涓嶅湪閫�鏂欏崟闇�瑕佷笂鏋剁殑鍌ㄤ綅鍒楄〃涓細{1}"); + action.LocaleMsg = Biz.L("WMS.In_BIZ_U9_RETURN.ScanShelf.NoContainLocation", Code, string.Join(", ", CurOrder.Details.Select(q => q.ItemInfo.DEFAULT_LOCATION))); + return action; + } + + CurScanShelf = new ScanShelfInfo(); + + // 鏌ヨ璐ф灦淇℃伅 + whUnit = whUnit.IsNullOrEmpty(await MainDB.Queryable<V_WH_UNIT>().Where(t => (t.SHELF_CODE.ToUpper() == Code || t.LOCATION_CODE.ToUpper() == Code) && t.AUTH_ORG == OrgCode).IncludesAllFirstLayer().FirstAsync()); + + // 鎵弿璐ф灦浠g爜锛屼笖涓烘櫤鑳借揣鏋� + if (!whUnit.IsNullOrEmpty() && whUnit.SHELF_CODE == Code) + { + CurScanShelf.Shelf = whUnit.Shelf; + CurScanShelf.WarehouseCode = whUnit.WH_CODE; + CurScanShelf.RegionCode = whUnit.REGION_CODE; + CurScanShelf.ShelfCode = whUnit.SHELF_CODE; + CurScanShelf.ShelfType = whUnit.SHELF_TYPE; + CurScanShelf.IsSmartRack = true; + } + // 鎵弿搴撲綅浠g爜 + else if (!whUnit.IsNullOrEmpty() && whUnit.LOCATION_CODE == Code) + { + if (whUnit.IS_ACTIVE == "N") + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鎵弿鐨勫偍浣峓{0}]鏈惎鐢�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfOrLocationDisabled", Code); + return action; + } + if (whUnit.Shelf.IsLightShelf || whUnit.Location.IS_SINGLE == "Y") + { + var locationData = MainDB.Queryable<WMS_ITEM>().Where(q => q.LOCATION_ID == whUnit.LOCATION_ID && q.AUTH_ORG == OrgCode).First(); + if (!locationData.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鍌ㄤ綅[{0}]宸插瓨鏈夌墿鏂橻{1}]锛岃妫�鏌ョ郴缁熷簱瀛樹俊鎭�"); + action.LocaleMsg = Biz.L($"WMS.Default.ScanShelf.ItemAlreadyExistsInLocation", Code, locationData.SN); + return action; + } + } + CurScanShelf.Shelf = whUnit.Shelf; + CurScanShelf.Location = whUnit.Location; + CurScanShelf.WarehouseCode = whUnit.WH_CODE; + CurScanShelf.RegionCode = whUnit.REGION_CODE; + CurScanShelf.ShelfCode = whUnit .SHELF_CODE; + CurScanShelf.LocationCode = whUnit.LOCATION_CODE; + CurScanShelf.IsSmartRack = false; + } + else + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("璇疯緭鍏ユ垨鎵弿鏈夋晥鐨勮揣鏋�/鍌ㄤ綅鐮�"); + action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ShelfCanNotEmpty"); + return action; + } + + CurScanShelf.IsScanShelf = true; + //action.LocaleMsg = Biz.L("鎵弿璐ф灦/鍌ㄤ綅[{0}]鎴愬姛"); + action.LocaleMsg = Biz.L("WMS.Default.ScanShelf.ScanSucceeded", Code); + action.Data.Data = CurScanShelf; + } + catch (Exception ex) + { + //鍙栨秷褰撳墠鎿嶄綔 + ResetTrans(); + //action.CatchExceptionWithLog(ex, $"鎵弿璐ф灦/鍌ㄤ綅[{0}]寮傚父"); + action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanShelf.ScanException", Code)); + } + return action; + } + + /// <summary> + /// 瀹屾垚鎵�鏈夊鐞嗗悗浣跨敤浜嬪姟淇濆瓨鏁版嵁 + /// </summary> + /// <param name="action"></param> + /// <param name="locale"></param> + /// <param name="doAfterSave"></param> + /// <returns></returns> + public ApiAction<ScanOutput> DoIfFinish(ApiAction<ScanOutput> action, string locale, Action doAfterSave = null) + { + //淇濆瓨鏁版嵁搴� + SaveCommitListToDB(); + + //淇濆瓨鏁版嵁鎴愬姛鍚庢墽琛� + doAfterSave?.Invoke(); + + // 杩斿洖鏁版嵁 + action.Data.Data = new DefaultInStoreOutput + { + Barcode = CurInvItem.SN, + MaterialCode = CurInvItem.ItemInfo.ITEM_CODE, + MaterialName = CurInvItem.ItemInfo.ITEM_NAME, + CurrentQty = CurInvItem.Items[0].QTY, + Unit = CurInvItem.Items[0].UNIT, + DateCode = CurInvItem.Items[0].PROD_DATE, + WarehouseCode = CurInvItem.Warehouse.WH_CODE, + RegionCode = CurInvItem.Region.REGION_CODE, + ShelfCode = CurInvItem.Shelf.SHELF_CODE, + LocationCode = CurInvItem.Location.LOCATION_CODE, + }; + + //action.LocaleMsg = Biz.L($"鎵弿鏉$爜[{0}]涓婃灦鍒板偍浣峓{1}]鎴愬姛"); + action.LocaleMsg = Biz.L("WMS.Default.ScanItem.PutOnSucceeded", CurInvItem.SN, CurInvItem.Location.LOCATION_CODE); + + //閲嶇疆宸ュ簭 + ResetScan(); + return SetOutPutMqttMsg(action, locale); + } + + /// <summary> + /// 鑾峰彇闇�瑕佷笂鏋剁殑閫�鏂欏崟鍒楄〃锛堝甫鍒嗛〉锛� + /// </summary> + /// <returns></returns> + public async Task<ApiAction<PageAble<BIZ_U9_RETURN>>> GetOrderList(BaseInputWithPage input) + { + var action = new ApiAction<PageAble<BIZ_U9_RETURN>>(); + + action.Data = await MainDB.Queryable<BIZ_U9_RETURN>().Where(q => q.STATUS == BIZ_U9_RETURN.STATUSs.WaitIn.GetValue()).ToPageAsync(input.pageIndex, input.pageSize); + + return action; + } + + /// <summary> + /// 鑾峰彇褰撳墠閫�鏂欏崟淇℃伅 + /// </summary> + /// <returns></returns> + public async Task<ApiAction<BIZ_U9_RETURN>> GetCurOrder() + { + var action = new ApiAction<BIZ_U9_RETURN>(); + action.Data = CurOrder; + return action; + } + + #endregion + + /// <summary> + /// 閲嶇疆浜嬪姟鏁版嵁锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� + /// </summary> + public override void ResetTrans() + { + ResetScan(); + CurScanShelf = null; + base.ResetTrans(); + } + + /// <summary> + /// 閲嶇疆鏈鎵爜淇℃伅 + /// </summary> + public override void ResetScan() + { + Command = "Normal"; + CurInvItem = null; + base.ResetScan(); + } + + public override bool Close(bool needSaveHistoryLog = false) + { + this.IsFinished = true; + return IsFinished ? base.Close(needSaveHistoryLog) : IsFinished; + } + + }//endClass +} \ No newline at end of file diff --git a/Tiger.Controllers.WMS/Controllers/WMSController.In_BIZ_U9_RETURN.cs b/Tiger.Controllers.WMS/Controllers/WMSController.In_BIZ_U9_RETURN.cs new file mode 100644 index 0000000..86c69bf --- /dev/null +++ b/Tiger.Controllers.WMS/Controllers/WMSController.In_BIZ_U9_RETURN.cs @@ -0,0 +1,231 @@ +using System; +using System.Threading.Tasks; +using Rhea.Common; +using Tiger.Model; +using Tiger.IBusiness; +using Microsoft.AspNetCore.Mvc; +using Autofac; + +namespace Tiger.Api.Controllers.WMS +{ + public partial class WMSController : ControllerBase + { + /// <summary> + /// GetTransaction(ApiAction(Data:UserId)) + /// 鏍规嵁ApiAction鐨刬d杩斿洖涓�涓��鏂欏崟(U9)涓婃灦浜嬪姟 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/In_U9Return/GetTransaction")] + public IActionResult In_BIZ_U9_RETURN_GetTransaction([FromBody] ApiAction<USER> action) + { + ApiAction response; + IIn_BIZ_U9_RETURN trans = null; + try + { + if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_BIZ_U9_RETURN; + } + else + { + trans = AutoFacContainer.Instance.Resolve<IIn_BIZ_U9_RETURN>().Init(action.ID, action.Data?.USER_CODE, Request.Host.Value, action.Data?.ORG_CODE); + iBiz.WMS.Context.NewTransaction(HttpContext, trans); + } + + response = action.GetResponse(); + } + catch (System.Exception ex) + { + response = action.GetResponse().CatchExceptionWithLog(ex); + } + trans?.AddHistory(Request, action); + return Ok(response); + } + + /// <summary> + /// CloseTransaction(ApiAction) + /// 鍏抽棴浜嬪姟 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/In_U9Return/CloseTransaction")] + public IActionResult In_BIZ_U9_RETURN_CloseTransaction([FromBody] ApiAction action) + { + ApiAction response; + IIn_BIZ_U9_RETURN trans = null; + try + { + if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_BIZ_U9_RETURN; + if (!trans.IsFinished) + { + if (action.IsAsync) + { + response = action.GetResponse(trans.Close()); + } + else + { + lock (trans.TransLock) { response = action.GetResponse(trans.Close()); } + } + response.Message = $"閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]鍏抽棴{(response.IsSuccessed ? "鎴愬姛" : "澶辫触")}"; + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]宸茬粡鍏抽棴", false); + } + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]宸茬粡鍏抽棴", false); + } + } + catch (System.Exception ex) + { + response = action.GetResponse().CatchExceptionWithLog(ex); + } + trans?.AddHistory(Request, action); + return Ok(response); + } + + /// <summary> + /// 鎵弿鍏ュ彛 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/In_U9Return/Scan")] + public async Task<IActionResult> In_BIZ_U9_RETURN_ScanAsync([FromBody] ApiAction<BaseInput> action) + { + ApiAction response; + IIn_BIZ_U9_RETURN trans = null; + try + { + if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_BIZ_U9_RETURN; + if (!trans.IsFinished) + { + if (action.IsAsync) + { + response = action.GetResponse(await trans.Scan(action.Data)); + } + else + { + lock (trans.TransLock) { response = action.GetResponse(trans.Scan(action.Data).Result); } + } + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]宸茬粡鍏抽棴锛岃閲嶆柊鎵撳紑閫�鏂欏崟(U9)涓婃灦鍔熻兘", false); + } + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]鏁版嵁涓㈠け锛岃閲嶆柊鎵撳紑閫�鏂欏崟(U9)涓婃灦鍔熻兘", false); + } + } + catch (System.Exception ex) + { + response = action.GetResponse().CatchExceptionWithLog(ex); + } + trans?.AddHistory(Request, action); + return Ok(response); + } + + /// <summary> + /// GetOrderList(ApiAction(BasePageInput)) + /// 鑾峰彇闇�瑕佷笂鏋剁殑閫�鏂欏崟鍒楄〃锛堝甫鍒嗛〉锛� + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/In_U9Return/GetOrderList")] + public async Task<IActionResult> In_BIZ_U9_RETURN_GetOrderListAsync([FromBody] ApiAction<BaseInputWithPage> action) + { + ApiAction response; + IIn_BIZ_U9_RETURN trans = null; + try + { + if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_BIZ_U9_RETURN; + if (!trans.IsFinished) + { + if (action.IsAsync) + { + response = action.GetResponse(await trans.GetOrderList(action.Data)); + } + else + { + lock (trans.TransLock) { response = action.GetResponse(trans.GetOrderList(action.Data).Result); } + } + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]宸茬粡鍏抽棴锛岃閲嶆柊鎵撳紑閫�鏂欏崟(U9)涓婃灦鍔熻兘", false); + } + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]鏁版嵁涓㈠け锛岃閲嶆柊鎵撳紑閫�鏂欏崟(U9)涓婃灦鍔熻兘", false); + } + } + catch (System.Exception ex) + { + response = action.GetResponse().CatchExceptionWithLog(ex); + } + trans?.AddHistory(Request, action); + return Ok(response); + } + + /// <summary> + /// GetCurOrder(ApiAction) + /// 鑾峰彇褰撳墠閫�鏂欏崟淇℃伅 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/In_U9Return/GetCurOrder")] + public async Task<IActionResult> In_BIZ_U9_RETURN_GetCurOrderAsync([FromBody] ApiAction<BaseInput> action) + { + ApiAction response; + IIn_BIZ_U9_RETURN trans = null; + try + { + if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IIn_BIZ_U9_RETURN; + if (!trans.IsFinished) + { + if (action.IsAsync) + { + response = action.GetResponse(await trans.GetCurOrder()); + } + else + { + lock (trans.TransLock) { response = action.GetResponse(trans.GetCurOrder().Result); } + } + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]宸茬粡鍏抽棴锛岃閲嶆柊鎵撳紑閫�鏂欏崟(U9)涓婃灦鍔熻兘", false); + } + } + else + { + response = action.GetResponse($"Transaction Error: 閫�鏂欏崟(U9)涓婃灦浜嬪姟[ID:{action.ID}]鏁版嵁涓㈠け锛岃閲嶆柊鎵撳紑閫�鏂欏崟(U9)涓婃灦鍔熻兘", false); + } + } + catch (System.Exception ex) + { + response = action.GetResponse().CatchExceptionWithLog(ex); + } + trans?.AddHistory(Request, action); + return Ok(response); + } + } +} diff --git a/Tiger.IBusiness.WMS/Transaction/IIn_BIZ_U9_RETURN.cs b/Tiger.IBusiness.WMS/Transaction/IIn_BIZ_U9_RETURN.cs new file mode 100644 index 0000000..e085980 --- /dev/null +++ b/Tiger.IBusiness.WMS/Transaction/IIn_BIZ_U9_RETURN.cs @@ -0,0 +1,38 @@ +using Rhea.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tiger.Model; +using Tiger.Model.MES.Yada; + +namespace Tiger.IBusiness +{ + /// <summary> + /// 閫�鏂欏崟(U9)涓婃灦浜嬪姟 + /// </summary> + public interface IIn_BIZ_U9_RETURN : IWmsTask + { + public IIn_BIZ_U9_RETURN Init(string id, string userCode, string apiHost, string orgCode); + + /// <summary> + /// 鎵弿鍏ュ彛 + /// </summary> + public Task<ApiAction<ScanOutput>> Scan(BaseInput input); + + /// <summary> + /// 鑾峰彇闇�瑕佷笂鏋剁殑閫�鏂欏崟鍒楄〃锛堝甫鍒嗛〉锛� + /// </summary> + /// <returns></returns> + public Task<ApiAction<PageAble<BIZ_U9_RETURN>>> GetOrderList(BaseInputWithPage input); + + /// <summary> + /// 鑾峰彇褰撳墠閫�鏂欏崟淇℃伅 + /// </summary> + /// <returns></returns> + public Task<ApiAction<BIZ_U9_RETURN>> GetCurOrder(); + + public bool Close(bool needSaveHistoryLog = false); + } +} diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN.cs index 3ab7440..b0dd3e6 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN.cs @@ -29,9 +29,14 @@ [DisplayName("鍗曟嵁鍙�")] public string ORDER_NO { get; set; } /// <summary> - /// 鐘舵��(0Init鍒濆鍖東1Imported宸插鍏2Counting娓呯偣涓瓅3Storing涓婃灦涓瓅4Review寰呭鏍竱5Finished宸插畬鎴恷6Cancel宸蹭綔搴�) + /// 鐘舵��(0Production鐢熶骇閫�鏂檤1Outsourcing濮斿閫�鏂�) /// </summary> - [DisplayName("鐘舵��(0Init鍒濆鍖東1Imported宸插鍏2Counting娓呯偣涓瓅3Storing涓婃灦涓瓅4Review寰呭鏍竱5Finished宸插畬鎴恷6Cancel宸蹭綔搴�)")] + [DisplayName("鐘舵��(0Production鐢熶骇閫�鏂檤1Outsourcing濮斿閫�鏂�)")] + public int RETURN_TYPE { get; set; } + /// <summary> + /// 鐘舵��(0Init鍒濆鍖東1Imported宸插鍏2Counting娓呯偣涓瓅3WaitIn寰呬笂鏋秥4Storing涓婃灦涓瓅5Review寰呭鏍竱6Finished宸插畬鎴恷7Cancel宸蹭綔搴�) + /// </summary> + [DisplayName("鐘舵��(0Init鍒濆鍖東1Imported宸插鍏2Counting娓呯偣涓瓅3WaitIn寰呬笂鏋秥4Storing涓婃灦涓瓅5Review寰呭鏍竱6Finished宸插畬鎴恷7Cancel宸蹭綔搴�)")] public int STATUS { get; set; } /// <summary> /// 鏉ユ簮鍗曟嵁缂栫爜 @@ -89,7 +94,6 @@ [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_U9_RETURNId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭 public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull */ - [Navigate(NavigateType.OneToMany, nameof(BIZ_U9_RETURN_DTL.ORDER_NO), nameof(ORDER_NO), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_RETURN绫婚噷闈㈢殑澶栭敭ID瀛楁 public List<BIZ_U9_RETURN_DTL> Details { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull [Navigate(NavigateType.OneToMany, nameof(BIZ_U9_RETURN_SN.ORDER_NO), nameof(ORDER_NO), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_RETURN绫婚噷闈㈢殑澶栭敭ID瀛楁 @@ -108,30 +112,43 @@ */ /// <summary> - /// 鏋氫妇锛氱姸鎬�(0Init鍒濆鍖東1Imported宸插鍏2Counting娓呯偣涓瓅3Storing涓婃灦涓瓅4Review寰呭鏍竱5Finished宸插畬鎴恷6Cancel宸蹭綔搴�) + /// 鏋氫妇锛氱姸鎬�(0Production鐢熶骇閫�鏂檤1Outsourcing濮斿閫�鏂�) + /// </summary> + public enum RETURN_TYPEs + { + [Description("鐢熶骇閫�鏂�")] + Production = 0, + [Description("濮斿閫�鏂�")] + Outsourcing = 1, + } + + /// <summary> + /// 鏋氫妇锛氱姸鎬�(0Init鍒濆鍖東1Imported宸插鍏2Counting娓呯偣涓瓅3WaitIn寰呬笂鏋秥4Storing涓婃灦涓瓅5Review寰呭鏍竱6Finished宸插畬鎴恷7Cancel宸蹭綔搴�) /// </summary> public enum STATUSs - { - [Description("鍒濆鍖�")] - Init = 0, - [Description("宸插鍏�")] - Imported = 1, - [Description("娓呯偣涓�")] - Counting = 2, - [Description("涓婃灦涓�")] - Storing = 3, - [Description("寰呭鏍�")] - Review = 4, - [Description("宸插畬鎴�")] - Finished = 5, - [Description("宸蹭綔搴�")] - Cancel = 6, - } - #endregion + { + [Description("鍒濆鍖�")] + Init = 0, + [Description("宸插鍏�")] + Imported = 1, + [Description("娓呯偣涓�")] + Counting = 2, + [Description("寰呬笂鏋�")] + WaitIn = 3, + [Description("涓婃灦涓�")] + Storing = 4, + [Description("寰呭鏍�")] + Review = 5, + [Description("宸插畬鎴�")] + Finished = 6, + [Description("宸蹭綔搴�")] + Cancel = 7, + } + #endregion - #region 鍏叡鏂规硶 + #region 鍏叡鏂规硶 - #endregion + #endregion - }//endClass + }//endClass } \ No newline at end of file diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN_DTL.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN_DTL.cs index 702a201..86990b8 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN_DTL.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_RETURN_DTL.cs @@ -7,130 +7,134 @@ namespace Tiger.Model { /// <summary> - /// 实体:退料单(U9)明细 + /// 瀹炰綋锛氶��鏂欏崟(U9)鏄庣粏 /// </summary> [Description("Primary:ID")] - [DisplayName("退料单(U9)明细")] + [DisplayName("閫�鏂欏崟(U9)鏄庣粏")] [Serializable] [SugarTable("BIZ_U9_RETURN_DTL")] public class BIZ_U9_RETURN_DTL : DbEntityWithAuth { - #region 构造函数 + #region 鏋勯�犲嚱鏁� /// <summary> - /// 实体:退料单(U9)明细 + /// 瀹炰綋锛氶��鏂欏崟(U9)鏄庣粏 /// </summary> public BIZ_U9_RETURN_DTL() {} #endregion - #region 公共属性 + #region 鍏叡灞炴�� /// <summary> - /// 单据号 + /// 鍗曟嵁鍙� /// </summary> - [DisplayName("单据号")] + [DisplayName("鍗曟嵁鍙�")] public string ORDER_NO { get; set; } /// <summary> - /// 单据行号 + /// 鍗曟嵁琛屽彿 /// </summary> - [DisplayName("单据行号")] + [DisplayName("鍗曟嵁琛屽彿")] public string LINE_NO { get; set; } /// <summary> - /// 来源单据编码 + /// 鏉ユ簮鍗曟嵁缂栫爜 /// </summary> - [DisplayName("来源单据编码")] + [DisplayName("鏉ユ簮鍗曟嵁缂栫爜")] public string SOURCE_CODE { get; set; } /// <summary> - /// 来源单号 + /// 鏉ユ簮鍗曞彿 /// </summary> - [DisplayName("来源单号")] + [DisplayName("鏉ユ簮鍗曞彿")] public string SOURCE_ORDER { get; set; } /// <summary> - /// 来源单行号 + /// 鏉ユ簮鍗曡鍙� /// </summary> - [DisplayName("来源单行号")] + [DisplayName("鏉ユ簮鍗曡鍙�")] public string SOURCE_LINE { get; set; } /// <summary> - /// 来源单行ID + /// 鏉ユ簮鍗曡ID /// </summary> - [DisplayName("来源单行ID")] + [DisplayName("鏉ユ簮鍗曡ID")] public string SOURCE_ID { get; set; } /// <summary> - /// 状态(同单据状态) + /// 鐘舵��(鍚屽崟鎹姸鎬�) /// </summary> - [DisplayName("状态(同单据状态)")] + [DisplayName("鐘舵��(鍚屽崟鎹姸鎬�)")] public int STATUS { get; set; } /// <summary> - /// 物料编码 + /// 鐗╂枡缂栫爜 /// </summary> - [DisplayName("物料编码")] + [DisplayName("鐗╂枡缂栫爜")] public string ITEM_CODE { get; set; } /// <summary> - /// 单位 + /// 鍗曚綅 /// </summary> - [DisplayName("单位")] + [DisplayName("鍗曚綅")] public string UNIT { get; set; } /// <summary> - /// 单据数量 + /// 鍗曟嵁鏁伴噺 /// </summary> - [DisplayName("单据数量")] + [DisplayName("鍗曟嵁鏁伴噺")] public double QTY { get; set; } /// <summary> - /// 入库数量 + /// 鍏ュ簱鏁伴噺 /// </summary> - [DisplayName("入库数量")] + [DisplayName("鍏ュ簱鏁伴噺")] public double QTY_IN { get; set; } /// <summary> - /// 批次号 + /// 鎵规鍙� /// </summary> - [DisplayName("批次号")] + [DisplayName("鎵规鍙�")] public string LOTNO { get; set; } /// <summary> - /// ERP编码 + /// ERP缂栫爜 /// </summary> - [DisplayName("ERP编码")] + [DisplayName("ERP缂栫爜")] public string ERP_CODE { get; set; } /// <summary> - /// 备注 + /// 澶囨敞 /// </summary> - [DisplayName("备注")] + [DisplayName("澶囨敞")] public string REMARK { get; set; } - #endregion + #endregion - #region 虚拟属性 - /*例子 + #region 铏氭嫙灞炴�� + /*渚嬪瓙 [SugarColumn(IsIgnore = true)] public string FieldName { get; set; } */ - #endregion + #endregion - #region 外键属性 - /*例子 - //一对一外键导航 - [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是BIZ_U9_RETURN_DTL类里面的外键ID字段 - public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null - //一对多外键导航 - [Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_U9_RETURN_DTLId))]//ClassA表中的BIZ_U9_RETURN_DTLId - public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null - //多对多外键导航 - [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_U9_RETURN_DTLId), nameof(MappingClass.ClassAId))]//注意顺序 - public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null + #region 澶栭敭灞炴�� + /*渚嬪瓙 + //涓�瀵逛竴澶栭敭瀵艰埅 + [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_RETURN_DTL绫婚噷闈㈢殑澶栭敭ID瀛楁 + public ClassA ClassA { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull + //涓�瀵瑰澶栭敭瀵艰埅 + [Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_U9_RETURN_DTLId))]//ClassA琛ㄤ腑鐨凚IZ_U9_RETURN_DTLId + public List<ClassA> ClassAList { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull + //澶氬澶氬閿鑸� + [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_U9_RETURN_DTLId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭 + public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull */ - #endregion + [Navigate(NavigateType.OneToMany, nameof(BAS_ITEM.ITEM_CODE), nameof(ITEM_CODE), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_RETURN_DTL绫婚噷闈㈢殑澶栭敭ID瀛楁 + public List<BAS_ITEM> _ItemInfos { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull + [SugarColumn(IsIgnore = true)] + public BAS_ITEM ItemInfo => _ItemInfos?.FirstOrDefault(q => q.AUTH_ORG == AUTH_ORG); + #endregion - #region 枚举变量 - /*例子 + #region 鏋氫妇鍙橀噺 + /*渚嬪瓙 public enum FieldNames { - [Description("枚举描述0")] + [Description("鏋氫妇鎻忚堪0")] Enum0, - [Description("枚举描述1")] + [Description("鏋氫妇鎻忚堪1")] Enum1, } */ - #endregion + #endregion - #region 公共方法 + #region 鍏叡鏂规硶 - #endregion + #endregion - }//endClass + }//endClass } \ No newline at end of file -- Gitblit v1.9.3