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; namespace Mesnac.Action.Feeding.Qingquan.Technology { public class SaveRecipe : FeedingAction, IAction { #region 业务必须信息 #region 配方信息实体 /// /// 配方信息 /// private class RecipeInfo { /// /// 序号 /// public string ObjID { get; set; } /// /// 机台号 /// public string RecipeEquipCode { get; set; } /// /// 配方物料代码 /// public string RecipeMaterialCode { get; set; } /// /// 配方物料名称 /// public string RecipeMaterialName { get; set; } /// /// 配方物料版本 /// public string RecipeVersionID { get; set; } /// /// 配方状态 /// public string RecipeState { get; set; } /// /// 配方类型 /// public string RecipeType { get; set; } /// /// 超温排胶最短时间 /// public double? OverTempMinTime { get; set; } /// /// 超时排胶时间 /// public double? OverTimeSetTime { get; set; } /// /// 超温排胶温度 /// public double? OverTempSetTemp { get; set; } /// /// 最高进料温度 /// public double? InPolyMaxTemp { get; set; } /// /// 加胶时间 /// public double? InPolySetTime { get; set; } /// /// 是否使用三区温度 /// public int IsUseAreaTemp { get; set; } /// /// 侧壁温度 /// public double? SideTemp { get; set; } /// /// 转子温度 /// public double? RollTemp { get; set; } /// /// 卸料门温度 /// public double? DdoorTemp { get; set; } } #endregion #region 配方称量实体 /// /// 配方称量信息 /// private class RecipeWeight { /// /// 索引号 /// public int Index { get; set; } /// /// 称量类型 /// public int WeightType { get; set; } /// /// 称量序号 /// public int WeightID { get; set; } /// /// 称量动作 /// public string ActCode { get; set; } /// /// 称量物料名称 /// public string MaterialName { get; set; } /// /// 称量物料代码 /// public string MaterialCode { get; set; } /// /// 设定重量 /// public double? SetWeight { get; set; } /// /// 允许误差 /// public double? ErrorAllow { get; set; } /// /// 胶类型 /// public string AutoPloy { get; set; } } #endregion #region 配方密炼实体 /// /// 配方密炼信息 /// private class RecipeMixing { /// /// 序号 /// public int Index { get; set; } /// /// 密炼序号 /// public int MixingStep { get; set; } /// /// 动作名称 /// public string ActionName { get; set; } /// /// 动作代码 /// public string ActionCode { get; set; } /// /// 条件名称 /// public string TermName { get; set; } /// /// 条件代码 /// public string TermCode { get; set; } /// /// 时间 /// public double? MixingTime { get; set; } /// /// 温度 /// public double? MixingTemp { get; set; } /// /// 功率 /// public double? MixingPower { get; set; } /// /// 能量 /// public double? MixingEnergy { get; set; } /// /// 压力 /// public double? MixingPress { get; set; } /// /// 转速 /// public double? MixingSpeed { get; set; } } #endregion #region 空值判断 /// /// 空值判断 /// /// 要判断的对象 /// 为空返回true,否则返回false private bool ValueIsNull(object value) { if (value == null || value == DBNull.Value || string.IsNullOrWhiteSpace(value.ToString())) { return true; } return false; } #endregion #region 获取配方界面字段值 /// /// 获取配方界面字段值 /// /// 界面字段的业务标识 /// 返回字符串格式的配方界面字段值 private string getRecipeInfoValueString(string key) { string Result = string.Empty; DbMCControl control = null; List controls = base.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, string.Format("[pmt_recipe].[{0}]", key)); foreach (DbMCControl c in controls) { if (c.BaseControl.DbOptionType == DbOptionTypes.Modify || c.BaseControl.DbOptionType == DbOptionTypes.QueryAndModify) { control = c; break; } } if (control != null) { object value = control.BaseControl.MCValue; if (value != null) { return value.ToString(); } } return Result; } /// /// 获取配方界面字段值 /// /// 界面字段的业务标识 /// 返回int格式的配方界面字段值 private int getRecipeInfoValueInt(string key) { int Result = 0; string ss = getRecipeInfoValueString(key); if (int.TryParse(ss, out Result)) { return Result; } return Result; } /// /// 获取配方界面字段值 /// /// 界面字段的业务标识 /// 返回double格式的配方界面字段值 private double getRecipeInfoValueDouble(string key) { double Result = 0; string ss = getRecipeInfoValueString(key); if (double.TryParse(ss, out Result)) { return Result; } return Result; } #endregion #region 从配方维护界面获取配方主信息 /// /// 从配方维护界面获取配方主信息 /// /// 返回配方主信息实体 private RecipeInfo getRecipeInfo() { RecipeInfo Result = new RecipeInfo(); Result.RecipeEquipCode = base.CurrEquipCode; Result.ObjID = getRecipeInfoValueString("ObjID"); Result.IsUseAreaTemp = getRecipeInfoValueInt("if_not"); Result.SideTemp = getRecipeInfoValueDouble("sds_temp"); Result.RollTemp = getRecipeInfoValueDouble("zz_temp"); Result.DdoorTemp = getRecipeInfoValueDouble("xlm_temp"); Result.OverTimeSetTime = getRecipeInfoValueDouble("mini_time"); Result.OverTempSetTemp = getRecipeInfoValueDouble("over_temp"); Result.OverTempMinTime = getRecipeInfoValueDouble("expire_time"); Result.RecipeState = getRecipeInfoValueString("recipe_state"); Result.RecipeType = getRecipeInfoValueString("RecipeType"); Result.RecipeMaterialName = getRecipeInfoValueString("mater_name"); Result.RecipeMaterialCode = getRecipeInfoValueString("mater_code"); Result.RecipeVersionID = getRecipeInfoValueString("edt_code"); Result.InPolyMaxTemp = getRecipeInfoValueDouble("max_temp"); //Result.InPolySetTime = getRecipeInfoValueDouble("InPolySetTime"); return Result; } #endregion #region 从配方界面获取配方称量信息 /// /// 获取配方称量信息 /// /// 返回称量实体列表 private List getRecipeWeightInfo() { List Result = new List(); List gridList = GetTControls(); foreach (MCDataGridView grid in gridList) { if (grid.MCKey != null && grid.MCKey.ToLower().StartsWith("PmtWeight.".ToLower())) { int iType = 0; if (int.TryParse(grid.MCKey.Substring("PmtWeight.".Length).Trim(), out iType)) { int idx = 0; foreach (DataGridViewRow row in grid.Rows) { RecipeWeight weight = new RecipeWeight(); for (int i = 0; i < grid.ColumnCount; i++) { weight.WeightType = iType; #region WeightID if (grid.Columns[i].DataPropertyName.Equals("SeqInx", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } int d = 0; if (int.TryParse(row.Cells[i].Value.ToString(), out d)) { weight.Index = d; } } #endregion #region ActCode if (grid.Columns[i].DataPropertyName.Equals("act_code", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { break; } weight.ActCode = row.Cells[i].Value.ToString(); } #endregion #region MaterialName,MaterialCode if (grid.Columns[i].DataPropertyName.Equals("child_code", StringComparison.CurrentCultureIgnoreCase) && (grid.Columns[i] is System.Windows.Forms.DataGridViewComboBoxColumn)) { if (ValueIsNull(row.Cells[i].Value)) { break; } weight.MaterialCode = row.Cells[i].Value.ToString(); //weight.MaterialName = row.Cells[i].FormattedValue.ToString(); weight.MaterialName = this.GetMaterName(weight.MaterialCode); } #endregion #region SetWeight if (grid.Columns[i].DataPropertyName.Equals("set_weight", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { weight.SetWeight = d; } } #endregion #region ErrorAllow if (grid.Columns[i].DataPropertyName.Equals("error_allow", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { weight.ErrorAllow = d; } } #endregion #region Auto_ploy if (grid.Columns[i].DataPropertyName.Equals("Auto_ploy", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { weight.AutoPloy = "0"; continue; } weight.AutoPloy = row.Cells[i].Value.ToString(); } #endregion } if (string.IsNullOrWhiteSpace(weight.ActCode)) { continue; } weight.WeightID = idx; Result.Add(weight); idx++; } } } } return Result; } #endregion #region 从配方界面获取配方密炼信息 /// /// 从配方界面获取配方密炼信息 /// /// 返回密炼实体列表 private List getRecipeMixingInfo() { List Result = new List(); List gridList = GetTControls(); foreach (MCDataGridView grid in gridList) { if (grid.MCKey != null && grid.MCKey.ToLower() == "PmtMixing".ToLower()) { int idx = 0; foreach (DataGridViewRow row in grid.Rows) { RecipeMixing mixing = new RecipeMixing(); for (int i = 0; i < grid.ColumnCount; i++) { #region MixingStep if (grid.Columns[i].DataPropertyName.Equals("SeqInx", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } int d = 0; if (int.TryParse(row.Cells[i].Value.ToString(), out d)) { mixing.Index = d; } } #endregion #region ActionCode if (grid.Columns[i].DataPropertyName.Equals("act_code", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { break; } mixing.ActionCode = row.Cells[i].Value.ToString(); mixing.ActionName = row.Cells[i].FormattedValue.ToString(); } #endregion #region TermCode if (grid.Columns[i].DataPropertyName.Equals("term_code", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } mixing.TermCode = row.Cells[i].Value.ToString(); mixing.TermName = row.Cells[i].FormattedValue.ToString(); } #endregion #region MixingTime if (grid.Columns[i].DataPropertyName.Equals("set_time", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { mixing.MixingTime = d; } } #endregion #region MixingTemp if (grid.Columns[i].DataPropertyName.Equals("set_temp", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { mixing.MixingTemp = d; } } #endregion #region MixingPower if (grid.Columns[i].DataPropertyName.Equals("set_power", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { mixing.MixingPower = d; } } #endregion #region MixingEnergy if (grid.Columns[i].DataPropertyName.Equals("set_ener", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { mixing.MixingEnergy = d; } } #endregion #region MixingPress if (grid.Columns[i].DataPropertyName.Equals("set_pres", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { mixing.MixingPress = d; } } #endregion #region MixingSpeed if (grid.Columns[i].DataPropertyName.Equals("set_rota", StringComparison.CurrentCultureIgnoreCase)) { if (ValueIsNull(row.Cells[i].Value)) { continue; } double d = 0; if (double.TryParse(row.Cells[i].Value.ToString(), out d)) { mixing.MixingSpeed = d; } } #endregion } mixing.MixingStep = idx; Result.Add(mixing); idx++; } } } return Result; } #endregion #endregion #region 业务验证 /// /// 密炼动作 /// private enum MixingAction { 加胶料 = 1, 加炭黑 = 2, 加油1 = 3, 开卸料门 = 4, 关卸料门 = 5, 升上顶栓上到位 = 6, 上顶栓清扫 = 7, 压上顶栓 = 8, 配方结束 = 9, 保持 = 10, 开加料门 = 11, 关加料门 = 12, 加小药 = 13, 上顶栓浮动 = 14, 加油2 = 15, 加粉料 = 16 } /// /// 称量动作 /// private enum WeightAction { 称量 = 0, 称到 = 1, 卸料 = 2, } /// /// 称量类型 /// private enum WeightType { 炭黑称量信息 = 0, 油1称量信息 = 1, 胶料称量信息 = 2, 粉料称量信息 = 3, 小料称量信息 = 4, 油2称量信息 = 5 //小料称量信息 = 9, } /// /// 验证配方 /// /// /// /// private string ValidityRecipe(RecipeInfo recipe, bool isXiaoLiao) { string Result = string.Empty; if (recipe.IsUseAreaTemp == 1) { if ((recipe.SideTemp == null) || ((int)recipe.SideTemp) <= 0) { return Language(231); //侧壁温度不能为空且必须大于0 } if ((recipe.RollTemp == null) || ((int)recipe.RollTemp) <= 0) { return Language(232); //卸料门温度不能为空且必须大于0 } if ((recipe.DdoorTemp == null) || ((int)recipe.DdoorTemp) <= 0) { return Language(233); //卸料门温度不能为空且必须大于0 } } if (string.IsNullOrWhiteSpace(recipe.RecipeMaterialCode)) { return Language(234); //物料信息不能为空 } if (string.IsNullOrWhiteSpace(recipe.RecipeEquipCode)) { return Language(235); //机台信息不能为空 } //if (string.IsNullOrWhiteSpace(recipe.RecipeType)) //{ // return Language(236); //配方类型不能为空 //} if (string.IsNullOrWhiteSpace(recipe.RecipeState)) { return Language(237); //配方状态不能为空 } if ((recipe.OverTimeSetTime == null) || ((int)recipe.OverTimeSetTime) <= 0) { return Language(238); //超时排胶时间不能为空且必须大于0 } if ((recipe.OverTempSetTemp == null) || ((int)recipe.OverTempSetTemp) <= 0) { return Language(239); //紧急排胶温度不能为空且必须大于0 } if ((recipe.OverTempMinTime == null) || ((int)recipe.OverTempMinTime) <= 0) { return Language(240); //超温排胶最短时间不能为空且必须大于0 } return Result; } /// /// 验证密炼信息 /// /// /// /// private string ValidityRecipeMixing(List mixinglst,bool isXiaoLiao) { if (isXiaoLiao) { return string.Empty; } bool isExistsMixingInfo = false; string Result = string.Empty; foreach (RecipeMixing mixing in mixinglst) { if (string.IsNullOrWhiteSpace(mixing.ActionCode) && ( ((mixing.MixingTime != null) && ((int)mixing.MixingTime > 0)) || ((mixing.MixingTemp != null) && ((int)mixing.MixingTemp > 0)) || ((mixing.MixingEnergy != null) && ((int)mixing.MixingEnergy > 0)) || ((mixing.MixingPower != null) && ((int)mixing.MixingPower > 0)) || ((mixing.MixingPress != null) && ((int)mixing.MixingPress > 0)) || ((mixing.MixingSpeed != null) && ((int)mixing.MixingSpeed > 0)) || (!string.IsNullOrWhiteSpace(mixing.TermCode)) )) { return string.Format(Language(241), mixing.Index.ToString()); } } foreach (RecipeMixing mixing in mixinglst) { if (string.IsNullOrWhiteSpace(mixing.ActionCode)) { continue; } isExistsMixingInfo = true; if ((mixing.MixingSpeed == null) || (mixing.MixingSpeed == 0)) { return Language(242); } if ((mixing.MixingPress == null) || (mixing.MixingPress == 0)) { return Language(243); } break; } if (!isExistsMixingInfo) { return Language(244); } bool isExist加胶料 = false; bool isExist开卸料门 = false; foreach (RecipeMixing mixing in mixinglst) { if (string.IsNullOrWhiteSpace(mixing.ActionCode)) { continue; } if (mixing.ActionCode.Trim() == ((int)MixingAction.加胶料).ToString()) { isExist加胶料 = true; } if (mixing.ActionCode.Trim() == ((int)MixingAction.开卸料门).ToString()) { isExist开卸料门 = true; } if ((!string.IsNullOrWhiteSpace(mixing.TermName)) && (mixing.TermName.Contains("温度")) && ((mixing.MixingTemp == null) || (mixing.MixingTemp <= 0))) { return string.Format(Language(245), mixing.Index.ToString()); } if ((!string.IsNullOrWhiteSpace(mixing.TermName)) && (mixing.TermName.Contains("温度")) && ((mixing.MixingTemp == null) || (mixing.MixingTemp > 200))) { return string.Format(Language(246), mixing.Index.ToString()); } if ((mixing.MixingTemp != null) && (mixing.MixingTemp > 0) && ((string.IsNullOrWhiteSpace(mixing.TermName)) || (!mixing.TermName.Contains("温度")))) { return string.Format(Language(247), mixing.Index.ToString()); } if ((!string.IsNullOrWhiteSpace(mixing.ActionCode)) && (mixing.ActionCode == ((int)MixingAction.保持).ToString()) && ((mixing.MixingTime == null) || (mixing.MixingTime <= 0))) { return string.Format(Language(248), mixing.Index.ToString()); } if ((!string.IsNullOrWhiteSpace(mixing.TermName)) && (mixing.TermName.Contains("功率")) && ((mixing.MixingPower == null) || (mixing.MixingPower <= 0))) { return string.Format(Language(249), mixing.Index.ToString()); } if ((mixing.MixingPower != null) && (mixing.MixingPower > 0) && ((string.IsNullOrWhiteSpace(mixing.TermName)) || (!mixing.TermName.Contains("功率")))) { return string.Format(Language(250), mixing.Index.ToString()); } if ((!string.IsNullOrWhiteSpace(mixing.TermName)) && (mixing.TermName.Contains("能量")) && ((mixing.MixingEnergy == null) || (mixing.MixingEnergy <= 0))) { return string.Format(Language(251), mixing.Index.ToString()); } if ((mixing.MixingEnergy != null) && (mixing.MixingEnergy > 0) && ((string.IsNullOrWhiteSpace(mixing.TermName)) || (!mixing.TermName.Contains("能量")))) { return string.Format(Language(252), mixing.Index.ToString()); } } if (!isExist加胶料) { return Language(253); } if (!isExist开卸料门) { return Language(254); } return Result; } private bool WeightTypeNeed卸料(string weightType) { if (string.IsNullOrWhiteSpace(weightType)) { return false; } if (weightType.Trim() == ((int)WeightType.炭黑称量信息).ToString()) { return true; } if (weightType.Trim() == ((int)WeightType.油1称量信息).ToString()) { return true; } if (weightType.Trim() == ((int)WeightType.油2称量信息).ToString()) { return true; } //增加粉料时必须有卸料 if (weightType.Trim() == ((int)WeightType.粉料称量信息).ToString()) { return true; } return false; } private bool WeightActionIs卸料(string weightAction) { if (string.IsNullOrWhiteSpace(weightAction)) { return false; } if (weightAction.Trim() == ((int)WeightAction.卸料).ToString()) { return true; } return false; } /// /// 验证称量信息 /// /// /// /// private string ValidityRecipeWeight(List weightlst,bool isXiaoLiao) { string Result = string.Empty; Dictionary> weightTypelst = new Dictionary>(); bool isExistsWeightInfo = false; foreach (RecipeWeight weight in weightlst) { List lst = null; if (!weightTypelst.TryGetValue(weight.WeightType, out lst)) { lst = new List(); weightTypelst.Add(weight.WeightType, lst); } if (!string.IsNullOrWhiteSpace(weight.ActCode)) { isExistsWeightInfo = true; } lst.Add(weight); } if (!isExistsWeightInfo) { return Language(255); } foreach (List lst in weightTypelst.Values) { RecipeWeight weight_first = null; RecipeWeight weight_last = null; foreach (RecipeWeight weight in lst) { if (!string.IsNullOrWhiteSpace(weight.ActCode)) { if (weight_first == null) { weight_first = weight; weight_last = weight; } else { weight_last = weight; } } } if (weight_first != null) { if (WeightTypeNeed卸料(weight_first.WeightType.ToString()) && WeightActionIs卸料(weight_first.ActCode)) { return string.Format(Language(256), ((WeightType)(weight_first.WeightType)).ToString()); } if (WeightTypeNeed卸料(weight_last.WeightType.ToString()) && !WeightActionIs卸料(weight_last.ActCode)) { return string.Format(Language(257), ((WeightType)(weight_first.WeightType)).ToString()); } } foreach (RecipeWeight weight in lst) { if ((string.IsNullOrWhiteSpace(weight.ActCode)) || WeightActionIs卸料(weight.ActCode)) { continue; } #region 称量 if ((weight.SetWeight == null) || (weight.ErrorAllow == null) || (weight.SetWeight == 0) || (weight.ErrorAllow == 0)) { return string.Format(Language(258), ((WeightType)(weight_first.WeightType)).ToString(), weight.MaterialName); } #endregion } } List mixinglst = getRecipeMixingInfo(); foreach (KeyValuePair> weightType in weightTypelst) { bool isExists = false; #region 炭黑称量信息 if (weightType.Key == (int)WeightType.炭黑称量信息) { foreach (RecipeWeight weight in weightType.Value) { if (!string.IsNullOrWhiteSpace(weight.ActCode)) { isExists = true; break; } } if (isExists) { foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加炭黑).ToString()) { isExists = false; break; } } if (isExists) { return Language(259); } } } #endregion #region 油1称量信息 if (weightType.Key == (int)WeightType.油1称量信息) { foreach (RecipeWeight weight in weightType.Value) { if (!string.IsNullOrWhiteSpace(weight.ActCode)) { isExists = true; break; } } if (isExists) { foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加油1).ToString()) { isExists = false; break; } } if (isExists) { return Language(260); } } } #endregion #region 油2称量信息 if (weightType.Key == (int)WeightType.油2称量信息) { foreach (RecipeWeight weight in weightType.Value) { if (!string.IsNullOrWhiteSpace(weight.ActCode)) { isExists = true; break; } } if (isExists) { foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加油2).ToString()) { isExists = false; break; } } if (isExists) { return Language(261); } } } #endregion #region 粉料称量信息 if (weightType.Key == (int)WeightType.粉料称量信息) { foreach (RecipeWeight weight in weightType.Value) { if (!string.IsNullOrWhiteSpace(weight.ActCode)) { isExists = true; break; } } if (isExists) { foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加粉料).ToString()) { isExists = false; break; } } if (isExists) { return Language(274); } } } #endregion } int iCount = 0; #region 加炭黑 foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加炭黑).ToString()) { iCount++; } } foreach (KeyValuePair> weightType in weightTypelst) { if (weightType.Key == (int)WeightType.炭黑称量信息) { foreach (RecipeWeight weight in weightType.Value) { if ((!string.IsNullOrWhiteSpace(weight.ActCode)) && weight.ActCode.Trim() == ((int)WeightAction.卸料).ToString()) { iCount = 0; ; break; } } } } if (iCount != 0) { return Language(262); } #endregion #region 加油1 foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加油1).ToString()) { iCount++; } } foreach (KeyValuePair> weightType in weightTypelst) { if (weightType.Key == (int)WeightType.油1称量信息) { foreach (RecipeWeight weight in weightType.Value) { if ((!string.IsNullOrWhiteSpace(weight.ActCode)) && weight.ActCode.Trim() == ((int)WeightAction.卸料).ToString()) { iCount--; } } } } if (iCount != 0) { return Language(263); } #endregion #region 加油2 foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加油2).ToString()) { iCount++; } } foreach (KeyValuePair> weightType in weightTypelst) { if (weightType.Key == (int)WeightType.油2称量信息) { foreach (RecipeWeight weight in weightType.Value) { if ((!string.IsNullOrWhiteSpace(weight.ActCode)) && weight.ActCode.Trim() == ((int)WeightAction.卸料).ToString()) { iCount--; } } } } if (iCount != 0) { return Language(264); } #endregion #region 加粉料 foreach (RecipeMixing mixing in mixinglst) { if (!string.IsNullOrWhiteSpace(mixing.ActionCode) && mixing.ActionCode.Trim() == ((int)MixingAction.加粉料).ToString()) { iCount++; } } foreach (KeyValuePair> weightType in weightTypelst) { if (weightType.Key == (int)WeightType.粉料称量信息) { foreach (RecipeWeight weight in weightType.Value) { if ((!string.IsNullOrWhiteSpace(weight.ActCode)) && weight.ActCode.Trim() == ((int)WeightAction.卸料).ToString()) { iCount--; } } } } if (iCount != 0) { return Language(275); } #endregion return Result; } #endregion #region 业务保存 /// /// 新增配方时,获取配方编码 /// /// /// private string GetRecipeCode(RecipeInfo recipe) { string recipeType = "正常"; //IBaseControl recipeTypeControl = base.GetMCControlByKey("RecipeType").FirstOrDefault(); //查找配方类型控件 //if (recipeTypeControl != null) //{ // recipeType = recipeTypeControl.MCValue.ToString().Trim(); //} string recipeTypeId = getRecipeInfoValueString("RecipeType"); recipeType = PlanCommon.GetSysCodeItemName(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "PmtType", Convert.ToInt32(recipeTypeId)); string result = String.Format("{0:yyMMdd}{1}{2:D3}", DateTime.Now, recipeType, recipe.RecipeVersionID); return result; } #region 保存配方主信息 /// /// 保存配方主信息 /// /// 数据访问辅助对象 /// 配方主信息实体 /// private string SaveRecipeInfo(DbHelper dbHelper, RecipeInfo recipe) { string Result = string.Empty; StringBuilder sqlfied = new StringBuilder(); StringBuilder sqlvalue = new StringBuilder(); dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; if (string.IsNullOrWhiteSpace(recipe.ObjID)) { sqlfied.AppendLine("INSERT INTO pmt_recipe("); sqlfied.Append("equip_code").Append(","); //必须保存机台 sqlfied.Append("recipe_code").Append(","); //配方编码 sqlvalue.Append("'").Append(recipe.RecipeEquipCode.Substring(3)).Append("',"); //设置机台值,取后2位 sqlvalue.Append("'").Append(GetRecipeCode(recipe)).Append("',"); //设置配方编码 foreach (DbMCControl control in GetAllDbMCControls()) { if (control.DataTable.Equals("pmt_recipe", StringComparison.CurrentCultureIgnoreCase) && !string.IsNullOrWhiteSpace(control.DataField) && !control.DataField.Equals("ObjID", StringComparison.CurrentCultureIgnoreCase) && (control.BaseControl.DbOptionType == DbOptionTypes.Modify || control.BaseControl.DbOptionType == DbOptionTypes.QueryAndModify) && control.BaseControl.MCValue != null) { sqlfied.Append(control.DataField).Append(","); string key = "@" + control.DataField; sqlvalue.Append(key).Append(","); dbHelper.AddParameter(key, control.BaseControl.MCValue.ToString() == "" ? "0" : control.BaseControl.MCValue); } } sqlfied.Remove(sqlfied.Length - 1, 1).AppendLine(") VALUES ("); sqlfied.Append(sqlvalue.Remove(sqlvalue.Length - 1, 1)).AppendLine(");SELECT SCOPE_IDENTITY();"); dbHelper.CommandText = sqlfied.ToString(); return dbHelper.ToScalar().ToString(); } else { RecipeLogHelper.Instance.ClearStringBuilder(); //工艺日志处理 RecipeLogHelper.Instance.PmtRecipeOld.Append(String.Format("Equip_Code:{0},", recipe.RecipeEquipCode)); RecipeLogHelper.Instance.PmtRecipeNow.Append(String.Format("Equip_Code:{0},", recipe.RecipeEquipCode)); DataRow recipeDataRow = RecipeLogHelper.Instance.GetRecipeDataRow(recipe.RecipeMaterialCode, recipe.RecipeVersionID); //工艺日志处理 sqlfied.AppendLine("UPDATE pmt_recipe SET"); foreach (DbMCControl control in GetAllDbMCControls()) { if (control.DataTable.Equals("pmt_recipe", StringComparison.CurrentCultureIgnoreCase) && (control.DataField != null && !control.DataField.Equals("ObjID", StringComparison.CurrentCultureIgnoreCase)) && (control.BaseControl.DbOptionType == DbOptionTypes.Modify || control.BaseControl.DbOptionType == DbOptionTypes.QueryAndModify) && control.BaseControl.MCValue != null) { sqlfied.Append(control.DataField).Append("="); string key = "@" + control.DataField; sqlfied.Append(key).Append(","); dbHelper.AddParameter(key, control.BaseControl.MCValue.ToString()== "" ? "0" : control.BaseControl.MCValue); //工艺日志处理 try { if (recipeDataRow != null) { RecipeLogHelper.Instance.IsBegin = true; //开始处理工艺日志 RecipeLogHelper.Instance.PmtRecipeOld.Append(String.Format("{0}:{1}", control.DataField, Mesnac.Basic.DataProcessor.RowValue(recipeDataRow, control.DataField, "0"))); RecipeLogHelper.Instance.PmtRecipeOld.Append(","); RecipeLogHelper.Instance.PmtRecipeNow.Append(String.Format("{0}:{1}", control.DataField, control.BaseControl.MCValue.ToString() == "" ? "0" : control.BaseControl.MCValue)); RecipeLogHelper.Instance.PmtRecipeNow.Append(","); } } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("工艺日志处理失败-配方主信息:" + ex.Message); } } } sqlfied.Remove(sqlfied.Length - 1, 1).AppendLine(" WHERE ObjID=").Append(recipe.ObjID.ToString()); dbHelper.CommandText = sqlfied.ToString(); dbHelper.ExecuteNonQuery(); return recipe.ObjID.ToString(); } } #endregion #region 保存配方密炼信息 /// /// 保存配方密炼信息 /// /// 数据访问辅助对象 /// 配方主信息 /// 要保存的密炼信息列表 /// private string SaveRecipeInfo(DbHelper dbHelper, RecipeInfo recipe, List mixinglst) { try { if (RecipeLogHelper.Instance.IsBegin) { RecipeLogHelper.Instance.GenerateRecipeMixOld(recipe.RecipeMaterialCode, recipe.RecipeVersionID); } string Result = string.Empty; StringBuilder sqlstr = new StringBuilder(); dbHelper.CommandType = CommandType.Text; dbHelper.ClearParameter(); dbHelper.CommandText = "DELETE FROM pmt_mix WHERE RecipeObjID=" + recipe.ObjID.ToString(); dbHelper.ExecuteNonQuery(); sqlstr.AppendLine(@"INSERT INTO pmt_mix(RecipeObjID, father_code, equip_code, edt_code, mix_id, act_code, term_code, set_time, set_temp, set_power, set_ener, set_pres, set_rota) values (@RecipeObjID, @father_code, @equip_code, @edt_code, @MixingStep, @ActionCode, @TermCode, @MixingTime, @MixingTemp, @MixingPower, @MixingEnergy, @MixingPress, @MixingSpeed)"); int iMixingStep = 1; foreach (RecipeMixing mixing in mixinglst) { if (string.IsNullOrWhiteSpace(mixing.ActionCode)) { continue; } dbHelper.ClearParameter(); dbHelper.AddParameter("@RecipeObjID", recipe.ObjID); dbHelper.AddParameter("@father_code", recipe.RecipeMaterialCode); dbHelper.AddParameter("@equip_code", recipe.RecipeEquipCode.Substring(3, 2)); dbHelper.AddParameter("@edt_code", recipe.RecipeVersionID); dbHelper.AddParameter("@MixingStep", iMixingStep); dbHelper.AddParameter("@ActionCode", mixing.ActionCode); dbHelper.AddParameter("@TermCode", mixing.TermCode); dbHelper.AddParameter("@MixingTime", mixing.MixingTime); dbHelper.AddParameter("@MixingTemp", mixing.MixingTemp); dbHelper.AddParameter("@MixingPower", mixing.MixingPower); dbHelper.AddParameter("@MixingEnergy", mixing.MixingEnergy); dbHelper.AddParameter("@MixingPress", mixing.MixingPress); dbHelper.AddParameter("@MixingSpeed", mixing.MixingSpeed); dbHelper.CommandText = sqlstr.ToString(); dbHelper.ExecuteNonQuery(); iMixingStep++; } if (RecipeLogHelper.Instance.IsBegin) { RecipeLogHelper.Instance.GenerateRecipeMixNow(recipe.RecipeMaterialCode, recipe.RecipeVersionID); } return Result; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("保存配方-保存配方密炼信息失败:" + ex.Message); return String.Empty; } } #endregion #region 保存配方称量信息 /// /// 保存配方称量信息 /// /// 数据访问辅助对象 /// 配方主信息 /// 要保存的称量信息列表 /// private string SaveRecipeInfo(DbHelper dbHelper, RecipeInfo recipe, List weightlst) { try { if (RecipeLogHelper.Instance.IsBegin) { RecipeLogHelper.Instance.GenerateRecipeWeighOld(recipe.RecipeMaterialCode, recipe.RecipeVersionID); } string Result = string.Empty; StringBuilder sqlstr = new StringBuilder(); dbHelper.CommandType = CommandType.Text; dbHelper.ClearParameter(); dbHelper.CommandText = "DELETE FROM pmt_weigh WHERE RecipeObjID=" + recipe.ObjID.ToString(); dbHelper.ExecuteNonQuery(); sqlstr.AppendLine(@"INSERT INTO pmt_weigh(RecipeObjID,weigh_type,weight_id,father_code,equip_code,edt_code,act_code,child_name,child_code,set_weight,error_allow,Auto_ploy) values (@RecipeObjID,@WeightType,@WeightID,@father_code,@equip_code,@edt_code,@ActCode,@MaterialName,@MaterialCode,@SetWeight,@ErrorAllow,@AutoPloy)"); Dictionary> weightTypelst = new Dictionary>(); foreach (RecipeWeight weight in weightlst) { List lst = null; if (!weightTypelst.TryGetValue(weight.WeightType, out lst)) { lst = new List(); weightTypelst.Add(weight.WeightType, lst); } lst.Add(weight); } foreach (List lst in weightTypelst.Values) { int WeightID = 1; foreach (RecipeWeight weight in lst) { if (string.IsNullOrWhiteSpace(weight.ActCode)) { continue; } dbHelper.ClearParameter(); dbHelper.AddParameter("@RecipeObjID", recipe.ObjID); dbHelper.AddParameter("@WeightType", weight.WeightType); dbHelper.AddParameter("@WeightID", WeightID); dbHelper.AddParameter("@father_code", recipe.RecipeMaterialCode); dbHelper.AddParameter("@equip_code", recipe.RecipeEquipCode.Substring(3, 2)); dbHelper.AddParameter("@edt_code", recipe.RecipeVersionID); dbHelper.AddParameter("@ActCode", weight.ActCode); dbHelper.AddParameter("@MaterialName", weight.MaterialName); dbHelper.AddParameter("@MaterialCode", weight.MaterialCode); dbHelper.AddParameter("@SetWeight", weight.SetWeight); dbHelper.AddParameter("@ErrorAllow", weight.ErrorAllow); dbHelper.AddParameter("@AutoPloy", weight.AutoPloy); dbHelper.CommandText = sqlstr.ToString(); dbHelper.ExecuteNonQuery(); WeightID++; } } if (RecipeLogHelper.Instance.IsBegin) { RecipeLogHelper.Instance.GenerateRecipeWeighNow(recipe.RecipeMaterialCode, recipe.RecipeVersionID); } return Result; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("配方保存-保存配方称量信息失败:" + ex.Message); return String.Empty; } } #endregion #region 更新配方信息 /// /// 更新配方信息 /// /// 数据访问辅助对象 /// 配方主信息 /// private string RefreshRecipe(DbHelper dbHelper, RecipeInfo recipe) { try { string Result = string.Empty; string sqlstr = string.Empty; //更新机台号和每车重量 sqlstr = @"UPDATE [pmt_recipe] SET [define_date]=getdate(),[total_weight]=t.total FROM (SELECT SUM(t.set_weight) as total FROM pmt_weigh t WHERE RecipeObjID=" + recipe.ObjID.ToString() + ") t WHERE ObjID=" + recipe.ObjID.ToString(); dbHelper.ClearParameter(); dbHelper.CommandText = sqlstr; dbHelper.ExecuteNonQuery(); //更新物料名称 //sqlstr = @"UPDATE [pmt_recipe] SET [mater_name]=(select t.[mater_name] from [pmt_material] as t where t.[mater_code] = pmt_recipe.[mater_code]) WHERE ObjID=" + recipe.ObjID.ToString(); //dbHelper.ClearParameter(); //dbHelper.CommandText = sqlstr; //dbHelper.ExecuteNonQuery(); //更新配方名称 // sqlstr = @"UPDATE [pmt_recipe] SET [recipe_code]=t.showName FROM ( //SELECT t2.[mater_name]+t1.ItemName AS showName FROM [SysCode] t1,[pmt_material] t2 WHERE t1.TypeID='PmtType' AND t1.ItemCode='" + recipe.RecipeType + @"' AND t2.[mater_code]='" + recipe.RecipeMaterialCode + @"') t WHERE ObjID=" + recipe.ObjID.ToString(); // dbHelper.ClearParameter(); // dbHelper.CommandText = sqlstr; // dbHelper.ExecuteNonQuery(); //更新配方版本 // sqlstr = @"UPDATE [pmt_recipe] SET [edt_code]=ISNULL(t.RecipeVersionID,1) FROM ( //SELECT MAX([edt_code])+1 AS RecipeVersionID FROM [pmt_recipe] WHERE [mater_code]='" + recipe.RecipeMaterialCode + @"' AND ObjID<>" + recipe.ObjID.ToString() + ") t WHERE ObjID=" + recipe.ObjID.ToString(); // dbHelper.ClearParameter(); // dbHelper.CommandText = sqlstr; // dbHelper.ExecuteNonQuery(); //更新称量信息表中的物料编码和版本 //sqlstr = "UPDATE [pmt_weigh] SET [father_code]=t.[mater_code],[edt_code]=t.[edt_code] FROM [pmt_recipe] t WHERE RecipeObjID=t.ObjID AND RecipeObjID=" + recipe.ObjID.ToString(); //dbHelper.ClearParameter(); //dbHelper.CommandText = sqlstr; //dbHelper.ExecuteNonQuery(); //跟新密炼信息表中的物料编码和版本 //sqlstr = "UPDATE [pmt_mix] SET [father_code]=t.[mater_code],[edt_code]=t.[edt_code] FROM [pmt_recipe] t WHERE RecipeObjID=t.ObjID AND RecipeObjID=" + recipe.ObjID.ToString(); //dbHelper.ClearParameter(); //dbHelper.CommandText = sqlstr; //dbHelper.ExecuteNonQuery(); //更新配方状态 if (recipe.RecipeState.Trim() == "1") { sqlstr = @"UPDATE [pmt_recipe] SET [recipe_state]=0 WHERE [mater_code]='" + recipe.RecipeMaterialCode + @"' AND [recipe_state]=1 AND ObjID<>" + recipe.ObjID.ToString(); dbHelper.ClearParameter(); dbHelper.CommandText = sqlstr; dbHelper.ExecuteNonQuery(); } return Result; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error("保存配方-更新配方信息失败:" + ex.Message); return String.Empty; } } #endregion #endregion #region 提示错误信息,并终止程序执行 /// /// 提示错误信息,并终止程序执行 /// /// 要提示的信息内容 private void ReturnFromAciton(string msg) { base.ShowMsg(msg); throw new Exception(msg); } #endregion #region 保存配方数据业务入口 /// /// 保存配方数据业务入口 /// /// public void Run(RuntimeParameter runtime) { base.RunIni(runtime); ///判断当前配方是否处于编辑状态 if (this.IsEditMode()) { bool isXiaoLiao = false; //是否小料 RecipeInfo recipe = getRecipeInfo(); //从界面获取配方主信息 int recipeObjId = 0; if (String.IsNullOrWhiteSpace(recipe.ObjID)) { recipeObjId = 0; } int.TryParse(recipe.ObjID, out recipeObjId); if (recipeObjId <= 0) { if (PlanCommon.IsExistsRecipeMaterCode(recipe.RecipeMaterialCode.Trim())) { //【配方编码】已存在,请输入一个不存在的配方编码! MessageBox.Show(Language(283), Language(1), MessageBoxButtons.OK, MessageBoxIcon.Information); runtime.IsReturn = true; //终止执行 return; } string materName = this.getRecipeInfoValueString("mater_name"); if (PlanCommon.IsExistsRecipeMaterName(materName.Trim())) { //【配方名称】已存在,请输入一个不存在的配方编码! MessageBox.Show(Language(284), Language(1), MessageBoxButtons.OK, MessageBoxIcon.Information); runtime.IsReturn = true; //终止执行 return; } } string msg = ValidityRecipe(recipe, isXiaoLiao); //验证配方是否符合验证规则 if (!string.IsNullOrWhiteSpace(msg)) { ReturnFromAciton(msg); } List mixinglst = getRecipeMixingInfo(); //从界面获取密炼信息 msg = ValidityRecipeMixing(mixinglst, isXiaoLiao); //验证密炼信息是否符合规则 if (!string.IsNullOrWhiteSpace(msg)) { ReturnFromAciton(msg); } List weightlst = getRecipeWeightInfo(); //从界面获取称量信息 msg = ValidityRecipeWeight(weightlst, isXiaoLiao); //验证称量信息是否符合规则 if (!string.IsNullOrWhiteSpace(msg)) { ReturnFromAciton(msg); } DbMCSource dbsource = base.GetAllDbMCSources().FirstOrDefault(); DbHelper dbHelper = NewDbHelper(dbsource.DesignSource); if (dbHelper == null) { ReturnFromAciton(Language(265)); } try { //dbHelper.BeginTransaction(); //开启事务 msg = SaveRecipeInfo(dbHelper, recipe); //保存配方主信息 int ObjID = 0; if (!int.TryParse(msg, out ObjID)) { goto gotoReturn; } msg = string.Empty; recipe.ObjID = ObjID.ToString(); msg = SaveRecipeInfo(dbHelper, recipe, mixinglst); //保存密炼信息 if (!string.IsNullOrWhiteSpace(msg)) { goto gotoReturn; } msg = SaveRecipeInfo(dbHelper, recipe, weightlst); //保存称量信息 if (!string.IsNullOrWhiteSpace(msg)) { goto gotoReturn; } msg = RefreshRecipe(dbHelper, recipe); //更新配方相关数据 RecipeLogHelper.Instance.SaveRecipeLog(recipe.RecipeMaterialCode, recipe.RecipeVersionID); //保存工艺日志 base.DBLog("配方管理", "保存配方", "配方保存成功,配方:" + recipe.RecipeMaterialName + "[" + recipe.RecipeMaterialCode + "]-版本:" + recipe.RecipeVersionID); if (!string.IsNullOrWhiteSpace(msg)) { goto gotoReturn; } //dbHelper.CommitTransaction(); //事务提交 msg = Language(266); base.ShowMsg(msg); return; gotoReturn: //dbHelper.RollbackTransaction(); //事务回滚 ReturnFromAciton(msg); } catch (Exception ex) { base.LogError(ex); //dbHelper.RollbackTransaction(); ReturnFromAciton(Language(267) + ":" + ex.Message); runtime.IsReturn = true; } finally { //dbHelper.CloseConnection(); } } else { MessageBox.Show(base.Language(277), base.Language(1), MessageBoxButtons.OK, MessageBoxIcon.Information); runtime.IsReturn = true; //终止执行 } } #endregion #region 辅助方法 根据物料代码获取物料名称 /// /// 根据物料代码获取物料名称 /// /// 物料代码 /// 返回对应的物料名称 public string GetMaterName(string mater_code) { DbMCSource dbsource = base.GetAllDbMCSources().FirstOrDefault(); DbHelper dbHelper = NewDbHelper(dbsource.DesignSource); if (dbHelper == null) { ReturnFromAciton(Language(265)); } dbHelper.ClearParameter(); string strSql = "select top 1 mater_name from dbo.pmt_material where mater_code=@mater_code"; dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = strSql; dbHelper.AddParameter("@mater_code", mater_code.Trim()); object result = dbHelper.ToScalar(); if (result != null && result != System.DBNull.Value) { return result.ToString().Trim(); } return String.Empty; } /// /// 根据称量信息是否为只读,判断当前配方是否处于编辑状态 /// /// 编辑状态返回true,否则返回false public bool IsEditMode() { bool flag = true; List gridList = GetTControls(); foreach (MCDataGridView grid in gridList) { if (grid.ReadOnly == true) { flag = false; break; } } return flag; } #endregion } }