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.
lj_plc/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FinishBatch/SaveHelper/ReportGelDoserHelper.cs

325 lines
16 KiB
C#

using Mesnac.Action.ChemicalWeighing.Entity.Report;
using Mesnac.Codd.Session;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper
{
public sealed class ReportGelDoserSaveHelper
{
private static readonly Lazy<ReportGelDoserSaveHelper> lazy = new Lazy<ReportGelDoserSaveHelper>(() => new ReportGelDoserSaveHelper());
public static ReportGelDoserSaveHelper Instance
{
get
{
return lazy.Value;
}
}
private ReportGelDoserSaveHelper() { }
/// <summary>
/// 糊化机报表数据保存
/// </summary>
public void SaveGelDoserReport()
{
try
{
ICSharpCode.Core.LoggingService<ReportGelDoserSaveHelper>.Debug("糊化机报表数据保存开始!!!");
//准备信号读取
//if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 1)
//{
// Report_GelDoser gelDoser_dos0 = readGelDoser("A"); //读取报表数据
// SaveReportDb(gelDoser_dos0); //保存报表数据
//}
//else if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 2)
//{
// Report_GelDoser gelDoser_dos0 = readGelDoser("B"); //读取报表数据
// SaveReportDb(gelDoser_dos0); //保存报表数据
//}
//else if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 3)
//{
// Report_GelDoser gelDoser_dos0 = readGelDoser("C"); //读取报表数据
// SaveReportDb(gelDoser_dos0); //保存报表数据
//}
//else if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 4)
//{
// Report_GelDoser gelDoser_dos0 = readGelDoser("D"); //读取报表数据
// SaveReportDb(gelDoser_dos0); //保存报表数据
//}
Report_GelDoser gelDoser_dos0 = readGelDoser("A"); //读取报表数据
SaveReportDb(gelDoser_dos0); //保存报表数据
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService<ReportGelDoserSaveHelper>.Error(String.Format("糊化机报表数据保存异常:{0}", ex.Message), ex);
}
}
/// <summary>
/// 通过PLC读取糊化机报表数据
/// </summary>
/// <param name="machineType">糊化机A、糊化机B</param>
/// <param name="dos">操作步骤Dos[0]、Dos[1]、Dos[2]、Dos[3]</param>
/// <returns></returns>
private Report_GelDoser readGelDoser(string machineType)
{
Report_GelDoser _gelDoser = null;
try
{
_gelDoser = new Report_GelDoser();
_gelDoser.dos = readGelDoserDos(machineType, 6);
_gelDoser.mix = readGelDoserMix(machineType, 10);
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService<ReportGelDoserSaveHelper>.Error(String.Format("通过PLC读取糊化机报表数读取异常{0}", ex.Message), ex);
}
return _gelDoser;
}
/// <summary>
/// 读取糊化机Dos数据
/// </summary>
/// <param name="machineType"></param>
/// <param name="amount"></param>
/// <returns></returns>
private List<GelDoserDos_Water> readGelDoserDos(string machineType, int amount)
{
List<GelDoserDos_Water> gelDoserDoes = new List<GelDoserDos_Water>();
for (int dos = 0; dos < amount; dos++)
{
#region 实例化参数
if (dos < 4)
{
BasePlcHelper.Instance.geler_dos_eqNo = new Entity.DataKeyValue($"gelDosing{machineType}_dos{dos}_eqNo");
BasePlcHelper.Instance.geler_dos_batch = new Entity.DataKeyValue($"gelDosing{machineType}_dos{dos}_batch");
BasePlcHelper.Instance.geler_dos_matCode = new Entity.DataKeyValue($"gelDosing{machineType}_dos{dos}_matCode");
BasePlcHelper.Instance.geler_dos_setValue = new Entity.DataKeyValue($"gelDosing{machineType}_dos{dos}_setValue");
BasePlcHelper.Instance.geler_dos_setToler = new Entity.DataKeyValue($"gelDosing{machineType}_dos{dos}_setToler");
BasePlcHelper.Instance.geler_dos_actValue = new Entity.DataKeyValue($"gelDosing{machineType}_dos{dos}_actValue");
BasePlcHelper.Instance.geler_dos_actToLer = new Entity.DataKeyValue($"gelDosing{machineType}_dos{dos}_actToLer");
}
else if (dos == 4)
{
BasePlcHelper.Instance.geler_dos_eqNo = new Entity.DataKeyValue($"gelDosing{machineType}_hotWater_eqNo");
BasePlcHelper.Instance.geler_dos_batch = new Entity.DataKeyValue($"gelDosing{machineType}_hotWater_batch");
BasePlcHelper.Instance.geler_dos_matCode = new Entity.DataKeyValue($"gelDosing{machineType}_hotWater_matCode");
BasePlcHelper.Instance.geler_dos_setValue = new Entity.DataKeyValue($"gelDosing{machineType}_hotWater_setValue");
BasePlcHelper.Instance.geler_dos_setToler = new Entity.DataKeyValue($"gelDosing{machineType}_hotWater_setToler");
BasePlcHelper.Instance.geler_dos_actValue = new Entity.DataKeyValue($"gelDosing{machineType}_hotWater_actValue");
BasePlcHelper.Instance.geler_dos_actToLer = new Entity.DataKeyValue($"gelDosing{machineType}_hotWater_actToLer");
}
else if(dos == 5)
{
BasePlcHelper.Instance.geler_dos_eqNo = new Entity.DataKeyValue($"gelDosing{machineType}_coolWater_eqNo");
BasePlcHelper.Instance.geler_dos_batch = new Entity.DataKeyValue($"gelDosing{machineType}_coolWater_batch");
BasePlcHelper.Instance.geler_dos_matCode = new Entity.DataKeyValue($"gelDosing{machineType}_coolWater_matCode");
BasePlcHelper.Instance.geler_dos_setValue = new Entity.DataKeyValue($"gelDosing{machineType}_coolWater_setValue");
BasePlcHelper.Instance.geler_dos_setToler = new Entity.DataKeyValue($"gelDosing{machineType}_coolWater_setToler");
BasePlcHelper.Instance.geler_dos_actValue = new Entity.DataKeyValue($"gelDosing{machineType}_coolWater_actValue");
BasePlcHelper.Instance.geler_dos_actToLer = new Entity.DataKeyValue($"gelDosing{machineType}_coolWater_actToLer");
}
#endregion
GelDoserDos_Water gelDoserDos = new GelDoserDos_Water()
{
eqNo = BasePlcHelper.Instance.geler_dos_eqNo.NowValue.ToInt(),
batch = BasePlcHelper.Instance.geler_dos_batch.NowValue.ToInt(),
matCode = BasePlcHelper.Instance.geler_dos_matCode.NowValue.ToInt(),
setValue = BasePlcHelper.Instance.geler_dos_setValue.NowValue.ToDouble(),
setToler = BasePlcHelper.Instance.geler_dos_setToler.NowValue.ToDouble(),
actValue = BasePlcHelper.Instance.geler_dos_actValue.NowValue.ToDouble(),
actToLer = BasePlcHelper.Instance.geler_dos_actToLer.NowValue.ToDouble(),
dos = dos,
recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
gelDoserDoes.Add(gelDoserDos);
}
return gelDoserDoes;
}
/// <summary>
/// 读取糊化机Mix数据
/// </summary>
/// <param name="machineType"></param>
/// <param name="amount"></param>
/// <returns></returns>
private List<GelDoserMix> readGelDoserMix(string machineType, int amount)
{
List<GelDoserMix> gelDoserMixes = new List<GelDoserMix>();
for (int mix = 0; mix < amount; mix++)
{
#region 实例化参数
var eqNo = new Entity.DataKeyValue($"gelDosing{machineType}_gelMixing{mix}_eqNo");
var mixBatch = new Entity.DataKeyValue($"gelDosing{machineType}_gelMixing{mix}_mixBatch");
var mixStep = new Entity.DataKeyValue($"gelDosing{machineType}_gelMixing{mix}_mixStep");
var actCode = new Entity.DataKeyValue($"gelDosing{machineType}_gelMixing{mix}_actCode");
var mixTime = new Entity.DataKeyValue($"gelDosing{machineType}_gelMixing{mix}_mixTime");
var mixTemp = new Entity.DataKeyValue($"gelDosing{machineType}_gelMixing{mix}_mixTemp");
var mixSpeed = new Entity.DataKeyValue($"gelDosing{machineType}_gelMixing{mix}_mixSpeed");
#endregion
GelDoserMix gelDoserMix = new GelDoserMix()
{
eqNo = eqNo.NowValue.ToInt(),
mixBatch = mixBatch.NowValue.ToInt(),
mixStep = mixStep.NowValue.ToInt(),
actCode = actCode.NowValue.ToInt(),
mixTime = mixTime.NowValue.ToInt(),
mixTemp = mixTemp.NowValue.ToDouble(),
mixSpeed = mixSpeed.NowValue.ToDouble(),
mix = mix,
recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
};
gelDoserMixes.Add(gelDoserMix);
}
return gelDoserMixes;
}
/// <summary>
/// 保存糊化机报表数据至数据库
/// </summary>
/// <param name="_gelDoser"></param>
private void SaveReportDb(Report_GelDoser _gelDoser)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
try
{
string str = serializer.Serialize(_gelDoser);
if (_gelDoser != null)
{
if (_gelDoser.dos != null)
{
InsertReportGelDoser(_gelDoser.report_Id, _gelDoser.dos);
}
if (_gelDoser.mix != null)
{
InsertReportGelDoserDetail(_gelDoser.report_Id, _gelDoser.mix);
}
}
ICSharpCode.Core.LoggingService<ReportGelDoserSaveHelper>.Warn($"报表数据打印:{str}");
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService<ReportGelDoserSaveHelper>.Error(String.Format("保存报表数据至数据库异常:{0}", ex.Message), ex);
}
}
/// <summary>
/// 保存糊化机报表数据
/// </summary>
/// <param name="reportId"></param>
/// <param name="_gelDoserDos"></param>
private void InsertReportGelDoser(Guid reportId, List<GelDoserDos_Water> gelDosers)
{
try
{
Task.Run(() =>
{
DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local);
if (dbHelper == null)
{
throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError);
}
string sqlStr = @"insert into Report_GelDoser
(reportId, eqNo, batch, matCode, setValue, setToler, actValue, actToLer, dos)
values
(@reportId, @eqNo, @batch, @matCode, @setValue, @setToler, @actValue, @actToLer, @dos)";
foreach (GelDoserDos_Water _gelDoserDos in gelDosers)
{
if (_gelDoserDos.actValue == 0) continue;
dbHelper.ClearParameter();
dbHelper.CommandType = CommandType.Text;
dbHelper.CommandText = sqlStr;
dbHelper.AddParameter("@reportId", reportId);
dbHelper.AddParameter("@eqNo", _gelDoserDos.eqNo);
dbHelper.AddParameter("@batch", _gelDoserDos.batch);
dbHelper.AddParameter("@matCode", _gelDoserDos.matCode);
dbHelper.AddParameter("@setValue", _gelDoserDos.setValue);
dbHelper.AddParameter("@setToler", _gelDoserDos.setToler);
dbHelper.AddParameter("@actValue", _gelDoserDos.actValue);
dbHelper.AddParameter("@actToLer", _gelDoserDos.actToLer);
dbHelper.AddParameter("@dos", _gelDoserDos.dos);
dbHelper.ExecuteNonQuery();
}
});
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService<ReportGelDoserSaveHelper>.Error(String.Format("保存糊化机报表数据异常:{0}", ex.Message), ex);
}
}
/// <summary>
/// 保存糊化机报表明细数据
/// </summary>
/// <param name="reportId"></param>
/// <param name="_gelDoserMix"></param>
private void InsertReportGelDoserDetail(Guid reportId, List<GelDoserMix> gelDosers)
{
try
{
Task.Run(() =>
{
DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local);
if (dbHelper == null)
{
throw new Exception(Mesnac.Basic.LanguageHelper.DataBaseConnectError);
}
string sqlStr = @"insert into Report_GelDoser_Detail
(reportId, eqNo, mixBatch, mixStep, actCode, mixTime, mixTemp, mixSpeed, mix)
values
(@reportId, @eqNo, @mixBatch, @mixStep, @actCode, @mixTime, @mixTemp, @mixSpeed, @mix)";
foreach (GelDoserMix _gelDoserMix in gelDosers)
{
if (_gelDoserMix.actCode == 0) continue;
dbHelper.ClearParameter();
dbHelper.CommandType = CommandType.Text;
dbHelper.CommandText = sqlStr;
dbHelper.AddParameter("@reportId", reportId);
dbHelper.AddParameter("@eqNo", _gelDoserMix.eqNo);
dbHelper.AddParameter("@mixBatch", _gelDoserMix.mixBatch);
dbHelper.AddParameter("@mixStep", _gelDoserMix.mixStep);
dbHelper.AddParameter("@actCode", _gelDoserMix.actCode);
dbHelper.AddParameter("@mixTime", _gelDoserMix.mixTime);
dbHelper.AddParameter("@mixTemp", _gelDoserMix.mixTemp);
dbHelper.AddParameter("@mixSpeed", _gelDoserMix.mixSpeed);
dbHelper.AddParameter("@mix", _gelDoserMix.mix);
dbHelper.ExecuteNonQuery();
}
});
}
catch (Exception ex)
{
ICSharpCode.Core.LoggingService<ReportGelDoserSaveHelper>.Error(String.Format("保存糊化机报表明细数据异常:{0}", ex.Message), ex);
}
}
}
}