From 9556c5fc2168b71e5aba4bd5353fcd70e681ee46 Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期一, 09 十二月 2024 01:54:25 +0800 Subject: [PATCH] 调用U9C接口生成入库单更新 --- Tiger.Business.MES/Transaction/InStoreOrderNo.cs | 268 +++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 208 insertions(+), 60 deletions(-) diff --git a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs index f4ee422..78bb79d 100644 --- a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs +++ b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs @@ -17,6 +17,9 @@ using Tiger.Model.Entitys.MES.BizPrintInstoreDoc; using System.Drawing.Printing; using Tiger.Model.Entitys.MES.Position; +using System.Drawing.Drawing2D; +using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser; +using Tiger.Model.Minsun; namespace Tiger.Business.MES.Transaction { @@ -34,6 +37,8 @@ ApiHost = apiHost; OrgCode = input.OrgCode; pageSize = input.pageSize; + _GetScannedList(); + 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; } @@ -44,20 +49,26 @@ public long UserId { get; set; } public string OrgCode { get; set; } public string CurSN { get; set; } + public string CurBatchNo { get; set; } public int pageSize { get; set; } public RcvRptDocCreateInput RcvRptInput { get; set; } = new RcvRptDocCreateInput(); public List<ProdInBatch> ProdInBatchs { get; set; } = new List<ProdInBatch>(); public List<BIZ_ERP_PROD_IN_BTH> ErpProdInBths { get; set; } = new List<BIZ_ERP_PROD_IN_BTH>(); + public List<BIZ_ERP_PROD_IN> ErpProdIns { get; set; } = new List<BIZ_ERP_PROD_IN>(); /// <summary> /// 鎵弿鍒楄〃 /// </summary> public List<InStoreScanInfo> InStoreScanInfos { get; set; } = new List<InStoreScanInfo>(); public List<BIZ_ERP_PROD_IN_SN> ErpProdInSns { get; set; } = new List<BIZ_ERP_PROD_IN_SN>(); + public InStoreInfos inStoreInfos { get; set; } #endregion Propertys & Variables #region Functions + public ApiAction<InStoreInfos> GetInStoreInfos() { + return new() { Data= inStoreInfos }; + } /// <summary> /// 鎵弿鏉$爜 /// </summary> @@ -86,6 +97,7 @@ if (!ErpProdInBths.Any(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER)) { Info.ErpProdInBth.AUTH_ORG = OrgCode; + Info.ErpProdInBth.BATCH_NO = CurBatchNo; Info.ErpProdInBth.CREATE_USER = UserCode; Info.ErpProdInBth.CREATE_TIME = DateTime.Now; Info.ErpProdInBth.SCANED_DATE = DateTime.Now; @@ -94,7 +106,19 @@ Info.ErpProdInBth.ORDER_NO = UserCode; Info.ErpProdInBth.IS_HANDLED = "N"; Info.ErpProdInBth.CartonQty = n == 0 ? 1 : n; + BIZ_ERP_PROD_IN prodIn = new() + { + AUTH_ORG = OrgCode, + BILLCODE = UserCode, + BILLDATE = DateTime.Now, + STATUS = 0, + HANDLED = -1, + WAREHOUSECODE = "", + SOURCECODE = Info.ErpProdInBth.WORK_ORDER, + HANDLED_DATE = DateTime.Now, + }; ErpProdInBths.Add(Info.ErpProdInBth); + ErpProdIns.Add(prodIn); } else { @@ -104,7 +128,7 @@ if (!erpbth.IsNullOrEmpty()) { erpbth.SCAN_QTY += Info.InStoreScanInfo.SCAN_QTY.ToDouble(); - Info.ErpProdInBth.CartonQty++; + erpbth.CartonQty = n + 1; } } } @@ -139,7 +163,7 @@ isAdded = true; } } - if (isAdded) + if (!isAdded) { RcvRptInput.PrintJsons.Add(new() { @@ -154,14 +178,16 @@ //鏆傚瓨鎵爜鏁版嵁 if (!InStoreScanInfos.Any(q => q.WORK_ORDER == Info?.ErpProdInBth.WORK_ORDER && q.SN == CurSN)) { + Info.InStoreScanInfo.BATCH_NO = CurBatchNo; InStoreScanInfos.Add(Info.InStoreScanInfo); } var wipPkgs = Biz.Db.Ado.UseStoredProcedure().SqlQuery<MES_WIP_PKG>("SP_MES_GET_ITEM_PKG", new SugarParameter("root", CurSN)); int maxLevel = wipPkgs.Max(p => p.LEVEL); - foreach (var item in wipPkgs.Where(q=> q.LEVEL == maxLevel)) + foreach (var item in wipPkgs.Where(q => q.LEVEL == maxLevel)) { var scanResult = new BIZ_ERP_PROD_IN_SN { + AUTH_ORG = OrgCode, ID = Guid.NewGuid().ToString(), CARTONNO = CurSN, SN = item.SN, @@ -200,10 +226,16 @@ this.Close(!dbTran.IsSuccess); throw dbTran.ErrorException; } - action.Data = new() { + RcvRptInput.RcvRptDocBases = new(); + RcvRptInput.labels = new(); + RcvRptInput.ErpProdInBths = ErpProdInBths; + RcvRptInput.userId = UserCode; + inStoreInfos= new() + { ErpProdInBths = ErpProdInBths, InStoreScanInfos = InStoreScanInfos, }; + action.Data = inStoreInfos; } catch (Exception ex) { @@ -217,48 +249,88 @@ /// </summary> /// <param name="code"></param> /// <returns></returns> - public async Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder(RcvRptDocCreateInput input) + public async Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder() { var action = new ApiAction<RcvRptDocCreateInput>(); try { - //input.RcvRptDocBases = new() - //{ - // new(){ - // WorkOrder = item.WORK_ORDER, - // ItemCode = item.ITEM_CODE, - // WhCode = "10105", - // PkgQty = item.SCAN_QTY, - // CompleteQty = item.SCAN_QTY, - // OutputType = 0, - // StorageType = 4, - // DocState = 1, - // Status = "N" - // } - //}; - action = await _IMES_U9C.RcvRptDocCreate(input); - - //淇濆瓨鏁版嵁搴� - var db = Business.Biz.Db; - var dbTran = db.UseTran(() => + //濡傛灉鎵弿璁板綍涓�0 + if (!RcvRptInput.ErpProdInBths.Any(q => q.IS_HANDLED == "N")) { - //var x = db.Storageable(ErpProdInBths, $"InStoreOrderNo_{UserCode}") - // .WhereColumns(t => new { t.ORDER_NO, t.WORK_ORDER, t.GHOST_ROW }) - // .ToStorage(); - //x.AsInsertable.ExecuteCommand(); - //x.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand(); - - //var s = db.Storageable(ErpProdInSns, $"InStoreOrderNo_{UserCode}") - // .WhereColumns(t => new { t.CARTONNO, t.SN, t.GHOST_ROW }) - // .ToStorage(); - //s.AsInsertable.ExecuteCommand(); - //s.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand(); - }); - if (!dbTran.IsSuccess) + action.IsSuccessed = false; + action.LocaleMsg = Biz.L($"娌℃湁瑕佸叆搴撶殑浜у搧鏁版嵁锛岃鎵弿鍖呰瀹屾垚鐨勭浜岀淮鐮侀噸鏂扮敓鎴愬叆搴撳崟鎹紒"); + return action; + } + if (RcvRptInput.RcvRptDocBases.IsNullOrEmpty() || RcvRptInput.RcvRptDocBases.Count == 0) { - Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); - this.Close(!dbTran.IsSuccess); - throw dbTran.ErrorException; + foreach (var item in RcvRptInput.ErpProdInBths) + { + var DocBase = new RcvRptDocBase() + { + WorkOrder = item.WORK_ORDER, + ItemCode = item.ITEM_CODE, + WhCode = "10105", + PkgQty = item.SCAN_QTY.ToInt32(), + CompleteQty = item.SCAN_QTY.ToInt32(), + OutputType = 0, + StorageType = 4, + DocState = 1, + Status = "N" + }; + if (!RcvRptInput.RcvRptDocBases.Any(q => q.WorkOrder == item.WORK_ORDER)) + { + RcvRptInput.RcvRptDocBases.Add(DocBase); + } + } + } + else + { + action.IsSuccessed = false; + action.LocaleMsg = Biz.L($"鏈夊瓨鍦ㄦ湭鎻愪氦鐨勫叆搴撳崟锛屼笉鑳界敓鎴愬叆搴撳崟"); + return action; + } + action = await _IMES_U9C.RcvRptDocCreate(RcvRptInput); + if (action.IsSuccessed) + { + foreach (var sn in ErpProdInSns) + { + var d = action.Data.ErpProdInBths.Where(q=> q.WORK_ORDER == sn.SOURCECODE).FirstOrDefault(); + if (!d.IsNullOrEmpty()) + { + sn.BUSINESSCODE = d.ORDER_NO; + sn.UPDATE_USER = UserCode; + sn.UPDATE_TIME = DateTime.Now; + } + } + foreach (var p in ErpProdIns) + { + var d = action.Data.ErpProdInBths.Where(q => q.WORK_ORDER == p.SOURCECODE).FirstOrDefault(); + if (!d.IsNullOrEmpty()) + { + p.BILLCODE = d.ORDER_NO; + p.UPDATE_USER = UserCode; + p.UPDATE_TIME = DateTime.Now; + p.HANDLED = 0; + } + } + //淇濆瓨鏁版嵁搴� + var db = Business.Biz.Db; + var dbTran = db.UseTran(() => + { + db.Updateable(ErpProdInSns, $"InStoreOrderNo_{UserCode}").UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.BUSINESSCODE }).ExecuteCommand(); + + var x = db.Storageable(ErpProdIns, $"InStoreOrderNo_{UserCode}") + .WhereColumns(t => new { t.BILLCODE, t.SOURCECODE, t.GHOST_ROW }) + .ToStorage(); + x.AsInsertable.ExecuteCommand(); + x.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand(); + }); + if (!dbTran.IsSuccess) + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + this.Close(!dbTran.IsSuccess); + throw dbTran.ErrorException; + } } } @@ -270,39 +342,115 @@ } /// <summary> - /// 鏌ヨ瀵瑰簲鐨勬潯鐮� + /// 鏌ヨ宸叉壂鎻忓垪琛� /// </summary> /// <returns></returns> - public async Task<ApiAction<RcvRptDocCreateInput>> GetScannedBarcodes() + public async Task<ApiAction<RcvRptDocCreateInput>> GetScannedList() { var action = new ApiAction<RcvRptDocCreateInput>(); try { - //var query = await Biz.Db.Queryable<BIZ_ERP_RECEIPT_SN, BAS_ITEM>((t, m) => - // new JoinQueryInfos( - // JoinType.Left, t.ITEM_CODE == m.ITEM_CODE - // )) - // .Where((t, m) => t.CREATE_USER == UserCode - // //&& t.WAREHOUSECODE.ToUpper() == WarehouseCode.ToUpper() - // && t.STATUS == WMS_ITEM.STATUSs.Counted.GetValue() - // && t.ITEM_CODE.ToUpper() == MaterialCode.ToUpper() - // && t.BILLCODE == UserCode - // && t.AUTH_ORG == OrgCode) - // .Select((t, m) => new Model.Minsun.CustSupplyCheckDetail - // { - // Barcode = t.SN, - // BarcodeQty = t.SCANQTY, - // Unit = m.UNIT - // }) - // .ToListAsync(); + action.Data = _GetScannedList(); } catch (Exception ex) { - action.CatchExceptionWithLog(ex, $"鏌ヨ瀵瑰簲鐨勬潯鐮佸紓甯�"); + action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�"); } return action; } + /// <summary> + /// 浠庢暟鎹簱璇诲洖鎿嶄綔鑰呭師鏈搷浣滅殑璁板綍 + /// </summary> + /// <returns></returns> + private RcvRptDocCreateInput _GetScannedList() + { + RcvRptInput.RcvRptDocBases = new(); + RcvRptInput.PrintJsons = new(); + RcvRptInput.labels = new(); + RcvRptInput.userId = UserCode; + if (RcvRptInput.ErpProdInBths.Count == 0) + { + 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) + { + InStoreScanInfos.Add(t); + } + 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) + { + RcvRptInput.PrintJsons.Add(new() + { + 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; + } + } + if (!isAdded) + { + RcvRptInput.PrintJsons.Add(new() + { + ID = Guid.NewGuid().ToString("N"), + Items = new() { + item + } + }); + } + } + } + ErpProdInBths = RcvRptInput.ErpProdInBths; + } + + inStoreInfos = new() + { + ErpProdInBths = ErpProdInBths, + InStoreScanInfos = InStoreScanInfos, + }; + return RcvRptInput; + } + #endregion Functions public override bool Close(bool needSaveHistoryLog = false) -- Gitblit v1.9.3