服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2024-10-14 268c945b3c2bcaf75950531283fb9a89919b564e
一些已知更改
已修改4个文件
124 ■■■■■ 文件已修改
Tiger.Business.MES/Transaction/PackingNode.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/Position.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/WorkAction/PackingAction.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.IBusiness.MES/Transaction/IPosition.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Tiger.Business.MES/Transaction/PackingNode.cs
@@ -663,6 +663,7 @@
                var _woSns = woSNs.Clone();
                var _wipSns = CurWipSNs.Clone();
                var _wipHiss = wipHiss.Clone();
                var _pkgList = curPkg?.IsFinished == true ? GetPackageList(curPkg.Item) : new();
                //保存数据
                endAction = () =>
                {
@@ -672,6 +673,32 @@
                    db.Storageable(_woSns, UserCode).ExecuteCommand();
                    db.Storageable(_wipSns, UserCode).ExecuteCommand();
                    db.Storageable(_wipHiss, UserCode).ExecuteCommand();
                    if (_pkgList.Any())
                    {
                        foreach (var pkg in _pkgList)
                        {
                            ////包装信息保存到在制品信息表
                            //db.Updateable<MES_WIP_DATA>()
                            //    .SetColumns(q => q.TRAY_SN == curPkg.Item.Package.SN)
                            //    .SetColumns(q => q.INNER_SN == q.CARTON_SN)
                            //    .SetColumns(q => q.CARTON_SN == curPkg.Item.Package.SN)
                            //    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.ID == pkg.WIP_ID)
                            //    .ExecuteCommand();
                            //包装信息保存到生产过程记录
                            db.Updateable<MES_WIP_HIS>()
                                .SetColumns(q => q.TRAY_SN == curPkg.Item.Package.SN)
                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
                                .SetColumns(q => q.CARTON_SN == curPkg.Item.Package.SN)
                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.OPER_CODE == "EndNode")
                                .ExecuteCommand();
                            ////包装信息保存到工单条码明细表
                            //db.Updateable<BIZ_MES_WO_SN>()
                            //    .SetColumns(q => q.TRAY_SN == curPkg.Item.Package.SN)
                            //    .SetColumns(q => q.OUTER_SN == curPkg.Item.Package.SN)
                            //    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID)
                            //    .ExecuteCommand();
                        }
                    }
                };
            }
Tiger.Business.MES/Transaction/Position.cs
@@ -782,6 +782,22 @@
            }
        }
        #endregion
        #region 包装专用方法
        public List<MES_WIP_PKG> GetPackageList(WipPkgItem parent)
        {
            List<MES_WIP_PKG> list = new();
            if (!parent.Package.IsNullOrEmpty())
            {
                list.Add(parent.Package);
            }
            foreach (var item in parent.Items)
            {
                item.Package.PARENT_SN = parent.Package?.SN;
                list.AddRange(GetPackageList(item));
            }
            return list;
        }
        #endregion
        #endregion Functions
        public override bool Close(bool needSaveHistoryLog = false)
Tiger.Business.MES/WorkAction/PackingAction.cs
@@ -53,15 +53,16 @@
            PkgRule = Biz.Db.Queryable<BAS_PKG_RULE>().Where(q => q.RULE_CODE == setting.PKG_CODE).IncludesAllFirstLayer().IncludesAllSecondLayer(q => q.Details).First();
            //根据行为设置获取多层包装的标签打印模板字典
            var codes = (Setting.OPTION_1 ?? "").JsonToObject<List<WipPkgItem>>();
            var codes = (Setting.OPTION_1 ?? "").JsonToObject<List<WipPkgItem>>()?? new List<WipPkgItem>();
            foreach (var code in codes)
            {
                var label = code.LABEL_CODE.IsNullOrEmpty() ? null : Biz.Db.Queryable<BAS_LABEL_TEMP>().Where(q => q.LABEL_CODE == code.LABEL_CODE).IncludesAllFirstLayer().First();
                LabelDic.Add(code.PKG_LEVEL, label);
            }
            LabelPV = Biz.Db.Queryable<BAS_LABEL_PV>().ToList();
            //如果工序上下文中没有包装记录则新建一个,有则获取当前的包装记录
            if (CurPosition.Context.ContainsKey("CurPackage") && !CurPosition.Context["CurPackage"].IsNullOrEmpty())
            //如果工序上下文中没有包装记录则新建一个,有且未包装完成则获取当前的包装记录
            if (CurPosition.Context.ContainsKey("CurPackage") && !CurPosition.Context["CurPackage"].IsNullOrEmpty() && !(CurPosition.Context["CurPackage"] as WipPkg).IsFinished)
            {
                CurPkg = (CurPosition.Context["CurPackage"] as WipPkg).Clone();
            }
