服务端的TigerApi 框架,基于.NET6 2024 版本
Rodney Chen
2024-10-14 76e5a482a1be93af036ff6d75d367c7401810682
Tiger.Business.MES/WorkAction/PackingAction.cs
@@ -1,4 +1,5 @@
using Rhea.Common;
using Microsoft.CodeAnalysis.Differencing;
using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
@@ -218,6 +219,7 @@
                CurCmd = data;
                PrintTimes++;
                CurStep?.SetStatusMessage(StepStatus.Normal, Biz.L("打印标签"));
                action.IsSuccessed = true;
                action.Data.Data = data;
                action.Data.ShortMsg = new("打印标签", ShortMessage.Types.Normal);
                //action.LocaleMsg = new Locale($"开始第{PrintTimes}次打印第{min.PKG_LEVEL}层包装[{min.PkgType.PKG_NAME}]的标签[{LabelDic[min.PKG_LEVEL]?.LABEL_CODE}: {LabelDic[min.PKG_LEVEL].LABEL_NAME}]");
@@ -225,7 +227,7 @@
            }
            //如果返回成功则认为当前行为可以开始执行,否则返回失败
            action.IsSuccessed = true;
            //action.IsSuccessed = true;
            return action;
        }
@@ -253,6 +255,7 @@
                            action.IsSuccessed = false;
                            //action.LocaleMsg = new($"条码扫描失败,请重新扫描第{dtl.PKG_LEVEL}层包装[{dtl.PkgType.PKG_NAME}]的标签条码");
                            action.LocaleMsg = new("MES.WorkAction.PackingAction.ScanFail", dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME);
                            CurPosition.ResetNode();
                            return action;
                        }
                        //验证当前包装条码是否已经被扫描过
@@ -264,17 +267,18 @@
                            action.IsSuccessed = false;
                            //action.LocaleMsg = new($"条码[{pInput.PkgSN}]无需重复扫描,请扫描第{dtl.PKG_LEVEL}层包装[{dtl.PkgType.PKG_NAME}]的标签条码");
                            action.LocaleMsg = new("MES.WorkAction.PackingAction.ScanRepeat", pInput.PkgSN, dtl.PKG_LEVEL, dtl.PkgType.PKG_NAME);
                            CurPosition.ResetNode();
                            return action;
                        }
                        //客户端扫描成功
                        CurCmd = null;
                        PrintTimes = 0;
                        action = SavePkgData(input, action);
                        if (action.IsSuccessed)
                        {
                            CurStep?.SetStatusMessage(StepStatus.Success, Biz.L("扫描成功"));
                            action.Data.ShortMsg = new("扫描成功", ShortMessage.Types.Success);
                        }
                        //if (action.IsSuccessed)
                        //{
                        //    CurStep?.SetStatusMessage(StepStatus.Success, Biz.L("扫描成功"));
                        //    action.Data.ShortMsg = new("扫描成功", ShortMessage.Types.Success);
                        //}
                    }
                    break;
                //Print:打印,打印当前包装层级的标签
@@ -748,6 +752,27 @@
            return list;
        }
        public List<MES_WIP_PKG> GetMinPackageList(WipPkgItem parent)
        {
            List<MES_WIP_PKG> list = new();
            if (parent.Items.Any())
            {
               foreach (var item in parent.Items)
               {
                   item.Package.PARENT_SN = parent.Package?.SN;
                   list.AddRange(GetMinPackageList(item));
               }
            }
            else
            {
                if (!parent.Package.IsNullOrEmpty())
                {
                    list.Add(parent.Package);
                }
            }
            return list;
        }
        public ApiAction<SubmitOutput> CompletePkg()
        {
            var action = new ApiAction<SubmitOutput>(new SubmitOutput());
@@ -793,6 +818,7 @@
                var wipActs = new List<MES_WIP_ACT>();
                foreach (var wipSn in CurPosition.CurWipSNs)
                {
                    var wipAct = new MES_WIP_ACT()
                    {
                        AUTH_ORG = CurPosition.WorkBatch.WO.AUTH_ORG,
@@ -854,13 +880,27 @@
                                .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.SN == pkg.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.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)
                                .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.SN == pkg.SN)
                                .Where(q => q.WORK_ORDER == pkg.WORK_ORDER && q.WIP_ID == pkg.WIP_ID)
                                .ExecuteCommand();
                        }
                    }
@@ -868,36 +908,56 @@
            }
            else
            {
                var _pkgList = CurPkg.IsFinished ? GetPackageList(CurPkg.Item) : new();
                //保存数据
                var db = Biz.Db;
                var dbTran = db.UseTran(() =>
                if (CurPkg.IsFinished)
                {
                    if (_pkgList.Any())
                    {
                        db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand();
                        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.SN == pkg.SN)
                                .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.SN == pkg.SN)
                                .ExecuteCommand();
                        }
                    }
                });
                if (!dbTran.IsSuccess)
                {
                    //抛出异常
                    throw dbTran.ErrorException;
                   var _pkgList = GetPackageList(CurPkg.Item);
                   //最外层包装已经完成包装,则把工序中暂存标记设为false,统一提交包装内产品的过站记录
                   CurPosition.NeedTemporaryStoreDBCommitAction = false;
                   //保存数据
                   CurPosition.SaveStepsCommitActionToDB(() =>
                   {
                       var db = CurPosition.GetCommitDB();
                       if (_pkgList.Any())
                       {
                           db.Storageable(_pkgList, CurPosition.UserCode).ExecuteCommand();
                           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.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)
                                    .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();
                           }
                       }
                   });
                   //如果当前条码已经完工,检查当前工单批次和工单是否完工
                   if (CurPkg.IsReachedEndNode)
                   {
                       CurPosition.WorkBatch.CheckIsComplete(CurPosition.UserCode);
                   }
                }
            }