using System; using System.Data; using System.IO; using System.Xml.Serialization; using Mesnac.Action.Base; using Mesnac.Codd.Session; using Mesnac.Action.Feeding.Qingquan.SynchroData; namespace Mesnac.Action.Feeding.Qingquan.BasicInfo { /// /// 从网络上下载配方数据 /// public class NetRecipe { /// /// 从网络数据库中下载配方数据 /// 2014 4-15 称量表中添加Auto_Ploy字段,自动导开方式,胶料使用 /// /// 计划号 /// 成功返回1,失败返回其他值 public int DownloadRecipe(string RecipeEquipCode, string RecipeMaterialCode, string RecipeVersionID) { FeedingAction action = new FeedingAction(); if (action.NetType == BaseAction.NetTypes.Local) { ICSharpCode.Core.LoggingService.Error("此系统版本为单机版,不能进行数据同步..."); new BaseAction().ShowMsg(LanguageService.Instance.Read(32)); return 0; } #region 如果合并了一次法功能,则从网络库下载一次法配方数据和物料到一次法本地库 if (action.GetConfigValue("IsCombinedOne", "0") == "1") { RecipeOneHelper.DownLoadRecipeOne(RecipeEquipCode, RecipeMaterialCode, RecipeVersionID); } #endregion int Result = 0; DbHelper localHelper = action.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); DbHelper serverHelper = action.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Server); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("下载配方失败:获取本地数据库连接失败!"); return 0; } if (serverHelper == null) { ICSharpCode.Core.LoggingService.Error("下载配方失败:获取网络数据库连接失败!"); return 0; } string sqlstr = ""; DataTable dt = null; try { //localHelper.BeginTransaction(); //从网路数据库中同步当前配方需要的物料 if (!MaterialSynchronous.DownLoadRecipeMaterial(localHelper, serverHelper, RecipeEquipCode, RecipeMaterialCode, RecipeVersionID)) { //没有找到配方物料 ICSharpCode.Core.LoggingService.Error(LanguageService.Instance.Read(226)); return 0; } #region PmtRecipe serverHelper.CommandType = CommandType.Text; sqlstr = @" SELECT '' [ObjID] ,Equip_Code [RecipeEquipCode] ,a.Mater_Code [RecipeMaterialCode] ,Edt_Code [RecipeVersionID] ,a.Mater_Name [RecipeName] ,Recipe_Type [RecipeType] ,b.mater_name [RecipeMaterialName] ,User_EdtCode [RecipeUserVersion] ,Recipe_State [RecipeState] ,Define_Date [RecipeDefineDate] ,'' [RecipeModifyUser] ,Modify_Time [RecipeModifyTime] ,Done_Time [LotDoneTime] ,Shelf_Num [ShelfLotCount] ,Total_Weight [LotTotalWeight] ,case when [CB_RecycleType]>='1' then '1' else [CB_RecycleType] end [CarbonRecycleType] ,case when [CB_RecycleTime]='' then '0' else [CB_RecycleTime] end [CarbonRecycleTime] ,OverTemp_MinTime [OverTempMinTime] ,OverTime_Time [OverTimeSetTime] ,OverTemp_Temp [OverTempSetTemp] ,Max_InPolyTemp [InPolyMaxTemp] ,Min_InPolyTemp [InPolyMinTemp] ,In_PolyTime [InPolySetTime] ,In_CarbonTime [InCarbonSetTime] ,In_OilTime [InOilSetTime] ,In_PowderTime [InPowderSetTime] ,Roll_SpeedDiff [RollSpeedDiff] ,Ram_PressDiff [RamPressDiff] ,Is_UseAreaTemp [IsUseAreaTemp] ,Side_Temp [SideTemp] ,Side_TempDiff [SideTempDiff] ,Roll_Temp [RollTemp] ,Roll_TempDiff [RollTempDiff] ,Ddoor_Temp [DdoorTemp] ,Ddoor_TempDiff [DdoorTempDiff] ,Oper_Code [OperCode] ,Mem_Note [Remark] ,Recipe_Code [RecipeCode] ,Start_datetime [StartDatetime] ,End_datetime [EndDatetime] ,Audit_flag [AuditFlag] ,Audit_name [AuditUser] ,Audit_date [AuditDateTime] ,Recipe_Dic [RecipeDic] ,Stay_time [StayTimeSpand] ,'' [RearchCode] ,'' [CanAuditUser] ,Fill_Coef [MakeUpTemp] ,'' [NewFlag] FROM [Pmt_Recipe] a left join (select mater_code,mater_name from dbo.Pmt_material) b on a.Mater_Code=b.Mater_code "; sqlstr += " WHERE Recipe_State=1 AND Audit_flag = 1 AND Equip_Code=@RecipeEquipCode AND a.Mater_Code=@RecipeMaterialCode AND Edt_Code=@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)); ICSharpCode.Core.LoggingService.Warn(String.Format("下载配方数据失败[{0}]:没有符和条件的配方数据!", RecipeMaterialCode)); return 0; } localHelper.CommandType = CommandType.Text; int oldRecipeObjId = -1; #region 如果有此配方,则记录此配方的ObjID sqlstr = @"select [ObjID] from pmt_recipe WHERE equip_code=@RecipeEquipCode AND mater_code=@RecipeMaterialCode AND Edt_Code=@RecipeVersionID"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeEquipCode", RecipeEquipCode.Substring(3, 2).ToString()); localHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); localHelper.AddParameter("@RecipeVersionID", RecipeVersionID); object objId = localHelper.ToScalar(); if (objId != null && objId != System.DBNull.Value) { int.TryParse(objId.ToString(), out oldRecipeObjId); } #endregion #region 删除数据 if (oldRecipeObjId <= 0) { sqlstr = @"DELETE FROM pmt_recipe WHERE equip_code=@RecipeEquipCode AND mater_code=@RecipeMaterialCode AND Edt_Code=@RecipeVersionID"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeEquipCode", RecipeEquipCode.Substring(3, 2).ToString()); localHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); localHelper.AddParameter("@RecipeVersionID", RecipeVersionID); localHelper.ExecuteNonQuery(); } sqlstr = @"DELETE FROM pmt_mix WHERE father_code=@RecipeMaterialCode AND Edt_Code=@RecipeVersionID"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); localHelper.AddParameter("@RecipeVersionID", RecipeVersionID); localHelper.ExecuteNonQuery(); sqlstr = @"DELETE FROM pmt_weigh WHERE father_code=@RecipeMaterialCode AND Edt_Code=@RecipeVersionID"; localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeMaterialCode", RecipeMaterialCode); localHelper.AddParameter("@RecipeVersionID", RecipeVersionID); localHelper.ExecuteNonQuery(); #endregion string serverRecipeObjID = string.Empty; string localRecipeObjID = string.Empty; if (oldRecipeObjId <= 0) { //如果本机台不存在此配方则追加,否则更新 sqlstr = @"insert into pmt_recipe(mater_code,equip_code,edt_code,mater_name,RecipeType,recipe_state, Black_reuse,Reuse_time,Mini_time,Max_temp,Mini_temp, Over_temp,ever_used,define_date,Sds_temp,Zz_temp,Xlm_temp,If_not,Shelf_num, Total_weight,mem_note,expire_time,recipe_Code,Fill_Coef) values( @RecipeMaterialCode , @RecipeEquipCode , @RecipeVersionID , @RecipeMaterialName , @RecipeType, @RecipeState, @CarbonRecycleType , @CarbonRecycleTime , @OverTimeSetTime , @InPolyMaxTemp , @InPolyMinTemp , @OverTempSetTemp, @ever_used, @RecipeDefineDate, @SideTemp, @RollTemp, @DdoorTemp, @IsUseAreaTemp, @ShelfLotCount, @LotTotalWeight, @Remark, @OverTempMinTime, @RecipeCode, @MakeUpTemp );SELECT SCOPE_IDENTITY();"; foreach (DataRow dr in dt.Rows) { serverRecipeObjID = dr["ObjID"].ToString(); localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeMaterialCode", dr["RecipeMaterialCode"]); localHelper.AddParameter("@RecipeEquipCode", dr["RecipeEquipCode"].ToString().Substring(3, 2).ToString()); localHelper.AddParameter("@RecipeVersionID", dr["RecipeVersionID"]); localHelper.AddParameter("@RecipeMaterialName", dr["RecipeMaterialName"]); localHelper.AddParameter("@RecipeType", dr["RecipeType"].ToString()); localHelper.AddParameter("@RecipeState", dr["RecipeState"]); localHelper.AddParameter("@CarbonRecycleType", dr["CarbonRecycleType"]); localHelper.AddParameter("@CarbonRecycleTime", dr["CarbonRecycleTime"]); localHelper.AddParameter("@OverTimeSetTime", dr["OverTimeSetTime"]); localHelper.AddParameter("@InPolyMaxTemp", dr["InPolyMaxTemp"]); localHelper.AddParameter("@InPolyMinTemp", dr["InPolyMinTemp"]); localHelper.AddParameter("@OverTempSetTemp", dr["OverTempSetTemp"]); localHelper.AddParameter("@ever_used", 1); localHelper.AddParameter("@RecipeDefineDate", dr["RecipeDefineDate"]); localHelper.AddParameter("@SideTemp", dr["SideTemp"]); localHelper.AddParameter("@RollTemp", dr["RollTemp"]); localHelper.AddParameter("@DdoorTemp", dr["DdoorTemp"]); localHelper.AddParameter("@IsUseAreaTemp", dr["IsUseAreaTemp"]); localHelper.AddParameter("@ShelfLotCount", dr["ShelfLotCount"]); localHelper.AddParameter("@LotTotalWeight", dr["LotTotalWeight"]); localHelper.AddParameter("@Remark", dr["Remark"]); localHelper.AddParameter("@OverTempMinTime", dr["OverTempMinTime"]); localHelper.AddParameter("@RecipeCode", dr["RecipeCode"]); localHelper.AddParameter("@MakeUpTemp", dr["MakeUpTemp"]); localRecipeObjID = localHelper.ToScalar().ToString(); break; } } else { //如果本机台存在此配方则更新 sqlstr = @"update pmt_recipe set mater_name=@RecipeMaterialName,RecipeType=@RecipeType,recipe_state=@RecipeState, Black_reuse=@CarbonRecycleType,Reuse_time=@CarbonRecycleTime,Mini_time=@OverTimeSetTime,Max_temp=@InPolyMaxTemp,Mini_temp=@InPolyMinTemp, Over_temp=@OverTempSetTemp,ever_used=@ever_used,define_date=@RecipeDefineDate,Sds_temp=@SideTemp,Zz_temp=@RollTemp,Xlm_temp=@DdoorTemp,If_not=@IsUseAreaTemp,Shelf_num=@ShelfLotCount, Total_weight=@LotTotalWeight,mem_note=@Remark,expire_time=@OverTempMinTime,recipe_Code=@RecipeCode,Fill_Coef=@MakeUpTemp where mater_code=@RecipeMaterialCode and equip_code=@RecipeEquipCode and edt_code=@RecipeVersionID"; foreach (DataRow dr in dt.Rows) { serverRecipeObjID = dr["ObjID"].ToString(); localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeMaterialName", dr["RecipeMaterialName"]); localHelper.AddParameter("@RecipeType", dr["RecipeType"].ToString()); localHelper.AddParameter("@RecipeState", dr["RecipeState"]); localHelper.AddParameter("@CarbonRecycleType", dr["CarbonRecycleType"]); localHelper.AddParameter("@CarbonRecycleTime", dr["CarbonRecycleTime"]); localHelper.AddParameter("@OverTimeSetTime", dr["OverTimeSetTime"]); localHelper.AddParameter("@InPolyMaxTemp", dr["InPolyMaxTemp"]); localHelper.AddParameter("@InPolyMinTemp", dr["InPolyMinTemp"]); localHelper.AddParameter("@OverTempSetTemp", dr["OverTempSetTemp"]); localHelper.AddParameter("@ever_used", 1); localHelper.AddParameter("@RecipeDefineDate", dr["RecipeDefineDate"]); localHelper.AddParameter("@SideTemp", dr["SideTemp"]); localHelper.AddParameter("@RollTemp", dr["RollTemp"]); localHelper.AddParameter("@DdoorTemp", dr["DdoorTemp"]); localHelper.AddParameter("@IsUseAreaTemp", dr["IsUseAreaTemp"]); localHelper.AddParameter("@ShelfLotCount", dr["ShelfLotCount"]); localHelper.AddParameter("@LotTotalWeight", dr["LotTotalWeight"]); localHelper.AddParameter("@Remark", dr["Remark"]); localHelper.AddParameter("@OverTempMinTime", dr["OverTempMinTime"]); localHelper.AddParameter("@RecipeCode", dr["RecipeCode"]); localHelper.AddParameter("@MakeUpTemp", dr["MakeUpTemp"]); localHelper.AddParameter("@RecipeMaterialCode", dr["RecipeMaterialCode"]); localHelper.AddParameter("@RecipeEquipCode", dr["RecipeEquipCode"].ToString().Substring(3, 2).ToString()); localHelper.AddParameter("@RecipeVersionID", dr["RecipeVersionID"]); localHelper.ExecuteNonQuery(); //localRecipeObjID = localHelper.ToScalar().ToString(); localRecipeObjID = oldRecipeObjId.ToString(); break; } } #endregion #region PmtRecipeMixing serverHelper.CommandType = CommandType.Text; sqlstr = @"SELECT Mix_Id as MixingStep, Recipe_Code as RecipeMaterialCode, Equip_Code as RecipeEquipCode, Edt_Code as RecipeVersionID, Term_code as TermCode, Mixing_Time as MixingTime, Mixing_Temp as MixingTemp, Mixing_Energy as MixingEnergy, Mixing_Power as MixingPower, Act_Code as ActionCode, Mixing_Press as MixingPress, Mixing_Speed as MixingSpeed FROM Pmt_Mixing WHERE Equip_Code=@RecipeEquipCode AND Recipe_Code=@RecipeMaterialCode AND Edt_Code=@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(228)); } sqlstr = @"INSERT INTO pmt_mix ( RecipeObjID ,mix_id,father_code,equip_code,edt_code, term_code,set_time,set_temp,set_ener,set_power,act_code,set_pres,set_rota) values( @RecipeObjID , @MixingStep , @RecipeMaterialCode , @RecipeEquipCode, @RecipeVersionID , @TermCode , @MixingTime , @MixingTemp , @MixingEnergy , @MixingPower , @ActionCode, @MixingPress , @MixingSpeed )"; foreach (DataRow dr in dt.Rows) { localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeObjID", localRecipeObjID); localHelper.AddParameter("@MixingStep", dr["MixingStep"]); localHelper.AddParameter("@RecipeMaterialCode", dr["RecipeMaterialCode"]); localHelper.AddParameter("@RecipeEquipCode",dr["RecipeEquipCode"].ToString().Substring(3,2).ToString()); localHelper.AddParameter("@RecipeVersionID", dr["RecipeVersionID"]); 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("@ActionCode", dr["ActionCode"]); localHelper.AddParameter("@MixingPress", dr["MixingPress"]); localHelper.AddParameter("@MixingSpeed", dr["MixingSpeed"]); localHelper.ExecuteNonQuery(); } #endregion #region PmtRecipeWeight serverHelper.CommandType = CommandType.Text; // sqlstr = @"SELECT // '' [RecipeObjID] // ,Equip_Code [RecipeEquipCode] // ,Recipe_Code [RecipeMaterialCode] // ,Edt_Code [RecipeVersionID] // ,Weight_ID [WeightID] // ,case when [Weight_Type] ='0' then [Weight_Type] // when [Weight_Type] ='1' then [Weight_Type] // when [Weight_Type] ='2' then [Weight_Type] // when [Weight_Type] ='5' then [Weight_Type] // when [Weight_Type] ='4' then '3' // when [Weight_Type] ='3' then '4' // end [WeightType] // ,Scale_Code [ScaleID] // ,Act_Code [ActCode] // ,Mater_Code [MaterialCode] // ,Mater_Name [MaterialName] // ,Set_Weight [SetWeight] // ,Error_Allow [ErrorAllow] // ,'' [OldSetWeight] // ,Act_Code [AutoPloy] // FROM [Pmt_Weight] "; //如果是胶料(Weight_Type=2)则把Act_code设置为0,把网络库中的Act_code赋值给AutoPloy sqlstr = @"SELECT '' [RecipeObjID] ,Equip_Code [RecipeEquipCode] ,Recipe_Code [RecipeMaterialCode] ,Edt_Code [RecipeVersionID] ,Weight_ID [WeightID] ,case when [Weight_Type] ='0' then [Weight_Type] when [Weight_Type] ='1' then [Weight_Type] when [Weight_Type] ='2' then [Weight_Type] when [Weight_Type] ='5' then [Weight_Type] when [Weight_Type] ='4' then '3' when [Weight_Type] ='3' then '4' end [WeightType] ,Scale_Code [ScaleID] ,case when [Weight_Type]='2' then 0 else Act_Code end [ActCode] ,Mater_Code [MaterialCode] ,Mater_Name [MaterialName] ,Set_Weight [SetWeight] ,Error_Allow [ErrorAllow] ,'' [OldSetWeight] ,case when [Weight_Type]='2' then Act_Code else 0 end [AutoPloy] FROM [Pmt_Weight] "; sqlstr += " WHERE Equip_Code=@RecipeEquipCode AND Recipe_Code=@RecipeMaterialCode AND Edt_Code=@RecipeVersionID and Weight_Type<6 Order by Weight_Type,Weight_ID "; 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(229)); } sqlstr = @" insert into pmt_weigh(RecipeObjID,father_code,weight_id,equip_code,edt_code, act_code,weigh_type,child_code,child_name,set_weight,error_allow,Auto_ploy) values( @RecipeObjID , @RecipeMaterialCode , @WeightID , @RecipeEquipCode, @RecipeVersionID , @ActCode , @WeightType , @MaterialCode , @MaterialName , @SetWeight , @ErrorAllow, @AutoPloy )"; foreach (DataRow dr in dt.Rows) { localHelper.CommandText = sqlstr; localHelper.ClearParameter(); localHelper.AddParameter("@RecipeObjID", localRecipeObjID); localHelper.AddParameter("@RecipeMaterialCode", dr["RecipeMaterialCode"]); localHelper.AddParameter("@WeightID", dr["WeightID"]); localHelper.AddParameter("@RecipeEquipCode", dr["RecipeEquipCode"].ToString().Substring(3,2).ToString()); localHelper.AddParameter("@RecipeVersionID", dr["RecipeVersionID"]); //localHelper.AddParameter("@ActCode", dr["ActCode"]); localHelper.AddParameter("@ActCode", Mesnac.Basic.DataProcessor.RowValue(dr,"ActCode",0)); localHelper.AddParameter("@WeightType", dr["WeightType"]); localHelper.AddParameter("@MaterialCode", dr["MaterialCode"]); localHelper.AddParameter("@MaterialName", dr["MaterialName"]); localHelper.AddParameter("@SetWeight", dr["SetWeight"]); localHelper.AddParameter("@ErrorAllow", dr["ErrorAllow"]); localHelper.AddParameter("@AutoPloy",dr["AutoPloy"]); localHelper.ExecuteNonQuery(); } #endregion //localHelper.CommitTransaction(); Result = 1; } catch (Exception ex) { //localHelper.RollbackTransaction(); ICSharpCode.Core.LoggingService.Error(ex.Message, ex); Result = -1; } finally { //localHelper.CloseConnection(); } return Result; } /// /// 根据计划号从网络数据库中下载配方数据 /// /// 计划号 /// 成功返回1,失败返回其他值 public int GetRecipeByPlanID(string planid) { FeedingAction action = new FeedingAction(); if (action.NetType == BaseAction.NetTypes.Local) { ICSharpCode.Core.LoggingService.Error("此系统版本为单机版,不能进行数据同步..."); new BaseAction().ShowMsg(LanguageService.Instance.Read(32)); return 0; } 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"; string sqlstr = "select plan_id as PlanID,pri_level as PriLevel,mater_code as RecipeMaterialCode,shift_class as ClassID,equip_code as RecipeEquipCode,edt_code as RecipeVersionID,plan_num as PlanNum,real_num as RealNum,plan_state as PlanState,revise_sgn as ReviseSgn,shift as ShiftID,down_date as PlanDate,recipe_code as RecipeMaterialName,plan_weight as PlanWeight,total_weight as TotalWeight,real_weight as RealWeight,real_datetime as RealEndtime,oper_code as OperCode,oper_datetime as OperDatetime,ActionOrder from ppt_plan where plan_id = @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(); Result = DownloadRecipe(RecipeEquipCode, RecipeMaterialCode, RecipeVersionID); break; } return Result; } } }