From c4c9228d894b455327c76a6e286e394513ef542a Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期三, 25 十二月 2024 00:22:57 +0800 Subject: [PATCH] 生成入库单更新 --- Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs | 2 Tiger.Business.MES/iERP/MES_U9C.cs | 75 ++++++++++ Tiger.Business.MES/Transaction/InStoreOrderNo.cs | 225 ++++++++++++++++++++++--------- Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs | 23 +++ Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs | 90 ++++++++++++ Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs | 5 6 files changed, 348 insertions(+), 72 deletions(-) diff --git a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs index 78bb79d..ad37121 100644 --- a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs +++ b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs @@ -38,7 +38,7 @@ OrgCode = input.OrgCode; pageSize = input.pageSize; _GetScannedList(); - CurBatchNo = !inStoreInfos.IsNullOrEmpty() && inStoreInfos.InStoreScanInfos.Count>0? InStoreScanInfos[0].BATCH_NO: DateTime.Now.ToString("yyyyMMddHHmmss"); + CurBatchNo = !inStoreInfos.IsNullOrEmpty() && inStoreInfos.InStoreScanInfos.Count > 0 ? InStoreScanInfos[0].BATCH_NO : DateTime.Now.ToString("yyyyMMddHHmmss"); Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]"); return this; } @@ -66,8 +66,9 @@ #region Functions - public ApiAction<InStoreInfos> GetInStoreInfos() { - return new() { Data= inStoreInfos }; + public ApiAction<InStoreInfos> GetInStoreInfos() + { + return new() { Data = inStoreInfos }; } /// <summary> /// 鎵弿鏉$爜 @@ -230,7 +231,7 @@ RcvRptInput.labels = new(); RcvRptInput.ErpProdInBths = ErpProdInBths; RcvRptInput.userId = UserCode; - inStoreInfos= new() + inStoreInfos = new() { ErpProdInBths = ErpProdInBths, InStoreScanInfos = InStoreScanInfos, @@ -294,7 +295,7 @@ { foreach (var sn in ErpProdInSns) { - var d = action.Data.ErpProdInBths.Where(q=> q.WORK_ORDER == sn.SOURCECODE).FirstOrDefault(); + var d = action.Data.ErpProdInBths.Where(q => q.WORK_ORDER == sn.SOURCECODE).FirstOrDefault(); if (!d.IsNullOrEmpty()) { sn.BUSINESSCODE = d.ORDER_NO; @@ -345,12 +346,13 @@ /// 鏌ヨ宸叉壂鎻忓垪琛� /// </summary> /// <returns></returns> - public async Task<ApiAction<RcvRptDocCreateInput>> GetScannedList() + public async Task<ApiAction<InStoreInfos>> GetScannedList() { - var action = new ApiAction<RcvRptDocCreateInput>(); + var action = new ApiAction<InStoreInfos>(); try { - action.Data = _GetScannedList(); + _GetScannedList(); + action.Data = inStoreInfos; } catch (Exception ex) { @@ -366,40 +368,71 @@ private RcvRptDocCreateInput _GetScannedList() { RcvRptInput.RcvRptDocBases = new(); + RcvRptInput.ErpProdInBths = new(); RcvRptInput.PrintJsons = new(); RcvRptInput.labels = new(); RcvRptInput.userId = UserCode; - if (RcvRptInput.ErpProdInBths.Count == 0) + ErpProdInSns.Clear(); + ErpProdIns.Clear(); + ErpProdInBths.Clear(); + InStoreScanInfos.Clear(); + RcvRptInput.ErpProdInBths = Biz.Db.Queryable<BIZ_ERP_PROD_IN_BTH>() + .Where(q => q.BATCH_NO == SqlFunc.Subqueryable<BIZ_ERP_PROD_IN_BTH>().Where(s => s.ORDER_NO == UserCode && s.GHOST_ROW == false).Select(s => s.BATCH_NO)) + .IncludesAllFirstLayer().ToList(); + foreach (var item in RcvRptInput.ErpProdInBths) { - RcvRptInput.ErpProdInBths = Biz.Db.Queryable<BIZ_ERP_PROD_IN_BTH>() - .Where(q => q.BATCH_NO == SqlFunc.Subqueryable<BIZ_ERP_PROD_IN_BTH>().Where(s => s.ORDER_NO == UserCode).Select(s => s.BATCH_NO)) - .IncludesAllFirstLayer().ToList(); - foreach (var item in RcvRptInput.ErpProdInBths) + var values = item.ProdInSns.GroupBy(x => x.CARTONNO) + .Select(g => new InStoreScanInfo() { SN = g.Key, SALES_ORDER = item.SALES_ORDER, BATCH_NO = item.BATCH_NO, WORK_ORDER = item.WORK_ORDER, SCAN_QTY = g.Sum(x => x.Qty).ToDouble() }); + foreach (var t in values) { - var values = item.ProdInSns.GroupBy(x => x.CARTONNO) - .Select(g => new InStoreScanInfo() { SN = g.Key, SALES_ORDER = item.SALES_ORDER, BATCH_NO = item.BATCH_NO, WORK_ORDER = item.WORK_ORDER, SCAN_QTY = g.Sum(x => x.Qty).ToDouble() }); - foreach (var t in values) + InStoreScanInfos.Add(t); + } + item.CartonQty = values.Count(); + + ErpProdIns.Add(new() + { + AUTH_ORG = OrgCode, + BILLCODE = UserCode, + BILLDATE = DateTime.Now, + STATUS = 0, + HANDLED = -1, + WAREHOUSECODE = "", + SOURCECODE = item.WORK_ORDER, + HANDLED_DATE = DateTime.Now, + }); + ErpProdInSns.AddRange(item.ProdInSns); + + //鐢熸垚鎵撳嵃瀹炰綋 + if (RcvRptInput.PrintJsons.Count == 0) + { + RcvRptInput.PrintJsons.Add(new() { - InStoreScanInfos.Add(t); + ID = Guid.NewGuid().ToString("N"), + Items = new() { + item + } + }); + } + else + { + //鎷煎垎椤� + bool isAdded = false; + foreach (var p in RcvRptInput.PrintJsons) + { + if (!p.Items.Any(q => q.WORK_ORDER == item.WORK_ORDER)) + { + if (p.Items.Count < pageSize) + { + p.Items.Add(item); + isAdded = true; + } + } + else + { + isAdded = true; + } } - item.CartonQty = values.Count(); - - BIZ_ERP_PROD_IN prodIn = new() - { - AUTH_ORG = OrgCode, - BILLCODE = UserCode, - BILLDATE = DateTime.Now, - STATUS = 0, - HANDLED = -1, - WAREHOUSECODE = "", - SOURCECODE = item.WORK_ORDER, - HANDLED_DATE = DateTime.Now, - }; - ErpProdIns.Add(prodIn); - ErpProdInSns.AddRange(item.ProdInSns); - - //鐢熸垚鎵撳嵃瀹炰綋 - if (RcvRptInput.PrintJsons.Count == 0) + if (!isAdded) { RcvRptInput.PrintJsons.Add(new() { @@ -409,40 +442,10 @@ } }); } - else - { - //鎷煎垎椤� - bool isAdded = false; - foreach (var p in RcvRptInput.PrintJsons) - { - if (!p.Items.Any(q => q.WORK_ORDER == item.WORK_ORDER)) - { - if (p.Items.Count < pageSize) - { - p.Items.Add(item); - isAdded = true; - } - } - else - { - isAdded = true; - } - } - if (!isAdded) - { - RcvRptInput.PrintJsons.Add(new() - { - ID = Guid.NewGuid().ToString("N"), - Items = new() { - item - } - }); - } - } } - ErpProdInBths = RcvRptInput.ErpProdInBths; } - + ErpProdInBths = RcvRptInput.ErpProdInBths; + inStoreInfos = new() { ErpProdInBths = ErpProdInBths, @@ -451,6 +454,94 @@ return RcvRptInput; } + /// <summary> + /// 鍒犻櫎绠� + /// </summary> + /// <param name="SN"></param> + /// <returns></returns> + public async Task<ApiAction> Delete(string CartonNo) + { + var action = new ApiAction(); + try + { + var ErpProdInSn = ErpProdInSns.Where(s => s.CARTONNO == CartonNo).ToList(); + BIZ_ERP_PROD_IN_BTH erpbth = new(); + if (!ErpProdInSn.IsNullOrEmpty()) + { + erpbth = ErpProdInBths.Where(q => q.WORK_ORDER == ErpProdInSn[0].SOURCECODE).FirstOrDefault(); + if (!erpbth.IsNullOrEmpty()) + { + erpbth.SCAN_QTY -= ErpProdInSn.Count(q => q.CARTONNO == CartonNo); + erpbth.CartonQty--; + } + } + + //淇濆瓨鏁版嵁搴� + var db = Business.Biz.Db; + var dbTran = db.UseTran(() => + { + db.Deleteable<BIZ_ERP_PROD_IN_SN>().Where(x => x.BUSINESSCODE == UserCode && x.CARTONNO == CartonNo).ExecuteCommand(); + db.Updateable(erpbth, $"InStoreOrderNo_{UserCode}").ExecuteCommand(); + if (erpbth.CartonQty == 0) + { + db.Deleteable(erpbth).ExecuteCommand(); + } + }); + if (!dbTran.IsSuccess) + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction delete exception"); + this.Close(!dbTran.IsSuccess); + throw dbTran.ErrorException; + } + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�"); + } + return action; + } + + /// <summary> + /// 娓呴櫎 + /// </summary> + /// <returns></returns> + public async Task<ApiAction> Clear() + { + var action = new ApiAction(); + try + { + RcvRptInput = new(); + ProdInBatchs = new() { }; + ErpProdInBths = new() { }; + ErpProdIns = new(); + /// <summary> + /// 鎵弿鍒楄〃 + /// </summary> + InStoreScanInfos = new() { }; + ErpProdInSns = new(); + inStoreInfos = new() { }; + + //淇濆瓨鏁版嵁搴� + var db = Business.Biz.Db; + var dbTran = db.UseTran(() => + { + db.Deleteable<BIZ_ERP_PROD_IN_BTH>().Where(x => x.ORDER_NO == UserCode && x.IS_HANDLED == "N").ExecuteCommand(); + db.Deleteable<BIZ_ERP_PROD_IN_SN>().Where(x => x.BUSINESSCODE == UserCode).ExecuteCommand(); + }); + if (!dbTran.IsSuccess) + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + this.Close(!dbTran.IsSuccess); + throw dbTran.ErrorException; + } + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�"); + } + return action; + } + #endregion Functions public override bool Close(bool needSaveHistoryLog = false) diff --git a/Tiger.Business.MES/iERP/MES_U9C.cs b/Tiger.Business.MES/iERP/MES_U9C.cs index f375315..8b8a297 100644 --- a/Tiger.Business.MES/iERP/MES_U9C.cs +++ b/Tiger.Business.MES/iERP/MES_U9C.cs @@ -26,13 +26,16 @@ { public partial class MES_U9C : IMES_U9C { - public static string U9CAuthLoginUrl { get; set; } = Cache.SysParam["U9CAuthLoginUrl_Test", "U9CUrl"].PARAM_VALUE; // "http://172.16.80.20/U9C/webapi/OAuth2/AuthLogin?"; 娴嬭瘯 + public static string U9CAuthLoginUrl { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["U9CAuthLoginUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["U9CAuthLoginUrl", "U9CUrl"].PARAM_VALUE; // "http://172.16.80.20/U9C/webapi/OAuth2/AuthLogin?"; 娴嬭瘯 //public static string U9CAuthLoginUrl { get; set; } = Cache.SysParam["U9CAuthLoginUrl", "U9CUrl"].PARAM_VALUE; //姝e紡 public static string secret = "&entcode=02&orgcode=101&clientid=mes&clientsecret=12c8ee7e9bb74ad2a6a0fb3315c8af20"; public static string RcvRptDocCreateUrl - { get; set; } = Cache.SysParam["RcvRptDocCreateUrl_Test", "U9CUrl"].PARAM_VALUE; //"http://172.16.80.20/u9C/webapi/RcvRptDoc/Create"; 娴嬭瘯 + { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["RcvRptDocCreateUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["RcvRptDocCreateUrl", "U9CUrl"].PARAM_VALUE; //"http://172.16.80.20/u9C/webapi/RcvRptDoc/Create"; 娴嬭瘯 //public static string RcvRptDocCreateUrl //{ get; set; } = Cache.SysParam["RcvRptDocCreateUrl", "U9CUrl"].PARAM_VALUE; //姝e紡 + + public static string U9CBarcodeCreateUrl + { get; set; } = ApiConfig.IsTestServer ? Cache.SysParam["U9CBarcodeCreateUrl_Test", "U9CUrl"].PARAM_VALUE : Cache.SysParam["U9CBarcodeCreateUrl", "U9CUrl"].PARAM_VALUE; /// <summary> /// 鍏ュ簱鍗曟帴鍙� @@ -132,6 +135,15 @@ } } Logger.Interface.Info($"鐢熸垚鍏ュ簱鍗曟垚鍔�"); + + //鏉$爜涓绘。 + BarcodeCreateInput barcodeCreateInput = new() { + RevDocId = result.Data[0].m_iD, + userId = input.userId, + token = token, + IsLogin = false, + }; + U9CBarcodeCreate(barcodeCreateInput); } else { @@ -179,6 +191,65 @@ return action; } + /// <summary> + /// 鍏ュ簱鍗曟潯鐮佷富妗f帴鍙� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<ApiAction<BarcodeCreateInput>> U9CBarcodeCreate(BarcodeCreateInput input) + { + Logger.Interface.Info($"/**\r\n *杩涘叆鍏ュ簱鍗曟潯鐮佷富妗f帴鍙�....\r\n */\r\n"); //鍥哄畾鍐欐硶 + var action = new ApiAction<BarcodeCreateInput>(); + try + { + if (input.IsLogin) + { + var u9CLoginResult = await HttpHelper.GetAsync<U9CLoginResult>($"{U9CAuthLoginUrl}userCode={input.userId}{secret}"); + if (u9CLoginResult.Success) + { + input.token = u9CLoginResult.Data; + Logger.Interface.Info($"U9C鐧诲綍token: {input.token}"); + } + } + List<BarcodeCreateParam> param = new() { + new() { + CreateEntityKeys = new(){ + new CreateEntityKeys + { + ID = input.RevDocId, //鍏ュ簱鍗旾D + EntityType="UFIDA.U9.Complete.RCVRpt.RcvRptDoc" + } + }, + IsCreateHeadBarCode = true, + BarCodeRuleCode = "DJCPRK01", + GenerateCount = 1, + BCQty = 1, + } + }; + var response = await HttpHelper.PostAsync(U9CBarcodeCreateUrl, JsonConvert.SerializeObject(param), new Dictionary<string, string>() { { "token", input.token } }); + var result = JsonConvert.DeserializeObject<U9CResult>(response.Message); + if (result != null) + { + if (result.Success && result.Data[0].m_isSucess) + { + Logger.Interface.Info($"鐢熸垚鍏ュ簱鍗曟潯鐮佷富妗f帴鍙f彁浜son: {JsonConvert.SerializeObject(param)}锛岃繑鍥濲son: {response.Message}"); + } + else + { + action.IsSuccessed = false; + action.LocaleMsg = new($"{action.Message}; {result.Data[0].m_errorMsg}"); + Logger.Interface.Info($"鐢熸垚鍏ュ簱鍗曟潯鐮佷富妗eけ璐�:{result.Data[0].m_errorMsg}"); + } + } + } + catch (System.Exception ex) + { + action.CatchExceptionWithLog(ex, "鐢熸垚鍏ュ簱鍗曟潯鐮佷富妗e紓甯�"); + } + Logger.Interface.Info($"/* 鍏ュ簱鍗曟潯鐮佷富妗f帴鍙g粨鏉� */\r\n"); //鍥哄畾鍐欐硶 + return action; + } + private List<BAS_LABEL_TEMP> GetLabels(List<InStorePrintJson> printJsons) { List<BAS_LABEL_TEMP> labels = new List<BAS_LABEL_TEMP>(); diff --git a/Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs b/Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs index 702d093..fdef6c1 100644 --- a/Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs +++ b/Tiger.Controllers.MES/Controllers/MESController.InStoreOrderNo.cs @@ -238,5 +238,95 @@ trans?.AddHistory(Request, action); return Ok(response); } + + /// <summary> + /// 娓呴櫎 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/InStoreOrderNo/Clear")] + public async Task<IActionResult> InStoreOrderNo_ClearAsync([FromBody] ApiAction action) + { + ApiAction response; + IInStoreOrderNo trans = null; + try + { + if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.MES.Context.GetTransDic()[action.ID] as IInStoreOrderNo; + if (!trans.IsFinished) + { + if (action.IsAsync) + { + response = action.GetResponse(await trans.Clear()); + } + else + { + lock (trans.TransLock) { response = action.GetResponse(trans.Clear().Result); } + } + } + else + { + response = action.GetResponse($"Transaction Error: 鍏ュ簱鍗曚簨鍔ID:{action.ID}]宸茬粡鍏抽棴", false); + } + } + else + { + response = action.GetResponse($"Transaction Error: 鍏ュ簱鍗曚簨鍔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]/InStoreOrderNo/Delete")] + public async Task<IActionResult> InStoreOrderNo_DeleteAsync([FromBody] ApiAction action) + { + ApiAction response; + IInStoreOrderNo trans = null; + try + { + if (iBiz.MES.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.MES.Context.GetTransDic()[action.ID] as IInStoreOrderNo; + if (!trans.IsFinished) + { + if (action.IsAsync) + { + response = action.GetResponse(await trans.Delete(action.Data?.ToString())); + } + else + { + lock (trans.TransLock) { response = action.GetResponse(trans.Delete(action.Data?.ToString()).Result); } + } + } + else + { + response = action.GetResponse($"Transaction Error: 鍏ュ簱鍗曚簨鍔ID:{action.ID}]宸茬粡鍏抽棴", false); + } + } + else + { + response = action.GetResponse($"Transaction Error: 鍏ュ簱鍗曚簨鍔ID:{action.ID}]宸茬粡琚叧闂�", false); + } + } + catch (System.Exception ex) + { + response = action.GetResponse().CatchExceptionWithLog(ex); + } + trans?.AddHistory(Request, action); + return Ok(response); + } } } diff --git a/Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs b/Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs index 48fc340..44fd7cf 100644 --- a/Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs +++ b/Tiger.IBusiness.MES/Transaction/IInStoreOrderNo.cs @@ -15,9 +15,10 @@ public IInStoreOrderNo Init(string id, string apiHost, InstoreDocInput input); public Task<ApiAction<InStoreInfos>> Submit(string code); public Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder(); - public Task<ApiAction<RcvRptDocCreateInput>> GetScannedList(); + public Task<ApiAction<InStoreInfos>> GetScannedList(); public ApiAction<InStoreInfos> GetInStoreInfos(); - + public Task<ApiAction> Clear(); + public Task<ApiAction> Delete(string CartonNo); public bool Close(bool needSaveHistoryLog = false); } } diff --git a/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs b/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs index f9d2bea..4aa8a11 100644 --- a/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs +++ b/Tiger.Model.Net/Entitys/MES/ParameterEntity/U9CParameter.cs @@ -97,6 +97,29 @@ public int DocState { get; set; } = 1; } + public class BarcodeCreateInput + { + public string RevDocId { get; set; } + public string userId { get; set; } + public string token { get; set; } + public bool IsLogin { get; set; } + } + + public class BarcodeCreateParam + { + public List<CreateEntityKeys> CreateEntityKeys { get; set; } + public bool IsCreateHeadBarCode { get; set; } + public string BarCodeRuleCode { get; set; } + public int GenerateCount { get; set; } + public int BCQty { get; set; } + } + + public class CreateEntityKeys + { + public string ID { get; set; } + public string EntityType { get; set; } + } + public class MOKey { public string DocNo { get; set; } diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs index 0ceba78..29f4e00 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_ERP_PROD_IN_BTH.cs @@ -132,7 +132,7 @@ [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_ERP_PROD_IN_BTHId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭 public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull */ - [Navigate(NavigateType.OneToMany, nameof(BIZ_ERP_PROD_IN_SN.BUSINESSCODE), nameof(ORDER_NO), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_MES_WO绫婚噷闈㈢殑澶栭敭ID瀛楁 + [Navigate(NavigateType.OneToMany, nameof(BIZ_ERP_PROD_IN_SN.SOURCECODE), nameof(WORK_ORDER), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_MES_WO绫婚噷闈㈢殑澶栭敭ID瀛楁 public List<BIZ_ERP_PROD_IN_SN> ProdInSns { get; set; } #endregion -- Gitblit v1.9.3