From 1f72396c6294b9f78723d786a9b0965414d0601a Mon Sep 17 00:00:00 2001 From: Ben Lin <maobin001@msn.com> Date: 星期五, 13 九月 2024 15:38:38 +0800 Subject: [PATCH] 一些更改 --- Tiger.Business.MES/Transaction/Position.cs | 146 ++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 120 insertions(+), 26 deletions(-) diff --git a/Tiger.Business.MES/Transaction/Position.cs b/Tiger.Business.MES/Transaction/Position.cs index 4e11575..5dcbd97 100644 --- a/Tiger.Business.MES/Transaction/Position.cs +++ b/Tiger.Business.MES/Transaction/Position.cs @@ -55,14 +55,15 @@ public MES_SHIFT_SYS CurShiftSys { get; set; } public WorkBatch CurBatch { get; set; } public IWorkBatch WorkBatch => CurBatch; - public List<MES_WIP_DATA> CurWipSNs { get; set; } - public string CurSN => CurWipSNs.First().TRAY_SN.IsNullOrEmpty() ? CurWipSNs.First().SN : CurWipSNs.First().TRAY_SN; - public List<MES_WIP_HIS> CurWipSNHiss { 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; } public List<WorkStep> NextSteps { get; set; } = new(); - public bool IsFinishNodeSteps => !Steps.Any(q => q.Type == IWorkStep.Types.Node && !q.IsFinished); + public bool IsFinishNodeSteps => !Steps.Any(q => q.NodeType == IWorkStep.NodeTypes.Node && !q.IsFinished); 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; @@ -70,8 +71,10 @@ /// 鏄惁闇�瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽緟闇�瑕佺殑鏃跺�欏啀鎻愪氦 /// </summary> public bool NeedTemporaryStoreDBCommitAction { get; set; } = false; - protected List<Action> DBCommitList { get; set; } = new(); - + protected Dictionary<string, List<Action>> DBCommitList { get; set; } = new(); + protected List<Position> NodeCommitList { get; set; } = new(); + protected Dictionary<string, OperInfo> OperInfoDic { get; set; } = new(); + //protected OperInfo CurOperInfo { get; set; } #endregion Propertys & Variables #region Functions @@ -119,10 +122,22 @@ action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.LineException", input.OrderNo, CurLine.LINE_CODE); return action; } + if (batch.STATUS != BIZ_MES_WO_BATCH.STATUSs.Release.GetValue() && batch.STATUS != BIZ_MES_WO_BATCH.STATUSs.Working.GetValue()) + { + action.IsSuccessed = false; + //action.LocaleMsg = new($"宸ュ崟[{input.OrderNo}]鐘舵�乕{wo.STATUS.GetEnum<BIZ_MES_WO_BATCH.STATUSs>().GetName()}]涓嶈兘鐢熶骇"); + action.LocaleMsg = new("MES.Transaction.Position.SelectOrder.StatusException", input.OrderNo, batch.STATUS.GetEnum<BIZ_MES_WO_BATCH.STATUSs>().GetName()); + return action; + } var wb = new WorkBatch(input.OrderNo).Init(CurLine.LINE_CODE); WoContext.WoBatchDic.Add(wb.Batch.BATCH_NO, wb); } CurBatch = WoContext.GetBatch(input.OrderNo, CurLine.LINE_CODE); + if (!OperInfoDic.ContainsKey(CurBatch.Batch.BATCH_NO)) + { + OperInfoDic.Add(CurBatch.Batch.BATCH_NO, new()); + } + action.Data = new { WorkOrder = CurBatch.WO, Bacth = CurBatch.Batch }; } catch (Exception ex) @@ -175,9 +190,30 @@ public virtual void ResetNode() { Steps.Clear(); - CurWipSNs = null; - CurWipSNHiss = null; + CurWipSNs.Clear(); + CurWipSNHiss.Clear(); CurStep = null; + CurDefects.Clear(); + } + + /// <summary> + /// 璁剧疆褰撳墠鏉$爜鐨勫伐搴忎俊鎭� + /// </summary> + public OperInfo SetOperNodeInfo(OperInfo info, string locale) + { + if (CurWipSNs.Any()) + { + info.CurNode = CurWipSNs.First().NODE_NAME; + info.NextNode = string.Join(",", CurBatch.GetNextNodes(CurWipSNs.First()).Select(q => q.NODE_NAME)); + info.StepsInfo = Steps.Select(q => q.GetInfo(locale)).ToList(); + } + else + { + info.CurNode = " 鈥� "; + info.NextNode = " 鈥� "; + info.StepsInfo = new(); + } + return info; } /// <summary> @@ -222,12 +258,14 @@ } else { - var next = new WorkStep(IWorkStep.Types.Action, this) + var next = new WorkStep(IWorkStep.NodeTypes.Action, this) { + Name = act.ACT_NAME, Sequence = parent.Sequence + 1, Node = parent.Node, + OperSetting = CurBatch.NodeSets.FirstOrDefault(q => q.NODE_ID == parent.Node.ID), NodeAct = act, - Setting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID), + ActSetting = CurBatch.ActionSets.FirstOrDefault(q => q.ACT_ID == act.ID), }; next.Init(); next.PrepNodeIDs.Add(parent.NodeID); @@ -333,10 +371,12 @@ protected void SaveStepsCommitActionToDB() { //淇濆瓨宸ユ鐨勬暟鎹簱鎻愪氦鎿嶄綔鍒版彁浜ゆ搷浣滃垪琛� + var commitList = new List<Action>(); foreach (var step in Steps.OrderBy(q => q.Sequence)) { - DBCommitList.Add(step.DBSubmitAction); + commitList.Add(step.DBSubmitAction); } + DBCommitList.Add(CurSN, commitList); //濡傛灉涓嶉渶瑕佷复鏃跺瓨鍌ㄦ暟鎹簱鎻愪氦鎿嶄綔锛屽垯鎶婃彁浜ゆ搷浣滃垪琛ㄦ彁浜ゅ埌鏁版嵁搴� if (!NeedTemporaryStoreDBCommitAction) { @@ -344,15 +384,18 @@ NeedTemporaryStoreDBCommitAction = false; var dbTran = GetCommitDB().UseTran(() => - { - //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁 - foreach (var action in DBCommitList) - { - action.Invoke(); - } - }); - if (dbTran.IsSuccess) - { + { + //鍦ㄥ悓涓�涓簨鍔′腑淇濆瓨鎵�鏈夊伐姝ョ殑鏁版嵁 + foreach (var wipSn in DBCommitList.Keys) + { + foreach (var action in DBCommitList[wipSn]) + { + action.Invoke(); + } + } + }); + if (dbTran.IsSuccess) + { //淇濆瓨鎴愬姛鍒欐竻绌烘彁浜ゆ搷浣滃垪琛� DBCommitList.Clear(); } @@ -364,13 +407,30 @@ } } + 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> /// 鑾峰彇鎵撳嵃鏍囩妯℃澘杩囩▼鍙橀噺鍊� /// </summary> /// <param name="labelPVs">杩囩▼鍙橀噺鍒楄〃</param> /// <param name="label">鏍囩妯℃澘</param> /// <returns></returns> - public BAS_LABEL_TEMP SetLabelVariables(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_TEMP label) + public BAS_LABEL_TEMP SetLabelVariables(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_TEMP label, IWorkAction action) { foreach (var item in label.Variables) { @@ -380,10 +440,13 @@ item.Value = item.VAR_VALUE; break; case BAS_LABEL_VAR.VAR_TYPEs.ProcessVariable: - item.Value = GetPrintProcessValue(labelPVs, item); + item.Value = GetPrintProcessValue(labelPVs, item, action); 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: @@ -400,7 +463,7 @@ /// <param name="labelPVs">杩囩▼鍙橀噺鍒楄〃</param> /// <param name="lv">鏍囩妯℃澘鍙橀噺</param> /// <returns></returns> - public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv) + public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv, IWorkAction action) { var pv = labelPVs.FirstOrDefault(q => q.VAR_CODE == lv.VAR_VALUE); if (!pv.IsNullOrEmpty()) @@ -412,8 +475,6 @@ switch (pv.VAR_METHOD) { case "GetSN": - return string.Join(",", CurWipSNs.Select(q => q.SN)); - case "GetTraySN": return CurSN; case "GetBAS_ITEM": return WorkBatch.Product.ToJson(); @@ -425,7 +486,7 @@ return ""; } } - case BAS_LABEL_PV.VAR_TYPEs.WebApiWebApi: + case BAS_LABEL_PV.VAR_TYPEs.WebApi: break; case BAS_LABEL_PV.VAR_TYPEs.StoredProcedure: break; @@ -435,6 +496,39 @@ } 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() ?? ""; + case "GetHW21SNGenerate": + return Biz.CodeRule[lv.BARCODE_RULE ?? ""]?.Generate("SN:","05").Data.ToString() ?? ""; + default: + return ""; + } + } + default: + break; + } + } + return ""; + } + /// <summary> /// 鑾峰彇宸ュ崟缁存姢鐨勬ā鏉垮彉閲� /// </summary> -- Gitblit v1.9.3