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/Report/WetMixer/SelectRowAction.cs

189 lines
7.8 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 Mesnac.Action.Base;
using Mesnac.Codd.Session;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Mesnac.Action.ChemicalWeighing.Report.WetMixer
{
/// <summary>
/// 湿混机报表明细查询事件
/// </summary>
public class SelectRowAction : ChemicalWeighingAction, IAction
{
private Control _clientGridControl = null; //多维表控件
public void Run(RuntimeParameter runtime)
{
base.RunIni(runtime); //必须要调用的
ICSharpCode.Core.LoggingService<SelectAction>.Debug("湿混机报表-明细查询...");
//获取报表数据
DbMCControl _dgvWetMixer = this.GetDbMCControlByKey(Mesnac.Basic.DataSourceFactory.MCDbType.Local, "Report_WetMixer").FirstOrDefault();
if (_dgvWetMixer == null || !(_dgvWetMixer.BaseControl is DataGridView))
{
ICSharpCode.Core.LoggingService<SelectRowAction>.Warn("{生产报表} 缺少湿混机报表DataGridView控件...");
runtime.IsReturn = false;
return;
}
DataGridView _WetMixerGridView = _dgvWetMixer.BaseControl as DataGridView;
this._clientGridControl = GetAllControls().Where(x => x.Name.Contains("MultiColHeaderDgv")).FirstOrDefault();
if (_clientGridControl == null)
{
ICSharpCode.Core.LoggingService<SelectRowAction>.Warn("{生产报表} 缺少缺少称量名细MultiColHeaderDgv控件...");
runtime.IsReturn = false;
return;
}
Mesnac.Controls.Default.MultiColHeaderDgv clientGrid = (this._clientGridControl as Mesnac.Controls.Default.MultiColHeaderDgv);
#region 明细控件格式化
clientGrid.myColHeaderTreeView = null;
clientGrid.DataSource = null;
clientGrid.iNodeLevels = 0;
clientGrid.ColLists.Clear();
clientGrid.ColumnHeadersHeight = 23;
clientGrid.ScrollBars = ScrollBars.Both;
clientGrid.AllowUserToAddRows = false;
clientGrid.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
clientGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
clientGrid.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("宋体", 12);
clientGrid.DefaultCellStyle.Font = new System.Drawing.Font("宋体", 10);
clientGrid.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
#endregion
//获取选中行的ReportId关联获取明细数据并赋值给明细控件
if (_WetMixerGridView.SelectedRows.Count == 1)
{
string lR_planID = _WetMixerGridView.SelectedRows[0].Cells["reportId"].Value as string;
//获取数据链接
DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local);
if (dbHelper == null)
{
ICSharpCode.Core.LoggingService<ExportAction>.Error("获取本地数据连接失败...");
return;
}
dbHelper.ClearParameter();
//获取明细数据
StringBuilder sqlStr = new StringBuilder(@" select t1.actCode, t1. mixBatch as 批次,t1.mixStep as 步号,t2.ActionName as 动作,
t1.mixTime as 时间,t1.mixTemp as 温度,t1.mixSpeed as 速度,t1.recordTime as 记录时间
from Report_WetMixer_Detail t1
left join ActionCode t2 on t1.actCode =t2.Code
where t2.DeviceUnitId=3 and t1.reportId = @reportId
order by t1.mixStep ");
dbHelper.CommandText = sqlStr.ToString();
dbHelper.CommandType = System.Data.CommandType.Text;
dbHelper.AddParameter("@reportId", lR_planID);
DataTable table = dbHelper.ToDataTable();
var dateNow = DateTime.Now;
Dictionary<int, int> dic = new Dictionary<int, int>();
Dictionary<int, DateTime> Newdic = new Dictionary<int, DateTime>();
var tableNew=new DataTable();
tableNew.Columns.Add("批次", typeof(string));
tableNew.Columns.Add("步号", typeof(string));
tableNew.Columns.Add("动作", typeof(string));
tableNew.Columns.Add("时间", typeof(string));
tableNew.Columns.Add("温度", typeof(string));
tableNew.Columns.Add("速度", typeof(string));
tableNew.Columns.Add("记录时间", typeof(string));
foreach (System.Data.DataRow row in table.Rows)
{
row["速度"] = Convert.ToSingle(row["速度"]).ToString("#0.00");
row["动作"] = WetStepConvert(Convert.ToInt32(row["actCode"]));
var dr=tableNew.NewRow();
dr["批次"] = row["批次"];
dr["步号"] = row["步号"];
dr["动作"] = row["动作"];
dr["时间"] = ConverToTime(Convert.ToInt32(row["时间"]));
dr["温度"] = row["温度"];
dr["速度"] = row["速度"];
dr["记录时间"] = row["记录时间"];
dateNow = Convert.ToDateTime(row["记录时间"].ToString());
dic.Add(Convert.ToInt32(dr["步号"]), Convert.ToInt32(row["时间"]));
tableNew.Rows.Add(dr);
}
for (int i = 1; i < 3; i++)
{
var miao = dic.Where(x => x.Key >= i).Select(x => x.Value).Sum();
Newdic.Add(i, dateNow.AddSeconds(-miao));
}
foreach (System.Data.DataRow row in tableNew.Rows)
{
var bu = Convert.ToInt32(row["步号"]);
if (Newdic.ContainsKey(bu))
{
var dt = Newdic[bu];
row["记录时间"] = dt.ToString("yyyy-MM-dd HH:mm:ss");
}
}
clientGrid.DataSource = tableNew;
}
string ConverToTime(int duration)
{
TimeSpan ts = new TimeSpan(0, 0, Convert.ToInt32(duration));
string str = "";
if (ts.Hours > 0)
{
str = ts.Hours.ToString() + "小时 " + ts.Minutes.ToString() + "分钟 " + ts.Seconds + "秒";
}
if (ts.Hours == 0 && ts.Minutes > 0)
{
str = ts.Minutes.ToString() + "分钟 " + ts.Seconds + "秒";
}
if (ts.Hours == 0 && ts.Minutes == 0)
{
str = ts.Seconds + "秒";
}
return str;
}
/// <summary>
/// 湿混机步骤代码转换为步骤名
/// </summary>
string WetStepConvert(int code)
{
switch (code)
{
case 1: return "调白料";
case 2: return "调炭粉";
case 3: return "搅拌";
case 4: return "等待确认";
case 5: return "等待排料";
default: return "无";
}
}
}
}
}