@@ -108,6 +109,13 @@
                if (!child.IsNullOrEmpty())
                {
                    CurPkg.Item.Items.Add(child);
                }
                //删除工序上下文中的包装记录
                if (CurPosition.Context.ContainsKey("CurPackage"))
                {
                    CurPosition.Context.Remove("CurPackage");
                    CurPosition.Context.Remove("CurLabelDic");
                }
            }
            //获取是否包装完后需要称重
@@ -259,7 +267,7 @@
                            return action;
                        }
                        //验证当前包装条码是否已经被扫描过
                        if (GetPackageList(CurPkg.Item).Any(q => q.SN == pInput.PkgSN))
                        if (CurPosition.GetPackageList(CurPkg.Item).Any(q => q.SN == pInput.PkgSN))
                        {
                            var dtl = PkgRule.Details.First(q => q.PKG_LEVEL == pInput.PkgLevel);
                            CurStep?.SetStatusMessage(StepStatus.Error, Biz.L("扫描错误"));
@@ -650,7 +658,7 @@
                        //添加当前的包装明细到上一层包装的明细列表
                        if (!curItem.Items.Contains(CurPkgItem))
                        {
                            curItem.Items.Add(CurPkgItem);
                                curItem.Items.Add(CurPkgItem);
                        }
                        CurPkgItem = curItem;
@@ -735,21 +743,6 @@
                CurPosition.ResetNode();
            }
            return action;
        }
        private List<MES_WIP_PKG> GetPackageList(WipPkgItem parent)
        {
            List<MES_WIP_PKG> list = new();
            if (!parent.Package.IsNullOrEmpty())
            {
                list.Add(parent.Package);
            }
            foreach (var item in parent.Items)
            {
                item.Package.PARENT_SN = parent.Package?.SN;
                list.AddRange(GetPackageList(item));
            }
            return list;
        }
        public List<MES_WIP_PKG> GetMinPackageList(WipPkgItem parent)
@@ -861,7 +854,7 @@
                //创建变量克隆对象用于传入DBSubmitAction中保存当前需要暂存的数据值
                var _wipActs = wipActs.Clone();
                var _pkgList = CurPkg.IsFinished ? GetPackageList(CurPkg.Item) : new();
                var _pkgList = CurPkg.IsFinished ? CurPosition.GetPackageList(CurPkg.Item) : new();
                //保存数据
                CurStep.DBSubmitAction = () =>
                {
@@ -887,14 +880,14 @@
                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID)
                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID)
                                .ExecuteCommand();
                            //包装信息保存到生产行为记录
                            db.Updateable<MES_WIP_ACT>()
                                .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
                                .SetColumns(q => q.INNER_SN == q.CARTON_SN)
                                .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == NodeAct.ID)
                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == NodeAct.ID)
                                .ExecuteCommand();
                            //包装信息保存到工单条码明细表
                            db.Updateable<BIZ_MES_WO_SN>()
