Files
1440WGJ/JY.Inspection/Frm/FrmHistoricalDataQuery.cs

577 lines
23 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using JY.DAL;
using JY.Inspection.Enums;
using JY.Inspection.Mes;
using JY.MES;
using JY.MES.Entity;
using JY.MES.Enum;
using JY.MES.MES;
using JY.Model;
using JY.Model.Enums;
using JY.Utility;
using JYControl;
using MiniExcelLibs;
using Newtonsoft.Json;
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace JY.Inspection.Frm
{
public partial class FrmHistoricalDataQuery : MetroFramework.Forms.MetroForm
{
public delegate void myDelegate(DataTable t);
public delegate void PDelegate();
Thread tSo;
//int type = 0;//查询类型
//int resulttype = 0;//结果类型
DataTable dts = null;
/// <summary>
/// 用于电芯进站时设备与FMS校验电芯合法性
/// </summary>
string CheckBarCodeInUrl = "";
/// <summary>
/// 用于电芯出站时向FMS上报出站及生产数据
/// </summary>
string BarCodeOutUrl = "";
/// <summary>
/// MES上传验证码
/// </summary>
string authorization = "";
/// <summary>
/// 数据库访问接口
/// </summary>
private IDbHelper dbHelper = new OpSqlDataBase();
public FrmHistoricalDataQuery()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
InitCombobox();
}
private void InitCombobox()
{
#region 初始化查询类型列表
var selectItems = new List<ComboItem>()
{
new ComboItem() {
Value = (int)EnumSearchType.ArrivalStation,
Text = EnumSearchType.ArrivalStation.GetDescription()
},
new ComboItem() {
Value = (int)EnumSearchType.ExitStation,
Text = EnumSearchType.ExitStation.GetDescription()
},
//new ComboItem() {
// Value = (int)EnumSearchType.ProductResult,
// Text = EnumSearchType.ProductResult.GetDescription()
//}
};
cbSelectType.DataSource = selectItems;
cbSelectType.DisplayMember = "Text";
cbSelectType.ValueMember = "Value";
#endregion
#region 初始化结果类型列表
var resultItems = new List<ComboItem>()
{
new ComboItem() {
Value = (int)EnumResultType.All,
Text = EnumResultType.All.GetDescription()
},
new ComboItem() {
Value = (int)EnumResultType.OK,
Text = EnumResultType.OK.GetDescription()
},
new ComboItem() {
Value = (int)EnumResultType.NG,
Text = EnumResultType.NG.GetDescription()
}
};
resultSelectType.DataSource = resultItems;
resultSelectType.DisplayMember = "Text";
resultSelectType.ValueMember = "Value";
#endregion
#region 初始化上传类型列表
var upMesStatusItems = new List<ComboItem>()
{
new ComboItem() {
Value = (int)EnumUpMesStatus.All,
Text = EnumUpMesStatus.All.GetDescription()
},
new ComboItem() {
Value = (int)EnumUpMesStatus.Auto,
Text = EnumUpMesStatus.Auto.GetDescription()
},
new ComboItem() {
Value = (int)EnumUpMesStatus.Manual,
Text = EnumUpMesStatus.Manual.GetDescription()
},
new ComboItem() {
Value = (int)EnumUpMesStatus.None,
Text = EnumUpMesStatus.None.GetDescription()
}
};
cmbFlag.DataSource = upMesStatusItems;
cmbFlag.DisplayMember = "Text";
cmbFlag.ValueMember = "Value";
#endregion
}
#region 属性
public EnumSearchType CurSearchType
{
get
{
EnumSearchType curEnum = EnumSearchType.ArrivalStation;
if (this.InvokeRequired)
{
this.Invoke(new Action(() =>
{
var curItem = cbSelectType.SelectedItem as ComboItem;
curEnum = curItem.Value.ToEnum<EnumSearchType>();
}));
}
else
{
var curItem = cbSelectType.SelectedItem as ComboItem;
curEnum = curItem.Value.ToEnum<EnumSearchType>();
}
return curEnum;
}
}
public EnumResultType CurResultType
{
get
{
EnumResultType curEnum = EnumResultType.All;
if (this.InvokeRequired)
{
this.BeginInvoke(new Action(() =>
{
var curItem = resultSelectType.SelectedItem as ComboItem;
curEnum = curItem.Value.ToEnum<EnumResultType>();
}));
}
else
{
var curItem = resultSelectType.SelectedItem as ComboItem;
curEnum = curItem.Value.ToEnum<EnumResultType>();
}
return curEnum;
}
}
public EnumUpMesStatus CurUpMesStatus
{
get
{
EnumUpMesStatus curEnum = EnumUpMesStatus.All;
if (this.InvokeRequired)
{
this.BeginInvoke(new Action(() =>
{
var curItem = cmbFlag.SelectedItem as ComboItem;
curEnum = curItem.Value.ToEnum<EnumUpMesStatus>();
}));
}
else
{
var curItem = cmbFlag.SelectedItem as ComboItem;
curEnum = curItem.Value.ToEnum<EnumUpMesStatus>();
}
return curEnum;
}
}
#endregion
/// <summary>
/// 窗体加载事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmHistoricalDataQuery_Load(object sender, EventArgs e)
{
cbSelectType.SelectedIndex = 0;
resultSelectType.SelectedIndex = 0;
cmbFlag.SelectedIndex = 0;
dtStartTime.Value = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
dtEndTime.Value = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
//为dgv添加复选框列
DataGridViewCheckBoxColumn checkbox = new DataGridViewCheckBoxColumn();
//列显示名称
checkbox.HeaderText = "选择";
checkbox.Name = "IsChecked";
checkbox.TrueValue = true;
checkbox.FalseValue = false;
checkbox.DataPropertyName = "IsChecked";
//列宽
checkbox.Width = 30;
//列大小不改变
checkbox.Resizable = DataGridViewTriState.False;
//添加的checkbox在dgv的第一列
this.dgvData.Columns.Insert(0, checkbox);
}
private void btnSelect_Click(object sender, EventArgs e)
{
try
{
tSo = new Thread(new ThreadStart(ThreadWork));
tSo.IsBackground = true;
tSo.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString() + ",数据查询失败", "查询提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
this.dgvData.DataSource = null;
//type = cbSelectType.SelectedIndex;
//resulttype = resultSelectType.SelectedIndex;
}
private void ThreadWork()
{
lblSelectStures.BeginInvoke(new PDelegate(SearchBegin));
string strDate1 = dtStartTime.Value.ToString("yyyy-MM-dd HH:mm") + ":01";
string strDate2 = dtEndTime.Value.ToString("yyyy-MM-dd HH:mm") + ":01";
if (dtEndTime.Value.Year != dtStartTime.Value.Year)
{
MessageBox.Show("请选择日期必须在同一年份内!");
lblSelectStures.BeginInvoke(new PDelegate(SearchEnd));
return;
}
string flag = cmbFlag.Text;
string strBarcode = txtBarCode.Text.Trim();
// var dt = dbHelper.GetTestData(type, strBarcode, strDate1, strDate2, flag);
int type = (int)CurSearchType;
int resultType = (int)CurResultType;
var dt = dbHelper.GetTestData2(type, resultType, strBarcode, strDate1, strDate2, flag);
if (dt == null || dt.Rows.Count == 0)
{
MessageBox.Show("此时间段无数据或无此条码数据", "系统提示");
lblSelectStures.BeginInvoke(new PDelegate(SearchEnd));
return;
}
this.dgvData.BeginInvoke(new myDelegate(FillData), new object[] { dt });//异步调用(来填充)
lblSelectStures.BeginInvoke(new PDelegate(SearchEnd));
}
private void FillData(DataTable dt)
{
dts = dt;
this.dgvData.DataSource = dt.DefaultView;
}
private void SearchBegin()
{
this.lblSelectStures.Text = "正在查询数据...";
}
private void SearchEnd()
{
this.lblSelectStures.Text = "查询结束";
}
private void btnExcel_Click(object sender, EventArgs e)
{
if (dts != null && dgvData.Columns.Count <= 0)
{
MessageBox.Show("请先查询数据,再进行导出", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Title = "导出Excel";
saveFileDialog.Filter = "Excel文件(*.xlsx)|*.xlsx";
saveFileDialog.FilterIndex = 1;
//保存对话框是否记忆上次打开的目录
saveFileDialog.RestoreDirectory = true;
//设置默认的文件名
saveFileDialog.DefaultExt = "xlsx";
//saveFileDialog.DefaultFileName = "查询结果" + DateTime.Now.ToString("yyyyMMddHHmmss");
var dialogResult = saveFileDialog.ShowDialog(this);
if (dialogResult == DialogResult.OK)
{
//string filter = saveFileDialog.FileName.Substring(saveFileDialog.FileName.LastIndexOf(".") + 1);
try
{
MiniExcel.SaveAs(saveFileDialog.FileName, dts);
//ExcelPackage.License.SetNonCommercialOrganization("My Noncommercial organization");
//EPPlusExcelHelper excelHelper = new EPPlusExcelHelper(saveFileDialog.FileName);
//excelHelper.ExportDataTable("sheet1", dts);
Thread.Sleep(50);
MessageBox.Show("数据导出成功!");
}
catch (Exception ex)
{
MessageBox.Show("保存的EXCEL已有数据,无法覆盖,重新创建" + ex.Message);
}
//if (MessageBox.Show("保存成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
//{
// System.Diagnostics.Process.Start(saveFileDialog.FileName);
//}
}
}
private void dgvData_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
//自动编号,与数据无关
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
e.RowBounds.Location.Y,
dgvData.RowHeadersWidth - 4,
e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics,
(e.RowIndex + 1).ToString(),
dgvData.RowHeadersDefaultCellStyle.Font,
rectangle,
dgvData.RowHeadersDefaultCellStyle.ForeColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
}
/// <summary>
/// 上传MES按钮设置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnUpMES_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
if (dgvData.Columns.Count <= 1)
{
MessageBox.Show("请先查询数据,再进行上传MES操作", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
try
{
if (cbSelectType.Text == "查询进站数据")//上料
{
foreach (DataGridViewRow row in dgvData.Rows)
{
if (Convert.ToBoolean(row.Cells[0].Value))
{
if (Convert.ToInt32(row.Cells["状态"].Value) == 1 || Convert.ToInt32(row.Cells["状态"].Value) == 2)
{
MessageBox.Show("勾选电芯数据已上传", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
JY.MES.FMS.FMS_In fMS_In = new MES.FMS.FMS_In();
//fMS_In.systemCode = Global.systemConfig.systemCode;
//fMS_In.houseCode = Global.systemConfig.houseCode;
//fMS_In.skuCode = Convert.ToString(row.Cells["条码"].Value);
//fMS_In.deviceCode = Global.systemConfig.deviceCode;
//fMS_In.processCode = Global.systemConfig.processCode;
string strJosn = JsonConvert.SerializeObject(fMS_In);
LogManagerControl.AddLog($"PC->FMS[电芯出站]:{strJosn}", LogAddtype.MES);
var result = JY.MES.FMS.MesHelper_EVE.MES_Inbound(fMS_In);
string strRes = "statusCode:" + "[" + result.statusCode + "]" + "statusMessage" + "[" + result.statusMessage + "]";
LogManagerControl.AddLog($"FMS->PC[电芯出站]:{strRes}", LogAddtype.MES);
string NowTime = DateTime.Now.ToString("yyyy - MM - dd HH: mm: ss");
var result1 = @" UPDATE FeedingData set Flag=2,UploadMESTime='" + NowTime + "' where[ID]=" + Convert.ToString(row.Cells["唯一ID"].Value);
//var result2 = @" UPDATE FeedingData set UploadMESTime='" + NowTime + "' where[ID]='" + Convert.ToString(row.Cells["唯一ID"].Value) + "'";
DataTable dt = SqlHelper<object>.QueryTable(result1);
}
}
}
}
else//下料
{
// TODO 结果数据上传
sb.Clear();
int i = 0;
foreach (DataGridViewRow row in dgvData.Rows)
{
i++;
if (Convert.ToBoolean(row.Cells[0].Value))
{
if (Convert.ToInt32(row.Cells["状态"].Value) == 1 || Convert.ToInt32(row.Cells["状态"].Value) == 2)
{
sb.AppendLine($"第{i}行数据: 勾选电芯数据已上传");
continue;
}
else
{
// 获取出站数据上传MES
BlankingData data = GetBlankingData(row);
if (data == null)
{
sb.AppendLine($"第{i}行数据: 获取出站数据失败, 跳过该数据");
continue;
}
MesCallResult<RespProductResult> resMes = new MESDataCombin().ProductResultParameters(data);
if (!resMes.IsSuccess)
{
if (resMes.ErrorType == MesErrorType.NetworkError || resMes.ErrorType == MesErrorType.NetworkTimeout)
{
sb.AppendLine($"第{i}行数据: 结果数据上传MES超时或无法访问MES服务器");
LogManagerControl.AddLog("结果数据上传MES超时或无法访问MES服务器", LogAddtype.local, Logtype.Error);
}
else
{
string errMsg = resMes.OriResponse == null ? resMes.ErrorMessage : resMes.OriResponse.ToString();
sb.AppendLine($"第{i}行数据: 结果数据上传MES失败NG,{errMsg}");
LogManagerControl.AddLog("结果数据上传MES失败NG," + errMsg, LogAddtype.local, Logtype.Error);
}
}
}
}
}
}
}
catch(Exception ex)
{
MessageBox.Show($"手动上传MES失败: {ex.ToString()}", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (sb.Length > 0)
{
// 弹出错误信息
MessageBox.Show(sb.ToString(), "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("手动上传MES成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private BlankingData GetBlankingData(DataGridViewRow row)
{
// 获取BlankingData
BlankingData data = new BlankingData();
data.ID = Convert.ToInt32(row.Cells["ID"].Value);
data.TD = Convert.ToInt32(row.Cells["序号"].Value);
data.WorkShift = row.Cells["班次"].Value?.ToString();
data.TDGroup = Convert.ToInt32(row.Cells["主道"].Value);
data.ArrivalBarCode = row.Cells["入站条码"].Value?.ToString();
data.DepartureBarCode = row.Cells["出站条码"].Value?.ToString();
data.TMDB = row.Cells["条码对比"].Value?.ToString();
data.OutTime = row.Cells["出站时间"].Value?.ToString();
data.CCD1 = row.Cells["正面(2D/3D)"].Value?.ToString();
data.CCD2 = row.Cells["反面(2D/3D)"].Value?.ToString();
data.CCD3 = row.Cells["左侧面(2D/3D)"].Value?.ToString();
data.CCD4 = row.Cells["右侧面(2D/3D)"].Value?.ToString();
data.CCD5 = row.Cells["顶面(2D/3D)"].Value?.ToString();
data.CCD6 = row.Cells["底面(2D/3D)"].Value?.ToString();
data.CCD7 = row.Cells["底WE1"].Value?.ToString();
data.CCD8 = row.Cells["底WE2"].Value?.ToString();
data.CCD9 = row.Cells["底WE3"].Value?.ToString();
data.CCD10 = row.Cells["底WE4"].Value?.ToString();
data.CCD11 = row.Cells["中ME1"].Value?.ToString();
data.CCD12 = row.Cells["中ME2"].Value?.ToString();
data.CCD13 = row.Cells["中ME3"].Value?.ToString();
data.CCD14 = row.Cells["中ME4"].Value?.ToString();
data.CCD15 = row.Cells["极柱(POS/NEG)"].Value?.ToString();
data.CCD16 = row.Cells["防爆阀(PRO)"].Value?.ToString();
data.Result = row.Cells["综合结果"].Value?.ToString()?.Trim();
data.Remark = row.Cells["备注"].Value?.ToString();
data.Flag = Convert.ToInt32(row.Cells["状态"].Value);
//var cfgList = Global.systemConfig.CollectItemCfgList.Where(it => it.IsEnable && it.PLCRelAddress != null)
// .OrderBy(it => it.PLCRelAddress).ToList();
//for (int k = 0; k < cfgList.Count; k++)
//{
// var item = cfgList[k];
// var prop = data.GetType().GetProperty(item.HCPropName);
// if (prop != null)
// {
// var code = prop.GetValue(data)?.ToString();
// data.PLCValDic.Add((int)item.PLCRelAddress, code);
// }
//}
return data;
}
/// <summary>
/// dgvCellMouseClick鼠标点击列事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgvData_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
//不是序号列和标题列时才执行
if (e.RowIndex != -1 && e.ColumnIndex != -1)
{
//checkbox勾上
if ((bool)dgvData.Rows[e.RowIndex].Cells[0].EditedFormattedValue == true)
{
//选中改为不选中
this.dgvData.Rows[e.RowIndex].Cells[0].Value = false;
}
else
{
//不选中改为选中
this.dgvData.Rows[e.RowIndex].Cells[0].Value = true;
}
}
}
private class ComboItem
{
/// <summary>
/// 实际值
/// </summary>
public int Value { get; set; }
/// <summary>
/// 显示值
/// </summary>
public string Text { get; set; }
}
private void cbSelectType_SelectedIndexChanged(object sender, EventArgs e)
{
if (CurSearchType == EnumSearchType.ExitStation)
{
btnUpMES.Visible = true;
}
else
{
btnUpMES.Visible = false;
}
}
}
}