using DevExpress.DataAccess.Native.Json; using DevExpress.Office.Utils; using DevExpress.XtraPrinting.Native.WebClientUIControl; using Mesnac.Action.ChemicalWeighing.Entity.Report; using Mesnac.Codd.Session; using Microsoft.Office.Interop.Excel; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Script.Serialization; namespace Mesnac.Action.ChemicalWeighing.FinishBatch.SaveHelper { public class ReportSaveHelper { /// /// 干混机报表数据保存 /// public static void SaveDryMixerReport() { try { ICSharpCode.Core.LoggingService.Debug("干混机报表数据保存开始!!!"); //准备信号读取 #region 注释代码 读取复杂 //if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 1) //{ // Report_DryMixer _dryMixer = new Report_DryMixer(); // _dryMixer.eqNo = BasePlcHelper.Instance.dryerA_dos0_eqNo.NowValue.ToInt(); // _dryMixer.batch = BasePlcHelper.Instance.dryerA_dos0_batch.NowValue.ToInt(); // _dryMixer.matCode = BasePlcHelper.Instance.dryerA_dos0_matCode.NowValue.ToInt(); // _dryMixer.setValue = BasePlcHelper.Instance.dryerA_dos0_setValue.NowValue.ToString(); // _dryMixer.setToler = BasePlcHelper.Instance.dryerA_dos0_setToler.NowValue.ToString(); // _dryMixer.actValue = BasePlcHelper.Instance.dryerA_dos0_actValue.NowValue.ToString(); // _dryMixer.actToLer = BasePlcHelper.Instance.dryerA_dos0_actToLer.NowValue.ToString(); // _dryMixer.dos = "0"; // _dryMixer.recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //} //else if (BasePlcHelper.Instance.RdyRpt_D2.NowValue.ToInt() == 1) //{ // Report_DryMixer _dryMixer = new Report_DryMixer(); // _dryMixer.eqNo = BasePlcHelper.Instance.dryerA_dos1_eqNo.NowValue.ToInt(); // _dryMixer.batch = BasePlcHelper.Instance.dryerA_dos1_batch.NowValue.ToInt(); // _dryMixer.matCode = BasePlcHelper.Instance.dryerA_dos1_matCode.NowValue.ToInt(); // _dryMixer.setValue = BasePlcHelper.Instance.dryerA_dos1_setValue.NowValue.ToString(); // _dryMixer.setToler = BasePlcHelper.Instance.dryerA_dos1_setToler.NowValue.ToString(); // _dryMixer.actValue = BasePlcHelper.Instance.dryerA_dos1_actValue.NowValue.ToString(); // _dryMixer.actToLer = BasePlcHelper.Instance.dryerA_dos1_actToLer.NowValue.ToString(); // _dryMixer.dos = "1"; // _dryMixer.recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //} //else if (BasePlcHelper.Instance.RdyRpt_D3.NowValue.ToInt() == 1) //{ // Report_DryMixer _dryMixer = new Report_DryMixer(); // _dryMixer.eqNo = BasePlcHelper.Instance.dryerA_dos2_eqNo.NowValue.ToInt(); // _dryMixer.batch = BasePlcHelper.Instance.dryerA_dos2_batch.NowValue.ToInt(); // _dryMixer.matCode = BasePlcHelper.Instance.dryerA_dos2_matCode.NowValue.ToInt(); // _dryMixer.setValue = BasePlcHelper.Instance.dryerA_dos2_setValue.NowValue.ToString(); // _dryMixer.setToler = BasePlcHelper.Instance.dryerA_dos2_setToler.NowValue.ToString(); // _dryMixer.actValue = BasePlcHelper.Instance.dryerA_dos2_actValue.NowValue.ToString(); // _dryMixer.actToLer = BasePlcHelper.Instance.dryerA_dos2_actToLer.NowValue.ToString(); // _dryMixer.dos = "2"; // _dryMixer.recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //} //else if (BasePlcHelper.Instance.RdyRpt_D4.NowValue.ToInt() == 1) //{ // Report_DryMixer _dryMixer = new Report_DryMixer(); // _dryMixer.eqNo = BasePlcHelper.Instance.dryerA_dos3_eqNo.NowValue.ToInt(); // _dryMixer.batch = BasePlcHelper.Instance.dryerA_dos3_batch.NowValue.ToInt(); // _dryMixer.matCode = BasePlcHelper.Instance.dryerA_dos3_matCode.NowValue.ToInt(); // _dryMixer.setValue = BasePlcHelper.Instance.dryerA_dos3_setValue.NowValue.ToString(); // _dryMixer.setToler = BasePlcHelper.Instance.dryerA_dos3_setToler.NowValue.ToString(); // _dryMixer.actValue = BasePlcHelper.Instance.dryerA_dos3_actValue.NowValue.ToString(); // _dryMixer.actToLer = BasePlcHelper.Instance.dryerA_dos3_actToLer.NowValue.ToString(); // _dryMixer.dos = "3"; // _dryMixer.recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //} #endregion //if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 1) //{ // Report_DryMixer dryMixer_dos0 = readDryMixer("A"); //读取报表数据 // SaveReportDb(dryMixer_dos0); //保存报表数据 //} //else if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 2) //{ // Report_DryMixer dryMixer_dos0 = readDryMixer("B"); //读取报表数据 // SaveReportDb(dryMixer_dos0); //保存报表数据 //} //else if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 3) //{ // Report_DryMixer dryMixer_dos0 = readDryMixer("C"); //读取报表数据 // SaveReportDb(dryMixer_dos0); //保存报表数据 //} //else if (BasePlcHelper.Instance.RdyRpt_D1.NowValue.ToInt() == 4) //{ // Report_DryMixer dryMixer_dos0 = readDryMixer("D"); //读取报表数据 // SaveReportDb(dryMixer_dos0); //保存报表数据 //} Report_DryMixer dryMixer_dos0 = readDryMixer("A"); //读取报表数据 SaveReportDb(dryMixer_dos0); //保存报表数据 } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(String.Format("干混机报表数据保存异常:{0}", ex.Message), ex); } } /// /// 通过PLC读取干混机报表数据 /// /// 干混机A、干混机B /// 操作步骤:Dos[0]、Dos[1]、Dos[2]、Dos[3] /// private static Report_DryMixer readDryMixer( string machineType) { Report_DryMixer _dryMixer = null; try { var s= BasePlcHelper.Instance.dryerA_dos0_eqNo.LastValue.ToInt(); _dryMixer = new Report_DryMixer(); List dryMixerDoes = new List (); List dryMixerMixes = new List (); for (int dos = 0;dos< 4; dos++) { BasePlcHelper.Instance.dryer_eqNo = new Entity.DataKeyValue($"dryer{machineType}_dos{dos}_eqNo"); BasePlcHelper.Instance.dryer_batch = new Entity.DataKeyValue($"dryer{machineType}_dos{dos}_batch"); BasePlcHelper.Instance.dryer_matCode = new Entity.DataKeyValue($"dryer{machineType}_dos{dos}_matCode"); BasePlcHelper.Instance.dryer_setValue = new Entity.DataKeyValue($"dryer{machineType}_dos{dos}_setValue"); BasePlcHelper.Instance.dryer_setToler = new Entity.DataKeyValue($"dryer{machineType}_dos{dos}_setToler"); BasePlcHelper.Instance.dryer_actValue = new Entity.DataKeyValue($"dryer{machineType}_dos{dos}_actValue"); BasePlcHelper.Instance.dryer_actToLer = new Entity.DataKeyValue($"dryer{machineType}_dos{dos}_actToLer"); DryMixerDos dryMixerDos = new DryMixerDos() { eqNo = BasePlcHelper.Instance.dryer_eqNo.NowValue.ToInt(), batch = BasePlcHelper.Instance.dryer_batch.NowValue.ToInt(), matCode = BasePlcHelper.Instance.dryer_matCode.NowValue.ToInt(), setValue = BasePlcHelper.Instance.dryer_setValue.NowValue.ToDouble(), setToler = BasePlcHelper.Instance.dryer_setToler.NowValue.ToDouble(), actValue = BasePlcHelper.Instance.dryer_actValue.NowValue.ToDouble(), actToLer = BasePlcHelper.Instance.dryer_actToLer.NowValue.ToDouble(), dos = dos, recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; dryMixerDoes.Add( dryMixerDos ); } for (int mix = 0; mix < 10; mix++) { BasePlcHelper.Instance.dryer_mixBatch = new Entity.DataKeyValue($"dryer{machineType}_mix{mix}_mixBatch"); BasePlcHelper.Instance.dryer_mixStep = new Entity.DataKeyValue($"dryer{machineType}_mix{mix}_mixStep"); BasePlcHelper.Instance.dryer_actCode = new Entity.DataKeyValue($"dryer{machineType}_mix{mix}_actCode"); BasePlcHelper.Instance.dryer_mixTime = new Entity.DataKeyValue($"dryer{machineType}_mix{mix}_mixTime"); BasePlcHelper.Instance.dryer_mixTemp = new Entity.DataKeyValue($"dryer{machineType}_mix{mix}_mixTemp"); BasePlcHelper.Instance.dryer_mixSpeed = new Entity.DataKeyValue($"dryer{machineType}_mix{mix}_mixSpeed"); DryMixerMix dryMixerMix = new DryMixerMix() { eqNo = BasePlcHelper.Instance.dryer_eqNo.NowValue.ToInt(), mixBatch = BasePlcHelper.Instance.dryer_mixBatch.NowValue.ToInt(), mixStep = BasePlcHelper.Instance.dryer_matCode.NowValue.ToInt(), actCode = BasePlcHelper.Instance.dryer_actCode.NowValue.ToInt(), mixTime = BasePlcHelper.Instance.dryer_mixTime.NowValue.ToInt(), mixTemp = BasePlcHelper.Instance.dryer_mixTemp.NowValue.ToDouble(), mixSpeed = BasePlcHelper.Instance.dryer_mixSpeed.NowValue.ToDouble(), mix = mix, recordTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; dryMixerMixes.Add( dryMixerMix ); } _dryMixer.dos = dryMixerDoes; _dryMixer.mix = dryMixerMixes; } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(String.Format("通过PLC读取干混机报表数读取异常:{0}", ex.Message), ex); } return _dryMixer; } /// /// 保存报表数据至数据库 /// /// private static void SaveReportDb(Report_DryMixer _dryMixer) { JavaScriptSerializer serializer = new JavaScriptSerializer(); try { string str = serializer.Serialize(_dryMixer); if(_dryMixer != null) { if(_dryMixer.dos != null) { InsertReportDryMixer(_dryMixer.report_Id,_dryMixer.dos); }else if(_dryMixer.mix != null) { InsertReportDryMixerDetail(_dryMixer.report_Id, _dryMixer.mix); } } ICSharpCode.Core.LoggingService.Warn($"报表数据打印:{str}"); } catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(String.Format("保存报表数据至数据库异常:{0}", ex.Message), ex); } } /// /// 保存干混机报表数据 /// /// /// private static void InsertReportDryMixer(Guid reportId,List dryMixers) { 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_DryMixer (reportId, eqNo, batch, matCode, setValue, setToler, actValue, actToLer, dos) values (@reportId, @eqNo, @batch, @matCode, @setValue, @setToler, @actValue, @actToLer, @dos)"; foreach (DryMixerDos _dryMixerDos in dryMixers) { if (_dryMixerDos.actValue == 0) continue; dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = sqlStr; dbHelper.AddParameter("@reportId", reportId); dbHelper.AddParameter("@eqNo", _dryMixerDos.eqNo); dbHelper.AddParameter("@batch", _dryMixerDos.batch); dbHelper.AddParameter("@matCode", _dryMixerDos.matCode); dbHelper.AddParameter("@setValue", _dryMixerDos.setValue); dbHelper.AddParameter("@setToler", _dryMixerDos.setToler); dbHelper.AddParameter("@actValue", _dryMixerDos.actValue); dbHelper.AddParameter("@actToLer", _dryMixerDos.actToLer); dbHelper.AddParameter("@dos", _dryMixerDos.dos); dbHelper.ExecuteNonQuery(); } }); }catch (Exception ex) { ICSharpCode.Core.LoggingService.Error(String.Format("保存干混机报表数据异常:{0}", ex.Message), ex); } } /// /// 保存干混机报表明细数据 /// /// /// private static void InsertReportDryMixerDetail(Guid reportId, List dryMixers) { 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_DryMixer_Detail (reportId, eqNo, mixBatch, mixStep, actCode, mixTime, mixTemp, mixSpeed, mix) values (@reportId, @eqNo, @mixBatch, @mixStep, @actCode, @mixTime, @mixTemp, @mixSpeed, @mix)"; foreach (DryMixerMix _dryMixerMix in dryMixers) { if (_dryMixerMix.actCode == 0) continue; dbHelper.ClearParameter(); dbHelper.CommandType = CommandType.Text; dbHelper.CommandText = sqlStr; dbHelper.AddParameter("@reportId", reportId); dbHelper.AddParameter("@eqNo", _dryMixerMix.eqNo); dbHelper.AddParameter("@mixBatch", _dryMixerMix.mixBatch); dbHelper.AddParameter("@mixStep", _dryMixerMix.mixStep); dbHelper.AddParameter("@actCode", _dryMixerMix.actCode); dbHelper.AddParameter("@mixTime", _dryMixerMix.mixTime); dbHelper.AddParameter("@mixTemp", _dryMixerMix.mixTemp); dbHelper.AddParameter("@mixSpeed", _dryMixerMix.mixSpeed); dbHelper.AddParameter("@mix", _dryMixerMix.mix); dbHelper.ExecuteNonQuery(); } }); }catch(Exception ex) { ICSharpCode.Core.LoggingService.Error(String.Format("保存干混机报表明细数据异常:{0}", ex.Message), ex); } } /*create table Report_DryMixer ( objId int identity primary key, reportId varchar(36), eqNo int, batch int, matCode int, setValue decimal(18, 4), setToler decimal(18, 4), actValue decimal(18, 4), actToLer decimal(18, 4), dos int, recordTime datetime default getdate() ) go exec sp_addextendedproperty 'MS_Description', N'干混机报表', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer' go exec sp_addextendedproperty 'MS_Description', N'主键标识', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'objId' go exec sp_addextendedproperty 'MS_Description', N'报表标识', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'reportId' go exec sp_addextendedproperty 'MS_Description', N'设备编号', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'eqNo' go exec sp_addextendedproperty 'MS_Description', N'批次号', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'batch' go exec sp_addextendedproperty 'MS_Description', N'物料代码', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'matCode' go exec sp_addextendedproperty 'MS_Description', N'设定重量', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'setValue' go exec sp_addextendedproperty 'MS_Description', N'设定公差', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'setToler' go exec sp_addextendedproperty 'MS_Description', N'实际重量', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'actValue' go exec sp_addextendedproperty 'MS_Description', N'实际公差', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'actToLer' go exec sp_addextendedproperty 'MS_Description', N'dos编号', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'dos' go exec sp_addextendedproperty 'MS_Description', N'记录时间', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer', 'COLUMN', 'recordTime' go create table Report_DryMixer_Detail ( objId int identity primary key, reportId varchar(36), eqNo int, mixBatch int, mixStep int, actCode int, mixTime int, mixTemp decimal(18, 4), mixSpeed decimal(18, 4), mix int, recordTime datetime default getdate() ) go exec sp_addextendedproperty 'MS_Description', N'主键标识', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'objId' go exec sp_addextendedproperty 'MS_Description', N'报表标识', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'reportId' go exec sp_addextendedproperty 'MS_Description', N'设备编号', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'eqNo' go exec sp_addextendedproperty 'MS_Description', N'批次', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'mixBatch' go exec sp_addextendedproperty 'MS_Description', N'步号', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'mixStep' go exec sp_addextendedproperty 'MS_Description', N'动作', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'actCode' go exec sp_addextendedproperty 'MS_Description', N'时间', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'mixTime' go exec sp_addextendedproperty 'MS_Description', N'温度', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'mixTemp' go exec sp_addextendedproperty 'MS_Description', N'速度', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'mixSpeed' go exec sp_addextendedproperty 'MS_Description', N'mix编号', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'mix' go exec sp_addextendedproperty 'MS_Description', N'记录时间', 'SCHEMA', 'dbo', 'TABLE', 'Report_DryMixer_Detail', 'COLUMN', 'recordTime' go*/ } }