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; namespace ICSSoft.Frame.Data.DAL { public static class StockBarCodeDAL { public static void ImportData(List list,string ErpName) { SqlConnection conn = new System.Data.SqlClient.SqlConnection(AppConfig.AppConnectString); conn.Open(); SqlTransaction sqlTran = conn.BeginTransaction(); SqlCommand cmd = new SqlCommand(); cmd.Transaction = sqlTran; cmd.Connection = conn; try { foreach(InitialInvtory init in list){ string sql = @"SELECT cInvCode FROM {0}.dbo.CurrentStock WHERE cInvCode = '{1}' AND cBatch = '{2}' AND cWhCode = '{3}' AND iQuantity>='{4}'"; sql = string.Format(sql, ErpName,init.ItemCode, init.BatchCode, init.WhCode,init.Qty); cmd.CommandText = sql; DataTable currDt = SQlReturnData(cmd); if (currDt==null||currDt.Rows.Count==0) { throw new Exception("物料: " + init.ItemCode + "批号: " + init.BatchCode + "仓库: " + init.WhCode + "ERP现存量不足"); } sql = @"INSERT INTO [dbo].[ICSPurchasingStorage] ([Serial] ,[ItemCode] ,[ItemName] ,[ItemStd] ,[VenCode] ,[VenName] ,[ComUnit] ,[Rd01AutoID] ,[AssComUnit] ,[dDate] ,[BatchCode] ,[Quantity] ,[OutQuantity] ,[PackQuantiy] ,[Mtime] ,[Muser] ,[cFree1] ,[cFree2] ,[WorkPoint]) SELECT NEWID(),cInvCode,cInvName,cInvStd,a.cVenCode AS 供应商编码,a.cVenName AS 供应商名称, c.cComUnitName,'',d.cComUnitName,GETDATE(),'{1}' AS 批号,'{2}' AS 数量,'0','0',GETDATE(), '{3}' AS 维护人,'{6}','','0001' FROM {0}.dbo.Inventory b LEFT JOIN {0}.dbo.ComputationUnit c ON c.cComUnitCode = b.cComunitCode LEFT JOIN {0}.dbo.ComputationUnit d ON d.cComUnitCode = b.cAssComUnitCode ,{0}.dbo.Vendor a WHERE cInvCode = '{4}' AND a.cVenCode = '{5}'"; sql = string.Format(sql, ErpName,init.BatchCode,init.Qty,AppConfig.UserName,init.ItemCode,init.VenCode,init.WhCode); cmd.CommandText = sql; cmd.ExecuteNonQuery(); } cmd.Transaction.Commit(); }catch(Exception ex){ cmd.Transaction.Rollback(); throw ex; } } public static void stackMOPicking(string barCodeStr,Rd11Context Context, string MoNo) { string sql = ""; string ConnectString = AppConfig.AppConnectString; ///产成品入库单的CardNumber 0411 #region 默认代码 Context.ERPCardNumber = "0412"; #endregion #region 取得out库单的默认显示模版 sql = @" SELECT DEF_ID FROM {0}.dbo.Vouchers WHERE CardNumber = '{1}' "; sql = string.Format(sql, Context.ERPDataName, Context.ERPCardNumber); DataTable DEF_ID = DBHelper.ExecuteDataset(ConnectString, CommandType.Text, sql).Tables[0]; if (DEF_ID.Rows.Count == 0) { throw new Exception("产成品入库单的默认显示模版取得失败"); } Context.ERPDEF_ID = DEF_ID.Rows[0]["DEF_ID"].ToString(); DEF_ID.Clear(); #endregion SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnectString); conn.Open(); SqlTransaction sqlTran = conn.BeginTransaction(); SqlCommand cmd = new SqlCommand(); cmd.Transaction = sqlTran; cmd.Connection = conn; try { sql = @"SELECT BarCode FROM [dbo].[ICSStockBarCode] WHERE BarCode IN ({0}) AND Status !='入库'"; sql = string.Format(sql, barCodeStr); cmd.CommandText = sql; DataTable bDt = SQlReturnData(cmd); if (bDt != null && bDt.Rows.Count > 0) { throw new Exception("请选择状态为入库的条码进行出库!!"); } sql = @"SELECT DISTINCT b.Serial,b.StorageCode FROM dbo.ICSStorageInfo a INNER JOIN dbo.ICSStorage b ON a.Storage_Serial = b.Serial WHERE a.BarCode IN (" + barCodeStr + ")"; cmd.CommandText = sql; DataTable whDt = SQlReturnData(cmd); for (int w = 0; w < whDt.Rows.Count;w++ ) { #region 汇总信息 sql = @"SELECT ROW_NUMBER() OVER(ORDER BY a.ItemCode) AS row, CAST(0 AS DECIMAL(18,6)) AS qty,s.StorageCode, CAST(0 AS DECIMAL(18,6)) AS Numqty, a.ItemCode,0 as erpdid, loc.AllocateId,loc.SortSeq, inv.cComUnitCode,inv.cAssComUnitCode, c.iChangRate,info.Storage_Serial into ##rdqty FROM ICSStockBarCode a LEFT JOIN ICSPurchasingStorage b ON a.cFree1=b.Serial LEFT JOIN ICSStorageInfo info ON a.BarCode = info.BarCode LEFT JOIN dbo.ICSStorage s ON info.Storage_Serial = s.Serial LEFT JOIN {0}.dbo.ComputationUnit c ON b.AssComUnit = c.cComunitCode LEFT JOIN {0}.dbo.Inventory inv ON a.ItemCode=inv.cInvCode left join (select * from {0}.dbo.mom_moallocate where MoDId = '{3}') loc on a.ItemCode = loc.InvCode WHERE a.BarCode IN ({1}) and info.Storage_Serial = '{2}' GROUP BY a.ItemCode,inv.cComUnitCode,inv.cAssComUnitCode ,c.iChangRate,s.StorageCode,s.StorageCode, info.Storage_Serial,loc.AllocateId,loc.SortSeq SELECT * FROM ##rdqty"; sql = string.Format(sql, Context.ERPDataName, barCodeStr, whDt.Rows[w]["Serial"].ToString(), Context.MoDid); cmd.CommandText = sql; DataTable temp = SQlReturnData(cmd); if(temp == null || temp.Rows.Count==0){ throw new Exception(""); } DataTable barDt = new DataTable(); foreach (var dic in Context.Bar_Qty) { sql = @"SELECT a.ItemCode,c.iChangRate FROM ICSStockBarCode a LEFT JOIN ICSPurchasingStorage b ON a.cFree1=b.Serial LEFT JOIN ICSStorageInfo info ON a.BarCode = info.BarCode LEFT JOIN {0}.dbo.ComputationUnit c ON b.AssComUnit = c.cComunitCode WHERE a.BarCode = '{1}'"; sql = string.Format(sql, Context.ERPDataName,dic.Key); cmd.CommandText = sql; barDt = SQlReturnData(cmd); decimal qty = 0; decimal sum = 0; for (int i = 0; i < temp.Rows.Count; i++) { if (barDt.Rows[0]["ItemCode"].ToString() == temp.Rows[i]["ItemCode"].ToString()) { if (barDt.Rows[0]["iChangRate"].ToString() != "" && decimal.Parse(barDt.Rows[0]["iChangRate"].ToString()) != 0) { qty = decimal.Parse(dic.Value) * decimal.Parse(barDt.Rows[0]["iChangRate"].ToString()); sum = decimal.Parse(dic.Value); } else { qty = decimal.Parse(dic.Value); sum = 0; } sql = @"UPDATE ##rdqty SET qty =qty+ '{0}' ,Numqty = Numqty+'{1}' WHERE ItemCode = '{2}'"; sql = string.Format(sql, qty, sum, barDt.Rows[0]["ItemCode"].ToString()); cmd.CommandText = sql; int a = cmd.ExecuteNonQuery(); } } } #endregion #region 取得ERP的ID string num = "1000000000"; sql = @"select count(*) from ##rdqty"; cmd.CommandText = sql; DataTable RowCountDt = SQlReturnData(cmd); Context.ERPrdRowCount = Convert.ToInt32(RowCountDt.Rows[0][0]); int id = 0; int did = 0; SaveGetrdIDandAutoID(ConnectString, "材料出库", "rd", Context.ERPDataName.Substring(7, 3), Context.ERPrdRowCount, out id, out did); string strId = id.ToString(); Context.ERPrdID = int.Parse(num.Substring(0, num.Length - strId.Length) + strId); string strDid = did.ToString(); Context.ERPrdDid = int.Parse(num.Substring(0, num.Length - strDid.Length) + strDid); #endregion #region 取得ERP的Code sql = @"DECLARE @Code nvarchar(100) set @Code = '' UPDATE VoucherHistory SET cNumber = cNumber + 1 FROM {0}.dbo.VoucherHistory WHERE CardNumber = '{1}' SELECT @Code = '0000000000' + CAST(cNumber AS NVARCHAR(50)) FROM {0}.dbo.VoucherHistory WHERE CardNumber = '{1}' SET @Code = RIGHT(@Code,10) select @Code"; sql = string.Format(sql, Context.ERPDataName, Context.ERPCardNumber); cmd.CommandText = sql; DataTable codedt = SQlReturnData(cmd); if (codedt.Rows[0][0].ToString() == "") { sql = "insert into {0}.dbo.VoucherHistory values('0411',null,'日期','月','null',1,0)"; sql = string.Format(sql, Context.ERPDataName); SQlInsertAndUpdate(sql, conn, sqlTran, cmd); Context.ERPrdCode = "0000000001"; } if (codedt.Rows[0][0].ToString() != "") { Context.ERPrdCode = codedt.Rows[0][0].ToString(); } if (Context.ERPrdCode == "") { throw new Exception("产成品入库单号取得失败"); } sql = @"IF EXISTS (SELECT cCode FROM {1}.dbo.rdrecord11 WHERE ccode = '{0}' and cVouchType = '10') RAISERROR('产成品入库单号重复,保存失败',16,0)"; sql = string.Format(sql, Context.ERPrdCode, Context.ERPDataName); cmd.CommandText = sql; cmd.ExecuteNonQuery(); #endregion #region 写入表头 sql = @"INSERT INTO {0}.dbo.rdrecord11 (ID,bRdFlag,cVouchType,cBusType,cSource,cWhCode,dDate,cCode,cRdCode,cDepCode, cHandler,cMemo,bTransFlag,cMaker,dVeriDate,bpufirst,biafirst,iMQuantity,VT_ID,bIsSTQc, iproorderid,bOMFirst,bFromPreYear,bIsComplement,iDiscountTaxType,ireturncount,iverifystate, iswfcontrolled,dnmaketime,dnverifytime,bredvouch,bmotran,bHYVouch,iPrintCount,cMPoCode) VALUES (@ID,'0','11','领料','生产订单号',@cWhCode,CONVERT(varchar(15), GETDATE(), 23) ,@cCode,@cRdCode,@cDepCode, null,@cMemo,'0',@cMaker,null,'0','0','0',@VT_ID,'0', @iproorderid,'0','0','0','0','0','0','0',GETDATE(),null,'0','0','0','0',@cMPoCode)"; sql = string.Format(sql, Context.ERPDataName); cmd.CommandText = sql; cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@ID", Context.ERPrdID); cmd.Parameters.AddWithValue("@cWhCode", whDt.Rows[w]["StorageCode"].ToString()); cmd.Parameters.AddWithValue("@cCode", Context.ERPrdCode); cmd.Parameters.AddWithValue("@cRdCode", Context.ERPrdcRdCode); cmd.Parameters.AddWithValue("@cDepCode", Context.ERPDeptCode); //cmd.Parameters.AddWithValue("@cHandler", DBNull.Value); cmd.Parameters.AddWithValue("@cMemo", ""); cmd.Parameters.AddWithValue("@cMaker", Context.UserName); cmd.Parameters.AddWithValue("@VT_ID", Context.ERPDEF_ID); cmd.Parameters.AddWithValue("@iproorderid", Context.MoId); cmd.Parameters.AddWithValue("@cMPoCode",MoNo); cmd.ExecuteNonQuery(); #endregion #region 更新表体ID sql = @"SELECT * FROM ##rdqty"; cmd.CommandText = sql; DataTable dt = SQlReturnData(cmd); int rowNo = 1; for (int i = 0; i < dt.Rows.Count; i++) { sql = @"update ##rdqty set erpdid = {0} where row='{1}' "; sql = string.Format(sql, Context.ERPrdDid, rowNo); Context.ERPrdDid -= 1; rowNo++; cmd.CommandText = sql; cmd.ExecuteNonQuery(); } #endregion #region 写入表体 sql = @"INSERT INTO {0}.dbo.rdrecords11 (AutoID,ID,cInvCode,iNum,iQuantity,cFree1,cFree2,iFlag,cFree3,cAssUnit,bLPUseFree, iOriTrackID,bCosting,bVMIUsed,iinvexchrate,iExpiratDateCalcu,iordertype,isotype,ipesotype, irowno,iMPoIds,cmocode,imoseq,ipesodid,cpesocode,ipesoseq) SELECT erpdid,@ID,ItemCode,Numqty,qty,'','','0','',cAssComUnitCode,'0', '0','1','0',iChangRate,'0','0','0','0',row,AllocateId,'{1}',SortSeq,AllocateId,'{1}',SortSeq FROM ##rdqty"; sql = string.Format(sql, Context.ERPDataName,MoNo); cmd.CommandText = sql; cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@ID", Context.ERPrdID); cmd.ExecuteNonQuery(); #endregion #region 判断现存量 foreach (DataRow dr in dt.Rows) { int ItemID = -1; string invcode = dr["itemcode"].ToString(); string iinvexchrate = dr["iChangRate"].ToString(); string cWhcode = whDt.Rows[w]["StorageCode"].ToString(); double qty = double.Parse(dr["qty"].ToString()); #region 取得物料的itemID sql = @"IF NOT EXISTS( SELECT Id FROM {0}.dbo.SCM_Item WHERE cinvcode = '{1}') BEGIN INSERT INTO {0}.dbo.SCM_Item(cInvCode , cFree1 , cFree2 , cFree3 , cFree4 , cFree5 , cFree6 , cFree7 , cFree8 , cFree9 , cFree10 , PartId) VALUES('{1}','','','','','','','','','','',0) END SELECT Id FROM {0}.dbo.SCM_Item WHERE cinvcode = '{1}'"; sql = string.Format(sql, Context.ERPDataName, invcode); cmd.CommandText = sql; DataTable Itemdt = SQlReturnData(cmd); if (Itemdt.Rows.Count == 0) { throw new Exception("物料的ItemID取得失败"); } ItemID = int.Parse(Itemdt.Rows[0]["Id"].ToString()); #endregion //判断现存量是否符合 #region 更新失败,插入现存量 sql = @"IF NOT EXISTS (SELECT AutoID FROM {0}.dbo.CurrentStock WHERE cWhCode = '{2}' AND cInvCode = '{3}' AND ItemId = '{4}' and iQuantity >= '{1}') BEGIN RAISERROR('ERP现存量不足!!',16,0) END "; sql = string.Format(sql, Context.ERPDataName, qty, cWhcode, invcode, ItemID); cmd.CommandText = sql; cmd.ExecuteNonQuery(); sql = @"UPDATE {0}.dbo.CurrentStock SET iQuantity = iQuantity-{1} WHERE cWhCode = '{2}' AND cInvCode = '{3}' AND ItemId = '{4}' "; sql = string.Format(sql, Context.ERPDataName, qty, cWhcode, invcode, ItemID); cmd.CommandText = sql; cmd.ExecuteNonQuery(); #endregion } #endregion #region 写入记账表 sql = @" INSERT INTO {0}.[dbo].[IA_ST_UnAccountVouch11] SELECT '{1}',erpdid,'{2}','{3}' FROM ##rdqty "; sql = string.Format(sql, Context.ERPDataName, Context.ERPrdID, "11", "领料"); cmd.CommandText = sql; cmd.ExecuteNonQuery(); #endregion #region 回写工单子件领料数量 sql = @"update b set b.IssQty = b.IssQty+a.qty from ##rdqty a inner join {0}.dbo.mom_moallocate b on a.AllocateId = b.AllocateId"; sql = string.Format(sql, Context.ERPDataName); cmd.CommandText = sql; cmd.ExecuteNonQuery(); #endregion #region 将入库单的ID,DID,Code,ERPName 回写 MES数据库 sql = @"INSERT INTO [dbo].[ICSMOStorageINERP] ([Serial] ,[BarCode] ,[rdTypeName] ,[rdID] ,[rdDID] ,[rdCode] ,[rdDate] ,[WorkPoint]) SELECT distinct NEWID(),a.BarCode,'材料出库','{0}',b.erpdid,'{1}','{2}','{3}' FROM dbo.ICSStockBarCode a LEFT JOIN ICSStorageInfo c ON a.BarCode = c.BarCode left join ##rdqty b on a.itemcode = b.itemcode where a.BarCode in ({4}) AND c.Storage_Serial = '{5}' drop table ##rdqty"; sql = string.Format(sql, id, Context.ERPrdCode, Context.UserTime, AppConfig.WorkPointCode, barCodeStr, whDt.Rows[w]["Serial"].ToString()); cmd.CommandText = sql; int s = cmd.ExecuteNonQuery(); #endregion } #region 修改MES数据库表 string sqlStr = ""; foreach (var dic in Context.Bar_Qty) { sql = @"SELECT SUM(Qty) AS Qty FROM [dbo].[ICSMOPicking] WHERE BarCode = '" + dic.Key + "' GROUP BY BarCode"; cmd.CommandText = sql; DataTable outQty = SQlReturnData(cmd); if (outQty == null || outQty.Rows.Count == 0) { sqlStr = @"DELETE a FROM dbo.ICSStorageInfo a INNER JOIN dbo.ICSStockBarCode b ON a.barcode = b.barcode WHERE a.BarCode = '{0}' AND b.quantity = '{1}'"; sqlStr = string.Format(sqlStr, dic.Key, dic.Value); cmd.CommandText = sqlStr; cmd.ExecuteNonQuery(); sqlStr = @" UPDATE dbo.ICSStockBarCode SET Status = '领料出库' WHERE quantity = '" + dic.Value + @"' and BarCode = '" + dic.Key + "'"; cmd.CommandText = sqlStr; cmd.ExecuteNonQuery(); } else { decimal d = decimal.Parse(dic.Value) + decimal.Parse(outQty.Rows[0]["Qty"].ToString()); sqlStr = @"DELETE a FROM dbo.ICSStorageInfo a INNER JOIN dbo.ICSStockBarCode b ON a.barcode = b.barcode WHERE a.BarCode = '{0}' AND b.quantity = '{1}'"; sqlStr = string.Format(sqlStr, dic.Key, d); cmd.CommandText = sqlStr; cmd.ExecuteNonQuery(); sqlStr = @" UPDATE dbo.ICSStockBarCode SET Status = '领料出库' WHERE quantity = '" + d + @"' and BarCode = '" + dic.Key + "'"; cmd.CommandText = sqlStr; cmd.ExecuteNonQuery(); } sqlStr = @"INSERT INTO [dbo].[ICSMOPicking] ([Serial] ,[MoCode] ,[BarCode] ,[Mtime] ,[Muser] ,[WorkPoint],Qty) VALUES (NEWID(),'{0}','{1}',GETDATE(),'{2}','{3}','{4}')"; sqlStr = string.Format(sqlStr, MoNo, dic.Key, AppConfig.UserName, AppConfig.WorkPointCode, dic.Value); cmd.CommandText = sqlStr; cmd.ExecuteNonQuery(); } sql = @"UPDATE b SET b.OutQuantity = b.OutQuantity+a.qty FROM (SELECT SUM(Quantity) AS qty,cFree1 FROM dbo.ICSStockBarCode WHERE BarCode IN (" + barCodeStr + @") GROUP BY cFree1) a INNER JOIN ICSPurchasingStorage b ON a.cFree1 = b.Serial"; cmd.CommandText = sql; cmd.ExecuteNonQuery(); #endregion //throw new Exception("操作完成那个,取消保存,来进行下一次测试"); cmd.Transaction.Commit(); } catch (Exception ex) { cmd.Transaction.Rollback(); throw ex; } } public static ICSStockBarCode query(string cartonNo) { FramDataContext db = new FramDataContext(AppConfig.AppConnectString); db.Connection.Open(); try { var line = db.ICSStockBarCode.SingleOrDefault(a => a.BarCode == cartonNo && a.WorkPoint == AppConfig.WorkPointCode); return (ICSStockBarCode)line; } catch (Exception ex) { throw ex; } } public static DataTable Stockquery(string cartonNo) { try { string sql = @"SELECT a.BarCode,a.Quantity,b.ItemCode,b.ItemName,b.ItemStd, b.BatchCode,b.ComUnit,b.AssComUnit,a.Status FROM dbo.ICSStockBarCode a LEFT JOIN dbo.ICSPurchasingStorage b ON a.cFree1 = b.Serial WHERE a.BarCode='" + cartonNo + "'"; return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } public static DataTable StockQuerys(string cartonNo) { try { string sql = @"SELECT a.BarCode,(a.Quantity-ISNULL(c.Qty,0)) as Qty ,b.ItemCode,b.ItemName,b.ItemStd, b.BatchCode,b.ComUnit,b.AssComUnit,a.Status FROM dbo.ICSStockBarCode a LEFT JOIN dbo.ICSPurchasingStorage b ON a.cFree1 = b.Serial left join (SELECT SUM(Qty) AS Qty,BarCode FROM [dbo].[ICSMOPicking] WHERE BarCode = '" + cartonNo + "' GROUP BY BarCode) c on a.BarCode = c.BarCode WHERE a.BarCode='" + cartonNo + "'"; return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } public static DataTable getMaxNO(string conn) { try { string sql = @"SELECT MAX(BarCode) AS maxBarCode FROM dbo.ICSStockBarCode"; return DBHelper.ExecuteDataset(conn, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } public static DataTable querys(string erpName,string cartonNo) { try { string sql = @"SELECT a.[Serial] ,a.[SelectID] ,a.[CartonNO] ,a.[PackingSpec] ,a.[Collected] ,a.[BatchCode] ,a.[ItemCode] ,a.[CartonStatus] ,a.[MUSER] ,a.[MUSERName] ,a.[MTIME] ,a.[EATTRIBUTE1] ,a.[WorkPoint] ,b.MadeDate,b.ItemStd,c.UserCode,e.cDepName,d.cDept_num FROM [ICSCarton] a LEFT JOIN dbo.ICSItemLot b ON a.BatchCode=b.BatchCode LEFT JOIN Sys_User c ON a.MUSER = c.ID LEFT JOIN {0}.dbo.hr_hi_person d ON c.UserCode=d.cPsn_Num LEFT JOIN {0}.dbo.Department e ON d.cDept_num=e.cDepCode WHERE a.CartonNO='{1}'"; sql = string.Format(sql, erpName, cartonNo); return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } public static DataTable queryInfo( string cartonNo) { try { string sql = @"SELECT e.ItemCode,e.ItemName,e.ItemStd,e.BatchCode,b.CartonNO,b.Collected, c.StorageName,d.rdcCode,ISNULL(a.Stack_Serial,'') as Stack_Serial,f.StackName FROM dbo.ICSStorageLotInfo a LEFT JOIN dbo.ICSCarton b ON a.Carton_Serial=b.Serial LEFT JOIN dbo.ICSStorage c ON a.Storage_Serial=c.Serial LEFT JOIN dbo.ICSStack f ON a.Stack_Serial=f.Serial LEFT JOIN dbo.ICSCartionERPLinkInfo d ON b.Serial=d.CartonSerial LEFT JOIN dbo.ICSItemLot e ON b.BatchCode=e.BatchCode WHERE d.rdcCode=(SELECT rdcCode FROM dbo.ICSCartionERPLinkInfo a LEFT JOIN dbo.ICSCarton b ON a.CartonSerial=b.Serial WHERE b.CartonNO='{0}')"; sql = string.Format(sql, cartonNo); return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } public static DataTable queryByNo(string cartonNo) { try { string sql = @"SELECT e.ItemCode,e.ItemName,e.ItemStd,e.BatchCode,b.CartonNO,b.Collected, c.StorageName,d.rdcCode,ISNULL(a.Stack_Serial,'') FROM dbo.ICSStorageLotInfo a LEFT JOIN dbo.ICSCarton b ON a.Carton_Serial=b.Serial LEFT JOIN dbo.ICSStorage c ON a.Storage_Serial=c.Serial LEFT JOIN dbo.ICSCartionERPLinkInfo d ON b.Serial=d.CartonSerial LEFT JOIN dbo.ICSItemLot e ON b.BatchCode=e.BatchCode WHERE b.CartonNO='{0}' AND a.Stack_Serial is NULL"; sql = string.Format(sql, cartonNo); return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } public static DataTable outQuery(string cartonNo) { try { string sql = @"SELECT a.[BatchCode] ,a.[ItemCode] ,a.[Storage_Serial] ,a.[Stack_Serial] ,a.[Carton_Serial] ,b.PackingSpec ,b.CartonNO ,b.CartonStatus ,c.ItemStd ,c.ItemName ,c.MadeDate ,d.StorageCode FROM [ICSStorageLotInfo] a LEFT JOIN dbo.ICSCarton b ON a.Carton_Serial=b.Serial LEFT JOIN dbo.ICSItemLot c ON a.BatchCode=c.BatchCode LEFT JOIN dbo.ICSStorage d ON a.Storage_Serial=d.Serial WHERE b.CartonNO='" + cartonNo + "'"; return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } public static void update(ICSStockBarCode carton) { //FramDataContext db = new FramDataContext(AppConfig.AppConnectString); //db.Connection.Open(); //db.Transaction = db.Connection.BeginTransaction(); //try //{ // var line = db.ICSStockBarCode.SingleOrDefault(a => a.Serial == carton.Serial); // line.Status = carton.Status; // line.Mtime = carton.Mtime; // line.Muser = AppConfig.UserName; // line.WorkPoint = AppConfig.WorkPointCode; // db.SubmitChanges(); // db.Transaction.Commit(); //} //catch (Exception ex) //{ // db.Transaction.Rollback(); // throw ex; //} } /// /// 生成箱号条形码 /// /// /// public static void CreatebarCode(List Listguid, string Appconstr, string PSerial, decimal sumPack) { //FramDataContext db = new FramDataContext(Appconstr); //db.Connection.Open(); //db.Transaction = db.Connection.BeginTransaction(); //try //{ // string autoID = ""; // string whcode = ""; // string whSerial = ""; // var puLine = db.ICSPurchasingStorage.SingleOrDefault(a => a.Serial == PSerial); // if (puLine != null) // { // autoID = puLine.Rd01AutoID; // whcode = puLine.cFree1; // } // foreach (CartonNoCreat TBLIcsCartonNo in Listguid) // { // bool isNew = false; // var line = db.ICSStockBarCode.SingleOrDefault(a => a.Serial == TBLIcsCartonNo.serial); // if (line != null) // { // continue; // } // var lines = db.ICSStockBarCode.Where(a => a.BarCode == TBLIcsCartonNo.BarCode && a.WorkPoint == AppConfig.WorkPointCode).ToList(); // if (lines.Count() > 0) // { // throw new Exception("条码出现重复"); // } // if (string.IsNullOrEmpty(autoID)) // { // var storageLine = db.ICSStorage.SingleOrDefault(a => a.StorageCode == whcode); // if (storageLine != null) // { // whSerial = storageLine.Serial; // } // TBLIcsCartonNo.Status = "入库"; // ICSStorageInfo puInfo = new ICSStorageInfo(); // puInfo.Serial = AppConfig.GetGuid(); // puInfo.BarCode = TBLIcsCartonNo.BarCode; // puInfo.ItemType = "原料"; // puInfo.Storage_Serial = whSerial; // puInfo.Stack_Serial = "2f77085c-1a32-4a15-b71d-424266f5b682"; // puInfo.Muser = AppConfig.UserName; // puInfo.Mtime = DateTime.Now; // puInfo.WorkPoint = "0001"; // db.ICSStorageInfo.InsertOnSubmit(puInfo); // } // isNew = true; // line = new ICSStockBarCode(); // line.Serial = TBLIcsCartonNo.serial; // line.BarCode = TBLIcsCartonNo.BarCode; // line.BatchCode = TBLIcsCartonNo.BatchCode; // line.ItemCode = TBLIcsCartonNo.ItemCode; // line.Quantity = decimal.Parse(TBLIcsCartonNo.Quantity.ToString()); // line.Status = TBLIcsCartonNo.Status; // line.Muser = TBLIcsCartonNo.Muser; // line.cFree1 = TBLIcsCartonNo.cFree1; // line.Mtime = DateTime.Parse(TBLIcsCartonNo.Mtime); // line.WorkPoint = AppConfig.WorkPointCode; // if (isNew) db.ICSStockBarCode.InsertOnSubmit(line); // } // var purch = db.ICSPurchasingStorage.SingleOrDefault(a => a.Serial == PSerial); // if (purch != null) // { // purch.PackQuantiy = purch.PackQuantiy + sumPack; // } // db.SubmitChanges(); // db.Transaction.Commit(); //} //catch (Exception ex) //{ // db.Transaction.Rollback(); // throw new Exception(ex.Message); //} } /// /// 分箱 /// /// /// public static void CartonOpenOri(List Listguid, string NewQty, string Appconstr) { //FramDataContext db = new FramDataContext(Appconstr); //db.Connection.Open(); //db.Transaction = db.Connection.BeginTransaction(); //try //{ // foreach(string serial in Listguid) // { // var line = db.ICSStockBarCode.SingleOrDefault(a => a.Serial == serial); // if(line!=null) // { // decimal OriginQty = decimal.Parse(line.Quantity.ToString()); // line.WorkPoint = AppConfig.WorkPointCode; // } // } // db.SubmitChanges(); // db.Transaction.Commit(); //} //catch(Exception ex) //{ // throw ex; //} } /// /// 分箱 /// /// /// /// /// /// /// public static void CartonOpenNew(Listlist,string oldBarCode,string NewCartonNo,decimal NewQty,string Appcon) { // SqlConnection conn = new SqlConnection(Appcon); // conn.Open(); // SqlCommand cmd = new SqlCommand(); // SqlTransaction trans = conn.BeginTransaction(); // cmd.Transaction = trans; // cmd.Connection = conn; // FramDataContext db = new FramDataContext(Appcon); // db.Connection.Open(); // try // { // foreach(string ID in list) // { // DataTable dt = findBySerial(ID); // string strSql = @"UPDATE dbo.ICSStockBarCode SET Quantity=Quantity-{0}, // Muser='{1}',Mtime='{2}' // WHERE Serial='{3}'"; // strSql = string.Format(strSql, NewQty, // AppConfig.UserName,DateTime.Now,ID); // cmd.CommandType = CommandType.Text; // cmd.CommandText = strSql; // cmd.ExecuteNonQuery(); // //string SelectID = dt.Rows[0]["SelectID"].ToString(); // string BatchCode = dt.Rows[0]["BatchCode"].ToString(); // string ItemCode = dt.Rows[0]["ItemCode"].ToString(); // //decimal PackingSpec = decimal.Parse(dt.Rows[0]["PackingSpec"].ToString()); // string serial=AppConfig.GetGuid(); // string insertSql = @"INSERT INTO [ICSStockBarCode] // ([Serial] // ,[BarCode] // ,[ItemCode] // ,[BatchCode] // ,[Quantity] // ,[Status] // ,[Mtime] // ,[Muser] // ,[cFree1] // ,[cFree2] // ,[WorkPoint]) // VALUES // ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')"; // insertSql = string.Format(insertSql, serial, NewCartonNo, ItemCode, BatchCode, NewQty, // "入库",AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"), // AppConfig.UserName, dt.Rows[0]["cFree1"].ToString(), "", AppConfig.WorkPointCode); // cmd.CommandType = CommandType.Text; // cmd.CommandText = insertSql; // cmd.ExecuteNonQuery(); // var LotInfo = db.ICSStorageInfo.SingleOrDefault(a => a.BarCode == oldBarCode); // string itemType = LotInfo.ItemType; // string Storage_Serial = LotInfo.Storage_Serial; // string Stack_Serial = LotInfo.Stack_Serial; // string LotGuid = AppConfig.GetGuid(); // var LotInfoNewline = db.ICSStorageInfo.SingleOrDefault(a => a.BarCode == LotGuid); // if (LotInfoNewline == null) // { // LotInfoNewline = new ICSStorageInfo(); // LotInfoNewline.Serial = LotGuid; // LotInfoNewline.BarCode = NewCartonNo; // LotInfoNewline.ItemType = itemType; // LotInfoNewline.Storage_Serial = Storage_Serial; // LotInfoNewline.Stack_Serial = Stack_Serial; // LotInfoNewline.Mtime = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss"); // LotInfoNewline.Muser = AppConfig.UserName; // LotInfoNewline.WorkPoint = AppConfig.WorkPointCode; // } // db.ICSStorageInfo.InsertOnSubmit(LotInfoNewline); // } // db.SubmitChanges(); // trans.Commit(); // } // catch(Exception ex) // { // throw ex; // } } /// /// 合箱 /// /// /// public static void CartonClose(List Listguid,List Delguid, string Appconstr) { //FramDataContext db = new FramDataContext(Appconstr); //db.Connection.Open(); //db.Transaction = db.Connection.BeginTransaction(); //try //{ // foreach (CartonNoCreat TBLIcsCartonNo in Listguid) // { // var line = db.ICSStockBarCode.SingleOrDefault(a => a.Serial == TBLIcsCartonNo.serial); // if(line!=null) // { // line.Quantity = decimal.Parse(TBLIcsCartonNo.Quantity.ToString()); // line.Muser = AppConfig.UserName; // line.Mtime = AppConfig.GetSeverDateTime("yyyy-MM-dd"); // line.WorkPoint = AppConfig.WorkPointCode; // } // } // foreach (CartonNoCreat TBLIcsCartonNo in Delguid) // { // var line = db.ICSStockBarCode.SingleOrDefault(a => a.Serial == TBLIcsCartonNo.serial); // if (line != null) // { // db.ICSStockBarCode.DeleteOnSubmit(line); // } // var lines = db.ICSStorageInfo.Where(a => a.BarCode.Contains(TBLIcsCartonNo.BarCode)); // if (lines != null) // { // db.ICSStorageInfo.DeleteAllOnSubmit(lines); // } // } // db.SubmitChanges(); // db.Transaction.Commit(); //} //catch(Exception ex) //{ // throw ex; //} } /// /// 修改箱号 /// /// /// /// public static void CartonNoModify(string serial,string Collect, string AppStr) { //FramDataContext db = new FramDataContext(AppStr); //db.Connection.Open(); //db.Transaction = db.Connection.BeginTransaction(); //try //{ // var line = db.ICSStockBarCode.SingleOrDefault(a => a.Serial == serial); // if(line!=null) // { // line.Quantity = decimal.Parse(Collect); // line.Muser = AppConfig.UserName; // line.Mtime = AppConfig.GetSeverDateTime("yyyy-MM-dd"); // line.WorkPoint = AppConfig.WorkPointCode; // } // db.SubmitChanges(); // db.Transaction.Commit(); //} //catch(Exception ex) //{ // throw ex; //} } /// /// 删除箱号 /// /// /// public static List CartonNoDel(List> Guidlist, string AppStr) { List DelSuccess = new List(); FramDataContext db = new FramDataContext(AppStr); db.Connection.Open(); db.Transaction = db.Connection.BeginTransaction(); try { bool b = true; string carton = ""; foreach (KeyValuePair strvalue in Guidlist.ToArray()) { //var line = db.ICSStockBarCode.SingleOrDefault(a => a.Serial == strvalue.Key); //if (line != null) //{ // db.ICSStockBarCode.DeleteOnSubmit(line); //} if (b == true) { carton = "" + "'" + strvalue.Value + "'" + ""; b = false; } else { carton += "" + ",'" + strvalue.Value + "'" + ""; } } string sql = @"UPDATE dbo.ICSPurchasingStorage SET PackQuantiy = ISNULL(PackQuantiy,0)- pack.sumPack FROM dbo.ICSPurchasingStorage lot ,(SELECT cFree1, SUM(Quantity) AS sumPack FROM ICSStockBarCode WHERE BarCode IN (" + carton + ") GROUP BY cFree1) pack WHERE lot.Serial=pack.cFree1"; DBHelper.ExecuteNonQuery(AppStr, CommandType.Text, sql); db.SubmitChanges(); db.Transaction.Commit(); } catch (Exception ex) { db.Transaction.Rollback(); throw ex; } return DelSuccess; } #region ICSItemLot 实体类 public class CartonNoCreat { public string serial { get; set; } public string BarCode { get; set; } public string ItemCode { get; set; } public string BatchCode { get; set; } public decimal Quantity { get; set; } public string Status { get; set; } public string Mtime { get; set; } public string Muser { get; set; } public string cFree1 { get; set; } public string cFree2 { get; set; } public string WorkPoint { get; set; } } #endregion public static void search(List guidList1, string appstr) { FramDataContext db = new FramDataContext(appstr); db.Connection.Open(); try { var line = db.ICSStockBarCode.Where(a => guidList1.Contains(a.BatchCode) && a.WorkPoint == AppConfig.WorkPointCode); if (line.ToList().Count > 0 ) { throw new Exception("批号已使用不可操作"); } } catch (Exception ex) { throw ex; } } public static DataTable findBySerial(string serial) { try { string sql = @"SELECT [Serial] ,[BarCode] ,[ItemCode] ,[BatchCode] ,[Quantity] ,[Status] ,[Mtime] ,[Muser] ,[cFree1] ,[cFree2] ,[WorkPoint] FROM [ICSStockBarCode] WHERE Serial='" + serial + "'"; return DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0]; } catch (Exception ex) { throw ex; } } /// /// 生成箱号条形码 /// /// /// public static void UpdateLotPack(string Batch, decimal sumPack, string Appconstr, string PSerial) { //FramDataContext db = new FramDataContext(Appconstr); //db.Connection.Open(); //db.Transaction = db.Connection.BeginTransaction(); //try //{ // var line = db.ICSPurchasingStorage.SingleOrDefault(a => a.Serial == PSerial); // if (line != null) // { // line.PackQuantiy = line.PackQuantiy+sumPack; // } // db.SubmitChanges(); // db.Transaction.Commit(); //} //catch (Exception ex) //{ // db.Transaction.Rollback(); // throw new Exception(ex.Message); //} } #region SQL事物操作函数以及ERP的ID的读取与写入的 /// 插入或更新的操作 /// /// /// /// /// private static int SQlInsertAndUpdate(string SQl, SqlConnection conn, SqlTransaction sqlTran, SqlCommand cmd) { cmd.Connection = conn; cmd.CommandText = SQl; cmd.Transaction = sqlTran; return cmd.ExecuteNonQuery(); } /// /// 查询SQL /// /// /// /// /// private static DataTable SQlReturnData(SqlCommand cmd) { DataTable dt = new DataTable(); SqlDataAdapter dr = new System.Data.SqlClient.SqlDataAdapter(); dr.SelectCommand = cmd; dr.Fill(dt); return dt; } private static void SaveGetrdIDandAutoID(string connectstring, string returnTxt, string IDtype, string cAcc_id, int rowCount, out int id, out int autoID) { try { string str = @"DECLARE @ID int DECLARE @DID int SET @ID = 0 SET @DID = 0 IF NOT EXISTS (SELECT * FROM ufsystem..ua_identity WHERE cacc_id = '{0}' AND cVouchType = '{1}') INSERT INTO ufsystem..ua_identity(cAcc_Id,cVouchType,iFatherId,iChildId) VALUES('{0}','{1}',1,1) SELECT @ID = ifatherID + 1 ,@DID = ichildID + {2} FROM ufsystem..ua_identity WHERE cVouchType = '{1}' AND cAcc_id = '{0}' UPDATE ufsystem..ua_identity SET ifatherID = ifatherID + 1,ichildID = ichildID + {2} WHERE cVouchType = '{1}' AND cAcc_id = '{0}' select @ID as ID,@DID as DID"; str = string.Format(str, cAcc_id, IDtype, rowCount.ToString()); DataTable dt = DBHelper.ExecuteDataset(connectstring, CommandType.Text, str).Tables[0]; if (dt.Rows.Count == 0) { throw new Exception("ID取得失败"); } id = Convert.ToInt32(dt.Rows[0]["ID"]); autoID = Convert.ToInt32(dt.Rows[0]["DID"]); } catch (Exception ex) { throw new Exception(returnTxt + ex.Message); } } #endregion } public class Rd11Context { public string ERPDataName { get; set; } public string WorkPointCode { get; set; } public string UserName { get; set; } public DateTime UserTime { get; set; } public string Storage_Serial { get; set; } public string Stack_Serial { get; set; } public string ERPDeptCode { get; set; } public string ERPrdCode { get; set; } public string ERPrdcRdCode { get; set; } public int ERPrdID { get; set; } public int ERPrdDid { get; set; } public int ERPrdRowCount { get; set; } public string ERPcWhCode { get; set; } public string ERPrdPerson { get; set; } public string ERPcMaker { get; set; } public string ERPrdcDate { get; set; } public string ERPDEF_ID { get; set; } public string ERPCardNumber { get; set; } public string ERPcPersonCode { get; set; } public string MoDid { get; set; } public string MoId { get; set; } public Dictionary Bar_Qty { get; set; } } public class InitialInvtory { public string ItemCode { get; set; } public string BatchCode { get; set; } public string Qty { get; set; } public string VenCode { get; set; } public string WhCode { get; set; } public string Free1 { get; set; } public string Free2 { get; set; } public string Free3 { get; set; } public string AuxUnitCode { get; set; } public string AuxQty { get; set; } public string Line { get; set; } } }