服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-07-29 201b456883c4d4799561fd17acec3f8c2111445f
获取过程变量优化
已修改3个文件
97 ■■■■■ 文件已修改
Tiger.Business.MES/Transaction/Position.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/WorkAction/PrintLabel.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness/MES/Transaction/IPosition.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/Position.cs
@@ -57,6 +57,7 @@
        public IWorkBatch WorkBatch => CurBatch;
        public MES_WIP_DATA CurWipSN { get; set; }
        public MES_WIP_HIS CurWipSNHis { get; set; }
        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();
@@ -268,12 +269,16 @@
            //尝试有没有可以直接开始的后续工步
            foreach (var step in NextSteps)
            {
                //尝试执行后续工步
                var canBegin = step.TryBegin(input);
                //如果后续工步可以直接开始则直接执行
                if (canBegin.IsSuccessed)
                {
                    //更新当前执行工步为已开始工步
                    CurStep = step;
                    //更新后续可执行的工步列表
                    NextSteps = GetNextSteps(CurStep);
                    //返回结果到客户端
                    result = canBegin;
                    result.Data.IsFinished = IsFinishAllSteps;
                    result.Data.CurWO = CurBatch.WO.ORDER_NO;
@@ -286,7 +291,7 @@
                }
            }
            //根据后续工步返回ApiAction
            //没有可以直接开始的后续工步,根据后续工步返回ApiAction
            result.Data.IsFinished = IsFinishAllSteps;
            result.Data.CurWO = CurBatch.WO.ORDER_NO;
            result.Data.CurBatch = CurBatch.Batch.BATCH_NO;
@@ -294,7 +299,7 @@
            result.Data.StepActCode = CurStep.NodeAct.ACT_CODE;
            result.Data.NextStepID = "";
            //根据后续可执行工步列表返回相应的操作提示
            //没有可以直接开始的后续工步,根据后续可执行工步列表返回相应的操作提示
            if (NextSteps.Count == 1)
            {
                result.LocaleMsg = NextSteps.First().GetBeginMsg();
@@ -306,7 +311,45 @@
            }
            return result;
        }
        /// <summary>
        /// 获取打印标签模板过程变量值
        /// </summary>
        /// <param name="labelPVs">过程变量列表</param>
        /// <param name="lv">标签模板变量</param>
        /// <returns></returns>
        public string GetPrintProcessValue(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.ServerMethod:
                        {
                            switch (pv.VAR_METHOD)
                            {
                                case "GetSN":
                                    return CurWipSN.SN;
                                case "GetBAS_ITEM":
                                    return WorkBatch.Product.ToJson();
                                case "GetCustomer":
                                    return WorkBatch.Batch.ToJson();
                                default:
                                    return "";
                            }
                        }
                    case BAS_LABEL_PV.VAR_TYPEs.WebApiWebApi:
                        break;
                    case BAS_LABEL_PV.VAR_TYPEs.StoredProcedure:
                        break;
                    default:
                        break;
                }
            }
            return "";
        }
        #endregion Functions
        public override bool Close(bool needSaveHistoryLog = false)
Tiger.Business.MES/WorkAction/PrintLabel.cs
@@ -15,11 +15,13 @@
    public class PrintLabel : IPrintLabel
    {
        #region Propertys & Variables
        #region 固定写法,工序中的必要信息
        public bool IsFinished { get; set; } = false;
        public IWorkStep CurStep { get; set; }
        public IPosition CurPosition { get; set; }
        public MES_WO_NODE_ACT NodeAct { get; set; }
        public MES_WO_ACTION Setting { get; set; }
        #endregion
        public BAS_LABEL_TEMP Label { get; set; }
        public List<BAS_LABEL_PV> LabelPV { get; set; }
        #endregion Propertys & Variables
@@ -31,10 +33,12 @@
        /// <returns></returns>
        public void Init(IWorkStep curStep, IPosition position, MES_WO_NODE_ACT nodeAct, MES_WO_ACTION setting)
        {
            #region 固定写法,给默认变量赋值
            CurStep = curStep;
            CurPosition = position;
            NodeAct = nodeAct;
            Setting = setting;
            #endregion
            Label = Biz.Db.Queryable<BAS_LABEL_TEMP>().Where(q => q.LABEL_CODE == setting.LABEL_CODE).IncludesAllFirstLayer().First();
            LabelPV = Biz.Db.Queryable<BAS_LABEL_PV>().ToList();
@@ -67,7 +71,7 @@
                        item.Value = item.VAR_VALUE;
                        break;
                    case BAS_LABEL_VAR.VAR_TYPEs.ProcessVariable:
                        item.Value = GetProcessValue(item);
                        item.Value = CurPosition.GetPrintProcessValue(LabelPV, item);
                        break;
                    case BAS_LABEL_VAR.VAR_TYPEs.DateVariable:
                        item.Value = DateTime.Now.ToString(item.VAR_VALUE);
@@ -80,7 +84,7 @@
            }
            action.Data.Data = Label;
            //如果根据输入可以开始执行当前行为则标记为成功,否则失败
            //如果返回成功则认为当前行为可以开始执行,否则返回失败
            action.IsSuccessed = true;
            return action;
        }
@@ -165,38 +169,6 @@
            //action.LocaleMsg = new($"标签{Label.LABEL_NAME}[{Label.LABEL_CODE}]打印成功", Label.LABEL_NAME);
            action.LocaleMsg = new("MES.WorkAction.PrintLabel.PrintSuccess", Label.LABEL_NAME, Label.LABEL_CODE);
            return action;
        }
        public string GetProcessValue(BAS_LABEL_VAR lv)
        {
            var pv = LabelPV.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.ServerMethod:
                        {
                            switch (pv.VAR_METHOD)
                            {
                                case "GetSN":
                                    return CurPosition.CurWipSN.SN;
                                case "GetBAS_ITEM":
                                    return CurPosition.WorkBatch.Product.ToJson();
                                case "GetCustomer":
                                    return CurPosition.WorkBatch.Batch.ToJson();
                                default:
                                    return "";
                            }
                        }
                    case BAS_LABEL_PV.VAR_TYPEs.WebApiWebApi:
                        break;
                    case BAS_LABEL_PV.VAR_TYPEs.StoredProcedure:
                        break;
                    default:
                        break;
                }
            }
            return "action";
        }
        #endregion Functions
Tiger.IBusiness/MES/Transaction/IPosition.cs
@@ -20,6 +20,7 @@
        public IWorkBatch WorkBatch { get; }
        public MES_WIP_DATA CurWipSN { get; set; }
        public MES_WIP_HIS CurWipSNHis { get; set; }
        public Dictionary<string, object> Context { get; set; }
        #endregion Propertys & Variables
        #region Functions
@@ -41,6 +42,13 @@
        /// </summary>
        /// <returns></returns>
        public DbClient GetCommitDB();
        /// <summary>
        /// 获取打印标签模板过程变量值
        /// </summary>
        /// <param name="labelPVs">过程变量列表</param>
        /// <param name="lv">标签模板变量</param>
        /// <returns></returns>
        public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv);
        #endregion Functions
    }
}