@@ -910,7 +903,7 @@
            {
                if (CurPkg.IsFinished)
                {
                    var _pkgList = GetPackageList(CurPkg.Item);
                    var _pkgList = CurPosition.GetPackageList(CurPkg.Item);
                   
                    //最外层包装已经完成包装,则把工序中暂存标记设为false,统一提交包装内产品的过站记录
                    CurPosition.NeedTemporaryStoreDBCommitAction = false;
@@ -935,14 +928,14 @@
                                    .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
                                    .SetColumns(q => q.INNER_SN == q.CARTON_SN)
                                    .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID)
                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID)
                                    .ExecuteCommand();
                                //包装信息保存到生产行为记录
                                db.Updateable<MES_WIP_ACT>()
                                    .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN)
                                    .SetColumns(q => q.INNER_SN == q.CARTON_SN)
                                    .SetColumns(q => q.CARTON_SN == CurPkg.Item.Package.SN)
                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == NodeAct.ID)
                                    .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID && q.NODE_ID == pkg.NODE_ID && q.ACT_ID == NodeAct.ID)
                                    .ExecuteCommand();
                                //包装信息保存到工单条码明细表
                                db.Updateable<BIZ_MES_WO_SN>()
@@ -961,34 +954,22 @@
                }
            }
            if (CurPkg.IsFinished)
            //最外层包装已经完成包装,则把工序中暂存标记设为false,统一提交包装内产品的过站记录
            //最外层包装未完成包装,则把工序中暂存标记设为true,待全部包装完成再统一提交包装内产品的过站记录
            CurPosition.NeedTemporaryStoreDBCommitAction = !CurPkg.IsFinished;
            //如果工序上下文中没有包装记录则新建一个
            if (CurPosition.Context.ContainsKey("CurPackage"))
            {
                //最外层包装已经完成包装,则把工序中暂存标记设为false,统一提交包装内产品的过站记录
                CurPosition.NeedTemporaryStoreDBCommitAction = false;
                //删除工序上下文中的包装记录
                CurPosition.Context.Remove("CurPackage");
                CurPosition.Context.Remove("CurLabelDic");
                //action.LocaleMsg = new($"条码[{CurPkg.Item.Package?.SN}]包装完成");
                action.LocaleMsg = new("MES.WorkAction.PackingAction.PackingSuccess", CurPkg.Item.Package.SN);
                CurPosition.Context["CurPackage"] = CurPkg;
                CurPosition.Context["CurLabelDic"] = LabelDic;
            }
            else
            {
                //最外层包装未完成包装,则把工序中暂存标记设为true,待全部包装完成再统一提交包装内产品的过站记录
                CurPosition.NeedTemporaryStoreDBCommitAction = true;
                //如果工序上下文中没有包装记录则新建一个
                if (CurPosition.Context.ContainsKey("CurPackage"))
                {
                    CurPosition.Context["CurPackage"] = CurPkg;
                    CurPosition.Context["CurLabelDic"] = LabelDic;
                }
                else
                {
                    CurPosition.Context.Add("CurPackage", CurPkg);
                    CurPosition.Context.Add("CurLabelDic", LabelDic);
                }
                //action.LocaleMsg = new($"条码[{CurPosition.CurSN}]包装完成");
                action.LocaleMsg = new("MES.WorkAction.PackingAction.PackingSuccess", CurPosition.CurSN);
                CurPosition.Context.Add("CurPackage", CurPkg);
                CurPosition.Context.Add("CurLabelDic", LabelDic);
            }
            //action.LocaleMsg = new($"条码[{CurPosition.CurSN}]包装完成");
            action.LocaleMsg = new("MES.WorkAction.PackingAction.PackingSuccess", CurPosition.CurSN);
            IsFinished = true;
            CurStep?.SetStatusMessage(StepStatus.Finished, Biz.L("包装完成"));
Tiger.IBusiness.MES/Transaction/IPosition.cs
@@ -5,6 +5,7 @@
using System.Text;
using System.Threading.Tasks;
using Tiger.Model;
using Tiger.Model.Entitys.MES.Position;
namespace Tiger.IBusiness
{
@@ -71,6 +72,7 @@
        /// <param name="lv">标签模板变量</param>
        /// <returns></returns>
        public string GetPrintProcessValue(List<BAS_LABEL_PV> labelPVs, BAS_LABEL_VAR lv, List<BAS_LABEL_VAR> lvars, IWorkAction action);
        public List<MES_WIP_PKG> GetPackageList(WipPkgItem parent);
        #endregion Functions
    }
}