服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2024-08-07 06940a626353664dbb6e567f97cbe35a9774b098
Tiger.Business.MES/Transaction/Position.cs
@@ -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; }
@@ -70,6 +72,7 @@
        /// </summary>
        public bool NeedTemporaryStoreDBCommitAction { get; set; } = false;
        protected List<Action> DBCommitList { get; set; } = new();
        protected List<Position> NodeCommitList { get; set; } = new();
        #endregion Propertys & Variables
@@ -174,9 +177,10 @@
        public virtual void ResetNode()
        {
            Steps.Clear();
            CurWipSN = null;
            CurWipSNHis = null;
            CurWipSNs.Clear();
            CurWipSNHiss.Clear();
            CurStep = null;
            CurDefects.Clear();
        }
        /// <summary>
@@ -331,35 +335,67 @@
        /// </summary>
        protected void SaveStepsCommitActionToDB()
        {
            //保存工步的数据库提交操作到提交操作列表
            foreach (var step in Steps.OrderBy(q => q.Sequence))
            {
                DBCommitList.Add(step.DBSubmitAction);
            }
            //如果不需要临时存储数据库提交操作,则把提交操作列表提交到数据库
            if (!NeedTemporaryStoreDBCommitAction)
            {
                //恢复临时存储标记为false
                NeedTemporaryStoreDBCommitAction = false;
            ////保存工步的数据库提交操作到提交操作列表
            //foreach (var step in Steps.OrderBy(q => q.Sequence))
            //{
            //    DBCommitList.Add(step.DBSubmitAction);
            //}
            ////如果不需要临时存储数据库提交操作,则把提交操作列表提交到数据库
            //if (!NeedTemporaryStoreDBCommitAction)
            //{
            //    //恢复临时存储标记为false
            //    NeedTemporaryStoreDBCommitAction = false;
                var dbTran = GetCommitDB().UseTran(() =>
               {
                   //在同一个事务中保存所有工步的数据
                   foreach (var action in DBCommitList)
                   {
                        action.Invoke();
                   }
               });
               if (dbTran.IsSuccess)
               {
                    //保存成功则清空提交操作列表
                    DBCommitList.Clear();
                }
                else
            //    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.MemberwiseClone() as Position);
            }
            else
            {
                //保存成功则清空提交操作列表
                foreach (var item in NodeCommitList)
                {
                    //抛出异常
                    throw dbTran.ErrorException;
                    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;
            }
        }
@@ -383,6 +419,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:
@@ -411,7 +450,7 @@
                            switch (pv.VAR_METHOD)
                            {
                                case "GetSN":
                                    return CurWipSN.SN;
                                    return CurSN;
                                case "GetBAS_ITEM":
                                    return WorkBatch.Product.ToJson();
                                case "GetCustomer":
@@ -422,7 +461,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;
@@ -432,6 +471,37 @@
            }
            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>