Tiger.Api/Language.db | 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/Common/WoContext.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/Common/WorkBatch.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/Transaction/CollectNode.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/Transaction/PackingNode.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/Transaction/TestNode.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/Transaction/YadaPacking.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Business.MES/WorkAction/PackingAction.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/MES/BIZ_MES_WO_SN.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/MES/MES_WIP_ACT.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/MES/MES_WIP_DATA.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/MES/MES_WIP_DFT.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
Tiger.Model.Net/Entitys/MES/MES_WIP_HIS.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Tiger.Api/Language.dbBinary files differ
Tiger.Business.MES/Common/WoContext.cs
@@ -128,6 +128,7 @@ BATCH_NO = woSN.BATCH_NO, HOLD_FLAG = "N", FINISHED_FLAG = "N", UNBIND_FLAG = "N", INV_FLAG = "N", DFT_FLAG = "N", DFT_COUNT = 0, @@ -188,6 +189,7 @@ BATCH_NO = woSN.BATCH_NO, HOLD_FLAG = "N", FINISHED_FLAG = "N", UNBIND_FLAG = "N", INV_FLAG = "N", DFT_FLAG = "N", DFT_COUNT = 0, Tiger.Business.MES/Common/WorkBatch.cs
@@ -10,6 +10,8 @@ using Tiger.IBusiness; using Tiger.Model.Entitys.MES.Position; using Tiger.Business.MES; using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser; using Org.BouncyCastle.Ocsp; namespace Tiger.Business { @@ -60,17 +62,17 @@ return this; } public void Update() public void Update(bool updateAll = false) { var wo = Biz.Db.Queryable<BIZ_MES_WO>().Where(q => q.ORDER_NO == OrderNo).IncludesAllFirstLayer().First(); var batch = Biz.Db.Queryable<BIZ_MES_WO_BATCH>().Where(q => q.BATCH_NO == Batch.BATCH_NO).First(); if (WoContext.WoBatchDic.ContainsKey(batch.BATCH_NO)) { if (wo.STATUS > BIZ_MES_WO.STATUSs.Working.GetValue() || batch.STATUS > BIZ_MES_WO_BATCH.STATUSs.Working.GetValue()) if (wo.STATUS < BIZ_MES_WO.STATUSs.Release.GetValue() || batch.STATUS > BIZ_MES_WO_BATCH.STATUSs.Working.GetValue()) { WoContext.WoBatchDic.Remove(Batch.BATCH_NO); } else if(wo.UPDATE_TIME > WO.UPDATE_TIME || batch.UPDATE_TIME > Batch.UPDATE_TIME) else if(updateAll || wo.UPDATE_TIME > WO.UPDATE_TIME || batch.UPDATE_TIME > Batch.UPDATE_TIME) { GetBatchInfo(); } @@ -160,21 +162,20 @@ action.LocaleMsg = new("MES.WorkBatch.WoStatusCanNotWork", WO.ORDER_NO, Batch.STATUS.GetEnumDesc<BIZ_MES_WO.STATUSs>()); } //工单批次投入数量减去报废数量如果大于等于计划数量,则不允许生产 //if (curNode.IS_INPUT == "Y" && Batch.INPUT_QTY - Batch.SCRAP_QTY >= Batch.PLAN_QTY) if (curNode.IS_FIRST_NODE == "Y" && WoSNs.Count(q => q.STATUS > BIZ_MES_WO_SN.STATUSs.NotInput.GetValue() && q.BATCH_NO == Batch.BATCH_NO) - Batch.SCRAP_QTY >= Batch.PLAN_QTY) if (curNode.IS_FIRST_NODE == "Y" && WoSNs.Count(q => q.BATCH_NO == Batch.BATCH_NO && BIZ_MES_WO_SN.STATUSs.NotInput.GetValue() < q.STATUS && q.STATUS <= BIZ_MES_WO_SN.STATUSs.Finished.GetValue()) >= Batch.PLAN_QTY) { action.IsSuccessed = false; action.Data.SetValue(this, null); //action.LocaleMsg = new($"工单批次[{0}]已投入 {1},其中报废 {2},以满足计划数量[{3}],无需继续投入"); action.LocaleMsg = new("MES.WorkBatch.BatchInputEnough", Batch.BATCH_NO, WoSNs.Count(q => q.BATCH_NO == Batch.BATCH_NO), Batch.SCRAP_QTY, Batch.PLAN_QTY); action.LocaleMsg = new("MES.WorkBatch.BatchInputEnough", Batch.BATCH_NO, WoSNs.Count(q => q.BATCH_NO == Batch.BATCH_NO), WoSNs.Count(q => q.BATCH_NO == Batch.BATCH_NO && q.STATUS > BIZ_MES_WO_SN.STATUSs.Finished.GetValue()), Batch.PLAN_QTY); } //工单投入数量减去报废数量如果大于等于计划数量,则不允许生产 if (curNode.IS_FIRST_NODE == "Y" && WoSNs.Count(q => q.STATUS > BIZ_MES_WO_SN.STATUSs.NotInput.GetValue() && q.WORK_ORDER == WO.ORDER_NO) - WO.SCRAP_QTY >= WO.PLAN_QTY) if (curNode.IS_FIRST_NODE == "Y" && WoSNs.Count(q =>q.WORK_ORDER == WO.ORDER_NO && BIZ_MES_WO_SN.STATUSs.NotInput.GetValue() < q.STATUS && q.STATUS <= BIZ_MES_WO_SN.STATUSs.Finished.GetValue()) >= WO.PLAN_QTY) { action.IsSuccessed = false; action.Data.SetValue(this, null); //action.LocaleMsg = new($"工单[{0}]已投入 {1},其中报废 {2},以满足计划数量[{3}],无需继续投入"); action.LocaleMsg = new("MES.WorkBatch.WoInputEnough", WO.ORDER_NO, WoSNs.Count(q => q.WORK_ORDER == WO.ORDER_NO), WO.SCRAP_QTY, WO.PLAN_QTY); action.LocaleMsg = new("MES.WorkBatch.WoInputEnough", WO.ORDER_NO, WoSNs.Count(q => q.WORK_ORDER == WO.ORDER_NO), WoSNs.Count(q => q.WORK_ORDER == WO.ORDER_NO && q.STATUS > BIZ_MES_WO_SN.STATUSs.Finished.GetValue()), WO.PLAN_QTY); } return action; @@ -420,7 +421,7 @@ { //在前置工序查找还有没有后续工序没完成的前置工序 var prepIDs = curNode.PrepNodeIDs.Where(id => Edges.Any(e => e.SRC_NODE == id && !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.NODE_ID == e.TGT_NODE && h.IsFinished)) Edges.Any(e => e.SRC_NODE == id && !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.UNBIND_FLAG != "Y" && h.NODE_ID == e.TGT_NODE && h.IsFinished)) ).ToList(); foreach (var prepID in prepIDs) { @@ -461,13 +462,13 @@ var result = new List<MES_WO_NODE>(); var nextNodes = Nodes.Where(q => q.Operation.OPER_TYPE != MES_OPERATION.OPER_TYPEs.Repair.GetValue() && Edges.Any(e => e.SRC_NODE == parent.ID && e.TGT_NODE == q.ID) && !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.NODE_ID == q.ID && h.IsFinished) && !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.UNBIND_FLAG != "Y" && h.NODE_ID == q.ID && h.IsFinished) ).ToList(); //尝试将当前工序的后续工序添加到可以执行的工序列表 foreach (var next in nextNodes) { //查找有没有前置工序找不到已良品过站的历史记录,若有则不允许继续执行 if (!next.PrepNodeIDs.Any(id => !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.NODE_ID == id && h.IsFinished)) || parent.IS_FIRST_NODE == "Y") if (!next.PrepNodeIDs.Any(id => !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.UNBIND_FLAG != "Y" && h.NODE_ID == id && h.IsFinished)) || parent.IS_FIRST_NODE == "Y") { var setting = NodeSets.FirstOrDefault(q => q.NODE_ID == next.ID); //后续工序是启用的,则添加 @@ -521,7 +522,7 @@ { //在前置工序查找还有没有后续工序没完成的前置工序 var prepIDs = curNode.PrepNodeIDs.Where(id => Edges.Any(e => e.SRC_NODE == id && !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.NODE_ID == e.TGT_NODE && h.IsFinished)) Edges.Any(e => e.SRC_NODE == id && !wipSN.History.Any(h => h.WORK_ORDER == WO.ORDER_NO && h.UNBIND_FLAG != "Y" && h.NODE_ID == e.TGT_NODE && h.IsFinished)) ).ToList(); foreach (var prepID in prepIDs) { @@ -569,6 +570,110 @@ return result; } /// <summary> /// 从工单中移除正在生产的条码 /// </summary> /// <param name="wipList"></param> /// <returns></returns> public ApiAction RemoveWipSn(List<MES_WIP_DATA> wipList, string user) { var action = UnbindWipSnFromWO(WO, wipList, user); //移除成功则处理工单缓存中的数据 if (action.IsSuccessed) { Update(true); } return action; } /// <summary> /// 从工单中解绑正在生产的条码 /// </summary> /// <param name="wo"></param> /// <param name="wipList"></param> /// <returns></returns> public static ApiAction UnbindWipSnFromWO(BIZ_MES_WO wo, List<MES_WIP_DATA> wipList, string user) { var action = new ApiAction(); var wipIDs = wipList.Select(q => q.ID); var batchs = wipList.Where(q => !q.BATCH_NO.IsNullOrEmpty()).GroupBy(q => new { q.BATCH_NO }).Select(g => new { g.Key.BATCH_NO, Qty = g.Count(), FinishQty = g.Count(q => q.STATUS == MES_WIP_DATA.STATUSs.Finished.GetValue()), }); var db = Biz.Db; var dbTran = db.UseTran(() => { //BIZ_MES_WO wo.INPUT_QTY -= wipList.Count; wo.OUTPUT_QTY -= wipList.Count(q => q.STATUS == MES_WIP_DATA.STATUSs.Finished.GetValue()); wo.SCRAP_QTY += wipList.Count; db.Updateable(wo, user).UpdateColumns(q => new { q.INPUT_QTY, q.OUTPUT_QTY, q.SCRAP_QTY, q.UPDATE_USER, q.UPDATE_TIME }).ExecuteCommand(); //BIZ_MES_WO_BATCH foreach (var batch in batchs) { db.Updateable<BIZ_MES_WO_BATCH>(user) .SetColumns(q => q.INPUT_QTY == q.INPUT_QTY - batch.Qty) .SetColumns(q => q.OUTPUT_QTY == q.OUTPUT_QTY - batch.FinishQty) .SetColumns(q => q.SCRAP_QTY == q.SCRAP_QTY + batch.Qty) .Where(q => q.BATCH_NO == q.BATCH_NO) .ExecuteCommand(); } //BIZ_MES_WO_SN db.Updateable<BIZ_MES_WO_SN>(user) .SetColumns(q => q.STATUS == BIZ_MES_WO_SN.STATUSs.Offline.GetValue()) .Where(q => q.WORK_ORDER == wo.ORDER_NO && wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); //MES_WIP_DATA & MES_WIP_HIS var wipHiss = new List<MES_WIP_HIS>(); foreach (var wipSN in wipList.Where(q => q.STATUS != MES_WIP_DATA.STATUSs.Offline.GetValue())) { wipSN.STATUS = MES_WIP_DATA.STATUSs.Offline.GetValue(); wipSN.UNBIND_FLAG = "Y"; wipSN.NODE_ID = ""; wipSN.NODE_NAME = "下线退库"; wipSN.OPERATION_TIME = DateTime.Now; var his = new MES_WIP_HIS(wipSN, $"工单[{wipSN.WORK_ORDER}]条码[{wipSN.SN}]下线"); wipHiss.Add(his); } db.Storageable(wipList, user).ExecuteCommand(); db.Storageable(wipHiss, user).ExecuteCommand(); db.Updateable<MES_WIP_HIS>(user) .SetColumns(q => q.UNBIND_FLAG == "Y") .Where(q => q.WORK_ORDER == wo.ORDER_NO && wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); //MES_WIP_PKG var curpkg = db.Queryable<MES_WIP_PKG>().Where(q => wipIDs.Contains(q.WIP_ID)).ToList(); db.Deleteable(curpkg).ExecuteCommand(); var pkgs = new List<MES_WIP_PKG>(); do { var parentSns = curpkg.Where(q => !q.PARENT_SN.IsNullOrEmpty()).Select(q => q.PARENT_SN).Distinct(); curpkg = db.Queryable<MES_WIP_PKG>().Where(q => parentSns.Contains(q.SN)).ToList(); foreach (var pkg in curpkg) { pkg.QTY = db.Queryable<MES_WIP_PKG>().Where(q => q.PARENT_SN == pkg.SN).Sum(q => q.QTY); pkgs.Add(pkg); } } while (curpkg.Any()); db.Updateable(curpkg, user).ExecuteCommand(); //MES_WIP_DFT,在上仓库装配和维修之前,先把不良记录标记为已处理 db.Updateable<MES_WIP_DFT>(user) .SetColumns(q => q.STATUS == MES_WIP_DFT.STATUSs.Resolved.GetValue()) .Where(q => q.WORK_ORDER == wo.ORDER_NO && wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); }); if (!dbTran.IsSuccess) { //抛出异常 throw dbTran.ErrorException; } return action; } #endregion /// <summary> Tiger.Business.MES/Transaction/CollectNode.cs
@@ -268,6 +268,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, Tiger.Business.MES/Transaction/PackingNode.cs
@@ -308,6 +308,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 +671,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) Tiger.Business.MES/Transaction/TestNode.cs
@@ -1,13 +1,6 @@ using Rhea.Common; using Tiger.IBusiness; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading; using System.Threading.Tasks; using Tiger.IBusiness; using Tiger.Model; using Tiger.Model.Entitys.MES.Position; @@ -269,6 +262,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, @@ -413,8 +407,16 @@ LOCK_BATCH = wipSN.LOCK_BATCH, WIP_ID = wipSN.ID, }; wipSN.Defects.Add(defect); CurDefects.Add(defect); } } //产品被判断不良后下线,并从工单中移除正在生产的条码 if (CurDefects.Any() && curNodeSetting.IF_DFT_OFFLINE == "Y") { woStatus.Data.ShortMsg = new("产品下线", ShortMessage.Types.Error); return OfflineIfDefect(action, wipSNs, input.Locale); } //工单开工 @@ -622,7 +624,7 @@ SaveStepsCommitActionToDB(endAction); //保存成功,返回过站消息 CurOperInfo(locale).InputQty += CurWipSNs.Count; operInfo.InputQty += CurWipSNs.Count; action.Data.OperInfo = operInfo; action.Data.ShortMsg = new(CurWipSNs.Any(q => q.DFT_FLAG == "Y") ? "不良过站" : "良品过站", ShortMessage.Types.Success); //action.LocaleMsg = new($"工单[{CurWipSN.WORK_ORDER}]的条码[{CurWipSN.SN}]在岗位[{CurWipSN.POST_CODE}]工序[{CurWipSN.NODE_NAME}]过站成功,状态[{CurWipSN.STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()}]"); @@ -640,6 +642,75 @@ } /// <summary> /// 产品被判断不良后下线 /// </summary> /// <param name="action"></param> /// <returns></returns> public ApiAction<SubmitOutput> OfflineIfDefect(ApiAction<SubmitOutput> action, List<MES_WIP_DATA> wipSNs, string locale) { var operInfo = SetOperNodeInfo(CurOperInfo(locale)); operInfo.CurNode = wipSNs.FirstOrDefault()?.NODE_NAME; operInfo.NextNode = "下线退库"; //更新工单条码明细信息 var woSNs = CurBatch.WoSNs.Where(q => wipSNs.Any(w => q.WIP_ID == w.ID)).ToList(); foreach (var woSN in woSNs) { woSN.STATUS = BIZ_MES_WO_SN.STATUSs.Offline.GetValue(); } //条码下线 foreach (var wipSN in wipSNs) { wipSN.STATUS = MES_WIP_DATA.STATUSs.Offline.GetValue(); wipSN.UNBIND_FLAG = "Y"; } var wipHiss = new List<MES_WIP_HIS>(); foreach (var wipSN in wipSNs) { var his = new MES_WIP_HIS(wipSN, $"工单[{wipSN.WORK_ORDER}]条码[{wipSN.SN}]在岗位[{wipSN.POST_CODE}]工序[{wipSN.NODE_NAME}]因不良[{wipSN.Defects.FirstOrDefault()?.DFT_NAME}]下线(TransId: {TransID} )"); wipSN.History.Add(his); wipHiss.Add(his); } //创建变量克隆对象用于传入DBSubmitAction中保存当前需要暂存的数据值 var _woSns = woSNs.Clone(); var _wipSns = wipSNs.Clone(); var _wipHiss = wipHiss.Clone(); var _defect = CurDefects.Clone(); //使用统一的事务DB对象 var db = GetCommitDB(); //保存数据库 var dbTran = db.UseTran(() => { //数据保存逻辑 db.Storageable(_woSns, UserCode).ExecuteCommand(); db.Storageable(_wipSns, UserCode).ExecuteCommand(); db.Storageable(_wipHiss, UserCode).ExecuteCommand(); db.Storageable(_defect, UserCode).ExecuteCommand(); }); if (!dbTran.IsSuccess) { //抛出异常 throw dbTran.ErrorException; } //从工单中移除正在生产的条码 CurBatch.RemoveWipSn(wipSNs, UserCode); //保存成功,返回过站消息 action.Data.OperInfo = operInfo; action.Data.ShortMsg = new("下线退库", ShortMessage.Types.Warning); //action.LocaleMsg = new($"工单[0]的条码[1]在岗位[2]工序[3]因不良[4]下线,状态[5]"); action.LocaleMsg = new("MES.Transaction.TestNode.OfflineIfDefect", wipSNs.First().WORK_ORDER, CurSN, wipSNs.First().POST_CODE, wipSNs.First().NODE_NAME, wipSNs.First().Defects.FirstOrDefault()?.DFT_NAME, wipSNs.First().STATUS.GetEnumDesc<MES_WIP_DATA.STATUSs>()); //重置工序 ResetNode(); return action; } /// <summary> /// 测试工序:获取工序不良代码 /// </summary> /// <returns></returns> Tiger.Business.MES/Transaction/YadaPacking.cs
@@ -323,6 +323,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, @@ -685,7 +686,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) Tiger.Business.MES/WorkAction/PackingAction.cs
@@ -895,28 +895,28 @@ var actID = _pkgList.First().ACT_ID; var wo = _pkgList.First().WORK_ORDER; //包装信息保存到在制品信息表 db.Updateable<MES_WIP_DATA>() db.Updateable<MES_WIP_DATA>(CurPosition.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) .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.ID)) .ExecuteCommand(); //包装信息保存到生产过程记录 db.Updateable<MES_WIP_HIS>() db.Updateable<MES_WIP_HIS>(CurPosition.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) .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); //包装信息保存到生产行为记录 db.Updateable<MES_WIP_ACT>() db.Updateable<MES_WIP_ACT>(CurPosition.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) .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); //包装信息保存到工单条码明细表 db.Updateable<BIZ_MES_WO_SN>() db.Updateable<BIZ_MES_WO_SN>(CurPosition.UserCode) .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN) .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.WIP_ID)) @@ -945,7 +945,7 @@ var actID = _pkgList.First(q => !q.WIP_ID.IsNullOrEmpty()).ACT_ID; var wo = _pkgList.First(q => !q.WIP_ID.IsNullOrEmpty()).WORK_ORDER; //包装信息保存到在制品信息表 db.Updateable<MES_WIP_DATA>() db.Updateable<MES_WIP_DATA>(CurPosition.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) @@ -953,20 +953,20 @@ .ExecuteCommand(); //包装信息保存到生产过程记录 var endOperCode = CurPkg.IsReachedEndNode ? "EndNode" : "NotReachedEndNode"; db.Updateable<MES_WIP_HIS>() db.Updateable<MES_WIP_HIS>(CurPosition.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) .Where(q => q.WORK_ORDER == wo && (q.NODE_ID == nodeID || q.OPER_CODE == endOperCode) && wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); //包装信息保存到生产行为记录 db.Updateable<MES_WIP_ACT>() db.Updateable<MES_WIP_ACT>(CurPosition.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) .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && wipIDs.Contains(q.WIP_ID)) .ExecuteCommand(); db.Updateable<MES_WIP_ACT>() db.Updateable<MES_WIP_ACT>(CurPosition.UserCode) .SetColumns(q => q.ACT_VALUE_1 == (CurPkg.IsFinished ? "Y" : "N")) .SetColumns(q => q.ACT_VALUE_2 == CurPkg.ToJson()) .SetColumns(q => q.ACT_VALUE_3 == (CurPkg.IsFinished ? LabelDic[CurPkg.Item.PKG_LEVEL].ToJson() : "")) @@ -974,7 +974,7 @@ .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == actID && q.WIP_ID == _lastWipID) .ExecuteCommand(); var InStoreLabel = CurPkg.IsFinished ? CurPkg.InStoreLabel?.ToJson() : ""; db.Updateable<MES_WIP_ACT>() db.Updateable<MES_WIP_ACT>(CurPosition.UserCode) .SetColumns(q => q.ACT_VALUE_1 == (CurPkg.IsFinished ? "Y" : "N")) .SetColumns(q => q.ACT_VALUE_2 == CurPkg.ToJson()) .SetColumns(q => q.ACT_VALUE_3 == InStoreLabel) @@ -982,7 +982,7 @@ .Where(q => q.WORK_ORDER == wo && q.NODE_ID == nodeID && q.ACT_ID == CurPkg.InStoreActID && q.WIP_ID == _lastWipID) .ExecuteCommand(); //包装信息保存到工单条码明细表 db.Updateable<BIZ_MES_WO_SN>() db.Updateable<BIZ_MES_WO_SN>(CurPosition.UserCode) .SetColumns(q => q.TRAY_SN == CurPkg.Item.Package.SN) .SetColumns(q => q.OUTER_SN == CurPkg.Item.Package.SN) .Where(q => q.WORK_ORDER == wo && wipIDs.Contains(q.WIP_ID)) Tiger.Model.Net/Entitys/MES/BIZ_MES_WO_SN.cs
@@ -64,9 +64,9 @@ [DisplayName("物料编码")] public string ITEM_CODE { get; set; } /// <summary> /// 状态(0NotInput未投入|1Inputed已投入|2Finished已完工|3Scrap已报废) /// 状态(0NotInput未投入|1Inputed已投入|2Finished已完工|3Offline异常下线|4Scrap已报废) /// </summary> [DisplayName("状态(0NotInput未投入|1Inputed已投入|2Finished已完工|3Scrap已报废)")] [DisplayName("状态(0NotInput未投入|1Inputed已投入|2Finished已完工|3Offline异常下线|4Scrap已报废)")] public int STATUS { get; set; } /// <summary> /// 备注 @@ -108,7 +108,7 @@ */ /// <summary> /// 枚举:状态(0NotInput未投入|1Inputed已投入|2Finished已完工|3Scrap已报废) /// 枚举:状态(0NotInput未投入|1Inputed已投入|2Finished已完工|3Offline异常下线|4Scrap已报废) /// </summary> public enum STATUSs { @@ -118,8 +118,10 @@ Inputed = 1, [Description("已完工")] Finished = 2, [Description("异常下线")] Offline = 3, [Description("已报废")] Scrap = 3, Scrap = 4, } #endregion Tiger.Model.Net/Entitys/MES/MES_WIP_ACT.cs
@@ -39,9 +39,9 @@ [DisplayName("过站条码")] public string SN { get; set; } /// <summary> /// 状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货) /// 状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废) /// </summary> [DisplayName("状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货)")] [DisplayName("状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废)")] public int STATUS { get; set; } /// <summary> /// 物料编码 @@ -248,7 +248,7 @@ */ /// <summary> /// 枚举:状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货) /// 枚举:状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废) /// </summary> public enum STATUSs { @@ -264,14 +264,16 @@ Repair = 4, [Description("已完工")] Finished = 5, [Description("已报废")] Scrap = 6, [Description("已入库")] InStorage = 7, InStorage = 6, [Description("已拒收")] Reject = 8, Reject = 7, [Description("已出货")] Shipped = 9, Shipped = 8, [Description("异常下线")] Offline = 9, [Description("已报废")] Scrap = 10, } /// <summary> Tiger.Model.Net/Entitys/MES/MES_WIP_DATA.cs
@@ -29,9 +29,9 @@ [DisplayName("过站条码")] public string SN { get; set; } /// <summary> /// 状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货) /// 状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废) /// </summary> [DisplayName("状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货)")] [DisplayName("状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废))")] public int STATUS { get; set; } /// <summary> /// 物料编码 @@ -108,6 +108,11 @@ /// </summary> [DisplayName("返工标记")] public string REWORK_FLAG { get; set; } /// <summary> /// 解绑标记(因异常下线导致当前记录从工单生产数据中移除,不参与工艺流程计算和数据统计) /// </summary> [DisplayName("解绑标记(因异常下线导致当前记录从工单生产数据中移除,不参与工艺流程计算和数据统计)")] public string UNBIND_FLAG { get; set; } /// <summary> /// 是否完工 /// </summary> @@ -258,7 +263,7 @@ [Navigate(NavigateType.OneToMany, nameof(MES_WIP_HIS.WIP_ID), nameof(ID), "GHOST_ROW = 0")]//ClassA表中的MES_WIP_DATAId public List<MES_WIP_HIS> _History { get; set; }//注意禁止手动赋值,只能是null [SugarColumn(IsIgnore = true)] public List<MES_WIP_HIS> History => _History ?? new List<MES_WIP_HIS>(); public List<MES_WIP_HIS> History => _History.Where(q => q.UNBIND_FLAG != "Y").ToList() ?? new List<MES_WIP_HIS>(); [Navigate(NavigateType.OneToMany, nameof(MES_WIP_DFT.WIP_ID), nameof(ID), "GHOST_ROW = 0")]//ClassA表中的MES_WIP_DATAId public List<MES_WIP_DFT> _Defects { get; set; }//注意禁止手动赋值,只能是null [SugarColumn(IsIgnore = true)] @@ -277,7 +282,7 @@ */ /// <summary> /// 枚举:状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货) /// 枚举:状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废) /// </summary> public enum STATUSs { @@ -293,14 +298,16 @@ Repair = 4, [Description("已完工")] Finished = 5, [Description("已报废")] Scrap = 6, [Description("已入库")] InStorage = 7, InStorage = 6, [Description("已拒收")] Reject = 8, Reject = 7, [Description("已出货")] Shipped = 9, Shipped = 8, [Description("异常下线")] Offline = 9, [Description("已报废")] Scrap = 10, } /// <summary> Tiger.Model.Net/Entitys/MES/MES_WIP_DFT.cs
@@ -34,9 +34,9 @@ [DisplayName("过站条码")] public string SN { get; set; } /// <summary> /// 状态(0WaitHandle待处理|1Repairing维修中|2Resolved已处理) /// 状态(0WaitHandle待处理|1Repairing维修中|2Resolved已处理|3Scrap已报废) /// </summary> [DisplayName("状态(0WaitHandle待处理|1Repairing维修中|2Resolved已处理)")] [DisplayName("状态(0WaitHandle待处理|1Repairing维修中|2Resolved已处理|3Scrap已报废)")] public int STATUS { get; set; } /// <summary> /// 物料编码 @@ -263,7 +263,7 @@ */ /// <summary> /// 枚举:状态(0WaitHandle待处理|1Repairing维修中|2Resolved已处理) /// 枚举:状态(0WaitHandle待处理|1Repairing维修中|2Resolved已处理|3Scrap已报废) /// </summary> public enum STATUSs { @@ -273,6 +273,8 @@ Repairing = 1, [Description("已处理")] Resolved = 2, [Description("已报废")] Scrap = 3, } /// <summary> Tiger.Model.Net/Entitys/MES/MES_WIP_HIS.cs
@@ -52,6 +52,7 @@ SEGMENT = data.SEGMENT; HOLD_FLAG = data.HOLD_FLAG; REWORK_FLAG = data.REWORK_FLAG; UNBIND_FLAG = data.UNBIND_FLAG; FINISHED_FLAG = data.FINISHED_FLAG; DFT_FLAG = data.DFT_FLAG; DFT_COUNT = data.DFT_COUNT; @@ -92,9 +93,9 @@ [DisplayName("过站条码")] public string SN { get; set; } /// <summary> /// 状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货) /// 状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废) /// </summary> [DisplayName("状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货)")] [DisplayName("状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废)")] public int STATUS { get; set; } /// <summary> /// 物料编码 @@ -171,6 +172,11 @@ /// </summary> [DisplayName("返工标记")] public string REWORK_FLAG { get; set; } /// <summary> /// 解绑标记(因异常下线导致当前记录从工单生产数据中移除,不参与工艺流程计算和数据统计) /// </summary> [DisplayName("解绑标记(因异常下线导致当前记录从工单生产数据中移除,不参与工艺流程计算和数据统计)")] public string UNBIND_FLAG { get; set; } /// <summary> /// 是否完工 /// </summary> @@ -341,7 +347,7 @@ */ /// <summary> /// 枚举:状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6Scrap已报废|7InStorage已入库|8Reject已拒收|9Shipped已出货) /// 枚举:状态(0Init初始化|1Input已投入|2OK良品过站|3NG不良过站|4Repair维修中|5Finished已完工|6InStorage已入库|7Reject已拒收|8Shipped已出货|9Offline异常下线|10Scrap已报废) /// </summary> public enum STATUSs { @@ -357,14 +363,16 @@ Repair = 4, [Description("已完工")] Finished = 5, [Description("已报废")] Scrap = 6, [Description("已入库")] InStorage = 7, InStorage = 6, [Description("已拒收")] Reject = 8, Reject = 7, [Description("已出货")] Shipped = 9, Shipped = 8, [Description("异常下线")] Offline = 9, [Description("已报废")] Scrap = 10, } /// <summary>