using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using Mesnac.Codd.Session; using Mesnac.Basic; namespace Mesnac.Action.Feeding.Technology { /// /// 工艺日志辅助类 /// public class RecipeLogHelper { #region 单例实现 private static RecipeLogHelper _instance = null; private RecipeLogHelper() { } public static RecipeLogHelper Instance { get { if (_instance == null) { _instance = new RecipeLogHelper(); } return _instance; } } #endregion #region 字段定义 private StringBuilder _pmtRecipeOld = new StringBuilder(); private StringBuilder _pmtWeighOld = new StringBuilder(); private StringBuilder _pmtMixOld = new StringBuilder(); private StringBuilder _pmtRecipeNow = new StringBuilder(); private StringBuilder _pmtWeighNow = new StringBuilder(); private StringBuilder _pmtMixNow = new StringBuilder(); private bool _isBegin = false; #endregion #region 属性定义 public StringBuilder PmtRecipeOld { get { return _pmtRecipeOld; } set { _pmtRecipeOld = value; } } public StringBuilder PmtWeighOld { get { return _pmtWeighOld; } set { _pmtWeighOld = value; } } public StringBuilder PmtMixOld { get { return _pmtMixOld; } set { _pmtMixOld = value; } } public StringBuilder PmtRecipeNow { get { return _pmtRecipeNow; } set { _pmtRecipeNow = value; } } public StringBuilder PmtWeighNow { get { return _pmtWeighNow; } set { _pmtWeighNow = value; } } public StringBuilder PmtMixNow { get { return _pmtMixNow; } set { _pmtMixNow = value; } } public bool IsBegin { get { return _isBegin; } set { _isBegin = value; } } #endregion #region 保存工艺日志 /// /// 保存工艺日志 /// /// 物料编码 /// 版本号 public void SaveRecipeLog(string materCode, string edtCode) { try { if (this._isBegin == true) { ICSharpCode.Core.LoggingService.Info("保存工艺日志..."); RecipeLog recipeLog = new RecipeLog(); FeedingAction action = new FeedingAction(); recipeLog.EquipCode = action.CurrEquipCode; recipeLog.MaterCode = materCode; recipeLog.EdtCode = edtCode; recipeLog.PmtRecipeOld = this._pmtRecipeOld.Append("/").ToString(); recipeLog.PmtWeighOld = this._pmtWeighOld.ToString(); recipeLog.PmtMixOld = this._pmtMixOld.ToString(); recipeLog.PmtRecipeNow = this._pmtRecipeNow.Append("/").ToString(); recipeLog.PmtWeighNow = this._pmtWeighNow.ToString(); recipeLog.PmtMixNow = this._pmtMixNow.ToString(); DbHelper localHelper = action.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("工艺日志-保存配方日志失败:获取本地数据连接失败!"); return; } string oper_Timer = String.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now); string strSql1 = "insert into Pmt_recipeLogLocal(Oper_time,Equip_code,Mater_code,Edt_code,Pmt_recipeold,Pmt_weighold,Pmt_mixold,Pmt_recipenow,Pmt_weighnow,Pmt_mixnow,Oper_person,IsUpFlag)"; strSql1 += " values(@Oper_time,@Equip_code,@Mater_code,@Edt_code,@Pmt_recipeold,@Pmt_weighold,@Pmt_mixold,@Pmt_recipenow,@Pmt_weighnow,@Pmt_mixnow,@Oper_person,@IsUpFlag);SELECT SCOPE_IDENTITY();"; localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); localHelper.CommandText = strSql1; localHelper.AddParameter("@Oper_time", oper_Timer); localHelper.AddParameter("@Equip_code", action.CurrEquipCode); localHelper.AddParameter("@Mater_code", materCode); localHelper.AddParameter("@Edt_code", edtCode); localHelper.AddParameter("@Pmt_recipeold", recipeLog.PmtRecipeOld); localHelper.AddParameter("@Pmt_weighold", recipeLog.PmtWeighOld); localHelper.AddParameter("@Pmt_mixold", recipeLog.PmtMixOld); localHelper.AddParameter("@Pmt_recipenow", recipeLog.PmtRecipeNow); localHelper.AddParameter("@Pmt_weighnow", recipeLog.PmtWeighNow); localHelper.AddParameter("@Pmt_mixnow", recipeLog.PmtMixNow); localHelper.AddParameter("@Oper_person", Mesnac.Basic.UserInfo.Instance.UserName); localHelper.AddParameter("@IsUpFlag", 0); object objId = localHelper.ToScalar(); try { if (action.NetType == Base.BaseAction.NetTypes.Net) { DbHelper serverHelper = action.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Server); if (serverHelper == null) { ICSharpCode.Core.LoggingService.Error("工艺日志-网络保存配方日志失败:获取网络数据连接失败!"); return; } string strSql2 = "insert into Pmt_recipeLogLocal(Oper_time,Equip_code,Mater_code,Edt_code,Pmt_recipeold,Pmt_weighold,Pmt_mixold,Pmt_recipenow,Pmt_weighnow,Pmt_mixnow,Oper_person)"; strSql2 += " values(@Oper_time,@Equip_code,@Mater_code,@Edt_code,@Pmt_recipeold,@Pmt_weighold,@Pmt_mixold,@Pmt_recipenow,@Pmt_weighnow,@Pmt_mixnow,@Oper_person)"; serverHelper.CommandType = CommandType.Text; serverHelper.ClearParameter(); serverHelper.CommandText = strSql2; serverHelper.AddParameter("@Oper_time", oper_Timer); serverHelper.AddParameter("@Equip_code", action.CurrEquipCode); serverHelper.AddParameter("@Mater_code", materCode); serverHelper.AddParameter("@Edt_code", edtCode); serverHelper.AddParameter("@Pmt_recipeold", recipeLog.PmtRecipeOld); serverHelper.AddParameter("@Pmt_weighold", recipeLog.PmtWeighOld); serverHelper.AddParameter("@Pmt_mixold", recipeLog.PmtMixOld); serverHelper.AddParameter("@Pmt_recipenow", recipeLog.PmtRecipeNow); serverHelper.AddParameter("@Pmt_weighnow", recipeLog.PmtWeighNow); serverHelper.AddParameter("@Pmt_mixnow", recipeLog.PmtMixNow); serverHelper.AddParameter("@Oper_person", Mesnac.Basic.UserInfo.Instance.UserName); serverHelper.ExecuteNonQuery(); string strSql3 = "update Pmt_recipeLogLocal set IsUpFlag = 1 where Oper_time=@Oper_time and Equip_code=@Equip_code and Mater_code=@Mater_code and Edt_code=@Edt_code"; localHelper.ClearParameter(); localHelper.CommandText = strSql3; localHelper.AddParameter("@Oper_time", oper_Timer); localHelper.AddParameter("@Equip_code", action.CurrEquipCode); localHelper.AddParameter("@Mater_code", materCode); localHelper.AddParameter("@Edt_code", edtCode); localHelper.ExecuteNonQuery(); } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("工艺日志-网络库保存配方日志失败:" + ex.Message); } this._isBegin = false; } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("工艺日志-保存配方日志失败:" + ex.Message); } } #endregion #region 工艺日志辅助方法 /// /// 清空字符串生成器 /// public void ClearStringBuilder() { this._pmtRecipeOld.Clear(); this._pmtWeighOld.Clear(); this._pmtMixOld.Clear(); this._pmtRecipeNow.Clear(); this._pmtWeighNow.Clear(); this._pmtMixNow.Clear(); } /// /// 生成旧版本的配方称量信息 /// /// 配方物料编码 /// 配方版本号 /// 返回旧版本的配方称量信息字符串生成器 public StringBuilder GenerateRecipeWeighOld(string materCode, string edtCode) { return GenerateRecipeWeigh(this._pmtWeighOld, materCode, edtCode); } /// /// 生成新版本的配方称量信息 /// /// 配方物料编码 /// 配方版本号 /// 返回新版本的配方称量信息字符串生成器 public StringBuilder GenerateRecipeWeighNow(string materCode, string edtCode) { return GenerateRecipeWeigh(this._pmtWeighNow, materCode, edtCode); } #region 生成配方称量信息字符串 private StringBuilder GenerateRecipeWeigh(StringBuilder sb, string materCode, string edtCode) { FeedingAction action = new FeedingAction(); DataTable weighTable = this.GetWeighDataTable(materCode, edtCode); if (weighTable != null && weighTable.Rows.Count > 0) { double setWeight = 0.0; double errorAllow = 0.0; //炭黑 foreach (DataRow row in weighTable.Rows) { int weightType = DataProcessor.RowValue(row, "weigh_type", -1); if (weightType == 0) { sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "weight_id", 0))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "ActionName", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_name", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_code", String.Empty))); setWeight = DataProcessor.RowValue(row, "set_weight", 0.0); sb.Append(String.Format("{0},", setWeight == 0 ? String.Empty : setWeight.ToString())); errorAllow = DataProcessor.RowValue(row, "error_allow", 0.0); sb.Append(String.Format("{0},", errorAllow == 0 ? String.Empty : errorAllow.ToString())); } } sb.Append("/"); //油料 foreach (DataRow row in weighTable.Rows) { int weightType = DataProcessor.RowValue(row, "weigh_type", -1); if (weightType == 1 || weightType == 5) { sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "weight_id", 0))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "ActionName", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_name", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_code", String.Empty))); setWeight = DataProcessor.RowValue(row, "set_weight", 0.0); sb.Append(String.Format("{0},", setWeight == 0 ? String.Empty : setWeight.ToString())); errorAllow = DataProcessor.RowValue(row, "error_allow", 0.0); sb.Append(String.Format("{0},", errorAllow == 0 ? String.Empty : errorAllow.ToString())); } } sb.Append("/"); //胶料 foreach (DataRow row in weighTable.Rows) { int weightType = DataProcessor.RowValue(row, "weigh_type", -1); if (weightType == 2) { sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "weight_id", 0))); //sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "ActionName", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_name", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_code", String.Empty))); setWeight = DataProcessor.RowValue(row, "set_weight", 0.0); sb.Append(String.Format("{0},", setWeight == 0 ? String.Empty : setWeight.ToString())); errorAllow = DataProcessor.RowValue(row, "error_allow", 0.0); sb.Append(String.Format("{0},", errorAllow == 0 ? String.Empty : errorAllow.ToString())); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "AutoPloyName", "无"))); } } sb.Append("/"); //粉料 foreach (DataRow row in weighTable.Rows) { int weightType = DataProcessor.RowValue(row, "weigh_type", -1); if (weightType == 3) { sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "weight_id", 0))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "ActionName", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_name", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_code", String.Empty))); setWeight = DataProcessor.RowValue(row, "set_weight", 0.0); sb.Append(String.Format("{0},", setWeight == 0 ? String.Empty : setWeight.ToString())); errorAllow = DataProcessor.RowValue(row, "error_allow", 0.0); sb.Append(String.Format("{0},", errorAllow == 0 ? String.Empty : errorAllow.ToString())); } } sb.Append("/"); //小料 foreach (DataRow row in weighTable.Rows) { int weightType = DataProcessor.RowValue(row, "weigh_type", -1); if (weightType == 4) { sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "weight_id", 0))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "ActionName", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_name", String.Empty))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "child_code", String.Empty))); setWeight = DataProcessor.RowValue(row, "set_weight", 0.0); sb.Append(String.Format("{0},", setWeight == 0 ? String.Empty : setWeight.ToString())); errorAllow = DataProcessor.RowValue(row, "error_allow", 0.0); sb.Append(String.Format("{0},", errorAllow == 0 ? String.Empty : errorAllow.ToString())); } } sb.Append("/"); } else { sb.Append("/////"); } return sb; } #endregion /// /// 生成旧版本的配方混炼信息 /// /// 配方物料代码 /// 配方版本号 /// 返回对应旧版本的配方混炼信息字符串生成器 public StringBuilder GenerateRecipeMixOld(string materCode, string edtCode) { return GenerateRecipeMix(this._pmtMixOld, materCode, edtCode); } /// /// 生成新版本的配方混炼信息 /// /// 配方物料代码 /// 配方版本号 /// 返回对应旧版本的配方混炼信息字符串生成器 public StringBuilder GenerateRecipeMixNow(string materCode, string edtCode) { return GenerateRecipeMix(this._pmtMixNow, materCode, edtCode); } #region 生成配方混炼信息字符串 private StringBuilder GenerateRecipeMix(StringBuilder sb, string materCode, string edtCode) { FeedingAction action = new FeedingAction(); DataTable mixTable = this.GetMixDataTable(materCode, edtCode); if (mixTable != null && mixTable.Rows.Count > 0) { foreach (DataRow row in mixTable.Rows) { sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "mix_id", 0))); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "TermName", String.Empty))); int setTime = DataProcessor.RowValue(row, "set_time", 0); sb.Append(String.Format("{0},", setTime == 0 ? String.Empty : setTime.ToString())); int setTemp = DataProcessor.RowValue(row, "set_temp", 0); sb.Append(String.Format("{0},", setTemp == 0 ? String.Empty : setTemp.ToString())); double setPower = DataProcessor.RowValue(row, "set_power", 0.0); sb.Append(String.Format("{0},", setPower == 0 ? String.Empty : setPower.ToString())); double setEner = DataProcessor.RowValue(row, "set_ener", 0.0); sb.Append(String.Format("{0},", setEner == 0 ? String.Empty : setEner.ToString())); sb.Append(String.Format("{0},", DataProcessor.RowValue(row, "ActName", String.Empty))); double setPres = DataProcessor.RowValue(row, "set_pres", 0); sb.Append(String.Format("{0},", setPres == 0 ? String.Empty : setPres.ToString())); int setRota = DataProcessor.RowValue(row, "set_rota", 0); sb.Append(String.Format("{0},/", setRota == 0 ? String.Empty : setRota.ToString())); } } return sb; } #endregion #endregion #region 配方辅助方法 /// /// 获取配方数据行 /// /// 配方物料编码 /// 版本号 /// 返回对应配方的数据行 public DataRow GetRecipeDataRow(string materCode, string edtCode) { try { FeedingAction action = new FeedingAction(); DbHelper localHelper = action.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("工艺日志-获取配方数据行失败:获取本地数据连接失败!"); return null; } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); string strSql = "select top 1 * from pmt_recipe where equip_code = @equipCode and mater_code=@materCode and edt_code=@edtCode"; localHelper.CommandText = strSql; localHelper.AddParameter("@equipCode", action.CurrEquipCode.Substring(3, 2)); localHelper.AddParameter("@materCode", materCode); localHelper.AddParameter("@edtCode", edtCode); DataTable table = localHelper.ToDataTable(); if (table != null && table.Rows.Count > 0) { return table.Rows[0]; } return null; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("工艺日志-获取配方数据行失败:" + ex.Message); return null; } } /// /// 获取配方称量数据表 /// /// 配方物料代码 /// 版本号 /// 返回对应配方的称量数据表 public DataTable GetWeighDataTable(string materCode, string edtCode) { try { FeedingAction action = new FeedingAction(); DbHelper localHelper = action.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("工艺日志-获取配方称量数据表失败:获取本地数据连接失败!"); return null; } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); //string strSql = "select * from pmt_weigh where equip_code = @equipCode and father_code=@materCode and edt_code=@edtCode order by weight_id"; string strSql = @"SELECT [ObjID] ,[RecipeObjID] ,[weight_id] ,[father_code] ,[equip_code] ,[edt_code] ,[weigh_type] ,[act_code] ,[child_code] ,[child_name] ,[set_weight] ,[error_allow] ,[unit_name] ,[mem_note] ,[ChanYong_Flag] ,[Auto_ploy] ,sc1.[ItemName] as [WeightTypeName] ,sc2.[ItemName] as [ActionName] ,sc3.[ItemName] as [AutoPloyName] FROM [pmt_weigh] left join [SysCode] sc1 on sc1.[TypeID]='WeightType' and sc1.[ItemCode] = [pmt_weigh].[weigh_type] left join [SysCode] sc2 on sc2.[TypeID]='WeightAction' and sc2.[ItemCode] = [pmt_weigh].[act_code] left join [SysCode] sc3 on sc3.[TypeID]='AutoPloy' and sc3.[ItemCode] = [pmt_weigh].[Auto_ploy] where [pmt_weigh].[equip_code] = @equipCode and [pmt_weigh].[father_code]=@materCode and [pmt_weigh].[edt_code]=@edtCode order by [pmt_weigh].[weigh_type],[pmt_weigh].[weight_id]"; localHelper.CommandText = strSql; localHelper.AddParameter("@equipCode", action.CurrEquipCode.Substring(3, 2)); localHelper.AddParameter("@materCode", materCode); localHelper.AddParameter("@edtCode", edtCode); DataTable table = localHelper.ToDataTable(); return table; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("工艺日志-获取配方称量数据表失败:" + ex.Message); return null; } } /// /// 获取配方混炼数据表 /// /// 配方编码 /// 版本号 /// 返回对应配方的混炼数据表 public DataTable GetMixDataTable(string materCode, string edtCode) { try { FeedingAction action = new FeedingAction(); DbHelper localHelper = action.NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); if (localHelper == null) { ICSharpCode.Core.LoggingService.Error("工艺日志-获取配方混炼数据表失败:获取本地数据连接失败!"); return null; } localHelper.CommandType = CommandType.Text; localHelper.ClearParameter(); //string strSql = "select * from pmt_mix where equip_code = @equipCode and father_code=@materCode and edt_code=@edtCode order by mix_id"; string strSql = @"select [pmt_mix].[ObjID] ,[RecipeObjID] ,[father_code] ,[equip_code] ,[rub_code] ,[edt_code] ,[term_code] ,[set_time] ,[set_temp] ,[set_ener] ,[set_power] ,[act_code] ,[set_pres] ,[set_rota] ,[steel_kind] ,[switch_mete] ,[mix_id],[PmtTerm].[ShowName] as [TermName],[PmtAction].[ShowName] as [ActName] from [pmt_mix] left join [PmtTerm] on [pmt_mix].[term_code] = [PmtTerm].[TermCode] left join [PmtAction] on [pmt_mix].[act_code] = [PmtAction].[ActionCode] where [pmt_mix].[equip_code] = @equipCode and [pmt_mix].[father_code]=@materCode and [pmt_mix].[edt_code]=@edtCode order by [pmt_mix].[mix_id]"; localHelper.CommandText = strSql; localHelper.AddParameter("@equipCode", action.CurrEquipCode.Substring(3, 2)); localHelper.AddParameter("@materCode", materCode); localHelper.AddParameter("@edtCode", edtCode); DataTable table = localHelper.ToDataTable(); return table; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("工艺日志-获取配方混炼数据表失败:" + ex.Message); return null; } } #endregion } #region 工艺日志实体类 /// /// 工艺日志实体类 /// public class RecipeLog { #region 定义字段 private long _objId; private string _equipCode; private string _materCode; private string _edtCode; private string _pmtRecipeOld; private string _pmtWeighOld; private string _pmtMixOld; private string _pmtRecipeNow; private string _pmtWeighNow; private string _pmtMixNow; private string _operPerson; private int _isUpFlag; #endregion #region 定义属性 public long ObjId { get { return _objId; } set { _objId = value; } } public string EquipCode { get { return _equipCode; } set { _equipCode = value; } } public string MaterCode { get { return _materCode; } set { _materCode = value; } } public string EdtCode { get { return _edtCode; } set { _edtCode = value; } } public string PmtRecipeOld { get { return _pmtRecipeOld; } set { _pmtRecipeOld = value; } } public string PmtWeighOld { get { return _pmtWeighOld; } set { _pmtWeighOld = value; } } public string PmtMixOld { get { return _pmtMixOld; } set { _pmtMixOld = value; } } public string PmtRecipeNow { get { return _pmtRecipeNow; } set { _pmtRecipeNow = value; } } public string PmtWeighNow { get { return _pmtWeighNow; } set { _pmtWeighNow = value; } } public string PmtMixNow { get { return _pmtMixNow; } set { _pmtMixNow = value; } } public string OperPerson { get { return _operPerson; } set { _operPerson = value; } } public int IsUpFlag { get { return _isUpFlag; } set { _isUpFlag = value; } } #endregion } #endregion }