From 6c9535734ff0bd5e957620be0247689d6e2ca252 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期三, 07 八月 2024 11:51:57 +0800 Subject: [PATCH] 创建变量克隆对象用于传入DBSubmitAction中保存当前需要暂存的数据值 --- Tiger.Business.MES/Transaction/Position.cs | 181 +++++++++++++++++++++++++++++++++++++++----- 1 files changed, 159 insertions(+), 22 deletions(-) diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs index 7f76771..6e26cf6 100644 --- a/Tiger.Business.MES/Transaction/Position.cs +++ b/Tiger.Business.MES/Transaction/Position.cs @@ -17,7 +17,7 @@ /// <summary> /// MES宀椾綅浜嬪姟 /// </summary> - public class Position : MESTransactionBase, IPosition + public class Position : MESTransactionBase, IPosition, ICloneable { public IPosition Init(string id, string apiHost, string userCode, string postCode) { @@ -55,8 +55,10 @@ public MES_SHIFT_SYS CurShiftSys { get; set; } public WorkBatch CurBatch { get; set; } public IWorkBatch WorkBatch => CurBatch; - public MES_WIP_DATA CurWipSN { get; set; } - public MES_WIP_HIS CurWipSNHis { get; set; } + public List<MES_WIP_DATA> CurWipSNs { get; set; } = new(); + public string CurSN => CurWipSNs.Any() ? (CurWipSNs.First().TRAY_SN.IsNullOrEmpty() ? CurWipSNs.First().SN : CurWipSNs.First().TRAY_SN) : ""; + public List<MES_WIP_HIS> CurWipSNHiss { get; set; } = new(); + public List<MES_WIP_DFT> CurDefects { get; set; } = new(); public Dictionary<string, object> Context { get; set; } = new(); public List<WorkStep> Steps { get; set; } = new(); public WorkStep CurStep { get; set; } @@ -65,6 +67,13 @@ public bool IsFinishAllSteps => !Steps.Any() || !Steps.Any(q => !q.IsFinished); //public int CurStep => Steps.Where(q => !q.IsFinished).OrderBy(q => q.Sequence).FirstOrDefault()?.Sequence ?? 0; private DbClient CommitDB; + /// <summary> + /// 鏄惁闇�瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽緟闇�瑕佺殑鏃跺�欏啀鎻愪氦 + /// </summary> + public bool NeedTemporaryStoreDBCommitAction { get; set; } = false; + protected List<Action> DBCommitList { get; set; } = new(); + protected List<Position> NodeCommitList { get; set; } = new(); + #endregion Propertys & Variables #region Functions @@ -168,9 +177,10 @@ public virtual void ResetNode() { Steps.Clear(); - CurWipSN = null; - CurWipSNHis = null; + CurWipSNs.Clear(); + CurWipSNHiss.Clear(); CurStep = null; + CurDefects.Clear(); } /// <summary> @@ -217,12 +227,12 @@ { var next = new WorkStep(IWorkStep.Types.Action, this) { - NodeID = act.ID, Sequence = parent.Sequence + 1, Node = parent.Node, NodeAct = act, Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID), }; + next.Init(); next.PrepNodeIDs.Add(parent.NodeID); next.PrepNodeIDs.AddRange(parent.PrepNodeIDs); next.PrepNodeIDs = next.PrepNodeIDs.Distinct().ToList(); @@ -281,7 +291,7 @@ /// <param name="input"></param> public ApiAction<SubmitOutput> BeginNextActionStep(SubmitInput input) { - var result = new ApiAction<SubmitOutput>(); + var result = new ApiAction<SubmitOutput>(new SubmitOutput()); //璁剧疆鍚庣画鍙墽琛岀殑宸ユ鍒楄〃 NextSteps = GetNextSteps(CurStep); //灏濊瘯鏈夋病鏈夊彲浠ョ洿鎺ュ紑濮嬬殑鍚庣画宸ユ @@ -298,24 +308,14 @@ NextSteps = GetNextSteps(CurStep); //杩斿洖缁撴灉鍒板鎴风 result = canBegin; - result.Data.IsFinished = IsFinishAllSteps; - result.Data.CurWO = CurBatch.WO.ORDER_NO; - result.Data.CurBatch = CurBatch.Batch.BATCH_NO; - result.Data.CurNode = CurStep?.NodeAct.ACT_NAME; - result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; - result.Data.NextStepID = CurStep?.ID; - + result.Data.SetValue(CurBatch, CurStep, CurStep?.ID, IsFinishAllSteps); + return result; } } //娌℃湁鍙互鐩存帴寮�濮嬬殑鍚庣画宸ユ锛屾牴鎹悗缁伐姝ヨ繑鍥濧piAction - result.Data.IsFinished = IsFinishAllSteps; - result.Data.CurWO = CurBatch.WO.ORDER_NO; - result.Data.CurBatch = CurBatch.Batch.BATCH_NO; - result.Data.CurNode = CurStep?.Node.NODE_NAME; - result.Data.StepActCode = CurStep?.NodeAct.ACT_CODE; - result.Data.NextStepID = ""; + result.Data.SetValue(CurBatch, CurStep, "", IsFinishAllSteps); //娌℃湁鍙互鐩存帴寮�濮嬬殑鍚庣画宸ユ锛屾牴鎹悗缁彲鎵ц宸ユ鍒楄〃杩斿洖鐩稿簲鐨勬搷浣滄彁绀� if (NextSteps.Count == 1) @@ -328,6 +328,88 @@ string.Join("\r\n", NextSteps.Select(q => " >> " + T(q.GetBeginMsg(), input.Locale)))); } return result; + } + + public object Clone() + { + var newObject = this.MemberwiseClone() as Position; + newObject.Steps = Steps.Clone(); + newObject.CurWipSNs = CurWipSNs.Clone(); + + return newObject; + } + + /// <summary> + /// 淇濆瓨宸ユ鐨勬暟鎹簱鎻愪氦鎿嶄綔鍒版暟鎹簱 + /// </summary> + protected void SaveStepsCommitActionToDB() + { + //淇濆瓨宸ユ鐨勬暟鎹簱鎻愪氦鎿嶄綔鍒版彁浜ゆ搷浣滃垪琛� + foreach (var step in Steps.OrderBy(q => q.Sequence)) + { + DBCommitList.Add(step.DBSubmitAction); + } + //濡傛灉涓嶉渶瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽垯鎶婃彁浜ゆ搷浣滃垪琛ㄦ彁浜ゅ埌鏁版嵁搴� + if (!NeedTemporaryStoreDBCommitAction) + { + //鎭㈠涓存椂瀛樺偍鏍囪涓篺alse + NeedTemporaryStoreDBCommitAction = false; + + var dbTran = GetCommitDB().UseTran(() => + { + //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁 + foreach (var action in DBCommitList) + { + action.Invoke(); + } + }); + if (dbTran.IsSuccess) + { + //淇濆瓨鎴愬姛鍒欐竻绌烘彁浜ゆ搷浣滃垪琛� + DBCommitList.Clear(); + } + else + { + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + } + + + //if (NeedTemporaryStoreDBCommitAction) + //{ + + + // NodeCommitList.Add(this.Clone() as Position); + //} + //else + //{ + // //淇濆瓨鎴愬姛鍒欐竻绌烘彁浜ゆ搷浣滃垪琛� + // foreach (var item in NodeCommitList) + // { + // item?.DoSaveToDB(); + // item?.Dispose(); + // } + // DoSaveToDB(); + // NodeCommitList.Clear(); + //} + } + + protected void DoSaveToDB() + { + var dbTran = GetCommitDB().UseTran(() => + { + //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁 + foreach (var step in Steps.OrderBy(q => q.Sequence)) + { + step.DBSubmitAction.Invoke(); + } + }); + if (!dbTran.IsSuccess) + { + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } } /// <summary> @@ -350,6 +432,9 @@ break; case BAS_LABEL_VAR.VAR_TYPEs.DateVariable: item.Value = DateTime.Now.ToString(item.VAR_VALUE); + break; + case BAS_LABEL_VAR.VAR_TYPEs.BarcodeGenerate: + item.Value = GetGeneratePValue(labelPVs, item); break; case BAS_LABEL_VAR.VAR_TYPEs.CustomVariable: default: @@ -378,16 +463,18 @@ switch (pv.VAR_METHOD) { case "GetSN": - return CurWipSN.SN; + return CurSN; case "GetBAS_ITEM": return WorkBatch.Product.ToJson(); case "GetCustomer": return WorkBatch.Batch.ToJson(); + case "GetVarByWo": + return GetLabelVarWo(lv); default: return ""; } } - case BAS_LABEL_PV.VAR_TYPEs.WebApiWebApi: + case BAS_LABEL_PV.VAR_TYPEs.WebApi: break; case BAS_LABEL_PV.VAR_TYPEs.StoredProcedure: break; @@ -398,6 +485,56 @@ return ""; } + /// <summary> + /// 鑾峰彇鏍规嵁鏉$爜瑙勫垯鐢熸垚鏍囩妯℃澘鐨勮繃绋嬪彉閲忓�� + /// </summary> + /// <param name="labelPVs"></param> + /// <param name="lv"></param> + /// <returns></returns> + public string GetGeneratePValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv) + { + var pv = labelPVs.FirstOrDefault(q => q.VAR_CODE == lv.VAR_VALUE); + if (!pv.IsNullOrEmpty()) + { + switch (pv.VAR_TYPE.GetEnum<BAS_LABEL_PV.VAR_TYPEs>()) + { + case BAS_LABEL_PV.VAR_TYPEs.BarcodeGenerate: + { + switch (pv.VAR_METHOD) + { + case "GetCartonGenerate": + return Biz.CodeRule[lv.BARCODE_RULE].Generate($"{WorkBatch.Batch.BATCH_NO}-{WorkBatch.Batch.PLAN_QTY}-").Data.ToString(); + default: + return ""; + } + } + default: + break; + } + } + return ""; + } + + /// <summary> + /// 鑾峰彇宸ュ崟缁存姢鐨勬ā鏉垮彉閲� + /// </summary> + /// <param name="labelId"></param> + /// <returns></returns> + private string GetLabelVarWo(BAS_LABEL_VAR lv) + { + string result = ""; + var labelVarwos = Biz.Db.Queryable<BAS_LABEL_VAR_WO>().Where(x => x.LABEL_ID == lv.LABEL_ID && x.VAR_NAME == lv.VAR_NAME).ToList(); + if (labelVarwos.Any(q => q.WORK_ORDER == WorkBatch.Batch.ORDER_NO)) + { + result = labelVarwos.First(q => q.WORK_ORDER == WorkBatch.Batch.ORDER_NO).VAR_VALUE; + } + else + { + result = labelVarwos.Count > 0 ? labelVarwos[0].DEFAULT_VALUE : ""; + } + return result; + } + #endregion Functions public override bool Close(bool needSaveHistoryLog = false) -- Gitblit v1.9.3