using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Mesnac.Action.Base; using Mesnac.Controls.Base; using Mesnac.Controls.Default; using System.Windows.Forms; using Mesnac.Codd.Session; using System.IO; using System.Xml; using System.Xml.Serialization; namespace Mesnac.Action.Feeding.Technology { public class NetRecipe { private int IniBasMaterial(DbHelper localHelper, DbHelper serverHelper, string materialCode) { int Result = 0; #region BasMaterial serverHelper.CommandType = CommandType.Text; string sqlstr = @"SELECT * FROM dbo.BasMaterial WHERE MaterialCode=@MaterialCode"; serverHelper.CommandText = sqlstr; serverHelper.ClearParameter(); serverHelper.AddParameter("@MaterialCode", materialCode); DataTable dt = serverHelper.ToDataTable(); if (dt.Rows.Count == 0) { return Result; } Result = 1; sqlstr = @"DELETE FROM dbo.BasMaterial WHERE MaterialCode=@MaterialCode"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@MaterialCode", materialCode); localHelper.ExecuteNonQuery(); sqlstr = @"INSERT INTO dbo.BasMaterial ( MaterialCode , MajorTypeID , MinorTypeID , RubCode , MaterialName , MaterialOtherName , MaterialSimpleName , MaterialLevel , MaterialGroup , ProductMaterialCode , UserCode , PlanPrice , ProductArea , MinStock , MaxStock , UnitID , StaticUnitID , StaticUnitCoefficient , CheckPermitError , MaxParkTime , MinParkTime , DefineDate , StandardCode , StaticClass , IsEqualMaterial , IsPutJar , ERPCode , Remark , DeleteFlag ) values ( @MaterialCode , @MajorTypeID , @MinorTypeID , @RubCode , @MaterialName , @MaterialOtherName , @MaterialSimpleName , @MaterialLevel , @MaterialGroup , @ProductMaterialCode , @UserCode , @PlanPrice , @ProductArea , @MinStock , @MaxStock , @UnitID , @StaticUnitID , @StaticUnitCoefficient , @CheckPermitError , @MaxParkTime , @MinParkTime , @DefineDate , @StandardCode , @StaticClass , @IsEqualMaterial , @IsPutJar , @ERPCode , @Remark , @DeleteFlag )"; foreach (DataRow dr in dt.Rows) { localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("MaterialCode", dr["MaterialCode"]); localHelper.AddParameter("MajorTypeID", dr["MajorTypeID"]); localHelper.AddParameter("MinorTypeID", dr["MinorTypeID"]); localHelper.AddParameter("RubCode", dr["RubCode"]); localHelper.AddParameter("MaterialName", dr["MaterialName"]); localHelper.AddParameter("MaterialOtherName", dr["MaterialOtherName"]); localHelper.AddParameter("MaterialSimpleName", dr["MaterialSimpleName"]); localHelper.AddParameter("MaterialLevel", dr["MaterialLevel"]); localHelper.AddParameter("MaterialGroup", dr["MaterialGroup"]); localHelper.AddParameter("ProductMaterialCode", dr["ProductMaterialCode"]); localHelper.AddParameter("UserCode", dr["UserCode"]); localHelper.AddParameter("PlanPrice", dr["PlanPrice"]); localHelper.AddParameter("ProductArea", dr["ProductArea"]); localHelper.AddParameter("MinStock", dr["MinStock"]); localHelper.AddParameter("MaxStock", dr["MaxStock"]); localHelper.AddParameter("UnitID", dr["UnitID"]); localHelper.AddParameter("StaticUnitID", dr["StaticUnitID"]); localHelper.AddParameter("StaticUnitCoefficient", dr["StaticUnitCoefficient"]); localHelper.AddParameter("CheckPermitError", dr["CheckPermitError"]); localHelper.AddParameter("MaxParkTime", dr["MaxParkTime"]); localHelper.AddParameter("MinParkTime", dr["MinParkTime"]); localHelper.AddParameter("DefineDate", dr["DefineDate"]); localHelper.AddParameter("StandardCode", dr["StandardCode"]); localHelper.AddParameter("StaticClass", dr["StaticClass"]); localHelper.AddParameter("IsEqualMaterial", dr["IsEqualMaterial"]); localHelper.AddParameter("IsPutJar", dr["IsPutJar"]); localHelper.AddParameter("ERPCode", dr["ERPCode"]); localHelper.AddParameter("Remark", dr["Remark"]); localHelper.AddParameter("@DeleteFlag", dr["DeleteFlag"]); localHelper.ExecuteNonQuery(); } #endregion BasMaterial return Result; } public int GetRecipeByPlanID(string planid) { int Result = 0; DbHelper localHelper = new DatabaseAction().NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.local); DbHelper serverHelper = new DatabaseAction().NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Server); string sqlstr = "SELECT * FROM dbo.PptPlan WHERE PlanID=@PlanID"; localHelper.CommandType = CommandType.Text; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@PlanID", planid); DataTable dt = localHelper.ToDataTable(); string RecipeEquipCode = string.Empty; string RecipeMaterialCode = string.Empty; string RecipeVersionID = string.Empty; foreach (DataRow dr in dt.Rows) { RecipeEquipCode = dr["RecipeEquipCode"].ToString(); RecipeMaterialCode = dr["RecipeMaterialCode"].ToString(); RecipeVersionID = dr["RecipeVersionID"].ToString(); break; } localHelper.BeginTransaction(); try { Result = IniBasMaterial(localHelper, serverHelper, RecipeMaterialCode); if (Result != 1) { throw new Exception(LanguageService.Instance.Read(226)); } #region PmtRecipe serverHelper.CommandType = CommandType.Text; sqlstr = @"SELECT * FROM PmtRecipe WHERE RecipeEquipCode=@RecipeEquipCode AND RecipeMaterialCode=@RecipeMaterialCode AND RecipeVersionID=@RecipeVersionID"; serverHelper.CommandText = sqlstr; serverHelper.ClearParameter(); serverHelper.AddParameter("@RecipeEquipCode", RecipeEquipCode); serverHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); serverHelper.AddParameter("@RecipeVersionID", RecipeVersionID); dt = serverHelper.ToDataTable(); if (dt.Rows.Count == 0) { throw new Exception(LanguageService.Instance.Read(227)); } #region 删除数据 sqlstr = @"DELETE FROM PmtRecipe WHERE RecipeEquipCode=@RecipeEquipCode AND RecipeMaterialCode=@RecipeMaterialCode AND RecipeVersionID=@RecipeVersionID"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeEquipCode", RecipeEquipCode); localHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); localHelper.AddParameter("@RecipeVersionID", RecipeVersionID); localHelper.ExecuteNonQuery(); sqlstr = @"DELETE FROM PmtRecipeMixing WHERE RecipeMaterialCode=@RecipeMaterialCode AND RecipeVersionID=@RecipeVersionID"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); localHelper.AddParameter("@RecipeVersionID", RecipeVersionID); localHelper.ExecuteNonQuery(); sqlstr = @"DELETE FROM PmtRecipeWeight WHERE RecipeMaterialCode=@RecipeMaterialCode AND RecipeVersionID=@RecipeVersionID"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); localHelper.AddParameter("@RecipeVersionID", RecipeVersionID); localHelper.ExecuteNonQuery(); #endregion sqlstr = @"INSERT INTO dbo.PmtRecipe (RecipeEquipCode , RecipeMaterialCode , RecipeVersionID , RecipeName , RecipeType , RecipeMaterialName , RecipeUserVersion , RecipeState , RecipeDefineDate , RecipeModifyUser , RecipeModifyTime , LotDoneTime , ShelfLotCount , LotTotalWeight , CarbonRecycleType , CarbonRecycleTime , OverTempMinTime , OverTimeSetTime , OverTempSetTemp , InPolyMaxTemp , InPolyMinTemp , InPolySetTime , InCarbonSetTime , InOilSetTime , InPowderSetTime , RollSpeedDiff , RamPressDiff , IsUseAreaTemp , SideTemp , SideTempDiff , RollTemp , RollTempDiff , DdoorTemp , DdoorTempDiff , OperCode , Remark , StartDatetime , EndDatetime , AuditFlag , AuditUser , AuditDateTime , RecipeDic , StayTimeSpand , RearchCode , CanAuditUser , MakeUpTemp , NewFlag ) values ( @RecipeEquipCode , @RecipeMaterialCode , @RecipeVersionID , @RecipeName , @RecipeType , @RecipeMaterialName , @RecipeUserVersion , @RecipeState , @RecipeDefineDate , @RecipeModifyUser , @RecipeModifyTime , @LotDoneTime , @ShelfLotCount , @LotTotalWeight , @CarbonRecycleType , @CarbonRecycleTime , @OverTempMinTime , @OverTimeSetTime , @OverTempSetTemp , @InPolyMaxTemp , @InPolyMinTemp , @InPolySetTime , @InCarbonSetTime , @InOilSetTime , @InPowderSetTime , @RollSpeedDiff , @RamPressDiff , @IsUseAreaTemp , @SideTemp , @SideTempDiff , @RollTemp , @RollTempDiff , @DdoorTemp , @DdoorTempDiff , @OperCode , @Remark , @StartDatetime , @EndDatetime , @AuditFlag , @AuditUser , @AuditDateTime , @RecipeDic , @StayTimeSpand , @RearchCode , @CanAuditUser , @MakeUpTemp , @NewFlag );SELECT SCOPE_IDENTITY();"; string serverRecipeObjID = string.Empty; string localRecipeObjID = string.Empty; foreach (DataRow dr in dt.Rows) { serverRecipeObjID = dr["ObjID"].ToString(); localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeEquipCode", dr["RecipeEquipCode"]); localHelper.AddParameter("@RecipeMaterialCode", dr["RecipeMaterialCode"]); localHelper.AddParameter("@RecipeVersionID", dr["RecipeVersionID"]); localHelper.AddParameter("@RecipeName", dr["RecipeName"]); localHelper.AddParameter("@RecipeType", dr["RecipeType"]); localHelper.AddParameter("@RecipeMaterialName", dr["RecipeMaterialName"]); localHelper.AddParameter("@RecipeUserVersion", dr["RecipeUserVersion"]); localHelper.AddParameter("@RecipeState", dr["RecipeState"]); localHelper.AddParameter("@RecipeDefineDate", dr["RecipeDefineDate"]); localHelper.AddParameter("@RecipeModifyUser", dr["RecipeModifyUser"]); localHelper.AddParameter("@RecipeModifyTime", dr["RecipeModifyTime"]); localHelper.AddParameter("@LotDoneTime", dr["LotDoneTime"]); localHelper.AddParameter("@ShelfLotCount", dr["ShelfLotCount"]); localHelper.AddParameter("@LotTotalWeight", dr["LotTotalWeight"]); localHelper.AddParameter("@CarbonRecycleType", dr["CarbonRecycleType"]); localHelper.AddParameter("@CarbonRecycleTime", dr["CarbonRecycleTime"]); localHelper.AddParameter("@OverTempMinTime", dr["OverTempMinTime"]); localHelper.AddParameter("@OverTimeSetTime", dr["OverTimeSetTime"]); localHelper.AddParameter("@OverTempSetTemp", dr["OverTempSetTemp"]); localHelper.AddParameter("@InPolyMaxTemp", dr["InPolyMaxTemp"]); localHelper.AddParameter("@InPolyMinTemp", dr["InPolyMinTemp"]); localHelper.AddParameter("@InPolySetTime", dr["InPolySetTime"]); localHelper.AddParameter("@InCarbonSetTime", dr["InCarbonSetTime"]); localHelper.AddParameter("@InOilSetTime", dr["InOilSetTime"]); localHelper.AddParameter("@InPowderSetTime", dr["InPowderSetTime"]); localHelper.AddParameter("@RollSpeedDiff", dr["RollSpeedDiff"]); localHelper.AddParameter("@RamPressDiff", dr["RamPressDiff"]); localHelper.AddParameter("@IsUseAreaTemp", dr["IsUseAreaTemp"]); localHelper.AddParameter("@SideTemp", dr["SideTemp"]); localHelper.AddParameter("@SideTempDiff", dr["SideTempDiff"]); localHelper.AddParameter("@RollTemp", dr["RollTemp"]); localHelper.AddParameter("@RollTempDiff", dr["RollTempDiff"]); localHelper.AddParameter("@DdoorTemp", dr["DdoorTemp"]); localHelper.AddParameter("@DdoorTempDiff", dr["DdoorTempDiff"]); localHelper.AddParameter("@OperCode", dr["OperCode"]); localHelper.AddParameter("@Remark", dr["Remark"]); localHelper.AddParameter("@StartDatetime", dr["StartDatetime"]); localHelper.AddParameter("@EndDatetime", dr["EndDatetime"]); localHelper.AddParameter("@AuditFlag", dr["AuditFlag"]); localHelper.AddParameter("@AuditUser", dr["AuditUser"]); localHelper.AddParameter("@AuditDateTime", dr["AuditDateTime"]); localHelper.AddParameter("@RecipeDic", dr["RecipeDic"]); localHelper.AddParameter("@StayTimeSpand", dr["StayTimeSpand"]); localHelper.AddParameter("@RearchCode", dr["RearchCode"]); localHelper.AddParameter("@CanAuditUser", dr["CanAuditUser"]); localHelper.AddParameter("@MakeUpTemp", dr["MakeUpTemp"]); localHelper.AddParameter("@NewFlag", dr["NewFlag"]); localRecipeObjID = localHelper.ToScalar().ToString(); break; } #endregion #region PmtRecipeMixing serverHelper.CommandType = CommandType.Text; sqlstr = @"SELECT * FROM PmtRecipeMixing WHERE RecipeObjID=@RecipeObjID"; serverHelper.CommandText = sqlstr; serverHelper.ClearParameter(); serverHelper.AddParameter("@RecipeObjID", serverRecipeObjID); dt = serverHelper.ToDataTable(); if (dt.Rows.Count == 0) { throw new Exception(LanguageService.Instance.Read(228)); } sqlstr = @"INSERT INTO dbo.PmtRecipeMixing ( RecipeObjID , RecipeMaterialCode , RecipeVersionID , MixingStep , TermCode , MixingTime , MixingTemp , MixingEnergy , MixingPower , MixingPress , MixingSpeed , ActionCode ) values ( @RecipeObjID , @RecipeMaterialCode , @RecipeVersionID , @MixingStep , @TermCode , @MixingTime , @MixingTemp , @MixingEnergy , @MixingPower , @MixingPress , @MixingSpeed , @ActionCode )"; foreach (DataRow dr in dt.Rows) { localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeObjID", localRecipeObjID); localHelper.AddParameter("@RecipeMaterialCode", dr["RecipeMaterialCode"]); localHelper.AddParameter("@RecipeVersionID", dr["RecipeVersionID"]); localHelper.AddParameter("@MixingStep", dr["MixingStep"]); localHelper.AddParameter("@TermCode", dr["TermCode"]); localHelper.AddParameter("@MixingTime", dr["MixingTime"]); localHelper.AddParameter("@MixingTemp", dr["MixingTemp"]); localHelper.AddParameter("@MixingEnergy", dr["MixingEnergy"]); localHelper.AddParameter("@MixingPower", dr["MixingPower"]); localHelper.AddParameter("@MixingPress", dr["MixingPress"]); localHelper.AddParameter("@MixingSpeed", dr["MixingSpeed"]); localHelper.AddParameter("@ActionCode", dr["ActionCode"]); localHelper.ExecuteNonQuery(); } #endregion #region PmtRecipeWeight serverHelper.CommandType = CommandType.Text; sqlstr = @"SELECT * FROM PmtRecipeWeight WHERE RecipeObjID=@RecipeObjID"; serverHelper.CommandText = sqlstr; serverHelper.ClearParameter(); serverHelper.AddParameter("@RecipeObjID", serverRecipeObjID); dt = serverHelper.ToDataTable(); if (dt.Rows.Count == 0) { throw new Exception(LanguageService.Instance.Read(229)); } sqlstr = @"INSERT INTO dbo.PmtRecipeWeight ( RecipeObjID , RecipeMaterialCode , RecipeVersionID , WeightID , WeightType , ScaleID , ActCode , MaterialCode , MaterialName , SetWeight , OldSetWeight , ErrorAllow ) values ( @RecipeObjID , @RecipeMaterialCode , @RecipeVersionID , @WeightID , @WeightType , @ScaleID , @ActCode , @MaterialCode , @MaterialName , @SetWeight , @OldSetWeight , @ErrorAllow )"; foreach (DataRow dr in dt.Rows) { localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeObjID", localRecipeObjID); localHelper.AddParameter("@RecipeMaterialCode", dr["RecipeMaterialCode"]); localHelper.AddParameter("@RecipeVersionID", dr["RecipeVersionID"]); localHelper.AddParameter("@WeightID", dr["WeightID"]); localHelper.AddParameter("@WeightType", dr["WeightType"]); localHelper.AddParameter("@ScaleID", dr["ScaleID"]); localHelper.AddParameter("@ActCode", dr["ActCode"]); localHelper.AddParameter("@MaterialCode", dr["MaterialCode"]); localHelper.AddParameter("@MaterialName", dr["MaterialName"]); localHelper.AddParameter("@SetWeight", dr["SetWeight"]); localHelper.AddParameter("@OldSetWeight", dr["OldSetWeight"]); localHelper.AddParameter("@ErrorAllow", dr["ErrorAllow"]); localHelper.ExecuteNonQuery(); IniBasMaterial(localHelper, serverHelper, dr["MaterialCode"].ToString()); } #endregion localHelper.CommitTransaction(); Result = 1; } catch (Exception ex) { localHelper.RollbackTransaction(); Result = -1; } finally { localHelper.CloseConnection(); } return Result; } } public class PLCRecipe { private DbHelper localHelper = new DatabaseAction().NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.local); public int SendRecipe(string RecipeObjID) { int iResult = 0; localHelper.CommandType = CommandType.Text; localHelper.CommandText = "UPDATE SysKeyValue SET ssValue = " + RecipeObjID + " WHERE ssKey='RecipeID'"; localHelper.ExecuteNonQuery(); localHelper.CommandText = "UPDATE SysKeyValue SET ssValue = t.RecipeMaterialName FROM dbo.PmtRecipe t WHERE ssKey='RecipeMixingName' AND t.ObjID=" + RecipeObjID; localHelper.ExecuteNonQuery(); localHelper.CommandText = "SELECT ssRemark FROM dbo.SysKeyValue WHERE ssKey='RecipeMixing'"; string sqlstr = localHelper.ToScalar().ToString(); sqlstr = string.Format(sqlstr, RecipeObjID); localHelper.CommandText = sqlstr; DataTable dt = localHelper.ToDataTable(); dt.TableName = "tableName"; string xml = SerializeDataTable(dt); localHelper.CommandText = "INSERT INTO dbo.PmtRecipeMixingXml(RecipeID, DataXml) VALUES (@RecipeID,@DataXml);SELECT SCOPE_IDENTITY();"; localHelper.AddParameter("@RecipeID", RecipeObjID); localHelper.AddParameter("@DataXml", xml); sqlstr = localHelper.ToScalar().ToString(); localHelper.CommandText = "UPDATE SysKeyValue SET ssValue =@ssValue WHERE ssKey='RecipeMixing'"; localHelper.ClearParameter(); localHelper.AddParameter("@ssValue", sqlstr); localHelper.ExecuteNonQuery(); return iResult; } private string SerializeDataTable(DataTable dt) { StringWriter strWriter = new StringWriter(); XmlSerializer serializer = new XmlSerializer(typeof(DataTable)); serializer.Serialize(strWriter, dt); return strWriter.ToString(); } private string GetRecipeObjID(string planid) { string Result = string.Empty; localHelper.CommandType = CommandType.Text; localHelper.CommandText = @"SELECT t2.ObjID FROM dbo.PptPlan t1 INNER JOIN dbo.PmtRecipe t2 ON t1.RecipeEquipCode=t2.RecipeEquipCode AND t2.RecipeMaterialCode=t2.RecipeMaterialCode AND t1.RecipeVersionID=t2.RecipeVersionID WHERE t1.PlanID='" + planid + "'"; return localHelper.ToScalar().ToString(); } public int SendPlan(string planid) { int iResult = 0; string recipeid = GetRecipeObjID(planid); SendRecipe(recipeid); new FeedingPlc.RecipeToPlc().Run(null); return iResult; } } }