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.

353 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.Codd.Session;
using Mesnac.Action.Feeding.Qingquan.BasicInfo;
using System.Data;
using System.Data.Common;
namespace Mesnac.Action.Feeding.Qingquan.FinishBatch
{
/// <summary>
/// 密炼数据存盘辅助类
/// </summary>
public class PptMixingDataHelper
{
private LotBarcode lotBarcode = null;
private List<RecipeData.RecipeMixingInfo> allMixingInfo = null;
/// <summary>
/// 构造方法
/// </summary>
/// <param name="_lotBarcode">架子信息</param>
/// <param name="_allMixingInfo">密炼信息</param>
public PptMixingDataHelper(LotBarcode _lotBarcode, List<RecipeData.RecipeMixingInfo> _allMixingInfo)
{
this.lotBarcode = _lotBarcode;
this.allMixingInfo = _allMixingInfo;
}
#region SavePptMixingData - 保存当前车密炼数据
/// <summary>
/// 保存当前车密炼数据
/// </summary>
/// <param name="dbHelper"></param>
/// <returns></returns>
public bool SavePptMixingData(Mesnac.Basic.DataSourceFactory.MCDbType dbType, DbHelper dbHelper)
{
try
{
#region 基本信息
PlcRecipeReader reader = PlcSchemaHandler.Instance.GetPlcRecipeReader("PptMixData").FirstOrDefault();
#endregion
int[] buff;
if (!PlcData.Instance.PlcLastValueRead(reader.PlcFiledName, out buff))
{
ICSharpCode.Core.LoggingService.Warn("读取PLC的密炼数据失败!");
return true;
}
int shifting = 0;
for (int i = 0; i < allMixingInfo.Count; i++)
{
RecipeData.RecipeMixingInfo mixing = allMixingInfo[i];
#region 基本信息
dbHelper.CommandType = CommandType.Text;
//dbHelper.ClearParameter();
List<DbParameter>[] parameters = new List<DbParameter>[mixing.SynchMixingInfos.Count]; //当前密炼步骤合并的步骤
StringBuilder[] sqlstr_fields = new StringBuilder[mixing.SynchMixingInfos.Count];
StringBuilder[] sqlstr_values = new StringBuilder[mixing.SynchMixingInfos.Count];
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
parameters[index] = new List<DbParameter>();
sqlstr_fields[index] = new StringBuilder();
sqlstr_values[index] = new StringBuilder();
}
string fieldName = string.Empty;
string valueName = string.Empty;
if (dbType == Mesnac.Basic.DataSourceFactory.MCDbType.Local)
{
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
sqlstr_fields[index].Append("INSERT INTO PptMixData(");
}
}
if (dbType == Mesnac.Basic.DataSourceFactory.MCDbType.Server)
{
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
sqlstr_fields[index].Append("INSERT INTO Ppt_MixData(");
}
}
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
sqlstr_values[index].Append(" ) VALUES (");
}
#region 数据整理
#region SaveTime
fieldName = "Save_Time";
valueName = "getdate()";
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
sqlstr_fields[index].Append(fieldName).Append(",");
sqlstr_values[index].Append(valueName).Append(",");
}
#endregion
#region MixId
fieldName = "Mix_id";
valueName = "@MixID";
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
sqlstr_fields[index].Append(fieldName).Append(",");
sqlstr_values[index].Append(valueName).Append(",");
parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].MixingStep));
//dbHelper.AddParameter(valueName, mixing.MixingStep);
}
#endregion
#endregion
#endregion
#region 存储PLCSchema.xml中配置字段的数据
foreach (PlcRecipeReaderItem item in reader.ItemList)
{
int[] data = new int[item.ValueLen];
for (int idx = 0; idx < data.Length; idx++)
{
data[idx] = buff[idx + shifting];
}
shifting += item.ValueLen;
item.SetValue = data;
fieldName = item.DataFieldName;
valueName = "@" + fieldName;
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
sqlstr_fields[index].Append(fieldName).Append(",");
sqlstr_values[index].Append(valueName).Append(",");
if (fieldName.Equals("Term_code", StringComparison.CurrentCultureIgnoreCase))
{
//int value = 0;
//if (int.TryParse(item.GetValue().ToString(), out value))
//{
// if (value > 0)
// {
// parameters[index].Add(dbHelper.CreateParameter(valueName, value));
// }
// else
// {
// parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].TermCodeAddress));
// }
//}
//else
//{
// parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].TermCodeAddress));
//}
if (dbType == Mesnac.Basic.DataSourceFactory.MCDbType.Local)
{
parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].TermCodeAddress));
}
else if (dbType == Mesnac.Basic.DataSourceFactory.MCDbType.Server)
{
parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].TermCodeMapAddress));
}
}
else if (fieldName.Equals("Act_code", StringComparison.CurrentCultureIgnoreCase))
{
//int actionCode = 0;
//if (int.TryParse(item.GetValue().ToString(), out actionCode))
//{
// if (actionCode == mixing.ActionCodeAddress)
// {
// parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].ActionCodeAddress));
// }
// else
// {
// //ICSharpCode.Core.LoggingService.Warn("密炼数据存盘时从PLC获取的Act_code与配方中的密炼动作不一致:密炼步骤:" + mixing.SynchMixingInfos[index].MixingStep + ",动作地址:" + actionCode);
// parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].ActionCodeAddress));
// }
//}
//else
//{
// ICSharpCode.Core.LoggingService.Warn("密炼数据存盘时从PLC获取Act_code的值失败");
// parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].ActionCodeAddress));
//}
if (dbType == Mesnac.Basic.DataSourceFactory.MCDbType.Local)
{
parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].ActionCodeAddress));
}
else if (dbType == Mesnac.Basic.DataSourceFactory.MCDbType.Server)
{
parameters[index].Add(dbHelper.CreateParameter(valueName, mixing.SynchMixingInfos[index].ActionCodeMapAddress));
}
}
else
{
parameters[index].Add(dbHelper.CreateParameter(valueName, item.GetValue()));
}
//dbHelper.AddParameter(valueName, item.GetValue());
}
}
#endregion
#region Barcode
fieldName = "Barcode";
valueName = "@" + fieldName;
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
sqlstr_fields[index].Append(fieldName);
sqlstr_values[index].Append(valueName);
parameters[index].Add(dbHelper.CreateParameter(valueName, lotBarcode.Barcode.Trim()));
//dbHelper.AddParameter(valueName, lotBarcode.Barcode.Trim());
}
#endregion
#region 执行存储
for (int index = 0; index < mixing.SynchMixingInfos.Count; index++)
{
try
{
sqlstr_values[index].Append(")"); //结束SQL语句
dbHelper.ClearParameter();
dbHelper.CommandText = sqlstr_fields[index].ToString() + sqlstr_values[index].ToString();
foreach (DbParameter p in parameters[index])
{
dbHelper.AddParameter(p);
}
dbHelper.ExecuteNonQuery();
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("存盘业务-保存当前步骤的密炼数据失败:" + ex.Message);
}
}
#endregion
}
return true;
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error("存盘业务-保存当前车密炼数据失败:" + ex.Message);
return false;
}
}
#endregion
#region 更新本地库密炼数据的上传标志
/// <summary>
/// 更新本地库密炼数据的上传标志
/// </summary>
/// <param name="localHelper">本地库数据连接对象</param>
public void UpdateIsUpFlag(DbHelper localHelper)
{
try
{
string strSql = "update PptMixData set IsUpFlag = 1 where Barcode = @Barcode";
localHelper.ClearParameter();
localHelper.CommandText = strSql;
localHelper.AddParameter("@Barcode", this.lotBarcode.Barcode.Trim());
localHelper.ExecuteNonQuery();
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(String.Format("更新本地库密炼数据[{0}]上传标志失败:{1}", this.lotBarcode.Barcode, ex.Message));
}
}
#endregion
#region 处理配方结束(如果最后一步的动作是配方结束,则取上一步的值)
/// <summary>
/// 处理配方结束(如果最后一步的动作是配方结束,则取上一步的值)
/// </summary>
/// <param name="localHelper">本地连接</param>
/// <param name="serverHelper">网络连接</param>
/// <param name="isNet">是否网络版</param>
public void ProcessTheEnd(DbHelper localHelper,DbHelper serverHelper, bool isNet)
{
try
{
string strSql = "select top 1 * from PptMixData where Barcode= @Barcode order by Mix_id desc";
localHelper.ClearParameter();
localHelper.CommandText = strSql;
localHelper.AddParameter("@Barcode", this.lotBarcode.Barcode.Trim());
DataTable table = localHelper.ToDataTable();
if (table != null && table.Rows.Count > 0)
{
int actionCode = Mesnac.Basic.DataProcessor.RowValue(table.Rows[0], "Act_code", -1);
if (actionCode == 0) //如果动作是配方结束
{
int mixId = Mesnac.Basic.DataProcessor.RowValue(table.Rows[0], "Mix_id", -1); //取出最后一步的密炼步骤
int preMixId = mixId - 1; //获取上一步的密炼步骤
if (preMixId >= 1) //验证合法性
{
string strSql2 = "select * from PptMixData where Barcode = @Barcode and Mix_id = @Mix_id";
localHelper.ClearParameter();
localHelper.CommandText = strSql2;
localHelper.AddParameter("@Barcode", this.lotBarcode.Barcode.Trim());
localHelper.AddParameter("@Mix_id", preMixId);
DataTable table2 = localHelper.ToDataTable();
if (table2 != null && table2.Rows.Count > 0)
{
DataRow row2 = table2.Rows[0];
int setTime = Mesnac.Basic.DataProcessor.RowValue(row2, "Set_time", 0);
double setTemp = Mesnac.Basic.DataProcessor.RowValue(row2, "Set_temp", 0.0);
double setEner = Mesnac.Basic.DataProcessor.RowValue(row2, "Set_ener", 0.0);
double setPower = Mesnac.Basic.DataProcessor.RowValue(row2, "Set_power", 0.0);
double setPres = Mesnac.Basic.DataProcessor.RowValue(row2, "Set_pres", 0.0);
double setRota = Mesnac.Basic.DataProcessor.RowValue(row2, "Set_rota", 0.0);
string strSql3 = "Update PptMixData set Set_time = @Set_time,Set_temp = @Set_temp,Set_ener = @Set_ener,Set_power = @Set_power,Set_pres = @Set_pres,Set_rota = @Set_rota where Barcode = @Barcode and Mix_id = @Mix_id";
localHelper.ClearParameter();
localHelper.CommandText = strSql3;
localHelper.AddParameter("@Set_time", setTime);
localHelper.AddParameter("@Set_temp", setTemp);
localHelper.AddParameter("@Set_ener", setEner);
localHelper.AddParameter("@Set_power", setPower);
localHelper.AddParameter("@Set_pres", setPres);
localHelper.AddParameter("@Set_rota", setRota);
localHelper.AddParameter("@Barcode", this.lotBarcode.Barcode.Trim());
localHelper.AddParameter("@Mix_id", mixId);
localHelper.ExecuteNonQuery();
if (isNet)
{
string strSql4 = "Update Ppt_mixdata set Set_time = @Set_time,Set_temp = @Set_temp,Set_ener = @Set_ener,Set_power = @Set_power,Set_pres = @Set_pres,Set_rota = @Set_rota where Barcode = @Barcode and Mix_id = @Mix_id";
serverHelper.ClearParameter();
serverHelper.CommandText = strSql4;
serverHelper.AddParameter("@Set_time", setTime);
serverHelper.AddParameter("@Set_temp", setTemp);
serverHelper.AddParameter("@Set_ener", setEner);
serverHelper.AddParameter("@Set_power", setPower);
serverHelper.AddParameter("@Set_pres", setPres);
serverHelper.AddParameter("@Set_rota", setRota);
serverHelper.AddParameter("@Barcode", this.lotBarcode.Barcode.Trim());
serverHelper.AddParameter("@Mix_id", mixId);
serverHelper.ExecuteNonQuery();
}
}
}
}
}
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService.Error(String.Format("密炼信息存盘-处理配方结束失败:{0},{1}!", this.lotBarcode.Barcode, ex.Message));
}
}
#endregion
}
}