using System; using System.Collections.Generic; using System.Linq; using System.Text; using ICSSoft.Frame.Data.Entity; using ICSSoft.Base.Config.AppConfig; namespace ICSSoft.Frame.Data.DAL { public class ICSLOTONWIPDetailDAL { //public class OrdinalComparer : System.Collections.Generic.IComparer //{ // public int Compare(DateTime x, DateTime y) // { // return DateTime.Compare(x, y); // } //} public static void Suspend(string dsconn, ICSLOTONWIPDetail wipDetailInfo) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { #region 更新ICSLOTONWIPDetail表状态 //bool isnew=false; //var wipDetailline = db.ICSLOTONWIPDetail.OrderByDescending(a => a.MTIME) // .FirstOrDefault(a => a.LOTNO == wipDetailInfo.LOTNO // && a.ROUTECODE == wipDetailInfo.ROUTECODE // && a.OPCODE == wipDetailInfo.OPCODE // && a.MUSER == wipDetailInfo.MUSER // && a.CollectStatus != "COLLECT_BEGIN" // && a.WorkPoint == wipDetailInfo.WorkPoint); //if (wipDetailline == null) //{ // isnew = true; // wipDetailline == new ICSLOTONWIPDetail(); // wipDetailline.ID = wipDetailInfo.ID; //} //wipDetailline.AutoStatus = wipDetailInfo.AutoStatus; //wipDetailline.BeginDateTime = wipDetailInfo.BeginDateTime; //wipDetailline.CollectStatus = wipDetailInfo.CollectStatus; //wipDetailline.DeptNo = wipDetailInfo.DeptNo; //wipDetailline.EATTRIBUTE1 = wipDetailInfo.EATTRIBUTE1; //wipDetailline.ECCode = wipDetailInfo.ECCode; //wipDetailline.ECDesc = wipDetailInfo.ECDesc; //wipDetailline.EndDateTime = wipDetailInfo.EndDateTime; //wipDetailline.ITEMCODE = wipDetailInfo.ITEMCODE; //wipDetailline.LOTNO = wipDetailInfo.LOTNO; //wipDetailline.LOTSEQ = wipDetailInfo.LOTSEQ; //wipDetailline.MTIME = wipDetailInfo.MTIME; //wipDetailline.MUSER = wipDetailInfo.MUSER; //wipDetailline.MUSERName = wipDetailInfo.MUSERName; //wipDetailline.OPCODE = wipDetailInfo.OPCODE; //wipDetailline.ROUTECODE = wipDetailInfo.ROUTECODE; //wipDetailline.Status = wipDetailInfo.Status; //wipDetailline.TransNO = wipDetailInfo.TransNO; //wipDetailline.Type = wipDetailInfo.Type; //wipDetailline.WorkCenter = wipDetailInfo.WorkCenter; //wipDetailline.WorkPoint = wipDetailInfo.WorkPoint; //if (isnew) //{ // db.ICSLOTONWIPDetail.InsertOnSubmit(line); //} var line = db.ICSLOTONWIPDetail.FirstOrDefault(a => a.ID == wipDetailInfo.ID); if (line == null) { throw new Exception(wipDetailInfo.ID + "已被删除!"); } line.CollectStatus = wipDetailInfo.CollectStatus; line.Status = "更新"; db.SubmitChanges(); #endregion db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } public static void Suspend(ICSLOTONWIPDetail wipDetailInfo, ICSLOTPAUSE ztinfo, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { #region ICSLOTONWIPDetail表 var wipDetailLine = db.ICSLOTONWIPDetail.SingleOrDefault(a => a.ID == wipDetailInfo.ID); if (wipDetailLine == null) { throw new Exception("工序采集记录子表数据错误,本次开工记录不存在,暂停失败!"); } wipDetailLine.CollectStatus = wipDetailInfo.CollectStatus; db.SubmitChanges(); #endregion #region ICSLOTPAUSE表 int notFinish = db.ICSLOTPAUSE.Where(a => a.WIPDetailID == wipDetailInfo.ID && a.BeginTime != null && a.EndTime == null).Count(); if (notFinish > 0) { throw new Exception("上次暂停还未结束,你的账号是否在多处登录报工界面并对同一[跟踪单-工序]进行操作?请退出所有此[跟踪单-工序]的报工,重新登陆"); } int seq = db.ICSLOTPAUSE.Where(a => a.LOTNO == ztinfo.LOTNO && a.ROUTECODE == ztinfo.ROUTECODE && a.OPCODE == ztinfo.OPCODE && a.MUSER == ztinfo.MUSER && a.WorkPoint == ztinfo.WorkPoint).Count(); ztinfo.SEQ = seq + 1;//暂停纪录序号 db.ICSLOTPAUSE.InsertOnSubmit(ztinfo); db.SubmitChanges(); #endregion db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } public static void Continue(string ID_wipDetail, string ID_PAUSE, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { #region ICSLOTONWIPDetail表 var wipDetailLine = db.ICSLOTONWIPDetail.SingleOrDefault(a => a.ID == ID_wipDetail); if (wipDetailLine == null) { throw new Exception("工序采集记录子表数据错误,本次开工记录不存在,[取消暂停]失败!"); } wipDetailLine.CollectStatus = "COLLECT_BEGIN"; db.SubmitChanges(); #endregion #region ICSLOTPAUSE表 var ztline = db.ICSLOTPAUSE.SingleOrDefault(a => a.ID == ID_PAUSE); if (ztline == null) { throw new Exception("暂停表数据获取错误,本次暂停记录不存在,[取消暂停]失败!"); } if (ztline.EndTime != null) { throw new Exception("本次暂停已结束,你的账号是否在多处登录报工界面并对同一[跟踪单-工序]进行操作?请退出所有此[跟踪单-工序]的报工,重新登陆"); } ztline.EndTime = DateTime.Now; db.SubmitChanges(); #endregion db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } public static void EndUserOP(ICSLOTONWIP onwip, ICSLOTONWIPDetail detail, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { #region ICSLOTONWIP表 var lineOnwip = db.ICSLOTONWIP.SingleOrDefault(a => a.LOTNO == onwip.LOTNO && a.OPCODE == onwip.OPCODE && a.WorkPoint == onwip.WorkPoint); if (lineOnwip == null) { throw new Exception("跟踪单-工序状态数据获取错误,[完工]失败!"); } lineOnwip.ACTION = onwip.ACTION; lineOnwip.GOODQTY = onwip.GOODQTY; lineOnwip.NGQTY = onwip.NGQTY; db.SubmitChanges(); #endregion #region ICSLOTONWIPDetail表 var lineWipDetail = db.ICSLOTONWIPDetail.SingleOrDefault(a => a.ID == detail.ID); if (lineWipDetail == null) { throw new Exception("跟踪单-工序子表数据错误,[完工]失败!"); } lineWipDetail.OKQty = detail.OKQty; lineWipDetail.NGQty = detail.NGQty; lineWipDetail.EndDateTime = DateTime.Now; lineWipDetail.CollectStatus = detail.CollectStatus; lineWipDetail.SEGCODE = detail.SEGCODE; lineWipDetail.SGroup = detail.SGroup; db.SubmitChanges(); #endregion #region ICSLOTSIMULATION表 var lineSim = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == onwip.LOTNO && a.WorkPoint == onwip.WorkPoint); if (lineSim == null) { throw new Exception("跟踪单状态数据获取错误,[完工]失败!"); } if (lineOnwip.EATTRIBUTE1 == "串行") { lineSim.GOODQTY = lineOnwip.GOODQTY; } if (detail.NGQty > 0) { lineSim.LACTION = "NG"; lineSim.PRODUCTSTATUS = "NG"; lineSim.ACTIONLIST = "NG"; } db.SubmitChanges(); #endregion db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } public static int QueryAllOPUserState(string lot, string route, string op, string workpoint, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); try { var wipDetailLine = db.ICSLOTONWIPDetail.Select(a => a.LOTNO == lot && a.ROUTECODE == route && a.OPCODE == op && a.WorkPoint == workpoint); return wipDetailLine.Count(); } catch (Exception ex) { throw ex; } } public static void ReStart(ICSLOTONWIPDetail detail, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { db.ICSLOTONWIPDetail.InsertOnSubmit(detail); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } public static void CollectOPStart(ICSLOTSIMULATION siminfo, ICSLOTONWIP wipinfo, ICSLOTONWIPDetail wipDetailInfo, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { #region ICSLOTSIMULATION表 if (siminfo != null) { //var simline = new ICSLOTSIMULATION(); //simline.ID = siminfo.ID; //simline.LOTNO = siminfo.LOTNO; //simline.LOTSEQ = siminfo.LOTSEQ; //simline.LOTQTY = siminfo.LOTQTY; //simline.MOSEQ = siminfo.MOSEQ; //simline.MOCODE = siminfo.MOCODE; //simline.GOODQTY = siminfo.GOODQTY; //simline.NGQTY = siminfo.NGQTY; //simline.LOTStatus = siminfo.LOTStatus; //simline.MODELCODE = siminfo.MODELCODE; //simline.ITEMCODE = siminfo.ITEMCODE; //simline.ROUTECODE = siminfo.ROUTECODE; //simline.OPCODE = siminfo.OPCODE; //simline.EQPCODE = siminfo.EQPCODE; //simline.PRODUCTSTATUS = siminfo.PRODUCTSTATUS; //simline.LACTION = siminfo.LACTION; //simline.ACTIONLIST = siminfo.ACTIONLIST; //simline.NGTIMES = siminfo.NGTIMES; //simline.ISCOM = siminfo.ISCOM; //simline.ISHOLD = siminfo.ISHOLD; //simline.CollectStatus = siminfo.CollectStatus; //simline.BeginTime = siminfo.BeginTime; //simline.EndTime = siminfo.EndTime; //simline.MUSER = siminfo.MUSER; //simline.MUSERName = siminfo.MUSERName; //simline.MTIME = siminfo.MTIME; //simline.WorkPoint = siminfo.WorkPoint; //simline.OPList = siminfo.OPList; //simline.OPListAttr = siminfo.OPListAttr; //simline.EATTRIBUTE1 = siminfo.EATTRIBUTE1; //simline.EATTRIBUTE2 = siminfo.EATTRIBUTE2; db.ICSLOTSIMULATION.InsertOnSubmit(siminfo); db.SubmitChanges(); } #endregion #region ICSLOTONWIP表 if (wipinfo != null) { //var wipline = new ICSLOTONWIP(); //wipline.ID = wipinfo.ID; //wipline.LOTNO = wipinfo.LOTNO; //wipline.LOTSEQ = wipinfo.LOTSEQ; //wipline.MOCODE = wipinfo.MOCODE; //wipline.MODELCODE = wipinfo.MODELCODE; //wipline.ITEMCODE = wipinfo.ITEMCODE; ; //wipline.ROUTECODE = wipinfo.ROUTECODE; //wipline.OPCODE = wipinfo.OPCODE; //wipline.EQPCODE = wipinfo.EQPCODE; //wipline.SHIFTTYPECODE = wipinfo.SHIFTTYPECODE; //wipline.ACTION = wipinfo.ACTION; //wipline.ACTIONRESULT = wipinfo.ACTIONRESULT; //wipline.NGTIMES = wipinfo.NGTIMES; //wipline.MOSEQ = wipinfo.MOSEQ; //wipline.Processed = wipinfo.Processed; //wipline.LOTQTY = wipinfo.LOTQTY; //wipline.GOODQTY = wipinfo.GOODQTY; //wipline.NGQTY = wipinfo.NGQTY; //wipline.UserCodeBegin = wipinfo.UserCodeBegin; //wipline.UserCodeEnd = wipinfo.UserCodeEnd; //wipline.BeginTime = wipinfo.BeginTime; //wipline.EndTime = wipinfo.EndTime; //wipline.MUSER = wipinfo.MUSER; //wipline.MUSERName = wipinfo.MUSERName; //wipline.MTIME = wipinfo.MTIME; //wipline.WorkPoint = wipinfo.WorkPoint; //wipline.EATTRIBUTE1 = wipinfo.EATTRIBUTE1; var lineSim = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == wipinfo.LOTNO && a.LOTSEQ == wipinfo.LOTSEQ && a.WorkPoint == wipinfo.WorkPoint); if (lineSim.OPListAttr == "并行" && wipinfo.EATTRIBUTE1 == "并行") { lineSim.OPList += ("," + wipinfo.OPSEQ.ToString()); } else { lineSim.OPList = wipinfo.OPSEQ.ToString(); lineSim.OPListAttr = wipinfo.EATTRIBUTE1; } lineSim.LOTQTY = Convert.ToDecimal(wipinfo.LOTQTY); db.SubmitChanges(); db.ICSLOTONWIP.InsertOnSubmit(wipinfo); db.SubmitChanges(); } #endregion #region ICSLOTONWIPDetail表 if (wipDetailInfo != null) { //ICSLOTONWIPDetail wipDetailline = new ICSLOTONWIPDetail(); //wipDetailline.AutoStatus = wipDetailInfo.AutoStatus; //wipDetailline.BeginDateTime = wipDetailInfo.BeginDateTime; //wipDetailline.CollectStatus = wipDetailInfo.CollectStatus; //wipDetailline.DeptNo = wipDetailInfo.DeptNo; //wipDetailline.EATTRIBUTE1 = wipDetailInfo.EATTRIBUTE1; //wipDetailline.ECCode = wipDetailInfo.ECCode; //wipDetailline.ECDesc = wipDetailInfo.ECDesc; //wipDetailline.EndDateTime = wipDetailInfo.EndDateTime; //wipDetailline.ID = wipDetailInfo.ID; //wipDetailline.ITEMCODE = wipDetailInfo.ITEMCODE; //wipDetailline.LOTNO = wipDetailInfo.LOTNO; //wipDetailline.LOTSEQ = wipDetailInfo.LOTSEQ; //wipDetailline.MTIME = wipDetailInfo.MTIME; //wipDetailline.MUSER = wipDetailInfo.MUSER; //wipDetailline.MUSERName = wipDetailInfo.MUSERName; //wipDetailline.OPCODE = wipDetailInfo.OPCODE; //wipDetailline.ROUTECODE = wipDetailInfo.ROUTECODE; //wipDetailline.Status = wipDetailInfo.Status; //wipDetailline.TransNO = wipDetailInfo.TransNO; //wipDetailline.EQPCode = wipDetailInfo.EQPCode; //wipDetailline.EQPDesc = wipDetailInfo.EQPDesc; //wipDetailline.Type = wipDetailInfo.Type; //wipDetailline.WorkCenter = wipDetailInfo.WorkCenter; //wipDetailline.WorkPoint = wipDetailInfo.WorkPoint; db.ICSLOTONWIPDetail.InsertOnSubmit(wipDetailInfo); db.SubmitChanges(); } #endregion db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } } }