From 990807a09cf35a73b20e213a4df82acddec40f4b Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期二, 04 三月 2025 00:58:15 +0800 Subject: [PATCH] 雅达-更改多个文件中的数据类型和属性 --- Tiger.Business.MES/Transaction/InStoreOrderNo.cs | 506 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 489 insertions(+), 17 deletions(-) diff --git a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs index 40f52ea..e0b0bd4 100644 --- a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs +++ b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs @@ -11,6 +11,15 @@ using Tiger.Model; using Tiger.Model.Sharetronic.Shelf; using System.ComponentModel; +using Tiger.Model.Entitys.MES.U9C; +using ProdInBatch = Tiger.Model.ProdInBatch; +using Org.BouncyCastle.Ocsp; +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 { @@ -20,12 +29,16 @@ public class InStoreOrderNo : MESTransactionBase, IInStoreOrderNo { private readonly IMES_U9C _IMES_U9C = DI.Resolve<IMES_U9C>(); - public IInStoreOrderNo Init(string id, string userCode, string apiHost, string orgCode) + private readonly IBIZ_MES_WO _IBIZ_MES_WO = DI.Resolve<IBIZ_MES_WO>(); + public IInStoreOrderNo Init(string id, string apiHost, InstoreDocInput input) { TransID = id; - UserCode = userCode; + UserCode = input.UserCode; ApiHost = apiHost; - OrgCode = orgCode; + 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; } @@ -35,40 +48,499 @@ public string UserCode { get; set; } public long UserId { get; set; } public string OrgCode { get; set; } - public string CurSmtCode { get; set; } - public string CurrSlotNo { 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 - /// <summary> - /// 鎵弿鏉$爜涓婃枡 - /// </summary> - /// <param name="input"></param> - /// <returns></returns> - public async Task<ApiAction<SmtLoadingReturn>> ScanItem(SmtLoadingInput input) + public ApiAction<InStoreInfos> GetInStoreInfos() { - var action = new ApiAction<SmtLoadingReturn>(); + return new() { Data = inStoreInfos }; + } + /// <summary> + /// 鎵弿鏉$爜 + /// </summary> + /// <param name="code"></param> + /// <returns></returns> + public async Task<ApiAction<InStoreInfos>> Submit(string code) + { + var action = new ApiAction<InStoreInfos>(); try { - if (input.Code.IsNullOrEmpty()) + if (code.IsNullOrEmpty()) { action.IsSuccessed = false; - //action.LocaleMsg = Biz.L($"{EnumHelper.GetEnum<Step_Types>(input.Step).GetDesc()}涓嶈兘涓虹┖"); + action.LocaleMsg = Biz.L($"鏉$爜涓嶈兘涓虹┖"); return action; } + var apiAction = await _IBIZ_MES_WO.GetErpProdInBth(code); + if (!apiAction.IsSuccessed) + { + return action; + } + CurSN = code.Split('|')[0]; + InStoreInfo Info = apiAction.Data; + //瑕佸瓨鍏ョ殑鎵规鍏ュ簱鍗曟暟鎹� + int n = InStoreScanInfos.Where(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER).Count(); + 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; + Info.ErpProdInBth.HANDLED_DATE = DateTime.Now; + Info.ErpProdInBth.IS_SCANED = "Y"; + 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 + { + if (!InStoreScanInfos.Any(q => q.WORK_ORDER == Info?.ErpProdInBth.WORK_ORDER && q.SN == CurSN)) + { + var erpbth = ErpProdInBths.Where(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER).FirstOrDefault(); + if (!erpbth.IsNullOrEmpty()) + { + erpbth.SCAN_QTY += Info.InStoreScanInfo.SCAN_QTY.ToDouble(); + erpbth.CartonQty = n + 1; + } + } + } - + //鐢熸垚鎵撳嵃瀹炰綋 + if (RcvRptInput.PrintJsons.Count == 0) + { + RcvRptInput.PrintJsons.Add(new() + { + ID = Guid.NewGuid().ToString("N"), + Items = new() { + Info.ErpProdInBth + } + }); + } + else + { + //鎷煎垎椤� + bool isAdded = false; + foreach (var item in RcvRptInput.PrintJsons) + { + if (!item.Items.Any(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER)) + { + if (item.Items.Count < pageSize) + { + item.Items.Add(Info.ErpProdInBth); + isAdded = true; + } + } + else + { + isAdded = true; + } + } + if (!isAdded) + { + RcvRptInput.PrintJsons.Add(new() + { + ID = Guid.NewGuid().ToString("N"), + Items = new() { + Info.ErpProdInBth + } + }); + } + } + + //鏆傚瓨鎵爜鏁版嵁 + 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)) + { + var scanResult = new BIZ_ERP_PROD_IN_SN + { + AUTH_ORG = OrgCode, + ID = Guid.NewGuid().ToString(), + CARTONNO = CurSN, + SN = item.SN, + BUSINESSCODE = UserCode, + ITEM_CODE = item.ITEM_CODE, + Qty = item.QTY.ToDecimal(), + SOURCECODE = Info?.ErpProdInBth.WORK_ORDER, + STATUS = WMS_ITEM.STATUSs.Counted.GetValue(), + CREATE_USER = UserCode, + CREATE_TIME = DateTime.Now, + UPDATE_USER = UserCode, + UPDATE_TIME = DateTime.Now, + }; + ErpProdInSns.Add(scanResult); + } + + //淇濆瓨鏁版嵁搴� + var db = Business.Biz.Db; + var dbTran = db.UseTran(() => + { + 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) + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + this.Close(!dbTran.IsSuccess); + throw dbTran.ErrorException; + } + RcvRptInput.RcvRptDocBases = new(); + RcvRptInput.labels = new(); + RcvRptInput.ErpProdInBths = ErpProdInBths; + RcvRptInput.userId = UserCode; + inStoreInfos = new() + { + ErpProdInBths = ErpProdInBths, + InStoreScanInfos = InStoreScanInfos, + }; + action.Data = inStoreInfos; } catch (Exception ex) { - action.CatchExceptionWithLog(ex, $"鎵弿鐗╂枡[{input.Code}]澶嶆牳寮傚父"); + action.CatchExceptionWithLog(ex, $"鎵弿鏉$爜[{code}]澶嶆牳寮傚父"); } return action; } - + /// <summary> + /// 璋冪敤U9C鎺ュ彛鐢熸垚鍏ュ簱鍗� + /// </summary> + /// <param name="code"></param> + /// <returns></returns> + public async Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder() + { + var action = new ApiAction<RcvRptDocCreateInput>(); + try + { + //濡傛灉鎵弿璁板綍涓�0 + if (!RcvRptInput.ErpProdInBths.Any(q => q.IS_HANDLED == "N")) + { + action.IsSuccessed = false; + action.LocaleMsg = Biz.L($"娌℃湁瑕佸叆搴撶殑浜у搧鏁版嵁锛岃鎵弿鍖呰瀹屾垚鐨勭浜岀淮鐮侀噸鏂扮敓鎴愬叆搴撳崟鎹紒"); + return action; + } + if (RcvRptInput.RcvRptDocBases.IsNullOrEmpty() || RcvRptInput.RcvRptDocBases.Count == 0) + { + foreach (var item in RcvRptInput.ErpProdInBths) + { + var DocBase = new RcvRptDocBase() + { + 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" + }; + 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; + } + } + + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"璋冪敤U9C鎺ュ彛鐢熸垚鍏ュ簱鍗曞紓甯�"); + } + return action; + } + + /// <summary> + /// 鏌ヨ宸叉壂鎻忓垪琛� + /// </summary> + /// <returns></returns> + public async Task<ApiAction<InStoreInfos>> GetScannedList() + { + var action = new ApiAction<InStoreInfos>(); + try + { + _GetScannedList(); + action.Data = inStoreInfos; + } + catch (Exception ex) + { + action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�"); + } + return action; + } + + /// <summary> + /// 浠庢暟鎹簱璇诲洖鎿嶄綔鑰呭師鏈搷浣滅殑璁板綍 + /// </summary> + /// <returns></returns> + private RcvRptDocCreateInput _GetScannedList() + { + RcvRptInput.RcvRptDocBases = new(); + RcvRptInput.ErpProdInBths = new(); + RcvRptInput.PrintJsons = new(); + RcvRptInput.labels = new(); + RcvRptInput.userId = UserCode; + 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) + { + 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() + { + 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; + } + + /// <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 -- Gitblit v1.9.3