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.

402 lines
19 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.Action.Feeding.Qingquan.Technology;
namespace Mesnac.Action.Feeding.Qingquan.SynchroData
{
#region 网络同步原材料
/// <summary>
/// 原材料同步
/// </summary>
public class MaterialSynchronous : FeedingAction, IAction
{
/// <summary>
/// 物料同步完成事件
/// </summary>
public static event EventHandler MaterialSynchronousComplete;
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime);
#region 判断与验证
if (base.NetType == NetTypes.Local)
{
//此系统版本为单机版,不能进行数据同步...
ShowMsg(Language(32), Language(1), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
return;
}
if (!PlanCommon.IsCanConnectServer())
{
//连接网络数据库失败...
ShowMsg(base.Language(33));
runtime.IsReturn = true;
return;
}
//从网络导入最新的原材料信息,您确认?
if (MessageBox.Show(Language(35), Language(1), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
string kk = Language(35);
return;
}
#endregion
DbHelper dbHelperLocal = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local);
if (dbHelperLocal == null)
{
return;
}
DbHelper dbHelperServer = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Server);
if (dbHelperServer == null)
{
return;
}
try
{
#region 1、同步该机台配方中用到的物料
//dbHelperLocal.BeginTransaction();
//1、清空本地库物料表数据
dbHelperLocal.ClearParameter();
dbHelperLocal.CommandType = CommandType.Text;
string strSql1 = "Truncate table [pmt_material]";
dbHelperLocal.CommandText = strSql1;
dbHelperLocal.ExecuteNonQuery();
//2、从网络库获取本机配方对应的物料信息
dbHelperServer.ClearParameter();
dbHelperServer.CommandType = CommandType.Text;
string strSql2 = "select distinct Pmt_Weight.mater_code as MaterialCode,Pmt_Weight.Weight_Type as WeightType,Pmt_Weight.mater_name as MaterialName";
strSql2 += " from Pmt_Weight,Pmt_material";
strSql2 += " where Pmt_Weight.Equip_Code = @EquipCode";
strSql2 += " and Pmt_Weight.mater_code = Pmt_Weight.mater_code and isnull(Pmt_Weight.mater_code,'')<>'' ";
dbHelperServer.CommandText = strSql2;
dbHelperServer.AddParameter("@EquipCode", base.CurrEquipCode);
string materialCode = String.Empty;
string weightType = String.Empty;
string materialName = String.Empty;
string strSql3 = "if not exists(select ObjId from [pmt_material] where [mater_code]=@MaterialCode) ";
strSql3 += "insert into [pmt_material]([mater_code],[mater_type],[mater_name]) values(@MaterialCode,@MaterialType,@MaterialName)";
using (IDataReader reader = dbHelperServer.ToDbDataReader())
{
if (reader != null)
{
while (reader.Read())
{
materialCode = reader["MaterialCode"] as string;
weightType = reader["WeightType"] as string;
materialName = reader["MaterialName"] as string;
string materialType = Global.GetMaterialTypeByWeightType(weightType);
if (String.IsNullOrEmpty(materialType))
{
ICSharpCode.Core.LoggingService.Warn("同步物料时,存在其他类型的物料!");
continue;
}
dbHelperLocal.CommandType = CommandType.Text;
dbHelperLocal.ClearParameter();
dbHelperLocal.CommandText = strSql3;
dbHelperLocal.AddParameter("@MaterialCode", materialCode);
dbHelperLocal.AddParameter("@MaterialType", materialType);
dbHelperLocal.AddParameter("@MaterialName", materialName);
dbHelperLocal.ExecuteNonQuery();
}
reader.Close();
reader.Dispose();
}
}
#endregion
#region 2、导入所有炭黑 油
//
#endregion
#region 3、导入配方表物料数据
string strSql4 = "select distinct Mater_Code,Mater_name";
strSql4 += " from [Pmt_Recipe] where Equip_Code = @RecipeEquipCode";
strSql4 += " group by Mater_Code,Mater_name";
dbHelperServer.ClearParameter();
dbHelperServer.CommandText = strSql4;
dbHelperServer.AddParameter("@RecipeEquipCode", base.CurrEquipCode);
using (IDataReader reader2 = dbHelperServer.ToDbDataReader())
{
string materialType2 = "胶料"; //物料类型已确定
if (reader2 != null)
{
while (reader2.Read())
{
materialCode = reader2["RecipeMaterialCode"] as string;
materialName = reader2["RecipeMaterialName"] as string;
dbHelperLocal.CommandType = CommandType.Text;
dbHelperLocal.ClearParameter();
dbHelperLocal.CommandText = strSql3;
dbHelperLocal.AddParameter("@MaterialCode", materialCode);
dbHelperLocal.AddParameter("@MaterialType", materialType2);
dbHelperLocal.AddParameter("@MaterialName", materialName);
dbHelperLocal.ExecuteNonQuery();
}
reader2.Close();
reader2.Dispose();
}
}
#endregion
#region 触发物料同步完成事件
//触发物料同步完成事件
if (MaterialSynchronous.MaterialSynchronousComplete != null)
{
MaterialSynchronous.MaterialSynchronousComplete(null, System.EventArgs.Empty);
}
#endregion
//dbHelperLocal.CommitTransaction();
}
catch (Exception ex)
{
//dbHelperLocal.RollbackTransaction();
string msg = "同步原材料失败:" + ex.Message;
ShowMsg(msg, Language(1), System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
}
finally
{
//dbHelperLocal.CloseConnection();
}
}
#region 下载指定物料到本地库
/// <summary>
/// 下载指定物料到本地库
/// </summary>
/// <param name="localHelper">本地数据连接对象</param>
/// <param name="materCode">物料编码</param>
/// <param name="materName">物料名称</param>
/// <param name="materType">物料类型</param>
/// <returns>成功返回true失败返回false</returns>
public static bool DownLoadMaterial(DbHelper localHelper, string materCode, string materName, string materType)
{
try
{
string strSql = "delete from [pmt_material] where [mater_code]=@MaterialCode;";
strSql += "insert into [pmt_material]([mater_code],[mater_name],[mater_type]) values(@MaterialCode,@MaterialName,@MaterialType)";
localHelper.CommandType = CommandType.Text;
localHelper.ClearParameter();
localHelper.CommandText = strSql;
localHelper.AddParameter("@MaterialCode", materCode);
localHelper.AddParameter("@MaterialName", materName);
localHelper.AddParameter("@MaterialType", materType);
localHelper.ExecuteNonQuery();
#region 触发物料同步完成事件
//触发物料同步完成事件
if (MaterialSynchronous.MaterialSynchronousComplete != null)
{
MaterialSynchronous.MaterialSynchronousComplete(null, System.EventArgs.Empty);
}
#endregion
return true;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("从网路中下载物料到本地库失败:" + ex.Message);
return false;
}
}
#endregion
#region 从网络库中下载日罐物料参数表中用到的物料数据
/// <summary>
/// 从网络库中下载日罐物料参数表中用到的物料数据
/// </summary>
/// <param name="localHelper">本地库数据连接对象</param>
/// <param name="serverHelper">网络库数据连接对象</param>
/// <param name="equipCode">机台号</param>
/// <returns>成功返回true失败返回false</returns>
public static bool DownLoadMaterialBySytJar(DbHelper localHelper, DbHelper serverHelper, string equipCode)
{
try
{
string strServerSql = @"select a.Mater_code as mater_code,b.Mater_name as mater_name,a.Jar_type as mater_type from Pmt_wm a left join Pmt_material b on a.Mater_code=b.Mater_code";
strServerSql += " where Equip_code=@EquipCode";
serverHelper.CommandType = CommandType.Text;
serverHelper.ClearParameter();
serverHelper.CommandText = strServerSql;
serverHelper.AddParameter("@EquipCode", equipCode);
DataTable materTable = serverHelper.ToDataTable();
if (materTable != null && materTable.Rows != null && materTable.Rows.Count > 0)
{
foreach (DataRow row in materTable.Rows)
{
string materCode = Mesnac.Basic.DataProcessor.RowValue(row, "mater_code", String.Empty);
string materName = Mesnac.Basic.DataProcessor.RowValue(row, "mater_name", String.Empty);
string materType = Mesnac.Basic.DataProcessor.RowValue(row, "mater_type", String.Empty);
if (!String.IsNullOrEmpty(materCode))
{
string strLocalSql = "delete from [pmt_material] where [mater_code]=@MaterialCode;";
strLocalSql += "insert into [pmt_material]([mater_code],[mater_name],[mater_type]) values(@MaterialCode,@MaterialName,@MaterialType)";
localHelper.CommandType = CommandType.Text;
localHelper.ClearParameter();
localHelper.CommandText = strLocalSql;
localHelper.AddParameter("@MaterialCode", materCode);
localHelper.AddParameter("@MaterialName", materName);
localHelper.AddParameter("@MaterialType", materType);
localHelper.ExecuteNonQuery();
}
}
}
#region 触发物料同步完成事件
//触发物料同步完成事件
if (MaterialSynchronous.MaterialSynchronousComplete != null)
{
MaterialSynchronous.MaterialSynchronousComplete(null, System.EventArgs.Empty);
}
#endregion
return true;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("从网路中下载物料到本地库失败:" + ex.Message);
return false;
}
}
#endregion
#region 从网络库中下载配方物料到本地库
/// <summary>
/// 从网络库中下载配方物料到本地库
/// </summary>
/// <param name="localHelper">本地库数据访问对象</param>
/// <param name="serverHelper">网络库数据访问对象</param>
/// <param name="equipCode">机台号</param>
/// <param name="recipeMaterCode">配方物料代码</param>
/// <param name="recipeVersionId">配方版本</param>
/// <returns></returns>
public static bool DownLoadRecipeMaterial(DbHelper localHelper, DbHelper serverHelper, string equipCode, string recipeMaterCode, string recipeVersionId)
{
try
{
#region 下载配方的称量物料
string strSql1 = @"select distinct Pmt_Weight.mater_code as MaterialCode,Pmt_Weight.Weight_Type as WeightType,Pmt_Weight.mater_name as MaterialName
from Pmt_Weight,Pmt_material
where Pmt_Weight.Equip_Code =@equipCode and Pmt_Weight.Father_code = @RecipeMaterialCode and Edt_Code= @RecipeVersionID
and Pmt_Weight.mater_code = Pmt_material.mater_code";
serverHelper.CommandType = CommandType.Text;
serverHelper.ClearParameter();
serverHelper.CommandText = strSql1;
serverHelper.AddParameter("@equipCode", equipCode.Trim());
serverHelper.AddParameter("@RecipeMaterialCode", recipeMaterCode.Trim());
serverHelper.AddParameter("@RecipeVersionID", recipeVersionId.Trim());
string materialCode = String.Empty;
string weightType = String.Empty;
string materialName = String.Empty;
string strSql3 = "delete from [pmt_material] where [mater_code]=@MaterialCode ";
strSql3 += "insert into [pmt_material]([mater_code],[mater_type],[mater_name]) values(@MaterialCode,@MaterialType,@MaterialName)";
using (IDataReader reader = serverHelper.ToDbDataReader())
{
if (reader != null)
{
while (reader.Read())
{
materialCode = reader["MaterialCode"] as string;
weightType = reader["WeightType"] as string;
materialName = reader["MaterialName"] as string;
string materialType = Global.GetMaterialTypeByWeightType(weightType);
if (String.IsNullOrEmpty(materialType))
{
ICSharpCode.Core.LoggingService.Warn("同步物料时,存在其他类型的物料!");
continue;
}
localHelper.CommandType = CommandType.Text;
localHelper.ClearParameter();
localHelper.CommandText = strSql3;
localHelper.AddParameter("@MaterialCode", materialCode);
localHelper.AddParameter("@MaterialType", materialType);
localHelper.AddParameter("@MaterialName", materialName);
localHelper.ExecuteNonQuery();
}
reader.Close();
reader.Dispose();
}
}
#endregion
#region 下载配方数据
string strSql2 = @"select distinct Mater_Code as RecipeMaterialCode,Mater_name as RecipeMaterialName from
[Pmt_Recipe] where Equip_Code = @equipCode and Mater_Code = @RecipeMaterialCode and Edt_Code = @RecipeVersionID
group by Mater_Code,Mater_name";
serverHelper.CommandType = CommandType.Text;
serverHelper.ClearParameter();
serverHelper.CommandText = strSql2;
serverHelper.AddParameter("@equipCode", equipCode.Trim());
serverHelper.AddParameter("@RecipeMaterialCode", recipeMaterCode.Trim());
serverHelper.AddParameter("@RecipeVersionID", recipeVersionId.Trim());
using (IDataReader reader2 = serverHelper.ToDbDataReader())
{
string materialType2 = "胶料"; //物料类型已确定
if (reader2 != null)
{
while (reader2.Read())
{
materialCode = reader2["RecipeMaterialCode"] as string;
materialName = reader2["RecipeMaterialName"] as string;
localHelper.CommandType = CommandType.Text;
localHelper.ClearParameter();
localHelper.CommandText = strSql3;
localHelper.AddParameter("@MaterialCode", materialCode);
localHelper.AddParameter("@MaterialType", materialType2);
localHelper.AddParameter("@MaterialName", materialName);
localHelper.ExecuteNonQuery();
}
reader2.Close();
reader2.Dispose();
}
}
#endregion
#region 触发物料同步完成事件
//触发物料同步完成事件
if (MaterialSynchronous.MaterialSynchronousComplete != null)
{
MaterialSynchronous.MaterialSynchronousComplete(null, System.EventArgs.Empty);
}
#endregion
return true;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("从网路中下载配方物料到本地库失败:" + ex.Message);
return false;
}
}
#endregion
}
#endregion
}