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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}
}