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.

245 lines
11 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.BasicInfo;
using System.Data;
using System.Data.Common;
namespace Mesnac.Action.Feeding.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));
}
}
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));
}
}
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++)
{
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();
}
#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
}
}