using System; using System.Collections.Generic; using System.Linq; using System.Text; using ICSSoft.Frame.Data.Entity; using ICSSoft.Base.Config.AppConfig; using System.Data; using ICSSoft.Base.Config.DBHelper; using System.Data.SqlClient; using System.Security.Cryptography; using System.IO; namespace ICSSoft.Frame.Data.DAL { public class ICSMODAL { #region 0822 下发 #region 下发 public static void Sends(string mocode, string seqcode, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.MOCODE == mocode && a.MOSEQ == seqcode); line.MOSTATUS = "下发"; // line.SEGCODE = segcode; db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 判断工单途程是否存在(ICSMO2ROUTE,ICSITEM2ROUTE) //public static string hasROUTE(string moCode, string moseq,string itemCode, string dsconn) //{ // //try // //{ // // string sql = @"select * from ICSMO2ROUTE where MOCODE='" + moCode + "'"; // // sql = string.Format(sql); // // DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; // // if (dt.Rows.Count > 0) // // return "该工单" + moCode + "已经存在了工艺路线"; // // else // // { // // string sqlI = @"select * from ICSITEM2ROUTE where ITEMCODE='" + itemCode + "'"; // // sqlI = string.Format(sqlI); // // DataTable dtI = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sqlI).Tables[0]; // // if (dtI.Rows.Count > 0) // // return; // // else // // return; // // } // //} // //catch (Exception ex) // //{ // // throw ex; // //} //} #endregion #region 判断工单 途程是否存在 public static string IshasROUTE(string MOID, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO2ROUTE.Where(a => a.MOID == MOID); if (line != null && line.Count() > 0) { return line.First().ROUTECODE; } } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } return ""; } #endregion #region 判断默认途程是否存在 public static string hasIsRefROUTE(string itemCode, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSITEM2ROUTE.Where(a => a.ITEMCODE == itemCode && (a.ISREF == "是")); if (line != null && line.Count() > 0) { string routecode = line.First().ROUTECODE; var route = db.ICSROUTE.SingleOrDefault(a => a.ROUTECODE == routecode); if (route != null) { return route.ROUTECODE; } else { return null; } } else { return null; } } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 根据工单ID获取工单工艺路线信息 public static ICSMO2ROUTE selectmo2routebyid(string moid, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO2ROUTE.SingleOrDefault(a => a.MOID == moid); return line; } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 下发 public static void Send(List moinfolist, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (ICSMO moinfo in moinfolist) { var line = db.ICSMO.SingleOrDefault(a => a.MOCODE == moinfo.MOCODE && a.MOSEQ == moinfo.MOSEQ); line.MOSTATUS = "下发"; line.SendDATE = DateTime.Now; db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #endregion #region 新增和修改 public static void Add(List moInfoList, string moroute, string dsconn) { int flag = 0; string moid = ""; string mocode = ""; string itemcode = ""; string moseq = ""; FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (FormICSMOUIModel moInfo in moInfoList) { bool isNew = false; var line = db.ICSMO.SingleOrDefault(a => a.ID == moInfo.ID); if (line == null) { isNew = true; line = new ICSMO(); moid = AppConfig.GetGuid(); line.ID = moid; //line.MOCODE = moInfo.MOCODE; moseq = moInfo.MOSEQ; var mo = db.ICSMO.Where(a => a.MOCODE.Contains(moInfo.MOCODE) && a.MOTYPE == "1" && a.MOSEQ == moInfo.MOSEQ).OrderByDescending(a => a.MOCODE); if (mo != null && mo.Count() > 0) { string code = mo.FirstOrDefault().MOCODE; line.MOCODE = moInfo.MOCODE + "*" + (Convert.ToInt32(code.Substring(code.IndexOf("*") + 1)) + 1).ToString(); } else { line.MOCODE = moInfo.MOCODE + "*1"; } moInfo.MOCODE = line.MOCODE; line.MOBIOSVER = ""; line.MOPCBAVER = ""; line.CUSCODE = ""; line.CUSNAME = ""; line.CUSITEMCODE = ""; line.ORDERNO = ""; line.ORDERSEQ = 0; line.MOVER = ""; line.ISBOMPASS = ""; line.IDMERGERULE = Convert.ToDecimal(0); //line.MORELEASETIME = DateTime.Now; line.MOIMPORTTIME = DateTime.Now; line.ISCOMPARESOFT = 0; line.RMABILLCODE = ""; line.MOSEQ = line.MOSEQ; line.REMOCODE = ""; line.REMOITEMCODE = ""; line.REMOITEMDESC = ""; line.REMOLOTNO = ""; line.REMOENABLED = ""; line.MOOP = ""; line.ITEMDESC = ""; //line.MOPLANENDTIME = DateTime.Now; line.MOPLANLINE = ""; line.BackflushStorage = ""; line.WarningStopLine = ""; line.MOINPUTQTY = 0; line.MOSCRAPQTY = 0; line.MOACTQTY = 0; line.MOUSER = ""; line.MOACTSTARTDATE = DateTime.Now; line.MOACTENDDATE = DateTime.Now; line.MOTYPE = moInfo.MOTYPE; } #region mocode = moInfo.MOCODE; itemcode = moInfo.ITEMCODE; moseq = moInfo.MOSEQ; if (!string.IsNullOrEmpty(moInfo.ID)) moid = moInfo.ID; line.MOMEMO = moInfo.MOMEMO; line.MODESC = moInfo.MODESC; line.MOPLANQTY = moInfo.MOPLANQTY; line.MOPLANSTARTDATE = moInfo.MOPLANSTARTDATE; line.MOPLANENDDATE = moInfo.MOPLANENDDATE; line.FACTORY = moInfo.FACTORY; line.CUSORDERNO = moInfo.CUSORDERNO; line.MOUSER = moInfo.MOUSER; line.MODOWNDATE = moInfo.MODOWNDATE; line.MOSTATUS = moInfo.MOSTATUS; line.ISCONINPUT = moInfo.ISCONINPUT; line.ITEMCODE = moInfo.ITEMCODE; line.MOPENDINGCAUSE = moInfo.MOPENDINGCAUSE; line.OFFMOQTY = moInfo.OFFMOQTY; line.MOBOM = moInfo.MOBOM; line.MOSEQ = moInfo.MOSEQ; line.MOVER = moInfo.MOVER; line.MORemark = moInfo.MORemark; line.WorkPoint = AppConfig.WorkPointCode; line.MUSER = AppConfig.UserId; line.MUSERName = AppConfig.UserName; line.MTIME = DateTime.Now; line.MOUSER = moInfo.MOUSER; #endregion if (isNew) { flag = 1; db.ICSMO.InsertOnSubmit(line); } var line1 = db.ICSMO2ROUTE.Where(a => a.MOID == moInfo.ID); db.ICSMO2ROUTE.DeleteAllOnSubmit(line1); db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } if (!string.IsNullOrEmpty(moroute)) { AddMoRoute(moid, mocode, itemcode, moroute, dsconn, moseq); } } #endregion #region select public static ICSMO select(String guid, String Appconstr) { FramDataContext db = new FramDataContext(Appconstr); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.ID == guid); return (ICSMO)line; } catch (Exception ex) { throw new Exception(ex.Message); } } #endregion public static DataTable GetDetail(String code, String seq, String Appconstr) { try { string sql = @"SELECT a.ID, a.RouteCode, b.ITEMCODE FROM ICSMO2User a LEFT JOIN ICSMO b ON a.MOCODE=b.MOCODE AND a.MOSEQ=b.MOSEQ where a.MOCODE='{0}' AND a.MOSEQ='{1}' order by RouteCode"; sql = string.Format(sql, code, Convert.ToInt32(seq)); DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; return dt; } catch (Exception ex) { throw ex; } } #region 新增和修改 public static void AddMoRoute(string id, string mocode, string itemcode, string routecode, string dsconn, string moseq) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { FormICSMO2ROUTEUIModel model = new FormICSMO2ROUTEUIModel(); //string sqlone = @"select ID,MOCODE from ICSMO where MOCODE='" + mocode + "' and WorkPoint='" + AppConfig.WorkPointCode + "'"; //sqlone = string.Format(sqlone); //DataTable dataone = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sqlone).Tables[0]; //foreach (DataRow dr in dataone.Rows) //{ model.MOID = id; model.MOCODE = mocode; //} string sqltwo = @"select ID,ROUTECODE,ROUTETYPE from ICSROUTE where ROUTECODE='" + routecode + "' and WorkPoint='" + AppConfig.WorkPointCode + "'"; sqltwo = string.Format(sqltwo); DataTable datatwo = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sqltwo).Tables[0]; foreach (DataRow dr in datatwo.Rows) { model.ROUTEID = dr["ID"].ToString(); model.ROUTECODE = dr["ROUTECODE"].ToString(); model.ROUTETYPE = dr["ROUTETYPE"].ToString(); } // string sqlthree = @"select OBCODE,OPBOMVER // from ICSOPBOM // where ITEMCODE='" + itemcode + "' and OBROUTE='" + routecode + "' and OPBOMVER='" + bom + "' and WorkPoint='" + AppConfig.WorkPointCode + "'"; // sqlthree = string.Format(sqlthree); // DataTable datathree = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sqlthree).Tables[0]; // foreach (DataRow dr in datathree.Rows) // { //model.OPBOMCODE = dr["OBCODE"].ToString(); //model.OPBOMVER = dr["OPBOMVER"].ToString(); model.OPBOMCODE = "001"; model.OPBOMVER = "001"; //} string sqlfour = @"select ISREF from ICSITEM2ROUTE where ITEMCODE='" + itemcode + "' and ROUTECODE='" + routecode + "' and WorkPoint='" + AppConfig.WorkPointCode + "'"; sqlfour = string.Format(sqlfour); DataTable datafour = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sqlfour).Tables[0]; foreach (DataRow dr in datafour.Rows) { model.ISMROUTE = dr["ISREF"].ToString(); } ICSMO2ROUTE line = new ICSMO2ROUTE(); line.MOID = model.MOID; line.ROUTEID = model.ROUTEID; line.MOCODE = model.MOCODE; line.ROUTECODE = model.ROUTECODE; line.ROUTETYPE = model.ROUTETYPE; line.OPBOMCODE = model.OPBOMCODE; line.OPBOMVER = model.OPBOMVER; line.ISMROUTE = model.ISMROUTE; line.WorkPoint = AppConfig.WorkPointCode; line.MUSER = AppConfig.UserId; line.MUSERName = AppConfig.UserName; line.MTIME = DateTime.Now; line.EATTRIBUTE1 = moseq; db.ICSMO2ROUTE.InsertOnSubmit(line); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 通过guid查询 public static List SearchMOInfoByCode(string moid, string dsconn) { List returnmmo = new List(); string sql = @" select MOCODE, MOMEMO, MOTYPE, MODESC, MOBIOSVER, MOPCBAVER, MOPLANQTY, MOINPUTQTY, MOSCRAPQTY, MOACTQTY, MOPLANSTARTDATE, MOPLANENDDATE, MOACTSTARTDATE, MOACTENDDATE, FACTORY, CUSCODE, CUSNAME, CUSORDERNO, CUSITEMCODE, ORDERNO, ORDERSEQ, MOUSER, MODOWNDATE, MOSTATUS, MOVER, ISCONINPUT, ISBOMPASS, IDMERGERULE, WorkPoint, MUSER, MUSERName, EATTRIBUTE1, ITEMCODE, MOPENDINGCAUSE, MOIMPORTTIME, OFFMOQTY, ISCOMPARESOFT, RMABILLCODE, MOSEQ, REMOCODE, REMOITEMCODE, REMOITEMDESC, REMOLOTNO, REMOENABLED, MOBOM, MOOP, ITEMDESC, MOPLANLINE, BackflushStorage, WarningStopLine, MORemark, EATTRIBUTE4 from ICSMO where ID='{0}'"; sql = string.Format(sql, moid); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; foreach (DataRow dr in dt.Rows) { FormICSMOUIModel returnInfo = new FormICSMOUIModel(); returnInfo.MOCODE = dr["MOCODE"].ToString(); returnInfo.MOMEMO = dr["MOMEMO"].ToString(); returnInfo.MOTYPE = dr["MOTYPE"].ToString(); returnInfo.MODESC = dr["MODESC"].ToString(); returnInfo.MOBIOSVER = dr["MOBIOSVER"].ToString(); returnInfo.MOPCBAVER = dr["MOPCBAVER"].ToString(); returnInfo.MOPLANQTY = Convert.ToDecimal(dr["MOPLANQTY"].ToString()); returnInfo.MOINPUTQTY = Convert.ToDecimal(dr["MOINPUTQTY"].ToString()); returnInfo.MOSCRAPQTY = Convert.ToDecimal(dr["MOSCRAPQTY"].ToString()); returnInfo.MOACTQTY = Convert.ToDecimal(dr["MOACTQTY"].ToString()); returnInfo.MOPLANSTARTDATE = Convert.ToDateTime(dr["MOPLANSTARTDATE"].ToString()); returnInfo.MOPLANENDDATE = Convert.ToDateTime(dr["MOPLANENDDATE"].ToString()); returnInfo.MOACTSTARTDATE = Convert.ToDateTime(dr["MOACTSTARTDATE"].ToString()); returnInfo.MOACTENDDATE = Convert.ToDateTime(dr["MOACTENDDATE"].ToString()); returnInfo.FACTORY = dr["FACTORY"].ToString(); returnInfo.CUSCODE = dr["CUSCODE"].ToString(); returnInfo.CUSNAME = dr["CUSNAME"].ToString(); returnInfo.CUSORDERNO = dr["CUSORDERNO"].ToString(); returnInfo.CUSITEMCODE = dr["CUSITEMCODE"].ToString(); returnInfo.ORDERNO = dr["ORDERNO"].ToString(); returnInfo.ORDERSEQ = Convert.ToInt32(dr["ORDERSEQ"].ToString()); returnInfo.MOUSER = dr["MOUSER"].ToString(); returnInfo.MODOWNDATE = Convert.ToDateTime(dr["MODOWNDATE"].ToString()); returnInfo.MOSTATUS = dr["MOSTATUS"].ToString(); returnInfo.MOVER = dr["MOVER"].ToString(); returnInfo.ISCONINPUT = dr["ISCONINPUT"].ToString(); returnInfo.ISBOMPASS = dr["ISBOMPASS"].ToString(); if (!string.IsNullOrWhiteSpace(dr["IDMERGERULE"].ToString())) { returnInfo.IDMERGERULE = Convert.ToDecimal(dr["IDMERGERULE"].ToString()); } returnInfo.ITEMCODE = dr["ITEMCODE"].ToString(); //returnInfo.MORELEASETIME = Convert.ToDateTime(dr["MORELEASETIME"].ToString()); returnInfo.MOPENDINGCAUSE = dr["MOPENDINGCAUSE"].ToString(); if (!string.IsNullOrWhiteSpace(dr["MOIMPORTTIME"].ToString())) { returnInfo.MOIMPORTTIME = Convert.ToDateTime(dr["MOIMPORTTIME"].ToString()); } returnInfo.OFFMOQTY = Convert.ToDecimal(dr["OFFMOQTY"].ToString().Equals("") ? "0" : dr["OFFMOQTY"].ToString()); returnInfo.ISCOMPARESOFT = Convert.ToInt32(dr["ISCOMPARESOFT"].ToString().Equals("") ? "0" : dr["ISCOMPARESOFT"].ToString()); returnInfo.RMABILLCODE = dr["RMABILLCODE"].ToString(); returnInfo.MOSEQ = dr["MOSEQ"].ToString().Equals("") ? "0" : dr["MOSEQ"].ToString(); returnInfo.REMOCODE = dr["REMOCODE"].ToString(); returnInfo.REMOITEMCODE = dr["REMOITEMCODE"].ToString(); returnInfo.REMOITEMDESC = dr["REMOITEMDESC"].ToString(); returnInfo.REMOLOTNO = dr["REMOLOTNO"].ToString(); returnInfo.REMOENABLED = dr["REMOENABLED"].ToString(); returnInfo.MOBOM = dr["MOBOM"].ToString(); returnInfo.MOOP = dr["MOOP"].ToString(); returnInfo.ITEMDESC = dr["ITEMDESC"].ToString(); //returnInfo.MOPLANENDTIME = Convert.ToDateTime(dr["MOPLANENDTIME"].ToString()); returnInfo.MOPLANLINE = dr["MOPLANLINE"].ToString(); returnInfo.BackflushStorage = dr["BackflushStorage"].ToString(); returnInfo.WarningStopLine = dr["WarningStopLine"].ToString(); returnInfo.MORemark = dr["MORemark"].ToString(); returnInfo.EATTRIBUTE4 = dr["EATTRIBUTE4"].ToString(); if (!returnmmo.Contains(returnInfo)) { returnmmo.Add(returnInfo); } } return returnmmo; } #endregion #region 删除 public static void deleteInfo(List moidList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSMO.Where(a => moidList.Contains(a.ID)); db.ICSMO.DeleteAllOnSubmit(lines); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 代码是否存在 public static bool IsIncluding(string mocode, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.MOCODE == mocode); if (line == null) return true; else return false; } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 查找最大的序列号 public static int SearchMaxS(string tou, string dsconn) { int max = 0; string sql = @"select SUBSTRING(RCARD,LEN(RCARD)-4,5) as num from ICSMO2RCARD where MOCODE='" + tou + "' "; sql = string.Format(sql); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; foreach (DataRow dr in dt.Rows) { if (Convert.ToInt32(dr["num"].ToString()) > max) max = Convert.ToInt32(dr["num"].ToString()); } return max; } #endregion #region 生成序列号 public static void AddMO2RCARD(List rcaList, string moid, string mocode, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO2RCARD.SingleOrDefault(a => a.RCARD == rcaList[0]); if (line == null) { foreach (string rca in rcaList) { ICSMO2RCARD mo2rca = new ICSMO2RCARD(); mo2rca.ID = AppConfig.GetGuid(); mo2rca.MOID = moid; mo2rca.MOCODE = mocode; mo2rca.RCARD = rca; mo2rca.PrintTimes = 0; mo2rca.lastPrintUSER = ""; mo2rca.lastPrintTime = DateTime.Now; mo2rca.MUSER = AppConfig.UserId; mo2rca.MUSERName = AppConfig.UserName; mo2rca.MTIME = DateTime.Now; mo2rca.WorkPoint = AppConfig.WorkPointCode; db.ICSMO2RCARD.InsertOnSubmit(mo2rca); } db.SubmitChanges(); db.Transaction.Commit(); } else { throw new Exception("生成失败"); } } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 删除序列号 public static void deleteSerial(List serialList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSMO2RCARD.Where(a => serialList.Contains(a.RCARD)); db.ICSMO2RCARD.DeleteAllOnSubmit(lines); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 判断是否在工单首检记录中 public static bool isInFirstCheck(string moCode, string dsconn) { try { string sql = @"select * from ICSFIRSTCHECKBYMO where MOCODE='" + moCode + "'"; sql = string.Format(sql); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; if (dt.Rows.Count > 0) return true; else return false; } catch (Exception ex) { throw ex; } } #endregion #region 最近一次检验是否合格 public static bool isQualified(string moCode, string dsconn) { try { string sql = @"select CHECKRESULT from ICSFIRSTCHECKBYMO where MOCODE='" + moCode + "' and MTIME in (select MAX(MTIME) from ICSFIRSTCHECKBYMO where MOCODE='" + moCode + "') "; sql = string.Format(sql); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; if (dt.Rows[0]["CHECKRESULT"].ToString() == "Y") return true; else return false; } catch (Exception ex) { throw ex; } } #endregion #region 下发 public static void Send(string mocode, string moseq, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.MOCODE == mocode && a.MOSEQ == moseq); line.MOSTATUS = "下发"; db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 取消下发 public static void cancelSend(string mocode, string moseq, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.MOCODE == mocode && a.MOSEQ == moseq); line.MOSTATUS = "初始"; line.SendDATE = null; //取消下发删除工单绑定工艺路线 --2022/6/1 var mo2route = db.ICSMO2ROUTE.Where(a => a.MOCODE == mocode && a.EATTRIBUTE1 == moseq).FirstOrDefault(); if (mo2route != null) { db.ICSMO2ROUTE.DeleteOnSubmit(mo2route); } db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 暂停 public static void stop(string mocode, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.MOCODE == mocode); line.MOSTATUS = "暂停"; db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 取消暂停 public static void cancelStop(string mocode, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.MOCODE == mocode); line.MOSTATUS = "生产中"; db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 关单 public static void closeDan(List id, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (string ID in id) { var line = db.ICSMO.SingleOrDefault(a => a.ID == ID); line.MOSTATUS = "关单"; line.CloseDate = DateTime.Now; db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion public static void closeDan(string ID, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.ID == ID); line.MOSTATUS = "关单"; db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #region 取消关单 public static void CancleCloseDan(string ID, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSMO.SingleOrDefault(a => a.ID == ID); line.MOSTATUS = "初始"; line.CloseDate = null; db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 子件资料信息 public static DataTable GetMOBOM(string MoSql) { try { string sql = @"select a.MOCODE, CONVERT(int,a.SEQ) as SEQ, a.MOBOMLINE, a.MOBITEMQTY, a.MOBITEMCODE, a.MOBITEMNAME, a.MOBITEMDESC, b.INVSTD, a.MOBOMITEMUOM, b.INVMACHINETYPE, StorageName from ICSMOBOM a LEFT JOIN ICSINVENTORY b ON a.ITEMCODE=b.INVCODE AND a.WorkPoint=b.WorkPoint LEFT JOIN ICSStorage c ON b.INVMACHINETYPE=c.StorageCode RIGHT JOIN (" + MoSql + ")d ON a.MOCODE=d.MOCODE AND a.SEQ=d.MOSEQ WHERE a.WorkPoint ='" + AppConfig.WorkPointCode + "'"; sql = string.Format(sql); DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; return dt; } catch (Exception ex) { throw ex; } } #endregion #region 删除批次信息 public static void DeleteLotno(List icsmo) { FramDataContext frame = new FramDataContext(AppConfig.AppConnectString); frame.Connection.Open(); frame.Transaction = frame.Connection.BeginTransaction(); try { foreach (ICSMO mo in icsmo) { var itemlot = frame.ICSITEMLot.Where(a => a.TransNO == mo.MOCODE && a.TransLine == mo.MOSEQ); List lotno = itemlot.Select(a => a.LotNO).ToList(); frame.ICSITEMLot.DeleteAllOnSubmit(itemlot); //更改工单分批状态 var Icsmo = frame.ICSMO.Where(a => a.MOCODE == mo.MOCODE && a.MOSEQ == mo.MOSEQ).SingleOrDefault(); Icsmo.EATTRIBUTE2 = null; //删除条码关联工艺路线 var itemroute = frame.ICSITEMROUTE2OPLot.Where(a => lotno.Contains(a.LotNo)); frame.ICSITEMROUTE2OPLot.DeleteAllOnSubmit(itemroute); frame.SubmitChanges(); } frame.Transaction.Commit(); } catch (Exception ex) { frame.Transaction.Rollback(); throw ex; } } #endregion public static void BeginningSave(MoContext context) { SqlConnection conn = new SqlConnection(AppConfig.AppConnectString); SqlCommand com = conn.CreateCommand(); SqlTransaction tran; conn.Open(); tran = conn.BeginTransaction(); com.Transaction = tran; try { string sqlStr = @"IF EXISTS(SELECT * FROM dbo.ICSMO WHERE BatchCode='" + context.BatchCode + @"') RAISERROR('批次已经存在!!',16,0)"; com.CommandText = sqlStr; com.ExecuteNonQuery(); string guid = AppConfig.GetGuid(); string sql = @"INSERT INTO [dbo].[ICSMO] ([Serial] ,[ItemCode] ,[ItemName] ,[ItemStd] ,[ComUnit] ,[AssComUnit] ,[CreateDate] ,[BatchCode] ,[Qty] ,[PackQuantiy] ,[Mtime] ,[Muser] ,[MoCode] ,[Free1] ,[Free2] ,[Free3] ,[Free4] ,Free5,Free6 ,[AuxUnitCode] ,[ChangeRate] ,[AuxQty],MoDId,Whcode) VALUES (@Serial ,@ItemCode ,@ItemName ,@ItemStd ,@ComUnit ,@AssComUnit ,@CreateDate ,@BatchCode ,@Qty ,@PackQuantiy ,@Mtime ,@Muser ,@MoCode ,@Free1 ,@Free2 ,@Free3 ,@Free4 ,@Free5,@Free6 ,@AuxUnitCode ,@ChangeRate ,@AuxQty,@MoDId,@Whcode)"; com.CommandText = sql; com.Parameters.Clear(); com.Parameters.AddWithValue("@Serial", guid); com.Parameters.AddWithValue("@ItemCode", context.cInvCode); com.Parameters.AddWithValue("@ItemName", context.cInvName); com.Parameters.AddWithValue("@ItemStd", context.cInvStd); com.Parameters.AddWithValue("@ComUnit", context.cComUnitName1); com.Parameters.AddWithValue("@AssComUnit", context.cComUnitName2); com.Parameters.AddWithValue("@CreateDate", DateTime.Now.ToString()); com.Parameters.AddWithValue("@BatchCode", context.BatchCode); com.Parameters.AddWithValue("@Qty", context.Qty); com.Parameters.AddWithValue("@PackQuantiy", "0"); com.Parameters.AddWithValue("@Mtime", DateTime.Now.ToString()); com.Parameters.AddWithValue("@Muser", AppConfig.UserName); com.Parameters.AddWithValue("@MoCode", context.MoCode); com.Parameters.AddWithValue("@Free1", context.Free1); com.Parameters.AddWithValue("@Free2", context.free2); com.Parameters.AddWithValue("@Free3", context.Free3); com.Parameters.AddWithValue("@Free4", context.Free4); com.Parameters.AddWithValue("@Free5", context.MDeptCode); com.Parameters.AddWithValue("@Free6", ""); com.Parameters.AddWithValue("@AuxUnitCode", context.AuxUnitCode); com.Parameters.AddWithValue("@ChangeRate", context.ChangeRate); com.Parameters.AddWithValue("@AuxQty", context.AuxQty); com.Parameters.AddWithValue("@MoDId", context.MoDId); com.Parameters.AddWithValue("@Whcode", context.Whcode); com.ExecuteNonQuery(); com.Transaction.Commit(); } catch (Exception ex) { com.Transaction.Rollback(); throw ex; } } public partial class MoContext { public string MoCode { get; set; } public string cInvCode { get; set; } public string cInvName { get; set; } public string cInvStd { get; set; } public string AuxQty { get; set; } public string MDeptCode { get; set; } public string ChangeRate { get; set; } public string AuxUnitCode { get; set; } public string Free1 { get; set; } public string free2 { get; set; } public string Free3 { get; set; } public string Free4 { get; set; } public string Qty { get; set; } public string cComUnitName1 { get; set; } public string cComUnitName2 { get; set; } public string MoDId { get; set; } public string NowQty { get; set; } public string BatchCode { get; set; } public string Whcode { get; set; } } #region 工单接口 public static void delete(List> tuples, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (var tuple in tuples) { var line = db.ICSMO.Where(a => a.MOCODE == tuple.Item1 && a.MOSEQ == tuple.Item2).FirstOrDefault(); if (line == null) throw new Exception($"未查询到对应工单信息,MoCode:{tuple.Item1},Moseq:{tuple.Item2}"); if (line.SendDATE != null) throw new Exception($"存在工单已下发,无法删除,MoCode:{tuple.Item1},Moseq:{tuple.Item2}"); if (db.ICSITEMLot.Where(a => a.TransNO == line.MOCODE && a.TransLine == line.MOSEQ).FirstOrDefault() != null) throw new Exception($"存在工单已分批,无法删除,MoCode:{tuple.Item1},Moseq:{tuple.Item2}"); db.ICSMO.DeleteOnSubmit(line); } db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } finally { db.Connection.Close(); } } public static void Update(List updates, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (var tuple in updates) { var line = db.ICSMO.Where(a => a.MOCODE == tuple.Mocode && a.MOSEQ == tuple.MOSEQ.ToString()).FirstOrDefault(); bool send = false; if (line == null) throw new Exception($"未查询到对应工单信息,MoCode:{tuple.Mocode},Moseq:{tuple.MOSEQ.ToString()}"); if (line.SendDATE != null) send = true; if (db.ICSITEMLot.Where(a => a.TransNO == line.MOCODE && a.TransLine == line.MOSEQ).FirstOrDefault() != null) send = true; if (tuple.MTIME != null) line.MTIME = (DateTime)tuple.MTIME; if (tuple.MOPLANSTARTDATE != null) { line.MOPLANSTARTDATE = (DateTime)tuple.MOPLANSTARTDATE; line.MOACTSTARTDATE = (DateTime)tuple.MOPLANSTARTDATE; } if (tuple.MOPLANQTY != null) { if (send&&tuple.MOPLANQTY!=line.MOPLANQTY) { throw new Exception($"存在工单已下发或分批,无法更新数量,MoCode:{tuple.Mocode},Moseq:{tuple.MOSEQ}"); } line.MOPLANQTY = (Decimal)tuple.MOPLANQTY; } if (tuple.MOPLANENDDATE != null) { line.MOPLANENDDATE = (DateTime)tuple.MOPLANENDDATE; line.MOACTENDDATE = (DateTime)tuple.MOPLANENDDATE; } if (tuple.MODOWNDATE != null) line.MODOWNDATE = (DateTime)tuple.MODOWNDATE; if (tuple.MTIME != null) line.MTIME = (DateTime)tuple.MTIME; if (tuple.MOBIOSVER != null) line.MOBIOSVER = tuple.MOBIOSVER == true ? "关闭" : "审核"; if (!String.IsNullOrEmpty(tuple.CreateUser)) { line.MUSER = tuple.CreateUser; line.MUSERName = tuple.CreateUser; } if (!string.IsNullOrEmpty(tuple.ProjectCode)) line.ORDERNO = tuple.ProjectCode; if (!string.IsNullOrEmpty(tuple.ProjectSeq)) line.EATTRIBUTE1= tuple.ProjectSeq; if (!String.IsNullOrEmpty(tuple.MDeptName)) line.MDeptCode = tuple.MDeptName; if (!String.IsNullOrEmpty(tuple.MDeptCode)) line.EATTRIBUTE3 = tuple.MDeptCode; if (!String.IsNullOrEmpty(tuple.CostCenter)) line.EATTRIBUTE4 = tuple.CostCenter; if (!String.IsNullOrEmpty(tuple.MotherMo)) line.MODESC = tuple.MotherMo; if (!String.IsNullOrEmpty(tuple.SuperiorMo)) line.MOMEMO = tuple.SuperiorMo; if (!string.IsNullOrEmpty(tuple.ITEMCODE)) { if (send&&tuple.ITEMCODE!=line.ITEMCODE) { throw new Exception($"存在工单已下发或分批,无法更新物料,MoCode:{tuple.Mocode},Moseq:{tuple.MOSEQ}"); } if (db.ICSMO2ROUTE.Where(a => a.MOID == line.ID).FirstOrDefault() != null&&tuple.ITEMCODE!=line.ITEMCODE) { throw new Exception($"存在工单已关联途程,无法更新工单物料,MoCode:{tuple.MOSEQ},Moseq:{tuple.MOSEQ}"); } var item = db.ICSINVENTORY.Where(a => a.INVCODE == tuple.ITEMCODE).FirstOrDefault(); if (item == null) throw new Exception($"物料不存在!ItemCode:{tuple.ITEMCODE}"); line.ITEMCODE = tuple.ITEMCODE; } } db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } finally { db.Connection.Close(); } } public static void Add(List updates, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { string workpoint = db.Sys_User.FirstOrDefault().WorkPointCode; foreach (var tuple in updates) { var line = db.ICSMO.Where(a => a.MOCODE == tuple.Mocode && a.MOSEQ == tuple.MOSEQ.ToString()).FirstOrDefault(); if (line != null) throw new Exception($"工单已存在! MoCode:{tuple.Mocode},Moseq:{tuple.MOSEQ.ToString()}"); var item = db.ICSINVENTORY.Where(a => a.INVCODE == tuple.ITEMCODE).FirstOrDefault(); if (item == null) throw new Exception($"物料不存在!ItemCode:{tuple.ITEMCODE}"); line = new ICSMO(); line.ID = Guid.NewGuid().ToString(); line.MOCODE = tuple.Mocode; line.MOSEQ = tuple.MOSEQ.ToString(); line.MOTYPE = "正常"; line.MOINPUTQTY = 0; line.MOSCRAPQTY = 0; line.MOSCRAPQTY = 0; line.MOACTQTY = 0; line.ORDERSEQ = 0; line.MOSTATUS = "初始"; line.WorkPoint = workpoint; line.MORELEASETIME = tuple.MOPLANSTARTDATE; line.MUSERName = tuple.CreateUser; line.MTIME = (DateTime)tuple.CreateTime; line.MOPLANSTARTDATE = (DateTime)tuple.MOPLANSTARTDATE; line.MOACTSTARTDATE = (DateTime)tuple.MOPLANSTARTDATE; line.MOPLANQTY = (Decimal)tuple.MOPLANQTY; line.MOPLANENDDATE = (DateTime)tuple.MOPLANENDDATE; line.MOACTENDDATE = (DateTime)tuple.MOPLANENDDATE; line.MODOWNDATE = (DateTime)tuple.MODOWNDATE; line.MOBIOSVER = tuple.MOBIOSVER == true ? "关闭" : "审核"; line.MUSER = tuple.CreateUser; line.MDeptCode = tuple.MDeptName; line.EATTRIBUTE3 = tuple.MDeptCode; line.EATTRIBUTE1 = tuple.ProjectSeq; line.ITEMCODE = tuple.ITEMCODE; line.ORDERNO = tuple.ProjectCode; line.EATTRIBUTE4 = tuple.CostCenter; line.MOMEMO = tuple.SuperiorMo; line.MODESC = tuple.MotherMo; line.MOBOM = ""; db.ICSMO.InsertOnSubmit(line); } db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } finally { db.Connection.Close(); } } public static Sys_User Login(string userName, string Password, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); try { var pas = ToMd5(Password); var user = db.Sys_User.Where(a => a.UserCode == userName && a.UserPwd == pas).FirstOrDefault(); if (user == null) throw new Exception("用户名或密码不正确!"); return user; } catch (Exception ex) { throw ex; } } public static string ToMd5(string str) { return Encrypt(str, "&%#@?,:*_"); } private static string Encrypt(string strText, string strEncrKey) { byte[] rgbKey = new byte[0]; byte[] rgbIV = new byte[] { 18, 52, 86, 120, 144, 171, 205, 239 }; string result; try { rgbKey = Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8)); DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider(); byte[] bytes = Encoding.UTF8.GetBytes(strText); MemoryStream memoryStream = new MemoryStream(); CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); cryptoStream.Write(bytes, 0, bytes.Length); cryptoStream.FlushFinalBlock(); result = Convert.ToBase64String(memoryStream.ToArray()); } catch (Exception ex) { result = ex.Message; } return result; } #endregion } }