服务端的TigerApi 框架,基于.NET6 2024 版本
Ben Lin
2024-11-07 2c453c7fdbe6cdf81353b129023a3d35f982821d
Tiger.Business.MES/Transaction/PackingNode.cs
@@ -65,32 +65,46 @@
                    //工步列表为空或者工序节点工步有未完成时,优先完成工序节点工步
                    if (Steps.IsNullOrEmpty() || !IsFinishNodeSteps)
                    {
                        var wosns = Biz.Db.Queryable<BIZ_MES_WO_BATCH, BIZ_MES_WO_SN>((q, s) => new JoinQueryInfos(JoinType.Inner, q.ORDER_NO == s.WORK_ORDER && q.BATCH_NO == s.BATCH_NO))
                                            .ByAuth(input.AuthOption)//.Where((q, s) => s.STATUS < BIZ_MES_WO_SN.STATUSs.Finished.GetValue())
                                            .Where((q, s) => s.SN == input.SN || s.FLOW_SN == input.SN || s.TRAY_SN == input.SN).Select((q, s) => new { Batch = q, SN = s }).ToList();
                        //先判断当前工单不为空且当前岗位在当前工单是不是首站,如果是则不允许变更当前工单,尝试把条码绑定到当前工单
                        if (!CurBatch.IsNullOrEmpty() && CurBatch.IsFirstNode(PostCode))
                        {
                            //更新CurBatch
                            CurBatch?.Update();
                            //提交数据
                            action = NodeSubmit(action, input);
                            //更新工序信息
                            if (!action.IsSuccessed)
                            var wosn = wosns.FirstOrDefault(q => q.Batch.ORDER_NO == CurBatch.WO.ORDER_NO && (q.SN.STATUS == BIZ_MES_WO_SN.STATUSs.Finished.GetValue() || q.SN.STATUS == BIZ_MES_WO_SN.STATUSs.Scrap.GetValue()));
                            if (!wosn.IsNullOrEmpty())
                            {
                                var info = WoContext.GetSnOperInfo(input.SN).Data;
                                info.InputQty = CurOperInfo(input.Locale).InputQty;
                                action.Data.OperInfo = info;
                                action.Data.ShortMsg = new($"产品{wosn.SN.STATUS.GetEnumDesc<BIZ_MES_WO_SN.STATUSs>()}", ShortMessage.Types.Error);
                                action.Data.OperInfo = new();
                                action.IsSuccessed = false;
                                //action.LocaleMsg = new($"进站扫描错误,条码[{0}]{1}", input.SN);
                                action.LocaleMsg = new("MES.Transaction.CollectNode.Submit.SnStatusError", input.SN, wosn.SN.STATUS.GetEnumDesc<BIZ_MES_WO_SN.STATUSs>());
                            }
                            else if (Steps.Any() && !IsFinishAllSteps)
                            else
                            {
                                action.Data.OperInfo = SetOperNodeInfo(CurOperInfo(input.Locale));
                                //提交数据
                                action = NodeSubmit(action, input);
                                //更新工序信息
                                if (!action.IsSuccessed)
                                {
                                    var info = WoContext.GetSnOperInfo(input.SN).Data;
                                    info.InputQty = CurOperInfo(input.Locale).InputQty;
                                    action.Data.OperInfo = info;
                                }
                                else if (Steps.Any() && !IsFinishAllSteps)
                                {
                                    action.Data.OperInfo = SetOperNodeInfo(CurOperInfo(input.Locale));
                                }
                            }
                        }
                        //当前岗位在当前工单不是首站,则查找条码已绑定的工单当作当前工单
                        else
                        {
                            var wosns = Biz.Db.Queryable<BIZ_MES_WO_BATCH, BIZ_MES_WO_SN>((q, s) => new JoinQueryInfos(JoinType.Inner, q.ORDER_NO == s.WORK_ORDER && q.BATCH_NO == s.BATCH_NO))
                                                .ByAuth(input.AuthOption)//.Where((q, s) => s.STATUS < BIZ_MES_WO_SN.STATUSs.Finished.GetValue())
                                                .Where((q, s) => s.SN == input.SN || s.FLOW_SN == input.SN || s.TRAY_SN == input.SN).Select((q, s) => new { Batch = q, SN = s }).ToList();
                            //查找到条码已绑定的工单
                            if (wosns.Any(q => q.SN.STATUS < BIZ_MES_WO_SN.STATUSs.Finished.GetValue()))
                            {
@@ -290,7 +304,7 @@
                        return woStatus;
                    }
                    var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).ToList();
                    var wipSNs = Biz.Db.Queryable<MES_WIP_DATA>().IncludesAllFirstLayer().Where(q => q.SN == input.SN || q.FLOW_SN == input.SN || q.TRAY_SN == input.SN).Where(q => q.STATUS < MES_WIP_DATA.STATUSs.Finished.GetValue()).ToList();
                    if (wipSNs.IsNullOrEmpty())
                    {
                        var wipSN = new MES_WIP_DATA()
@@ -308,6 +322,7 @@
                            HOLD_FLAG = "N",
                            REWORK_FLAG = CurBatch.WO.ORDER_TYPE == BIZ_MES_WO.ORDER_TYPEs.Rework.GetValue() ? "Y" : "N",
                            FINISHED_FLAG = "N",
                            UNBIND_FLAG = "N",
                            INV_FLAG = "N",
                            DFT_FLAG = "N",
                            DFT_COUNT = 0,
@@ -670,7 +685,7 @@
                        var wipIDs = _pkgList.Where(q => !q.WIP_ID.IsNullOrEmpty()).Select(q => q.WIP_ID).ToList();
                        var wo = _pkgList.First().WORK_ORDER;
                        //包装信息保存到生产过程记录
                        db.Updateable<MES_WIP_HIS>()
                        db.Updateable<MES_WIP_HIS>(UserCode)
                            .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)
@@ -713,9 +728,10 @@
            try
            {
                //PkgSubmit:手动结束包装,保存暂存的包装数据
                if (NodeCmd.IsNullOrEmpty("PkgSubmit") == "PkgSubmit" || CurWipSNs.IsNullOrEmpty())
                if (NodeCmd.IsNullOrEmpty() && CurWipSNs.IsNullOrEmpty())
                {
                    if (Context.ContainsKey("CurPackage"))
                    var CurPkg = Context.ContainsKey("CurPackage") ? Context["CurPackage"] as WipPkg : null;
                    if (CurPkg?.IsFinished == false)
                    {
                        TempPkgAction = new PackingAction();
                        TempPkgAction.Init(this);