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.Linq.Expressions; using System.Reflection; namespace ICSSoft.Frame.Data.DAL { public class ICSITEMLOTDAL { #region 新增和修改 public static void Add(ICSITEMLot tbinfo, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { bool isNew = false; var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == tbinfo.ID); if (line == null) { isNew = true; line = new ICSITEMLot(); line.ID = tbinfo.ID; } line.LotNO = tbinfo.LotNO; line.MCODE = tbinfo.MCODE; line.TransNO = tbinfo.TransNO; line.TransLine = tbinfo.TransLine; line.VENDORITEMCODE = tbinfo.VENDORITEMCODE; line.VENDORCODE = tbinfo.VENDORCODE; line.VenderLotNO = tbinfo.VenderLotNO; line.PRODUCTDATE = tbinfo.PRODUCTDATE; line.LOTQTY = tbinfo.LOTQTY; line.ACTIVE = tbinfo.ACTIVE; line.Exdate = tbinfo.Exdate; line.WorkPoint = tbinfo.WorkPoint; line.MUSER = tbinfo.MUSER; line.MUSERName = tbinfo.MUSERName; line.MTIME = tbinfo.MTIME; if (isNew) db.ICSITEMLot.InsertOnSubmit(line); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion #region 删除 public static void deleteInfo(List codeList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSITEMLot.Where(a => codeList.Contains(a.ID)); db.ICSITEMLot.DeleteAllOnSubmit(lines); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion //详细表 增加 public static void DetailADD(ICSITEMLotDetail tbinfo, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { bool isNew = false; var line = db.ICSITEMLotDetail.SingleOrDefault(a => a.ID == tbinfo.ID); if (line == null) { isNew = true; line = new ICSITEMLotDetail(); line.ID = tbinfo.ID; } line.SERIALNO = tbinfo.SERIALNO; line.LotNO = tbinfo.LotNO; line.MCODE = tbinfo.MCODE; line.StorageCODE = tbinfo.StorageCODE; line.StackCODE = tbinfo.StackCODE; line.SerialStatus = tbinfo.SerialStatus; line.WorkPoint = tbinfo.WorkPoint; line.MUSER = tbinfo.MUSER; line.MUSERName = tbinfo.MUSERName; line.MTIME = tbinfo.MTIME; if (isNew) db.ICSITEMLotDetail.InsertOnSubmit(line); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } //详细表 删除 public static void DetaildeleteInfo(List codeList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var lines = db.ICSITEMLotDetail.Where(a => codeList.Contains(a.SERIALNO)); db.ICSITEMLotDetail.DeleteAllOnSubmit(lines); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } public static void insert(string NO, string code, int count) { string sql = @"update ICSINVReceiptDetail set ACTQTY+='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'"; sql = string.Format(sql); DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql); } public static void delete(string NO, string code, int count) { string sql = @"update ICSINVReceiptDetail set ACTQTY-='" + count + "' where ITEMCODE='" + code + "' and ReceiptNO='" + NO + "' and WorkPoint='" + AppConfig.WorkPointCode + "'"; sql = string.Format(sql); DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql); } /// /// 获取条码状态 /// /// /// /// public static DataTable CheckLotNO(string lotNo, string workpointCode, string dsconn) { string sql = @"select A.LotNO,TYPE,B.LotNO AS BarCode from ICSITEMLot A LEFT JOIN ICSWareHouseLotInfo B ON B.LotNO=A.LotNO where A.LotNO='{0}' and A.WorkPoint='{1}'"; sql = string.Format(sql, lotNo, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } /// /// 验证ASN单信息 /// /// /// /// public static DataTable CheckASNNO(string lotNo, string workpointCode, string dsconn) { string sql = @"select * from ICSPO_PoMain where POCode='{0}' and WorkPoint='{1}'"; sql = string.Format(sql, lotNo, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } /// /// 验证编码信息 /// /// /// /// public static DataTable CheckLOTNum(string INVCode, string workpointCode, string dsconn) { string sql = @"select A.INVCODE,B.WHCode,B.BinCode from ICSINVENTORY A LEFT JOIN ICSWareHouseLotInfo B ON B.INVCode=A.INVCODE WHERE A.INVCODE='{0}' AND A.WorkPoint='{1}'"; sql = string.Format(sql, INVCode, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } /// /// 获取条码信息 /// /// /// /// public static DataTable GetLotData(string barCode, string workpointCode, string dsconn) { string sql = @"select A.TransNO, A.TransLine, A.LotNO, A.MCODE, C.INVNAME, C.INVSTD, C.INVEXPORTIMPORT, CONVERT(DECIMAL(18,2),A.LOTQTY) as LOTQTY, C.INVUOM, A.EATTRIBUTE2, D.EATTRIBUTE6, ISNULL(A.EATTRIBUTE4,0) AS EATTRIBUTE3 from ICSITEMLot A LEFT JOIN ICSINVENTORY C ON C.INVCODE=A.MCODE LEFT JOIN ICSINVInfo D ON D.INVCODE=A.MCODE --WHERE A.LotNO='0000000001100002' AND A.WorkPoint='6000' WHERE A.LotNO='{0}' and A.WorkPoint='{1}'"; sql = string.Format(sql, barCode, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } /// /// 获取条码信息 /// /// /// /// public static DataTable GetLotDataForPO(string barCode, string workpointCode, string dsconn) { string sql = @"SELECT A.TransNO, A.TransLine, A.LotNO, A.MCODE, C.INVNAME, C.INVSTD, C.INVEXPORTIMPORT, CONVERT(DECIMAL(18,2),A.LOTQTY) AS LOTQTY, C.INVUOM, A.EATTRIBUTE2, D.EATTRIBUTE6, ISNULL(A.EATTRIBUTE4, 0) AS EATTRIBUTE3, B.Batch, B.cWhCode FROM ICSITEMLot A INNER JOIN ICSPOArrive B ON A.TransNO = B.cCode AND A.TransLine = B.irowno LEFT JOIN ICSINVENTORY C ON C.INVCODE = A.MCODE LEFT JOIN ICSINVInfo D ON D.INVCODE = A.MCODE WHERE A.LotNO = '{0}' AND A.WorkPoint = '{1}' "; sql = string.Format(sql, barCode, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } /// /// 获取条码信息(半成品入库) /// /// /// /// /// public static DataTable GetLotDataForMO(string barCode, string workpointCode, string dsconn) { string sql = @"select A.MOCODE ,A.MOSEQ ,A.ITEMCODE ,C.INVNAME ,C.INVSTD ,C.INVUOM ,B.LotQty ,B.LotNO ,B.VenderLotNO from ICSMO A LEFT JOIN ICSITEMLot B ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ LEFT JOIN ICSINVENTORY C ON C.INVCODE=A.ITEMCODE WHERE B.LotNO='{0}' AND A.WorkPoint='{1}'"; sql = string.Format(sql, barCode, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } /// /// 获取编码信息 /// /// /// /// public static DataTable GetLotNumData(string INVCode, string workpointCode, string dsconn) { string sql = @"select A.TransNO, A.TransLine, A.LotNO, A.MCODE, C.INVNAME, C.INVSTD, A.LOTQTY, C.INVUOM from ICSWareHouseLotInfo D LEFT JOIN ICSITEMLot A ON A.LotNO=D.LotNO LEFT JOIN ICSPO_PoMain B ON B.POCode=A.TransNO AND B.PORow=A.TransLine LEFT JOIN ICSINVENTORY C ON C.INVCODE=A.MCODE WHERE D.INVCode='{0}' AND A.WorkPoint='{1}'"; sql = string.Format(sql, INVCode, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } /// /// 获取ASN单号信息(半成品入库) /// /// /// /// /// public static DataTable GetASNDataForMO(string barCode, string workpointCode, string dsconn) { string sql = @"select A.MOCODE ,A.MOSEQ ,A.ITEMCODE ,C.INVNAME ,C.INVSTD ,A.MOPLANQTY ,A.MOINPUTQTY ,C.INVUOM ,B.LotQty ,B.LotNO from ICSMO A LEFT JOIN ICSITEMLot B ON B.TransNO=A.MOCODE AND B.TransLine=A.MOSEQ LEFT JOIN ICSINVENTORY C ON C.INVCODE=A.ITEMCODE LEFT JOIN ICSASNDetail E ON E.LotNO=B.LotNO WHERE E.STNO='{0}' AND A.WorkPoint='{1}'"; sql = string.Format(sql, barCode, workpointCode); DataTable dt = DBHelper.ExecuteDataset(dsconn, CommandType.Text, sql).Tables[0]; return dt; } #region 生成到货单 public static string CreateRCV(List rcv, string connection, out string docno, out string createUser, out string createTime) { SqlConnection conn = new System.Data.SqlClient.SqlConnection(connection); conn.Open(); SqlTransaction sqlTran = conn.BeginTransaction(); SqlCommand cmd = new SqlCommand(); cmd.Transaction = sqlTran; cmd.Connection = conn; //DataContextDataContext data = new DataContextDataContext(); try { string rcvNo = ""; string user = ""; string time1 = ""; foreach (FormICSRSVDataModel.RCVData data in rcv) { string time = DateTime.Now.ToString("yyyyMMdd"); string sql = @"select max(ReceiptNO) from ICSINVReceipt where left(ReceiptNO,8)='{0}'"; sql = string.Format(sql, time); DataTable dt = SQlReturnData(sql, cmd); if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString())) { rcvNo = (decimal.Parse(dt.Rows[0][0].ToString()) + 1).ToString(); } else { rcvNo = time + "001"; } string rcvId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString(); sql = @"INSERT INTO ICSINVReceipt(ID,ReceiptNO,StorageID,RECSTATUS,VENDORCODE,RECTYPE,MEMO,CreateTIME,CreateUSER,WorkPoint,MUSER,MUSERName,MTIME,EATTRIBUTE1,ISALLINSTORAGE) Values(@ID,@ReceiptNO,'','待检','','','',@CreateTIME,@CreateUSER,'0001','',@MUSERName,@MTIME,@ASN,'N')"; cmd.Parameters.AddWithValue("@ID", rcvId); cmd.Parameters.AddWithValue("@ReceiptNO", rcvNo); cmd.Parameters.AddWithValue("@CreateTIME", data.createTime); cmd.Parameters.AddWithValue("@CreateUSER", data.userName); //cmd.Parameters.AddWithValue("@MUSER", rcvNo); cmd.Parameters.AddWithValue("@MUSERName", data.userName); cmd.Parameters.AddWithValue("@MTIME", DateTime.Now); if (data.asnNo != null) { cmd.Parameters.AddWithValue("@ASN", data.asnNo); } else { cmd.Parameters.AddWithValue("@ASN", ""); } cmd.CommandText = sql; cmd.ExecuteNonQuery(); user = data.userName; time1 = data.createTime; int row = 0; foreach (FormICSRSVDataModel.RCVDatas datas in data.datas) { sql = @"select ReceiptNO from dbo.ICSINVReceiptDetail WHERE VenderLotNO='{0}'"; sql = string.Format(sql, datas.lotNo); dt = SQlReturnData(sql, cmd); if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0][0].ToString())) { throw new Exception("条码:" + datas.lotNo + " 已生成到货单!"); } row++; string checksql = @"select EATTRIBUTE6 from ICSINVInfo where INVCODE='{0}'"; checksql = string.Format(checksql, datas.itemCode); DataTable checkdt = SQlReturnData(sql, cmd); string rcvsId = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString(); if (checkdt.Rows.Count == 0) { sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE) Values('{0}','{1}','{2}','{3}','待检','待检','','{4}','{5}','{6}','0001','','{7}','{8}','N','原材料')"; } else { if (checkdt.Rows[0]["EATTRIBUTE6"].ToString() == "免检") { sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE) Values('{0}','{1}','{2}','{3}','免检','免检','','{4}','{5}','{6}','0001','','{7}','{8}','N','原材料')"; } else { sql = @"INSERT INTO ICSINVReceiptDetail(ID,ReceiptID,ReceiptNO,ReceiptLine,RECSTATUS,IQCStatus,MEMO,ITEMCODE,PLANQTY,VenderLotNO,WorkPoint,MUSER,MUSERName,MTIME,ISINSTORAGE,TYPE) Values('{0}','{1}','{2}','{3}','待检','待检','','{4}','{5}','{6}','0001','','{7}','{8}','N','原材料')"; } } sql = string.Format(sql, rcvsId, rcvId, rcvNo, row, datas.itemCode, datas.qty, datas.lotNo, data.userName, DateTime.Now); cmd.CommandText = sql; cmd.ExecuteNonQuery(); #region 判断是否需要解除箱号关联 sql = @"select * from ICSPalletLotNO where LotNO='{0}'"; string.Format(sql, datas.lotNo); dt = SQlReturnData(sql, cmd); if (dt.Rows.Count != 0) { sql = @"Delete ICSPalletLotNO where LotNO='{0}'"; string.Format(sql, datas.lotNo); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } #endregion } } sqlTran.Commit(); docno = rcvNo; createUser = user; createTime = time1; return "OK"; } catch (Exception ex) { sqlTran.Rollback(); docno = ""; createUser = ""; createTime = ""; return ex.Message; } } #endregion /// /// SQL执行方法 /// /// /// /// public static DataTable SQlReturnData(string SQl, SqlCommand cmd) { DataTable dt = new DataTable(); cmd.CommandText = SQl; SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter(); dr.SelectCommand = cmd; dr.Fill(dt); return dt; } #region 删除分批获得的跟踪单 public static void DeleteInfoBySplit(List LotNoList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (string LotNo in LotNoList) { var line = db.ICSLOTSIMULATION2USER.Where(a => a.LOTNO == LotNo && a.CollectStatus == "COLLECT_BEGIN"); if (line.Count() > 0) throw new Exception("跟踪单已有开工记录,不能删除!"); //跟踪单分批记录 var LotSplit = db.ICSLotSplitINCollectionLog.SingleOrDefault(a => a.LOTNOSplit == LotNo); //分批主跟踪单 var LotSim = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotSplit.LOTNO); //当前分批的跟踪单 var LotSimFP = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo); //当前分批的跟踪单条码 var ItemLot = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo); //派工信息 var mo2Users = db.ICSMO2User.Where(a => a.LOTNO == LotNo); //开工信息 var lotonwip = db.ICSLOTONWIP.Where(a=>a.LOTNO==LotNo); //工序检查 Listid=lotonwip.Select(a=>a.ID).ToList(); var check = db.ICSLOTONWIPCheck.Where(a => id.Contains(a.ONWIPID)); //回溯原跟踪单不良数量 LotSim.NGQTY = LotSim.NGQTY + LotSimFP.LOTQTY; ItemLot.LOTQTY = ItemLot.LOTQTY + LotSimFP.LOTQTY; db.SubmitChanges(); db.ICSLOTSIMULATION.DeleteOnSubmit(LotSimFP); db.ICSITEMLot.DeleteOnSubmit(ItemLot); db.ICSLotSplitINCollectionLog.DeleteOnSubmit(LotSplit); db.ICSMO2User.DeleteAllOnSubmit(mo2Users); db.ICSLOTONWIP.DeleteAllOnSubmit(lotonwip); db.ICSLOTONWIPCheck.DeleteAllOnSubmit(check); db.SubmitChanges(); } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion public static void DelSplitLotNoList(List list) { //3.1.-1条码和母条码都要进行判断,如果下一道工序已经开工就不能删除,并提示相应报错信息; //3.2.只能删除分批出来的条码,如果选择了原条码点删除,也要提示相应错误; //3.3.如果满足以上条件,那么删除后,分批条码数量要回到原条码数量上面; //拆批后的条码(mo01-1) 若已经派工,删除该条码时,派工信息也要删除. //比如 mo001分批 成mo001-1,然后又分批成mo001-1-1,那么mo001-1不能先删除。除非把mo001-1-1先删除才能删。 List List = new List(); foreach (string lotno in list) { //判断是否是母条码 string sql = "select lotno,lotnosplit,opcode from ICSLotSplitINCollectionLog where lotno='" + lotno + "' OR lotnosplit='" + lotno + "'"; DataTable table = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; List row1 = table.AsEnumerable().Where(a => a["lotno"].ToString() == lotno).ToList();// List row2 = table.AsEnumerable().Where(a => a["lotnosplit"].ToString() == lotno).ToList(); string opcode = ""; string momlotno = ""; int lotqty = 0; //如果没有则代表原始条码 if (row2.Count <= 0) { throw new Exception("条码:" + lotno + " 是原始条码无法删除!"); } if (row1.Count > 0) { throw new Exception("条码:" + lotno + "已分批,请先删除分批后的条码!"); } else { opcode = row2[0]["opcode"].ToString(); momlotno = row2[0]["lotno"].ToString(); sql = @"select * from ICSLOTSIMULATION where lotno='" + lotno + "' and opcode='" + opcode + @"' union all select * from ICSLOTSIMULATION where lotno='" + momlotno + "' and opcode='" + opcode + @"' "; DataTable table3 = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; if (table3.Rows.Count != 2) { throw new Exception("条码:" + lotno + " 或者母条码:" + momlotno + ",下道工序已开工,无法删除"); } sql = @"select a.lotno,b.OPCODE,b.OPSEQ from icsmo2user a inner join ICSITEMROUTE2OPLot b on a.LOTNO=b.LotNo and a.OPCODE=b.OPCODE where a.lotno='" + lotno + "' and b.opseq>(select opseq from ICSITEMROUTE2OPLot d where d.lotno='" + lotno + "' and d.OPCODE='" + opcode + "')"; DataTable table1 = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; if (table1.Rows.Count > 0) { throw new Exception("条码:" + lotno + "已派工,请先删除派工记录!"); } //获取分批条码的数量 sql = @"SELECT LOTQTY FROM ICSITEMLot WHERE LOTNO='" + lotno + "'"; lotqty = Convert.ToInt32(DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0].Rows[0]["LOTQTY"]); } FormDelSplitLotModel model = new FormDelSplitLotModel(); model.FromLotNO = momlotno; model.LOTNO = lotno; model.LOTQTY = lotqty; List.Add(model); } if (List.Count > 0) DelSplitLotNo(List, AppConfig.AppConnectString); } #region 删除分批获得的跟踪单 public static void DelSplitLotNo(List LotNoList, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { foreach (FormDelSplitLotModel item in LotNoList) { #region 删除 icsmo2lot var LOT = db.ICSITEMLot.Where(a => a.LotNO == item.LOTNO); if (LOT != null) { db.ICSITEMLot.DeleteAllOnSubmit(LOT); db.SubmitChanges(); } #endregion #region 删除 ICSLOTSIMULATION var sim = db.ICSLOTSIMULATION.Where(a => a.LOTNO == item.LOTNO); if (sim != null) { db.ICSLOTSIMULATION.DeleteAllOnSubmit(sim); db.SubmitChanges(); } #endregion #region 删除 ICSMO2User var user = db.ICSMO2User.Where(a => a.LOTNO == item.LOTNO); if (user != null) { db.ICSMO2User.DeleteAllOnSubmit(user); db.SubmitChanges(); } #endregion #region 删除 ICSLOTONWIP ICSLOTONWIPCheck var wip = db.ICSLOTONWIP.Where(a => a.LOTNO == item.LOTNO); List onwipid = wip.Select(a => a.ID).ToList(); if (wip != null) { db.ICSLOTONWIP.DeleteAllOnSubmit(wip); db.SubmitChanges(); } #endregion var check = db.ICSLOTONWIPCheck.Where(a => onwipid.Contains(a.ONWIPID)); if (check != null) { db.ICSLOTONWIPCheck.DeleteAllOnSubmit(check); db.SubmitChanges(); } #region 删除 ICSLotSplitINCollectionLog var log = db.ICSLotSplitINCollectionLog.Where(a => a.LOTNO == item.FromLotNO && a.LOTNOSplit == item.LOTNO); if (log != null) { db.ICSLotSplitINCollectionLog.DeleteAllOnSubmit(log); db.SubmitChanges(); } #endregion #region 删除 ICSQualityCKDATA var qualityck = db.ICSQualityCKDATA.Where(a=>a.LOTNO== item.LOTNO); if (qualityck != null) { db.ICSQualityCKDATA.DeleteAllOnSubmit(qualityck); db.SubmitChanges(); } #region 增加原条码数量 //涉及表: ICSMO2Lot WM_BarCode ICSLOTSIMULATION ICSLOTSIMULATIONREPORT ICSLOTONWIP ICSWXItemListLotLog ICSWXPOLotNoLog var fromlot = db.ICSITEMLot.FirstOrDefault(a => a.LotNO == item.FromLotNO); if (fromlot != null) { fromlot.LOTQTY = fromlot.LOTQTY + item.LOTQTY; db.SubmitChanges(); } var fromsim = db.ICSLOTSIMULATION.FirstOrDefault(a => a.LOTNO == item.FromLotNO); if (fromsim != null) { fromsim.LOTQTY = fromsim.LOTQTY + item.LOTQTY; fromsim.GOODQTY = fromsim.GOODQTY + item.LOTQTY; db.SubmitChanges(); } var fromwips = db.ICSLOTONWIP.Where(a => a.LOTNO == item.FromLotNO); if (fromwips != null) { foreach (ICSLOTONWIP fromwip in fromwips) { fromwip.LOTQTY = fromwip.LOTQTY + item.LOTQTY; fromwip.GOODQTY=fromwip.GOODQTY+ item.LOTQTY; db.SubmitChanges(); } } #endregion } db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } } #endregion public static ICSITEMLot GetICSITEMLot(string LotNo, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo); return (ICSITEMLot)line; } catch (Exception ex) { throw ex; } } public static ICSLOTSIMULATION GetICSLOTSIMULATION(string simID, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSLOTSIMULATION.SingleOrDefault(a => a.ID == simID); return (ICSLOTSIMULATION)line; } catch (Exception ex) { throw ex; } } public static void SplitAdd(string simID, string LotNo, List itemLotList, List simList, List loginfoList, List mo2UserList, bool isnew, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { #region 扣减原条码ICSLOTSIMULATION数量 foreach (ICSITEMLot info in itemLotList) { var line = db.ICSLOTSIMULATION.SingleOrDefault(a => a.ID == simID); line.NGQTY = line.NGQTY - info.LOTQTY; db.SubmitChanges(); } #endregion #region 扣减原条码数量 foreach (ICSITEMLot info in itemLotList) { var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo); line.LOTQTY = line.LOTQTY - info.LOTQTY; db.SubmitChanges(); } #endregion #region ICSITEMLot foreach (ICSITEMLot itemLot in itemLotList) { bool isNew = false; var line = db.ICSITEMLot.SingleOrDefault(a => a.ID == itemLot.ID); if (line == null) { isNew = true; line = new ICSITEMLot(); line.ID = itemLot.ID; } line.LotNO = itemLot.LotNO; line.MCODE = itemLot.MCODE; //line.ItemCODE = itemLot.ItemCODE; line.TransNO = itemLot.TransNO; line.TransLine = itemLot.TransLine; line.VENDORITEMCODE = itemLot.VENDORITEMCODE; line.VENDORCODE = itemLot.VENDORCODE; line.VenderLotNO = itemLot.VenderLotNO; line.PRODUCTDATE = itemLot.PRODUCTDATE; line.LOTQTY = itemLot.LOTQTY; line.ACTIVE = itemLot.ACTIVE; line.Exdate = itemLot.Exdate; line.WorkPoint = itemLot.WorkPoint; line.MUSER = itemLot.MUSER; line.MUSERName = itemLot.MUSERName; line.MTIME = itemLot.MTIME; line.TYPE = itemLot.TYPE; line.EATTRIBUTE1 = itemLot.EATTRIBUTE1; line.EATTRIBUTE2 = itemLot.EATTRIBUTE2; line.EATTRIBUTE3 = itemLot.EATTRIBUTE3; line.EATTRIBUTE4 = itemLot.EATTRIBUTE4; line.EATTRIBUTE5 = itemLot.EATTRIBUTE5; line.PrintTimes = itemLot.PrintTimes; if (isNew) db.ICSITEMLot.InsertOnSubmit(line); db.SubmitChanges(); } #endregion if (isnew == false) { #region ICSLOTSIMULATION foreach (ICSLOTSIMULATION info in simList) { var line = new ICSLOTSIMULATION(); line.ID = info.ID; line.LOTNO = info.LOTNO; line.SEQ = info.SEQ; line.MOCODE = info.MOCODE; line.LOTSEQ = info.LOTSEQ; line.LOTQTY = info.LOTQTY; line.GOODQTY = info.GOODQTY; line.NGQTY = info.NGQTY; line.LOTStatus = info.LOTStatus; line.MODELCODE = info.MODELCODE; line.ITEMCODE = info.ITEMCODE; line.FROMROUTE = info.FROMROUTE; line.FROMOP = info.FROMOP; line.ROUTECODE = info.ROUTECODE; line.OPCODE = info.OPCODE; line.RESCODE = info.RESCODE; line.EQPCODE = info.EQPCODE; line.CHECKLOTNO = info.CHECKLOTNO; line.CARTONCODE = info.CARTONCODE; line.PALLETCODE = info.PALLETCODE; line.PRODUCTSTATUS = info.PRODUCTSTATUS; line.LACTION = info.LACTION; line.ACTIONLIST = info.ACTIONLIST; line.NGTIMES = info.NGTIMES; line.ISCOM = info.ISCOM; line.ISHOLD = info.ISHOLD; line.SHELFNO = info.SHELFNO; line.MOSEQ = info.MOSEQ; line.CollectStatus = info.CollectStatus; line.BeginTime = info.BeginTime; line.EndTime = info.EndTime; line.MUSER = info.MUSER; line.MUSERName = info.MUSERName; line.MTIME = info.MTIME; line.WorkPoint = info.WorkPoint; db.ICSLOTSIMULATION.InsertOnSubmit(line); db.SubmitChanges(); } #endregion } #region ICSLotSplitINCollectionLog foreach (ICSLotSplitINCollectionLog info in loginfoList) { var line = new ICSLotSplitINCollectionLog(); line.ID = info.ID; line.LOTNO = info.LOTNO; line.LOTNOSplit = info.LOTNOSplit; line.OPCode = info.OPCode; line.MUSER = info.MUSER; line.MUSERNAME = info.MUSERNAME; line.MTIME = info.MTIME; line.WorkPoint = info.WorkPoint; db.ICSLotSplitINCollectionLog.InsertOnSubmit(line); db.SubmitChanges(); } #endregion foreach (ICSMO2User user in mo2UserList) { var line = new ICSMO2User(); line.ID = user.ID; line.MOCODE = user.MOCODE; line.MOSEQ = user.MOSEQ; line.LOTNO = user.LOTNO; line.SEGCODE = user.SEGCODE; line.RouteCode = user.RouteCode; line.OPCODE = user.OPCODE; line.USERCODE = user.USERCODE; line.USERName = user.USERName; line.EQPCode = user.EQPCode; line.EQPName = user.EQPName; line.StartPlanDate = user.StartPlanDate; line.EndPlanDate = user.EndPlanDate; line.MUSER = user.MUSER; line.MUSERName = user.MUSERName; line.MTIME = user.MTIME; line.WorkPoint = user.WorkPoint; db.ICSMO2User.InsertOnSubmit(line); db.SubmitChanges(); } db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw new Exception(ex.Message); } } #endregion public static string SpliteLotNo(string LotNo, decimal SplitQty, string SplitReason, string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (line != null) { if (SplitQty < 1) { throw new Exception("分批数量必须大于0"); } if (SplitQty >= line.LOTQTY) { throw new Exception("分批数量必须小于原批次数量"); } //var whlog = db.ICSWareHouseLotInfoLog.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode && a.OperateClass == "1" && a.OperateType == "1"); //if (whlog != null) //{ // throw new Exception("产品跟踪单已入库,不能拆批"); //} var maxline = db.ICSITEMLot.Where(a => a.LotNO.Contains(LotNo) && a.LotNO.Length > LotNo.Length).OrderByDescending(a => a.LotNO).FirstOrDefault(); ; string n = ""; if (maxline == null) { n = "1"; } else { n = Convert.ToString(Convert.ToInt32((maxline.LotNO).Substring(maxline.LotNO.Length -2,2))+1); } n = n.PadLeft(2, '0'); string newLotSeq = "0"; string newLotNo = LotNo + n; //ICSITEMLot 条码 ICSITEMLot newline = new ICSITEMLot(); newline = TransExpV2.Trans(line); newline.ID = AppConfig.GetGuid(); newline.LOTQTY = line.LOTQTY - SplitQty; newline.LotNO = newLotNo; newline.EATTRIBUTE2 = newLotNo; newline.EATTRIBUTE5 = ""; db.ICSITEMLot.InsertOnSubmit(newline); line.LOTQTY = SplitQty; if (SplitReason == "返修分批") line.EATTRIBUTE5 = "返修中"; db.SubmitChanges(); var LOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (LOTSIMULATION != null) { var lastop = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo).OrderByDescending(b=>b.OPSEQ).Select(a=>a.OPCODE).FirstOrDefault(); ICSLOTSIMULATION newLOTSIMULATION = new ICSLOTSIMULATION(); newLOTSIMULATION = TransExpV2.Trans(LOTSIMULATION); newLOTSIMULATION.ID = AppConfig.GetGuid(); newLOTSIMULATION.LOTSEQ = Convert.ToInt32(newLotSeq); newLOTSIMULATION.LOTNO = newLotNo; newLOTSIMULATION.LOTQTY = LOTSIMULATION.LOTQTY - SplitQty; newLOTSIMULATION.GOODQTY = LOTSIMULATION.GOODQTY; newLOTSIMULATION.LOTStatus = "新增"; newLOTSIMULATION.CollectStatus = "COLLECT_END"; newLOTSIMULATION.NGQTY=0; newLOTSIMULATION.MTIME = DateTime.Now; newLOTSIMULATION.FXQTY = 0; newLOTSIMULATION.JJSYQTY = 0; if(lastop==LOTSIMULATION.OPCODE) newLOTSIMULATION.ISCOM = "1"; else newLOTSIMULATION.ISCOM = "0"; //newLOTSIMULATION.PRODUCTSTATUS = "GOOD"; //newLOTSIMULATION.LACTION = "GOOD"; //newLOTSIMULATION.ACTIONLIST = ";GOOD;"; db.ICSLOTSIMULATION.InsertOnSubmit(newLOTSIMULATION); LOTSIMULATION.MTIME = DateTime.Now; LOTSIMULATION.LOTQTY = SplitQty; if (SplitReason == "不良分批") { LOTSIMULATION.NGQTY = SplitQty; LOTSIMULATION.GOODQTY = 0; } else { LOTSIMULATION.FXQTY = 0; LOTSIMULATION.GOODQTY = SplitQty; LOTSIMULATION.LOTStatus = "新增"; } db.SubmitChanges(); } var ICSOQC = db.ICSOQCCKGROUP2LISTCheckResult.Where(a => a.LotNo == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (ICSOQC != null) { foreach (var lotonwip in ICSOQC) { ICSOQCCKGROUP2LISTCheckResult newLOTSIMULATION = new ICSOQCCKGROUP2LISTCheckResult(); newLOTSIMULATION = TransExpV2.Trans(lotonwip); newLOTSIMULATION.ID = AppConfig.GetGuid(); newLOTSIMULATION.LotNo = newLotNo; if (newLOTSIMULATION.CCorWGResult == "NG") { newLOTSIMULATION.CCorWGResult = "OK"; } db.ICSOQCCKGROUP2LISTCheckResult.InsertOnSubmit(newLOTSIMULATION); db.SubmitChanges(); } } var LOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode&&a.EATTRIBUTE1==null ); if (LOTONWIPS != null) { foreach (var lotonwip in LOTONWIPS) { string id = AppConfig.GetGuid(); ICSLOTONWIP newlotonwip = new ICSLOTONWIP(); newlotonwip = TransExpV2.Trans(lotonwip); newlotonwip.ID = id; newlotonwip.LOTNO = newLotNo; newlotonwip.LOTSEQ = Convert.ToInt32(newLotSeq); newlotonwip.LOTQTY = lotonwip.LOTQTY - Convert.ToInt32(SplitQty); newlotonwip.GOODQTY = lotonwip.GOODQTY; newlotonwip.NGQTY = 0; newlotonwip.FXQTY = 0; //newlotonwip.ACTION = "GOOD"; //newlotonwip.ACTIONRESULT = "GOOD"; db.ICSLOTONWIP.InsertOnSubmit(newlotonwip); lotonwip.LOTQTY = Convert.ToInt32(SplitQty); if (SplitReason == "不良分批") { lotonwip.NGQTY = Convert.ToInt32(SplitQty); lotonwip.GOODQTY = 0; } else { lotonwip.FXQTY = 0; lotonwip.GOODQTY = Convert.ToInt32(SplitQty); } var check_old = db.ICSLOTONWIPCheck.Where(a => a.ONWIPID == lotonwip.ID).FirstOrDefault(); if (check_old != null) { ICSLOTONWIPCheck check = new ICSLOTONWIPCheck(); check.ID = AppConfig.GetGuid(); check.ONWIPID = id; check.Result = "合格"; check.MUSER = AppConfig.UserId; check.MUSERName = AppConfig.UserName; check.MTIME = DateTime.Now; check.WorkPoint = AppConfig.WorkPointCode; db.ICSLOTONWIPCheck.InsertOnSubmit(check); db.SubmitChanges(); } } } var QualityCKDATAS = db.ICSQualityCKDATA.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (QualityCKDATAS != null) { foreach (var ckdata in QualityCKDATAS) { ICSQualityCKDATA newckdata = new ICSQualityCKDATA(); newckdata = TransExpV2.Trans(ckdata); newckdata.ID = AppConfig.GetGuid(); newckdata.LOTNO = newLotNo; newckdata.CKResult = "1"; db.ICSQualityCKDATA.InsertOnSubmit(newckdata); var QualityCKDetailDATAS = db.ICSQualityCKDATADetail.Where(a => a.DATAID == ckdata.ID && a.WorkPoint == AppConfig.WorkPointCode); if (QualityCKDetailDATAS != null) { foreach (var ckDetaildata in QualityCKDetailDATAS) { ICSQualityCKDATADetail newckDetaildata = new ICSQualityCKDATADetail(); newckDetaildata = TransExpV2.Trans(ckDetaildata); newckDetaildata.ID = AppConfig.GetGuid(); newckDetaildata.DATAID = newckdata.ID; db.ICSQualityCKDATADetail.InsertOnSubmit(newckDetaildata); } db.SubmitChanges(); } } } var mo2user = db.ICSMO2User.Where(a => a.LOTNO == LotNo); if (mo2user != null) { foreach (ICSMO2User user in mo2user) { ICSMO2User newuser = new ICSMO2User(); newuser = TransExpV2.Trans(user); newuser.ID = AppConfig.GetGuid(); newuser.LOTNO = newLotNo; db.ICSMO2User.InsertOnSubmit(newuser); } } db.SubmitChanges(); var ROUTE2OPLot = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo); if (ROUTE2OPLot != null) { foreach (ICSITEMROUTE2OPLot a in ROUTE2OPLot) { ICSITEMROUTE2OPLot lot = new ICSITEMROUTE2OPLot(); lot = TransExpV2.Trans(a); lot.ID = AppConfig.GetGuid(); lot.LotNo = newLotNo; db.ICSITEMROUTE2OPLot.InsertOnSubmit(lot); } } db.SubmitChanges(); ICSLotSplitINCollectionLog splog = new ICSLotSplitINCollectionLog(); splog.ID = AppConfig.GetGuid(); splog.LOTNO = LotNo; splog.LOTNOSplit = newLotNo; if (LOTSIMULATION != null) { splog.OPCode = LOTSIMULATION.OPCODE; } else { splog.OPCode = ""; } splog.MUSERNAME = AppConfig.UserName; splog.MUSER = AppConfig.UserCode; splog.MTIME = DateTime.Now; splog.WorkPoint = AppConfig.WorkPointCode; splog.EATTRIBUTE2 = SplitReason; db.ICSLotSplitINCollectionLog.InsertOnSubmit(splog); db.SubmitChanges(); db.Transaction.Commit(); return newLotNo; } else { throw new Exception("批次不存在"); } } catch (Exception ex) { db.Transaction.Rollback(); throw new Exception(ex.Message); } } public static class TransExpV2 { private static readonly Func cache = GetFunc(); private static Func GetFunc() { ParameterExpression parameterExpression = Expression.Parameter(typeof(TIn), "p"); List memberBindingList = new List(); foreach (var item in typeof(TOut).GetProperties()) { if (!item.CanWrite) continue; MemberExpression property = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name)); MemberBinding memberBinding = Expression.Bind(item, property); memberBindingList.Add(memberBinding); } MemberInitExpression memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray()); Expression> lambda = Expression.Lambda>(memberInitExpression, new ParameterExpression[] { parameterExpression }); return lambda.Compile(); } public static TOut Trans(TIn tIn) { return cache(tIn); } } public static void UpdateLotnoStatus(string lotno,string muser,DateTime date,decimal transqty,string conn) { FramDataContext frame = new FramDataContext(conn); frame.Connection.Open(); frame.Transaction = frame.Connection.BeginTransaction(); try { var lot = frame.ICSITEMLot.SingleOrDefault(a => a.LotNO == lotno); if (lot == null) { throw new Exception("MES条码" + lotno + "不存在!"); } var mo = frame.ICSMO.Where(a => a.MOCODE == lot.TransNO && a.MOSEQ == lot.TransLine).FirstOrDefault(); if(mo==null) throw new Exception("获取条码对应工单信息失败!"); if (!string.IsNullOrEmpty(lot.ISCOM)) { throw new Exception("MES条码:" +lotno+",物料:"+mo.ITEMCODE+"已入库完毕!"); } lot.EATTRIBUTE7 =(Convert.ToDecimal(string.IsNullOrEmpty(lot.EATTRIBUTE7) ? "0" : lot.EATTRIBUTE7)+ transqty).ToString(); if (Convert.ToDecimal(lot.EATTRIBUTE7)> lot.LOTQTY) { throw new Exception("MES条码:" + lotno + ",物料:" + mo.ITEMCODE + "入库数量不能大于条码数量!"); } else if(Convert.ToDecimal(lot.EATTRIBUTE7)==lot.LOTQTY) { lot.ISCOM = "1"; } lot.storageMuser = muser; lot.StorageDate = date; frame.SubmitChanges(); //插入入库记录 ICSWareHouseLotInfoLog log = new ICSWareHouseLotInfoLog(); var mes = (from a in frame.ICSMO where a.MOCODE == lot.TransNO && a.MOSEQ == lot.TransLine select a.ITEMCODE).First(); var username = frame.Sys_User.Where(a=>a.UserCode==muser).Select(a=>a.UserName).FirstOrDefault(); if (string.IsNullOrEmpty(username)) throw new Exception("获取人员信息失败"); log.ID = AppConfig.GetGuid(); log.TransNO = lot.TransNO; log.TransLine = lot.TransLine; log.LotNO = lot.LotNO; log.ITEMCODE = mes; log.TransQTY = lot.LOTQTY; log.TransType = "收"; log.BusinessCode = "生产入库"; log.MUSER = muser; log.MUSERName = username; log.MTIME = date; log.WorkPoint = "6000"; frame.ICSWareHouseLotInfoLog.InsertOnSubmit(log); frame.SubmitChanges(); ICSWareHouseLotInfo info = frame.ICSWareHouseLotInfo.SingleOrDefault(a=>a.LotNO==lotno); if (info == null) { info = new ICSWareHouseLotInfo(); info.LotNO = lotno; info.ID = AppConfig.GetGuid(); info.INVCode = mes; info.LotQty = lot.LOTQTY; info.ReceiveDate = date; info.MUSER = muser; info.MUSERName = username; info.MTIME = date; info.WorkPoint= "6000"; } frame.ICSWareHouseLotInfo.InsertOnSubmit(info); frame.SubmitChanges(); frame.Transaction.Commit(); } catch (Exception ex) { frame.Transaction.Rollback(); throw ex; } } public static void GetLotnoMes(string lotno,string conn,T t) { try { string sql = @"select '['+DBIpAddress+']'+'.'+DBName as conn from Sys_DataBase where DBSourceName='ERP'"; DataTable table = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0]; if (table.Rows.Count <=0) { throw new Exception("获取ERP账套信息失败!"); } //判断当前条码是否已完工 sql = @"select a.LotNo,a.OPCODE,a.OPSEQ,d.Result from ICSITEMROUTE2OPLot a inner join (select lotno, max(OPSEQ)opseq from ICSITEMROUTE2OPLot group by LotNo)b on a.LotNo = b.LotNo and a.OPSEQ = b.opseq inner join ICSLOTONWIP c on c.LOTNO = a.LotNo and c.OPCODE = a.OPCODE left join ICSLOTONWIPCheck d on d.ONWIPID = c.ID where a.lotno='"+lotno+@"' and d.result='合格' "; //判断当前条码是否报废 sql += @"select * from ICSNCROAUPLOAD where lotno='"+lotno+"' and oastatus='报废'"; DataTable table1 = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0]; DataTable table2 = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[1]; if (table1.Rows.Count <=0&& table2.Rows.Count <= 0) { throw new Exception("该条码还未完工或者不是报废状态!"); } String u8conn = table.Rows[0]["conn"].ToString(); sql = @"select Lotno,LOTQTY,b.MDeptCode,b.ID as MODID,b.ID AS MOID,b.Mocode,b.ITEMCODE,d.INVNAME,d.INVSTD,B.EATTRIBUTE3 AS cDepCode,B.mdeptcode AS cDepName,d.INVUOM,F.DBNAME AS CompanyCode from icsitemlot a inner join icsmo b on a.TransNO=b.MOCODE and a.TransLine=b.MOSEQ --left join (select MoId,MODID from {0}.dbo.mom_orderdetail)C ON C.MODID=B.ID LEFT JOIN ICSINVENTORY D on d.invcode=b.ITEMCODE --left join {0}.dbo.Department e on e.cDepName=b.MDeptCode left join Sys_DataBase f on f.DBSourceName='ERP' where a.lotno='" + lotno+"'"; table = DBHelper.ExecuteDataset(conn,CommandType.Text,sql).Tables[0]; sql = String.Format(sql, u8conn); if (table.Rows.Count <= 0) { throw new Exception("未查询到工单下该条码!"); } //条码是否入库 sql = @"select * from icsitemlot where lotno='" + lotno + "' and iscom='1'"; table1= DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0]; DataRow row = table.Rows[0]; if (table1.Rows.Count> 0) { throw new Exception("该条码已入库!"); } Type a = typeof(T); FieldInfo[]info = a.GetFields(BindingFlags.Instance | BindingFlags.NonPublic); foreach (FieldInfo c in info) { foreach (DataColumn column in table.Columns) { if (c.Name == "<"+column.ColumnName+">i__Field") { c.SetValue(t, row["" + column.ColumnName + ""].ToString()); } } } } catch (Exception ex) { throw ex; } } public static void GetLotnoMes2(string lotno, string conn, LOTMES t) { try { string sql = @"select '['+DBIpAddress+']'+'.'+DBName as conn from Sys_DataBase where DBSourceName='ERP'"; DataTable table = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0]; sql = @"select A.lotNo,A.lotQty,b.moCode,b.moSeq,b.itemCode,d.INVNAME as invName,d.INVSTD as invStd,e.opCode,F.opDesc from icsitemlot a inner join icsmo b on a.TransNO=b.MOCODE and a.TransLine=b.MOSEQ LEFT JOIN ICSINVENTORY D on d.invcode=b.ITEMCODE LEFT JOIN ICSITEMROUTE2OPLOT e on e.lotno=a.lotno LEFT JOIN ICSOP F ON F.OPCODE=E.OPCODE where a.lotno='" + lotno + "' order by e.opseq"; table = DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0]; if (table.Rows.Count <= 0) { throw new Exception("未查询到工单下该条码!"); } var info=typeof(LOTMES).GetProperties(); foreach (DataColumn column in table.Columns) { foreach(var pro in info) { if (pro.Name == column.ColumnName) pro.SetValue(t, table.Rows[0][column].ToString(), null); } } t.list1 = new List(); foreach (DataRow row in table.Rows) { OPMES opmes = new OPMES(); opmes.opCode = row["opCode"].ToString(); opmes.opDesc= row["opDesc"].ToString(); List materlist=GetOPBOM(lotno, opmes.opCode, conn); opmes.list = materlist; t.list1.Add(opmes); } } catch (Exception ex) { throw ex; } } public static void SpliteLotNo(string LotNo, decimal ALLqty, decimal SplitQty,int SplitNum,string dsconn) { FramDataContext db = new FramDataContext(dsconn); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { var line = db.ICSITEMLot.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (SplitQty < 1) { throw new Exception("分批数量必须大于0"); } if (SplitQty * (SplitNum-1)>ALLqty) { throw new Exception("分批数量必须小于原批次数量"); } //原条码数量 decimal oldlotqty = line.LOTQTY; //更改老条码条码数量 //decimal oldLOTQTY = line.LOTQTY - SplitQty * SplitNum; decimal oldLOTQTY = line.LOTQTY - ALLqty; if (oldLOTQTY < 0) { oldLOTQTY = 0; } line.LOTQTY = oldLOTQTY; var oldLOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); oldLOTSIMULATION.LOTQTY = Convert.ToInt32(oldLOTQTY); oldLOTSIMULATION.GOODQTY = Convert.ToInt32(oldLOTQTY); var oldLOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); foreach (var lotonwip in oldLOTONWIPS) { lotonwip.LOTQTY = Convert.ToInt32(oldLOTQTY); lotonwip.GOODQTY = Convert.ToInt32(oldLOTQTY); db.SubmitChanges(); } db.SubmitChanges(); //插入新条码 if (line != null) { for (int i = 0; i < SplitNum; i++) { if (i == SplitNum - 1) { //SplitQty = SplitQty + (oldlotqty - (SplitNum * SplitQty)); SplitQty = SplitQty + (ALLqty - (SplitNum * SplitQty)); } //var whlog = db.ICSWareHouseLotInfoLog.SingleOrDefault(a => a.LotNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode && a.OperateClass == "1" && a.OperateType == "1"); //if (whlog != null) //{ // throw new Exception("产品跟踪单已入库,不能拆批"); //} var maxline = db.ICSITEMLot.Where(a => a.LotNO.Contains(LotNo) && a.LotNO.Length > LotNo.Length).OrderByDescending(a => a.LotNO).FirstOrDefault(); ; string n = ""; if (maxline == null) { n = "1"; } else { n = Convert.ToString(Convert.ToInt32((maxline.LotNO).Substring(maxline.LotNO.Length - 2, 2)) + 1); } n = n.PadLeft(2, '0'); string newLotSeq = "0"; string newLotNo = LotNo + n; //ICSITEMLot 条码 ICSITEMLot newline = new ICSITEMLot(); newline = TransExpV2.Trans(line); newline.ID = AppConfig.GetGuid(); newline.LOTQTY = SplitQty; newline.LotNO = newLotNo; newline.EATTRIBUTE2 = newLotNo; db.ICSITEMLot.InsertOnSubmit(newline); db.SubmitChanges(); var LOTSIMULATION = db.ICSLOTSIMULATION.SingleOrDefault(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (LOTSIMULATION != null) { ICSLOTSIMULATION newLOTSIMULATION = new ICSLOTSIMULATION(); newLOTSIMULATION = TransExpV2.Trans(LOTSIMULATION); newLOTSIMULATION.ID = AppConfig.GetGuid(); newLOTSIMULATION.LOTNO = newLotNo; newLOTSIMULATION.LOTQTY = SplitQty; newLOTSIMULATION.GOODQTY = SplitQty; newLOTSIMULATION.LOTStatus = "新增"; newLOTSIMULATION.CollectStatus = "COLLECT_END"; newLOTSIMULATION.NGQTY = 0; newLOTSIMULATION.MTIME = DateTime.Now; //newLOTSIMULATION.PRODUCTSTATUS = "GOOD"; //newLOTSIMULATION.LACTION = "GOOD"; //newLOTSIMULATION.ACTIONLIST = ";GOOD;"; db.ICSLOTSIMULATION.InsertOnSubmit(newLOTSIMULATION); db.SubmitChanges(); } var ICSOQC = db.ICSOQCCKGROUP2LISTCheckResult.Where(a => a.LotNo == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (ICSOQC != null) { foreach (var lotonwip in ICSOQC) { ICSOQCCKGROUP2LISTCheckResult newLOTSIMULATION = new ICSOQCCKGROUP2LISTCheckResult(); newLOTSIMULATION = TransExpV2.Trans(lotonwip); newLOTSIMULATION.ID = AppConfig.GetGuid(); newLOTSIMULATION.LotNo = newLotNo; db.ICSOQCCKGROUP2LISTCheckResult.InsertOnSubmit(newLOTSIMULATION); db.SubmitChanges(); } } var LOTONWIPS = db.ICSLOTONWIP.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (LOTONWIPS != null) { foreach (var lotonwip in LOTONWIPS) { string id = AppConfig.GetGuid(); ICSLOTONWIP newlotonwip = new ICSLOTONWIP(); newlotonwip = TransExpV2.Trans(lotonwip); newlotonwip.ID = id; newlotonwip.LOTNO = newLotNo; newlotonwip.LOTSEQ = Convert.ToInt32(newLotSeq); newlotonwip.LOTQTY = Convert.ToInt32(SplitQty); newlotonwip.GOODQTY = Convert.ToInt32(SplitQty); //newlotonwip.ACTION = "GOOD"; //newlotonwip.ACTIONRESULT = "GOOD"; db.ICSLOTONWIP.InsertOnSubmit(newlotonwip); db.SubmitChanges(); var check = db.ICSLOTONWIPCheck.SingleOrDefault(a => a.ONWIPID == lotonwip.ID); if (check != null) { ICSLOTONWIPCheck newcheck = new ICSLOTONWIPCheck(); newcheck = TransExpV2.Trans(check); newcheck.ID = AppConfig.GetGuid(); newcheck.ONWIPID = newlotonwip.ID; db.ICSLOTONWIPCheck.InsertOnSubmit(newcheck); db.SubmitChanges(); } } } var QualityCKDATAS = db.ICSQualityCKDATA.Where(a => a.LOTNO == LotNo && a.WorkPoint == AppConfig.WorkPointCode); if (QualityCKDATAS != null) { foreach (var ckdata in QualityCKDATAS) { ICSQualityCKDATA newckdata = new ICSQualityCKDATA(); newckdata = TransExpV2.Trans(ckdata); newckdata.ID = AppConfig.GetGuid(); newckdata.LOTNO = newLotNo; db.ICSQualityCKDATA.InsertOnSubmit(newckdata); var QualityCKDetailDATAS = db.ICSQualityCKDATADetail.Where(a => a.DATAID == ckdata.ID && a.WorkPoint == AppConfig.WorkPointCode); if (QualityCKDetailDATAS != null) { foreach (var ckDetaildata in QualityCKDetailDATAS) { ICSQualityCKDATADetail newckDetaildata = new ICSQualityCKDATADetail(); newckDetaildata = TransExpV2.Trans(ckDetaildata); newckDetaildata.ID = AppConfig.GetGuid(); newckDetaildata.DATAID = newckdata.ID; db.ICSQualityCKDATADetail.InsertOnSubmit(newckDetaildata); } db.SubmitChanges(); } } } var mo2user = db.ICSMO2User.Where(a => a.LOTNO == LotNo); if (mo2user != null) { foreach (ICSMO2User user in mo2user) { ICSMO2User newuser = new ICSMO2User(); newuser = TransExpV2.Trans(user); newuser.ID = AppConfig.GetGuid(); newuser.LOTNO = newLotNo; db.ICSMO2User.InsertOnSubmit(newuser); } } db.SubmitChanges(); var ROUTE2OPLot = db.ICSITEMROUTE2OPLot.Where(a => a.LotNo == LotNo); if (ROUTE2OPLot != null) { foreach (ICSITEMROUTE2OPLot a in ROUTE2OPLot) { ICSITEMROUTE2OPLot lot = new ICSITEMROUTE2OPLot(); lot = TransExpV2.Trans(a); lot.ID = AppConfig.GetGuid(); lot.LotNo = newLotNo; db.ICSITEMROUTE2OPLot.InsertOnSubmit(lot); } } db.SubmitChanges(); ICSLotSplitINCollectionLog splog = new ICSLotSplitINCollectionLog(); splog.ID = AppConfig.GetGuid(); splog.LOTNO = LotNo; splog.LOTNOSplit = newLotNo; if (LOTSIMULATION != null) { splog.OPCode = LOTSIMULATION.OPCODE; } else { splog.OPCode = ""; } splog.MUSERNAME = AppConfig.UserName; splog.MUSER = AppConfig.UserCode; splog.MTIME = DateTime.Now; splog.WorkPoint = AppConfig.WorkPointCode; db.ICSLotSplitINCollectionLog.InsertOnSubmit(splog); db.SubmitChanges(); } db.Transaction.Commit(); } else { throw new Exception("批次不存在"); } } catch (Exception ex) { db.Transaction.Rollback(); throw new Exception(ex.Message); } } public static void UpdateOAMes(ICSOAMES mes,string conn) { FramDataContext frame = new FramDataContext(conn); frame.Connection.Open(); frame.Transaction = frame.Connection.BeginTransaction(); try { var ncrmes=frame.ICSNCROAUPLOAD.Where(a => a.SecDocNO == mes.NCRCODE).FirstOrDefault(); if (ncrmes == null) throw new Exception("没有获取到ncr单号:"+mes.NCRCODE+"的上传信息!"); if(!string.IsNullOrEmpty(ncrmes.OAStatus)) throw new Exception("ncr单号:" + mes.NCRCODE + "已评审,请勿重复操作!"); if(Convert.ToDecimal(mes.OKQUANTITY) + Convert.ToDecimal(mes.NGQUANTITY) !=Convert.ToDecimal(ncrmes.Qty)) throw new Exception("ncr单号:" + mes.NCRCODE + "的合格与不合数与追踪单数量不一致!"); ncrmes.OKQty = mes.OKQUANTITY; ncrmes.NGQty = mes.NGQUANTITY; ncrmes.OAStatus = mes.OASTATUS; ncrmes.ClosedTime = mes.modify_date; var ncrdoc=frame.ICSNCRDoc.Where(a => a.SecDocNO == mes.NCRCODE).FirstOrDefault(); if (ncrdoc != null) { ncrdoc.NGQty = Convert.ToDecimal(mes.NGQUANTITY); ncrdoc.OKQty = Convert.ToDecimal(mes.OKQUANTITY); ncrdoc.MTIME = DateTime.Now; ncrdoc.SecDocCreateTime = mes.modify_date; } else throw new Exception("获取ncr单据:"+mes.NCRCODE+"信息失败!"); var lotonwip = frame.ICSLOTSIMULATION.Where(a => a.LOTNO == ncrdoc.SrcDocInfo && a.OPCODE == ncrdoc.OPCode).FirstOrDefault(); if (lotonwip == null) throw new Exception("获取ncr单据:"+mes.NCRCODE+"对应的在制信息失败!"); lotonwip.GOODQTY = Convert.ToDecimal(mes.OKQUANTITY); lotonwip.NGQTY = Convert.ToDecimal(mes.NGQUANTITY); var lot = frame.ICSLOTONWIP.Where(a => a.LOTNO == ncrdoc.SrcDocInfo && a.OPCODE == ncrdoc.OPCode).FirstOrDefault(); lot.GOODQTY = Convert.ToInt32(mes.OKQUANTITY); lot.NGQTY = Convert.ToInt32(mes.NGQUANTITY); frame.SubmitChanges(); frame.Transaction.Commit(); } catch (Exception ex) { frame.Transaction.Rollback(); throw ex; } } public static List GetOPBOM(string LotNo, string opcode, string Appconstr) { List List = new List(); try { string sql = @" IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) ) DROP TABLE #TEMP_MODD IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) ) DROP TABLE #TEMP_MONewbom SELECT lot.lotqty, mo.itemcode, rr.routecode, mo.workpoint INTO #TEMP_MODD FROM icsitemlot lot LEFT JOIN icsmo mo ON mo.mocode= lot.TransNO AND mo.moseq= lot.TransLine AND mo.workpoint= lot.workpoint LEFT JOIN ICSMO2ROUTE rr ON rr.mocode= mo.mocode AND rr.moid= mo.id AND rr.workpoint= mo.workpoint WHERE lot.lotno= '" + LotNo + @"' SELECT itemcode, SBOMVER, workpoint INTO #TEMP_MONewbom FROM ( SELECT MM.itemcode , mm.SBOMVER , MM.workpoint, row_number ( ) OVER ( partition BY MM.itemcode ORDER BY mm.SBOMVER DESC ) rn FROM ICSSBOM MM WHERE EXISTS ( SELECT 1 FROM #TEMP_MODD DD WHERE MM.ITEMCODE= DD.ITEMCODE AND MM.workpoint= dd.workpoint ) ) gg WHERE rn = 1 SELECT ll.obitemcode, ll.obitemqty* dd.lotqty obitemqty FROM ICSOPBOMDETAIL ll INNER JOIN #TEMP_MONewbom bb ON bb.itemcode= ll.itemcode AND bb.WorkPoint= ll.workpoint and ll.opbomver=bb.SBOMVER INNER JOIN #TEMP_MODD dd ON dd.routecode= ll.obcode WHERE ll.opcode= '" + opcode + @"' IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) ) DROP TABLE #TEMP_MODD IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) ) DROP TABLE #TEMP_MONewbom "; DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0]; if (dt != null && dt.Rows.Count > 0) { foreach (DataRow dr in dt.Rows) { Material mm = new Material(); mm.materialCode = dr["obitemcode"].ToString(); mm.qty = Convert.ToInt32(Convert.ToDouble(dr["obitemqty"].ToString())); List.Add(mm); } } } catch (Exception ex) { throw new Exception(ex.Message); } return List; } } public class LOTMES { public string lotNo { get; set; } public string lotQty { get; set; } public string itemCode { get; set; } public string invName { get; set; } public string invStd { get; set; } public string moCode { get; set; } public string moSeq { get; set; } public List list1 { get; set; } } public class OPMES { public string opCode { get; set; } public string opDesc { get; set; } public List list { get; set; } } public class Material { public string materialCode { get; set; } public int qty { get; set; } } }