You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

373 lines
18 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Mesnac.Action.Base;
using System.Windows.Forms;
using Mesnac.Codd.Session;
using System.Data;
using Mesnac.Controls.Base;
using Mesnac.Action.Feeding.BasicInfo;
using Mesnac.Basic;
namespace Mesnac.Action.Feeding.Technology
{
public class RecipeSaveAs : FeedingAction , IAction
{
private IBaseControl _sender = null;
private string oldMaterCode = String.Empty;
private string oldMaterName = String.Empty;
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
this._sender = runtime.BaseControl;
int recipeObjId = 0;
List<DbMCControl> controls = base.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "[pmt_recipe].[ObjID]");
foreach (DbMCControl control in controls)
{
if (control.BaseControl is ComboBox)
{
if (control.BaseControl.MCValue != null)
{
if (int.TryParse(control.BaseControl.MCValue.ToString(), out recipeObjId))
{
if (recipeObjId > 0)
{
DbHelper dbHelper = base.NewDbHelper(control.DesignSource);
if (dbHelper == null)
{
ICSharpCode.Core.LoggingService.Warn("配方另存为...失败,获取本地数据库连接失败!");
runtime.IsReturn = true; //终止执行
return;
}
DataTable recipeTable = this.GetRecipeData(dbHelper, recipeObjId); //获取配方主信息
if (recipeTable != null && recipeTable.Rows.Count > 0)
{
DataRow row = recipeTable.Rows[0];
this.oldMaterCode = DataProcessor.RowValue(row, "mater_code", String.Empty).Trim();
this.oldMaterName = DataProcessor.RowValue(row, "mater_name", String.Empty).Trim();
string newMaterCode = String.Empty;
string newMaterName = String.Empty;
FrmRecipeSaveAs frmRecipeSaveAs = new FrmRecipeSaveAs(this.oldMaterCode, this.oldMaterName);
frmRecipeSaveAs.ShowDialog(this._sender.MCRoot as Control);
if (frmRecipeSaveAs.DialogResult == DialogResult.OK)
{
newMaterCode = frmRecipeSaveAs.MaterCode.Trim();
newMaterName = frmRecipeSaveAs.MaterName.Trim();
//保存配方主信息
int newRecipeObjId = this.CopyRecipeInfo(dbHelper, row, newMaterCode, newMaterName);
if (newRecipeObjId > 0)
{
bool result = true;
//保存密炼信息
if (!this.CopyRecipeMixingData(dbHelper, recipeObjId, newRecipeObjId, newMaterCode))
{
result = false;
}
//保存称量信息
if (!this.CopyRecipeWeightData(dbHelper, recipeObjId, newRecipeObjId, newMaterCode))
{
result = false;
}
if (result)
{
//配方另存成功!
MessageBox.Show(Language(289), Language(1), MessageBoxButtons.OK, MessageBoxIcon.Information);
base.DBLog("配方管理", "配方另存", "原配方编码:" + this.oldMaterCode +";原配方名称:" + this.oldMaterName + "->另存配方编码:" + newMaterCode + ";另存配方名称:" + newMaterName);
}
}
}
else
{
runtime.IsReturn = true; //终止执行
}
frmRecipeSaveAs.Dispose();
return;
}
break;
}
}
}
}
}
if (recipeObjId == 0)
{
//配方获取失败,请先选择一个配方!
MessageBox.Show(LanguageService.Instance.Read(285), LanguageService.Instance.Read(1), MessageBoxButtons.OK, MessageBoxIcon.Information);
runtime.IsReturn = true; //终止执行
}
}
/// <summary>
/// 复制配方主信息
/// </summary>
/// <param name="localHelper">本地数据访问类</param>
/// <param name="recipeObjId">要复制的配方ID</param>
/// <param name="newMaterCode">另存的配方编码</param>
/// <param name="newMaterName">另存的配方名称</param>
/// <returns>另存成功返回新配方的配方ID否则返回0</returns>
public int CopyRecipeInfo(DbHelper localHelper, DataRow oldRcipeDataRow, string newMaterCode, string newMaterName)
{
int newRecipeObjId = 0;
try
{
oldRcipeDataRow["mater_code"] = newMaterCode;
oldRcipeDataRow["mater_name"] = newMaterName;
localHelper.CommandType = System.Data.CommandType.Text;
localHelper.ClearParameter();
string strSql = String.Empty;
strSql = "insert into pmt_recipe({0}) values({1});select SCOPE_IDENTITY();";
StringBuilder sbField = new StringBuilder();
StringBuilder sbParameter = new StringBuilder();
for (int i = 0; i < oldRcipeDataRow.Table.Columns.Count; i++)
{
DataColumn col = oldRcipeDataRow.Table.Columns[i];
if (col.ColumnName.Trim().Equals("ObjId", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
if (String.IsNullOrEmpty(sbField.ToString()))
{
sbField.Append(col.ColumnName);
}
else
{
sbField.Append("," + col.ColumnName);
}
if (String.IsNullOrEmpty(sbParameter.ToString()))
{
sbParameter.Append("@" + col.ColumnName);
}
else
{
sbParameter.Append(",@" + col.ColumnName);
}
localHelper.AddParameter("@" + col.ColumnName, oldRcipeDataRow[col]);
}
strSql = String.Format(strSql, sbField.ToString(), sbParameter.ToString());
localHelper.CommandText = strSql;
object result = localHelper.ToScalar();
if (result != null && result != System.DBNull.Value)
{
int.TryParse(result.ToString(), out newRecipeObjId);
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("配方主信息另存为失败:" + ex.Message);
//配方主信息另存为失败:
MessageBox.Show(Language(286) + ex.Message, Language(1), MessageBoxButtons.OK, MessageBoxIcon.Information);
}
return newRecipeObjId;
}
#region 复制配方混炼信息
/// <summary>
/// 复制配方混炼信息
/// </summary>
/// <param name="localHelper">本地数据访问类</param>
/// <param name="oldRecipeObjId">要复制的配方ID</param>
/// <param name="newRecipeId">另存为配方的配方ID</param>
/// <param name="newMaterCode">另存为配方的配方编码</param>
public bool CopyRecipeMixingData(DbHelper localHelper, int oldRecipeObjId, int newRecipeId, string newMaterCode)
{
try
{
DataTable dt_mix = this.GetRecipeMixingData(localHelper, oldRecipeObjId);
localHelper.CommandType = System.Data.CommandType.Text;
foreach (DataRow row in dt_mix.Rows)
{
localHelper.ClearParameter();
string strSql = String.Empty;
strSql = "insert into pmt_mix({0}) values({1});";
StringBuilder sbField = new StringBuilder();
StringBuilder sbParameter = new StringBuilder();
for (int i = 0; i < dt_mix.Columns.Count; i++)
{
DataColumn col = dt_mix.Columns[i];
if (col.ColumnName.Trim().Equals("ObjId", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
if (String.IsNullOrEmpty(sbField.ToString()))
{
sbField.Append(col.ColumnName);
}
else
{
sbField.Append("," + col.ColumnName);
}
if (String.IsNullOrEmpty(sbParameter.ToString()))
{
sbParameter.Append("@" + col.ColumnName);
}
else
{
sbParameter.Append(",@" + col.ColumnName);
}
if (col.ColumnName.Trim().Equals("RecipeObjID", StringComparison.CurrentCultureIgnoreCase))
{
localHelper.AddParameter("@" + col.ColumnName, newRecipeId);
}
else if (col.ColumnName.Trim().Equals("father_code", StringComparison.CurrentCultureIgnoreCase))
{
localHelper.AddParameter("@" + col.ColumnName, newMaterCode);
}
else
{
localHelper.AddParameter("@" + col.ColumnName, row[col]);
}
}
strSql = String.Format(strSql, sbField.ToString(), sbParameter.ToString());
localHelper.CommandText = strSql;
localHelper.ExecuteNonQuery();
}
return true;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("配方密炼信息另存为失败:" + ex.Message);
//配方密炼信息另存为失败:
MessageBox.Show(Language(287) + ex.Message, Language(1), MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
}
#endregion
#region 复制配方称量信息
/// <summary>
/// 复制配方称量信息
/// </summary>
/// <param name="localHelper">本地数据访问类</param>
/// <param name="oldRecipeObjId">要复制的配方ID</param>
/// <param name="newRecipeId">另存为配方的配方ID</param>
/// <param name="newMaterCode">另存为配方的配方编码</param>
public bool CopyRecipeWeightData(DbHelper localHelper, int oldRecipeObjId, int newRecipeId, string newMaterCode)
{
try
{
DataTable dt_weight = this.GetRecipeWeightData(localHelper, oldRecipeObjId);
localHelper.CommandType = System.Data.CommandType.Text;
foreach (DataRow row in dt_weight.Rows)
{
localHelper.ClearParameter();
string strSql = String.Empty;
strSql = "insert into pmt_weigh({0}) values({1});";
StringBuilder sbField = new StringBuilder();
StringBuilder sbParameter = new StringBuilder();
for (int i = 0; i < dt_weight.Columns.Count; i++)
{
DataColumn col = dt_weight.Columns[i];
if (col.ColumnName.Trim().Equals("ObjId", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
if (String.IsNullOrEmpty(sbField.ToString()))
{
sbField.Append(col.ColumnName);
}
else
{
sbField.Append("," + col.ColumnName);
}
if (String.IsNullOrEmpty(sbParameter.ToString()))
{
sbParameter.Append("@" + col.ColumnName);
}
else
{
sbParameter.Append(",@" + col.ColumnName);
}
if (col.ColumnName.Trim().Equals("RecipeObjID", StringComparison.CurrentCultureIgnoreCase))
{
localHelper.AddParameter("@" + col.ColumnName, newRecipeId);
}
else if (col.ColumnName.Trim().Equals("father_code", StringComparison.CurrentCultureIgnoreCase))
{
localHelper.AddParameter("@" + col.ColumnName, newMaterCode);
}
else
{
localHelper.AddParameter("@" + col.ColumnName, row[col]);
}
}
strSql = String.Format(strSql, sbField.ToString(), sbParameter.ToString());
localHelper.CommandText = strSql;
localHelper.ExecuteNonQuery();
}
return true;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("配方称量信息另存为失败:" + ex.Message);
//配方称量信息另存为失败:
MessageBox.Show(Language(288) + ex.Message, Language(1), MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
}
#endregion
#region 获取配方主信息
/// <summary>
/// 获取配方主信息
/// </summary>
/// <param name="localHelper">本地数据连接对象</param>
/// <param name="recipeId">配方Id</param>
/// <returns>返回对应的配方数据</returns>
public DataTable GetRecipeData(DbHelper localHelper, int recipeId)
{
localHelper.ClearParameter();
string strSql = String.Empty;
strSql = "select * from pmt_recipe where ObjId=@RecipeId";
localHelper.CommandText = strSql;
localHelper.AddParameter("@RecipeId", recipeId);
DataTable dt_recipe = localHelper.ToDataTable();
return dt_recipe;
}
#endregion
#region 获取配方密炼信息
/// <summary>
/// 获取配方密炼信息
/// </summary>
/// <param name="localHelper">本地数据连接对象</param>
/// <param name="recipeId">配方Id</param>
/// <returns>返回对应的配方密炼数据</returns>
public DataTable GetRecipeMixingData(DbHelper localHelper, int recipeId)
{
localHelper.ClearParameter();
string strSql = String.Empty;
strSql = "select * from pmt_mix where RecipeObjId = @RecipeId";
localHelper.CommandText = strSql;
localHelper.AddParameter("@RecipeId", recipeId);
DataTable dt_mix = localHelper.ToDataTable();
return dt_mix;
}
#endregion
#region 获取配方称量数据
/// <summary>
/// 获取配方称量数据
/// </summary>
/// <param name="localHelper">本地数据连接对象</param>
/// <param name="recipeId">配方Id</param>
/// <returns>返回对应的配方称量数据</returns>
public DataTable GetRecipeWeightData(DbHelper localHelper, int recipeId)
{
localHelper.ClearParameter();
string strSql = String.Empty;
strSql = "select * from pmt_weigh where RecipeObjId = @RecipeId";
localHelper.CommandText = strSql;
localHelper.AddParameter("@RecipeId", recipeId);
DataTable dt_weight = localHelper.ToDataTable();
return dt_weight;
}
#endregion
}
}