using Core.Mes.Client.Comm.Control;
using Core.Mes.Client.Comm.Tool;
using Core.StlMes.Client.Judge.Commons;
using Core.StlMes.Client.Judge.Forms;
using Core.StlMes.Client.Judge.Models;
using CoreFS.CA06;
using Infragistics.Win.UltraWinGrid;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
namespace Core.StlMes.Client.Judge.Controls
{
public partial class QcmJhyElementsCtrl : UserControl
{
private Dal _d;
private bool _showProcess;
private string _processCode = "";
private string _processDesc = "";
///
///
///
///
///
/// 判定类型:0-炼钢 1-铸造 2-轧管 8-综合
public QcmJhyElementsCtrl(Control container, OpeBase ob, bool showProcess)
{
InitializeComponent();
_d = new Dal(ob);
_showProcess = showProcess;
container.Controls.Add(this);
this.Dock = DockStyle.Fill;
this.BringToFront();
//EntityHelper.ShowGridCaption(ultraGrid1.DisplayLayout.Bands[0]);
}
private List _craftDesignStdCicList = new List();
private List _jhyElementsList = new List();
///
/// 炼钢成分判定查询
///
///
///
///
///
public void QueryCraftResultByStoveNo(string stoveNo, string judgeStoveNo, DataTable dtCraftCic, string processCode, string[] zgProPlanIds)
{
_processCode = processCode;
_jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryByStoveNo", processCode, stoveNo);
_craftDesignStdCicList.Clear();
//从基础成分取数据改为从工艺取数据
//if (dtCraftCic.Rows.Count == 0)
//{
// _craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
//}
if (dtCraftCic.Rows.Count == 0)
{
DataTable dtCraftNo = _d.GetTableByXmlId("JdgPlnOrderZgS.queryCraftNoByZgProPlanId", new object[] { zgProPlanIds });
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
if (_craftDesignStdCicList.Count > 0 && dtCraftNo.Rows.Count > 0)
{
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByDesignAndCic", dtCraftNo.Rows[0]["DESGINKEY"].ToString(), _craftDesignStdCicList[0].Cic);
}
if (_craftDesignStdCicList.Count == 0)
{
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryBaseChemByJudgeStoveNo", judgeStoveNo);
}
}
else
{
foreach (DataRow drCraftCic in dtCraftCic.Rows)
{
var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId("CraftOrdDesignStdCic.getCraftJfChem",
drCraftCic["desginKey"].ToString(), drCraftCic["cic"].ToString());
foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
{
_craftDesignStdCicList.Add(craftCic);
}
var tmpCraftDesignStdCicList2 = _d.GetEntitysByXmlId("QcmLgChemJudgeDAL.getCraftNkChem",
drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString());
foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList2)
{
_craftDesignStdCicList.Add(craftCic);
}
}
}
_craftDesignStdCicList.Sort(new ChemSeqCompare());
if (_jhyElementsList.Count == 0 && _craftDesignStdCicList.Count == 0)
{
ClearData();
return;
}
InitGrid();
}
///
/// 炼钢综合判定查询
///
///
///
///
public void SteelMakingColligateQuery(string stoveNo, string judgeStoveNo, DataTable dtCraftCic, string processCode, string[] zgProPlanIds)
{
_processCode = processCode;
_jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.steelMakingColligateQuery", stoveNo);
_craftDesignStdCicList.Clear();
if (dtCraftCic.Rows.Count == 0)
{
DataTable dtCraftNo = _d.GetTableByXmlId("JdgPlnOrderZgS.queryCraftNoByZgProPlanId", new object[] { zgProPlanIds });
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
if (_craftDesignStdCicList.Count > 0 && dtCraftNo.Rows.Count > 0)
{
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByDesignAndCic", dtCraftNo.Rows[0]["DESGINKEY"].ToString(), _craftDesignStdCicList[0].Cic);
}
if (_craftDesignStdCicList.Count == 0)
{
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryBaseChemByJudgeStoveNo", judgeStoveNo);
}
}
else
{
foreach (DataRow drCraftCic in dtCraftCic.Rows)
{
//var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryCraftResultCic",
// drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString(),
// new string[] { "0", "1", "2" });
//foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
//{
// _craftDesignStdCicList.Add(craftCic);
//}
var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId("CraftOrdDesignStdCic.getCraftJfChem",
drCraftCic["desginKey"].ToString(), drCraftCic["cic"].ToString());
foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
{
_craftDesignStdCicList.Add(craftCic);
}
var tmpCraftDesignStdCicList2 = _d.GetEntitysByXmlId("QcmLgChemJudgeDAL.getCraftNkChem",
drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString());
foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList2)
{
_craftDesignStdCicList.Add(craftCic);
}
}
}
_craftDesignStdCicList.Sort(new ChemSeqCompare());
if (_jhyElementsList.Count == 0 && _craftDesignStdCicList.Count == 0)
{
ClearData();
return;
}
InitGrid();
}
///
/// 半成品查询
///
///
///
///
public void QueryCraftResultByBatchNo(string stoveNo, string judgeStoveNo, string batchNo, string ordLnPk, string ordLnDlyPk, string craftSeq,
string mscPline, string processCode, string cic, string sampleId, string sampleNo, string craftSource)
{
_processCode = processCode;
if (_processCode == "") _processCode = "D";
_craftDesignStdCicList.Clear();
if (_processCode == "A")
_craftDesignStdCicList = _d.GetEntitysByXmlId("CraftOrdDesignStdCic.getCraftJfChemByOrdLnPkMaking", ordLnPk,
craftSeq, cic);
else
_craftDesignStdCicList = _d.GetEntitysByXmlId("CraftOrdDesignStdCic.getCraftJfChemByOrdLnPk", ordLnPk,
craftSeq, mscPline, "A", cic);
if (_processCode == "A")
{
_jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.steelMakingColligateQuery", stoveNo);
for (int i = _jhyElementsList.Count - 1; i >= 0; i--)
{
if (_jhyElementsList[i].SampleNo != sampleNo)
{
_jhyElementsList.Remove(_jhyElementsList[i]);
}
}
var _craftDesignStdCicListTmp = _d.GetEntitysByXmlId("CraftOrdDesignStdCic.queryMeltingCraftChemByOrdLnPk", ordLnPk,
craftSeq, mscPline, "A", cic);
foreach (var craftDesignStdCic in _craftDesignStdCicListTmp)
{
_craftDesignStdCicList.Add(craftDesignStdCic);
}
}
else
{
_jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryBySampleNo", processCode, judgeStoveNo,
batchNo, sampleId, sampleNo);
var _craftDesignStdCicListTmp = _d.GetEntitysByXmlId("CraftOrdDesignStdCic.queryCraftChemByOrdLnPk", ordLnPk,
craftSeq, mscPline, "A", cic, craftSource);
foreach (var craftDesignStdCic in _craftDesignStdCicListTmp)
{
_craftDesignStdCicList.Add(craftDesignStdCic);
}
}
_craftDesignStdCicList.Sort(new ChemSeqCompare());
if (_jhyElementsList.Count == 0 && _craftDesignStdCicList.Count == 0)
{
ClearData();
return;
}
InitGrid();
}
/////
///// 成品查询
/////
/////
/////
/////
//public void QueryCraftResultByBatchNoZc(string judgeStoveNo, DataTable dtCraftCic,
// string ordLnDlyPk, string craftSeq,
// string mscPline, string processCode, string cic, string sampleId, string sampleNo)
//{
// _processCode = processCode;
// DataRow drProcess = _d.GetRowByXmlId("JdgComBaseProcess.Query", _processCode);
// _processDesc = _processCode == "B" ? "炼钢" : drProcess["processDesc"].ToString();
// if (processCode == "A")
// {
// SteelMakingColligateQuery(judgeStoveNo, dtCraftCic, processCode);
// }
// else
// {
// QueryCraftResultByBatchNo(judgeStoveNo, ordLnDlyPk, craftSeq, mscPline, processCode, cic, sampleId, sampleNo);
// }
//}
private DataTable _dtBaseChem = null;
private Dictionary rounds = new Dictionary();
private DataTable _biasChems = null;
private void InitGrid()
{
try
{
ultraGrid1.DisplayLayout.Rows.FixedRows.Clear();
ultraGrid1.DataSource = null;
//查询圆整位数
_dtBaseChem = _d.GetTableByXmlId("JdgComBaseChem.queryRound");
rounds.Clear();
foreach (DataRow drBaseChem in _dtBaseChem.Rows)
{
var stdCics = _craftDesignStdCicList.Where(a => a.SpeclFl == "2" && a.ChemName == drBaseChem["chemName"].ToString()).ToArray();
List lens = new List();
foreach (CraftOrdDesignStdCicEntity stdCic in stdCics)
{
if (stdCic.Stdmin.Split('.').Length > 1)
{
lens.Add(stdCic.Stdmin.Split('.')[1].Length);
}
if (stdCic.Stdmax.Split('.').Length > 1)
{
lens.Add(stdCic.Stdmax.Split('.')[1].Length);
}
}
if (lens.Count > 0)
{
rounds.Add(drBaseChem["chemName"].ToString(), lens.Max().ToString());
}
else
{
rounds.Add(drBaseChem["chemName"].ToString(), drBaseChem["roundingDigits"].ToString());
}
}
if (_craftDesignStdCicList.Count > 0 && _processCode != "" && _processCode.ToCharArray()[0] >= 'D')
{
_biasChems = _d.GetTableByXmlId("CraftOrdDesignStdCic.getBiasChem", _craftDesignStdCicList[0].DesginKey);
}
DataTable dt = CreateDataTable(_craftDesignStdCicList);
//添加检化验数据
foreach (QcmJhyElementsEntity jhyElement in _jhyElementsList)
{
DataRow dr = dt.NewRow();
foreach (DataColumn column in dt.Columns)
{
if (column.ColumnName != column.Caption)
{
if (column.ColumnName == "Process")//工序
{
dr[column.ColumnName] = _processDesc;
}
else
{
dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, column.ColumnName);
}
}
else
{
var craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "2" && a.ChemName == column.ColumnName).FirstOrDefault();
if (craftDesignStdCic == null) //优先使用内控,没有则用MSC0->MSCn
{
craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "0" && a.ChemName == column.ColumnName).FirstOrDefault();
if (craftDesignStdCic == null)
{
craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "1" && a.ChemName == column.ColumnName).FirstOrDefault();
if (craftDesignStdCic == null)
{
continue;
}
}
}
if (craftDesignStdCic.ChemType == "B")
{
// if (craftDesignStdCic.ChemName == "CEⅡw")
// {
// string s = "";
// }
string express = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true);
var craftDesignStdCics = _craftDesignStdCicList.Where(a => a.ChemName == craftDesignStdCic.EleName).FirstOrDefault();
//if (!String.IsNullOrEmpty(craftDesignStdCic.EleName))
//{
// bool checkResult = false;
// Type Ts = jhyElement.GetType();
// object o = Ts.GetProperty(craftDesignStdCic.EleName).GetValue(jhyElement, null);
// string Value = Convert.ToString(o);
// string strEval = (Value + craftDesignStdCic.EleMinSign + craftDesignStdCic.EleMin).Eval();
// if (bool.TryParse(strEval, out checkResult) && !checkResult)
// {
// //cell.Column.Hidden = true;
// continue;
// }
//}
if (column.ColumnName == "CEpcm" || column.ColumnName == "CEⅡw")
{
dr[column.ColumnName] = ChemCaculat(express, rounds[column.ColumnName], column.ColumnName);
}
else {
dr[column.ColumnName] = ChemCaculat(express, rounds[column.ColumnName]);
}
}
else
{
string columnName = column.ColumnName;
if (columnName == "As")
{
columnName = "Asn";
}
dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, columnName);
}
}
}
dt.Rows.Add(dr);
}
ultraGrid1.BeginUpdate();
ultraGrid1.DataBind();
ultraGrid1.DataSource = dt;
ultraGrid1.DisplayLayout.Override.FixedRowSortOrder = FixedRowSortOrder.FixOrder;
ultraGrid1.DisplayLayout.Override.FixedRowAppearance.BackColor = Color.FromArgb(255, 250, 240);
//ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[0]);
//ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[1]);
//ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[2]);
//ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[3]);
//ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[4]);
//ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[5]);
//显示复合元素字段
foreach (var column in ultraGrid1.DisplayLayout.Bands[0].Columns)
{
var craftDesignStdCic = _craftDesignStdCicList.Where(
a => a.ChemName == column.Key).FirstOrDefault();
if(craftDesignStdCic == null){
continue;
}
if (craftDesignStdCic != null && craftDesignStdCic.ChemType == "B")
{
column.Header.Appearance.BackColor = Color.FromArgb(189, 183, 107);
column.Header.ToolTipText = craftDesignStdCic.ChemFormula;
}
//var tmpJhy = _jhyElementsList.Where(a => a.SampleNo == row.GetValue("sampleNo")).FirstOrDefault();
}
//绑定工艺评审记录到标准中
foreach (var row in ultraGrid1.Rows)
{
if (row.Index <= 3)
{
if (row.Index == 0 || row.Index == 1)
{
foreach (var cell in row.Cells)
{
var craftDesignStdCics = _craftDesignStdCicList.Where(
a => (a.SpeclFl == "0" || a.SpeclFl == "1") && a.ChemName == cell.Column.Key).ToArray();
cell.Tag = craftDesignStdCics;
}
}
else
{
foreach (var cell in row.Cells)
{
var craftDesignStdCics = _craftDesignStdCicList.Where(
a => a.SpeclFl == "2" && a.ChemName == cell.Column.Key).ToArray();
cell.Tag = craftDesignStdCics;
}
}
}
else
{
int cnt601F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("601F")).Count();
int cnt602F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("602F")).Count();
int cnt603F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("603F")).Count();
if (row.GetValue("sampleNo") == "601" && cnt601F > 0)
{
row.Appearance.BackColor = Color.Gray;
}
if (row.GetValue("sampleNo") == "602" && cnt602F > 0)
{
row.Appearance.BackColor = Color.Gray;
}
if (row.GetValue("sampleNo") == "603" && cnt603F > 0)
{
row.Appearance.BackColor = Color.Gray;
}
//检验不合数据变色
var tmpJhy = _jhyElementsList.Where(a => a.SampleNo == row.GetValue("sampleNo")).FirstOrDefault();
if (tmpJhy != null && tmpJhy.NkResult == "不合格" && _processCode == "A")
{
row.RowSelectorAppearance.BackColor = Color.FromArgb(255, 106, 106);
}
}
if (row.Index == 2 && row.Cells["judgeStoveNo"].Value.ToString() != "")
{
row.Cells["judgeStoveNo"].EditorComponent = ultraTextEditor1;
}
}
ultraGrid1.DisplayLayout.Bands[0].Columns["judgeStoveNo"].Width = 100;
ultraGrid1.DisplayLayout.Bands[0].Columns["judgeStoveNo"].ButtonDisplayStyle = ButtonDisplayStyle.Always;
if (ultraGrid1.Rows.Count >= 5)
{
ultraGrid1.Rows[4].Activate();
}
GridHelper.RefreshAndAutoSize(ultraGrid1);
}
finally
{
ultraGrid1.EndUpdate();
}
}
private DataTable CreateDataTable(List craftDesignStdCicList)
{
DataTable dt = new DataTable();
//new DataColumn[] {new DataColumn("Chk"){Caption = "选择", DataType = typeof(bool)},
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("SampleNo"){Caption = "试样号"},
new DataColumn("StoveNo"){Caption = "熔炼炉号"},
new DataColumn("JudgeStoveNo"){Caption = "判定炉号"}});
if (_showProcess)
{
dt.Columns.Add(new DataColumn("Process") { Caption = "工序" });
}
foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesignStdCicList)
{
if (dt.Columns.Contains(stdCicEntity.ChemName)) continue;
if (stdCicEntity.Ischeck != "1" && stdCicEntity.Isjudge != "1") continue;
dt.Columns.Add(new DataColumn(stdCicEntity.ChemName));
}
//成品成分需要显示偏差标准
if (_processCode.ToCharArray()[0] >= 'D')
{
dt.Columns.Add(new DataColumn("BiasStd") { Caption = "偏差标准" });
}
//添加国家标准
var craftDesingStdCicG = craftDesignStdCicList.Where(a => a.SpeclFl == "0" || a.SpeclFl == "1");
DataRow dr = GetJhyElementsByCraft(craftDesingStdCicG.ToList(), dt, "1");
dr["SampleNo"] = "交付上限";
if (dt.Columns.Contains("BiasStd"))
{
var bias = _biasChems.Rows.Cast().Where(a => a["speclFl"].ToString() == "0").FirstOrDefault();
if (bias != null)
{
dr["BiasStd"] = bias["stdName"].ToString();
}
}
if (craftDesingStdCicG.Count() > 0)
{
foreach (var groupRow in craftDesingStdCicG.GroupBy(a => a.Cic))
{
if (dr["StoveNo"].ToString() == "")
{
dr["StoveNo"] = groupRow.Key;
}
else
{
dr["StoveNo"] += "," + groupRow.Key;
}
}
}
//string stdMemoG = GetStdMemo(craftDesingStdCicG);
//dr["judgeStoveNo"] = stdMemoG;
var craftDesingStdCicG2 = craftDesignStdCicList.Where(a => a.SpeclFl == "0" || a.SpeclFl == "1");
dr = GetJhyElementsByCraft(craftDesingStdCicG2.ToList(), dt, "2");
dr["SampleNo"] = "交付下限";
if (dt.Columns.Contains("BiasStd"))
{
var bias = _biasChems.Rows.Cast().Where(a => a["speclFl"].ToString() == "0").FirstOrDefault();
if (bias != null)
{
dr["BiasStd"] = bias["stdName"].ToString();
}
}
if (craftDesingStdCicG2.Count() > 0)
{
foreach (var groupRow in craftDesingStdCicG2.GroupBy(a => a.Cic))
{
if (dr["StoveNo"].ToString() == "")
{
dr["StoveNo"] = groupRow.Key;
}
else
{
dr["StoveNo"] += "," + groupRow.Key;
}
}
}
////添加客户标准
//var craftDesingStdCicA = craftDesignStdCicList.Where(a => a.SpeclFl == "1");
//dr = GetJhyElementsByCraft(craftDesingStdCicA.ToList(), dt, "1");
//dr["SampleNo"] = "MSC(n)上限";
//if (dt.Columns.Contains("BiasStd"))
//{
// var bias = _biasChems.Rows.Cast().Where(a => a["speclFl"].ToString() == "1").FirstOrDefault();
// if (bias != null)
// {
// dr["BiasStd"] = bias["stdName"].ToString();
// }
//}
//if (craftDesingStdCicA.Count() > 0)
//{
// foreach (var groupRow in craftDesingStdCicA.GroupBy(a => a.Cic))
// {
// if (dr["StoveNo"].ToString() == "")
// {
// dr["StoveNo"] = groupRow.Key;
// }
// else
// {
// dr["StoveNo"] += "," + groupRow.Key;
// }
// }
//}
////string stdMemoA = GetStdMemo(craftDesingStdCicA);
////dr["judgeStoveNo"] = stdMemoA;
//var craftDesingStdCicA2 = craftDesignStdCicList.Where(a => a.SpeclFl == "1");
//dr = GetJhyElementsByCraft(craftDesingStdCicA2.ToList(), dt, "2");
//dr["SampleNo"] = "MSC(n)下限";
//if (dt.Columns.Contains("BiasStd"))
//{
// var bias = _biasChems.Rows.Cast().Where(a => a["speclFl"].ToString() == "1").FirstOrDefault();
// if (bias != null)
// {
// dr["BiasStd"] = bias["stdName"].ToString();
// }
//}
//if (craftDesingStdCicA2.Count() > 0)
//{
// foreach (var groupRow in craftDesingStdCicA2.GroupBy(a => a.Cic))
// {
// if (dr["StoveNo"].ToString() == "")
// {
// dr["StoveNo"] = groupRow.Key;
// }
// else
// {
// dr["StoveNo"] += "," + groupRow.Key;
// }
// }
//}
//添加内控标准
var craftDesingStdCicN = craftDesignStdCicList.Where(a => a.SpeclFl == "2");
dr = GetJhyElementsByCraft(craftDesingStdCicN.ToList(), dt, "1");
dr["SampleNo"] = "内控上限";
if (_showProcess)
{
dr["Process"] = _processDesc;
}
if (craftDesingStdCicN.Count() > 0)
{
foreach (var groupRow in craftDesingStdCicN.GroupBy(a => a.Cic))
{
if (dr["StoveNo"].ToString() == "")
{
dr["StoveNo"] = groupRow.Key;
}
else
{
dr["StoveNo"] += "," + groupRow.Key;
}
}
}
string stdMemoN = GetStdMemo(craftDesingStdCicN);
dr["judgeStoveNo"] = stdMemoN;
var craftDesingStdCicN2 = craftDesignStdCicList.Where(a => a.SpeclFl == "2");
dr = GetJhyElementsByCraft(craftDesingStdCicN2.ToList(), dt, "2");
dr["SampleNo"] = "内控下限";
if (_showProcess)
{
dr["Process"] = _processDesc;
}
if (craftDesingStdCicN2.Count() > 0)
{
foreach (var groupRow in craftDesingStdCicN2.GroupBy(a => a.Cic))
{
if (dr["StoveNo"].ToString() == "")
{
dr["StoveNo"] = groupRow.Key;
}
else
{
dr["StoveNo"] += "," + groupRow.Key;
}
}
}
return dt;
}
private string GetStdMemo(IEnumerable stdCics)
{
string stdMemo = "";
foreach (var stdCic in stdCics)
{
if (stdCic.Stdmemo == "") continue;
if (stdMemo == "")
{
stdMemo = stdCic.ChemName + ":" + stdCic.Stdmemo;
}
else
{
stdMemo += "\r\n" + stdCic.ChemName + ":" + stdCic.Stdmemo;
}
}
return stdMemo;
}
private DataRow GetJhyElementsByCraft(List craftDesingStdCics, DataTable dt, string flag)
{
try
{
DataRow dr = dt.NewRow();
if (craftDesingStdCics.Count() == 0)
{
foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesingStdCics)
{
foreach (DataColumn column in dt.Columns)
{
if (column.ColumnName == stdCicEntity.ChemName)
{
dr[column.ColumnName] = "";
}
}
}
}
else
{
foreach (DataColumn column in dt.Columns)
{
var chems = craftDesingStdCics.Where(a => a.ChemName == column.ColumnName);
if (chems.Count() == 0) continue;
if (flag == "1")
{
//多个索引码 上限值取最小
if (chems.Where(a => a.Stdmax != "").Count() == 0) continue;
if (chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()).Count() > 0)
{
string stdMax = "";
string stdMaxSign = "";
foreach (var chem in chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()))
{
if (stdMax == "" || decimal.Parse(chem.Stdmax) < decimal.Parse(stdMax))
{
stdMax = chem.Stdmax;
stdMaxSign = chem.StdmaxSign;
}
}
//处理成品成分偏差
if (_processCode.ToCharArray()[0] >= 'D')
{
string chemCode = chems.ToArray()[0].ChemCode;
stdMax = AdjustBiasChem(stdMax, chemCode, false, chems.ToArray()[0].SpeclFl);
}
dr[column.ColumnName] = JudgeHelper.GetExpress("", "", stdMaxSign, stdMax);
}
else
{
dr[column.ColumnName] = chems.FirstOrDefault().Stdmax;
}
}
else
{
//多个索引码下限值取最大
if (chems.Where(a => a.Stdmin != "").Count() == 0) continue;
if (chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()).Count() > 0)
{
string stdMin = "";
string stdminSign = "";
foreach (var chem in chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()))
{
if (stdMin == "" || decimal.Parse(chem.Stdmin) > decimal.Parse(stdMin))
{
stdMin = chem.Stdmin;
stdminSign = chem.StdminSign;
}
}
//处理成品成分偏差
if (_processCode.ToCharArray()[0] >= 'D')
{
string chemCode = chems.ToArray()[0].ChemCode;
stdMin = AdjustBiasChem(stdMin, chemCode, true, chems.ToArray()[0].SpeclFl);
}
dr[column.ColumnName] = JudgeHelper.GetExpress(stdminSign, stdMin, "", "");
}
else
{
dr[column.ColumnName] = chems.FirstOrDefault().Stdmin;
}
}
}
}
dt.Rows.Add(dr);
return dr;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return null;
}
}
private string _tipMsg = "";
public string TipMsg
{
get { return _tipMsg; }
set { _tipMsg = value; }
}
private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
{
try
{
this.Cursor = Cursors.WaitCursor;
ultraGrid1.BeginUpdate();
DataRowView dataRow = (DataRowView)ultraGrid1.ActiveRow.ListObject;
if (dataRow["sampleNo"].ToString().Contains("限"))
{
return;
}
_tipMsg = "";
GridActiveDele();
}
finally
{
ultraGrid1.EndUpdate();
this.Cursor = Cursors.Default;
}
}
private void GridActiveDele()
{
Color yellow = Color.FromArgb(238, 238, 0);
Color red = Color.FromArgb(255, 106, 106);
Color green = Color.FromArgb(60, 179, 113);
Color gray = Color.FromArgb(205, 201, 201);
for (int i = 0; i < 4; i++)
{
UltraGridRow row = ultraGrid1.Rows[i];
//if (!row.GetValue("sampleNo").Contains("内控")) continue;
foreach (UltraGridCell cell in row.Cells)
{
if (cell.Column.Key != cell.Column.Header.Caption) continue;
CraftOrdDesignStdCicEntity[] stdCics = (CraftOrdDesignStdCicEntity[])cell.Tag;
if (stdCics.Length == 0) continue;
var actRow = ultraGrid1.ActiveRow;
CraftOrdDesignStdCicEntity[] calStdCics = GetCalStdCics(stdCics, ultraGrid1.ActiveRow);
//合并后的加严标准
CraftOrdDesignStdCicEntity stdCic = EntityHelper.CopyEntity(calStdCics[0]);
foreach (CraftOrdDesignStdCicEntity calStdCic in calStdCics)
{
//取检、判、报
if (calStdCic.Ischeck != "")
{
stdCic.Ischeck = calStdCic.Ischeck;
}
if (calStdCic.Isjudge != "")
{
stdCic.Isjudge = calStdCic.Isjudge;
}
if (calStdCic.Isquote != "")
{
stdCic.Isquote = calStdCic.Isquote;
}
//取最严的标准上下限
decimal min = stdCic.Stdmin == "" ? 0M : decimal.Parse(stdCic.Stdmin);
decimal calMin = calStdCic.Stdmin == "" ? 0M : decimal.Parse(calStdCic.Stdmin);
if (calMin > min)
{
stdCic.Stdmin = calStdCic.Stdmin;
stdCic.StdminSign = calStdCic.StdminSign;
}
decimal max = stdCic.Stdmax == "" ? 999999M : decimal.Parse(stdCic.Stdmax);
decimal calMax = calStdCic.Stdmax == "" ? 999999M : decimal.Parse(calStdCic.Stdmax);
if (calMax < max)
{
stdCic.Stdmax = calStdCic.Stdmax;
stdCic.StdmaxSign = calStdCic.StdmaxSign;
}
//取限制元素
if (calStdCic.EleName != "")
{
stdCic.EleName = calStdCic.EleName;
}
}
//foreach (var stdCic in stdCics)
//{
// if (row.Index % 2 == 0)
// {
// expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
// expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round);
// }
// else
// {
// expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
// expresss = stdCic.StdminSign + ChemCaculat(expresss, round);
// }
//}
string activeValue = ultraGrid1.GetActiveRowValue(cell.Column.Key);
if (activeValue.StartsWith("-"))
{
activeValue = activeValue.TrimStart('-'); //负号表示小于某个值。
if (activeValue.TryParseDecimal())
{
activeValue = (decimal.Parse(activeValue) - 0.00000001M).ToString();
}
}
if (stdCic.Isjudge == "0")
{
if (stdCic.Isquote == "0")
{
continue;
}
else
{
if (activeValue == "")
{
cell.Appearance.BackColor = yellow;
}
else
{
cell.Appearance.BackColor = gray;
}
continue;
}
}
if (cell.Value.ToString() == "") continue;
//限制元素处理(如果不符合限制元素则不判定)
string expresss = "";
string strEval = "";
bool checkResult = false;
if (row.Index == 2 || row.Index == 3)
{
if (stdCic.EleMinSign != "")
{
expresss = stdCic.EleMinSign + stdCic.EleMin;
strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval();
if (bool.TryParse(strEval, out checkResult) && !checkResult)
{
cell.Column.Hidden = true;
continue;
}
else
{
cell.Column.Hidden = false;
}
}
if (stdCic.EleMaxSign != "")
{
expresss = stdCic.EleMaxSign + stdCic.EleMax;
strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval();
if (bool.TryParse(strEval, out checkResult) && !checkResult)
{
cell.Column.Hidden = true;
continue;
}
else
{
cell.Column.Hidden = false;
}
}
}
if (stdCic.ComplexType == "0")
{
expresss = cell.Value.ToString();
}
else
{
var jhyElement = _jhyElementsList.Where(a => a.SampleNo == ultraGrid1.GetActiveRowValue("SampleNo")).FirstOrDefault();
if (row.Index % 2 == 0)
{
expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
string value = ChemCaculat(expresss, rounds[cell.Column.Key]);
if (cell.Column.Key == "CEpcm" || cell.Column.Key == "CEⅡw")
{
value = ChemCaculat(expresss, rounds[cell.Column.Key], cell.Column.Key);
}
value = AdjustBiasChem(value, stdCic.ChemCode, false, stdCic.SpeclFl);
expresss = stdCic.StdmaxSign + value;
}
else
{
expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
string value = ChemCaculat(expresss, rounds[cell.Column.Key]);
if (cell.Column.Key == "CEpcm" || cell.Column.Key == "CEⅡw")
{
value = ChemCaculat(expresss, rounds[cell.Column.Key], cell.Column.Key);
}
value = AdjustBiasChem(value, stdCic.ChemCode, true, stdCic.SpeclFl);
expresss = stdCic.StdminSign + value;
}
cell.Value = expresss;
}
strEval = (activeValue + expresss).Eval();
if (activeValue == "" || !bool.TryParse(strEval, out checkResult) || !checkResult)
{
string tipMsg = string.Format("成分化验号:{0}中的{1}不符合内控标准!", ultraGrid1.GetActiveRowValue("sampleNo"), cell.Column.Key);
if (_tipMsg == "")
{
_tipMsg = tipMsg;
}
cell.Appearance.BackColor = red;
}
else
{
cell.Appearance.BackColor = green;
}
}
}
if (_tipMsg == "")
{
_tipMsg = "无";
}
ultraGrid1.UpdateData();
}
private string AdjustBiasChem(string value, string chemCode, bool min, string speclFl)
{
if (_craftDesignStdCicList.Count == 0 || _processCode.ToCharArray()[0] < 'D')
{
return value;
}
var biasChems = _biasChems.Rows.Cast().Where(a => a["speclFl"].ToString() == speclFl);
foreach (DataRow biasChem in biasChems)
{
if (chemCode != biasChem["chemCode"].ToString()) continue;
if ((biasChem["minSign"].ToString() == "" || checkStr(value, biasChem["minSign"].ToString(), biasChem["minVal"].ToString()))
&& (biasChem["maxSign"].ToString() == "" || checkStr(value, biasChem["maxSign"].ToString(), biasChem["maxVal"].ToString())))
{
if (min)
{
double stdMin = biasChem["stdMinVal"].ToString() == "" ? 0.0 : Math.Abs(double.Parse(biasChem["stdMinVal"].ToString()));
return (double.Parse(value) - stdMin).ToString();
}
else
{
double stdMax = biasChem["stdMaxVal"].ToString() == "" ? 0.0 : Math.Abs(double.Parse(biasChem["stdMaxVal"].ToString()));
return (double.Parse(value) + stdMax).ToString();
}
}
}
return value;
}
public static bool checkStr(string strA, string sign, string strB)
{
if (strA.Length == 0 || strB.Length == 0)
{
return true;
}
double a = double.Parse(strA);
double b = double.Parse(strB);
if (sign == "=")
{
if (a == b)
{
return true;
}
else
{
return false;
}
}
if (sign == ">")
{
if (a > b)
{
return true;
}
else
{
return false;
}
}
if (sign == ">=")
{
if (a >= b)
{
return true;
}
else
{
return false;
}
}
if (sign == "<")
{
if (a < b)
{
return true;
}
else
{
return false;
}
}
if (sign == "<=")
{
if (a <= b)
{
return true;
}
else
{
return false;
}
}
return false;
}
///
/// 获取计算好的标准上下限
///
///
///
///
///
private CraftOrdDesignStdCicEntity[] GetCalStdCics(CraftOrdDesignStdCicEntity[] stdCics, UltraGridRow row)
{
CraftOrdDesignStdCicEntity[] calStdCics = new CraftOrdDesignStdCicEntity[stdCics.Length];
String express = "";
var jhyElement = _jhyElementsList.Where(a => a.SampleNo == row.GetValue("SampleNo")).FirstOrDefault();
for (int i = 0; i < stdCics.Length; i++)
{
calStdCics[i] = EntityHelper.CopyEntity(stdCics[i]);
if (stdCics[i].RepName != "" && stdCics[i].RepVal != "" && stdCics[i].RepVal.TryParseDecimal())
{
express = FillJhyElemetValue(stdCics[i].RepVal, jhyElement, stdCics[i], false);
calStdCics[i].RepVal = ChemCaculat(express, rounds[stdCics[i].RepName]);
if (stdCics[i].RepName == "CEpcm" || stdCics[i].RepName == "CEⅡw")
{
calStdCics[i].RepVal = ChemCaculat(express, rounds[stdCics[i].RepName], stdCics[i].RepName);
}
}
if (stdCics[i].ComplexType == "1")
{
//标准元素
if (stdCics[i].Stdmin != "")
{
express = FillJhyElemetValue(stdCics[i].Stdmin, jhyElement, stdCics[i], false);
calStdCics[i].Stdmin = ChemCaculat(express, rounds[stdCics[i].ChemName]);
if (stdCics[i].RepName == "CEpcm" || stdCics[i].RepName == "CEⅡw")
{
calStdCics[i].Stdmin = ChemCaculat(express, rounds[stdCics[i].ChemName], stdCics[i].ChemName);
}
}
if (stdCics[i].Stdmax != "")
{
express = FillJhyElemetValue(stdCics[i].Stdmax, jhyElement, stdCics[i], false);
calStdCics[i].Stdmax = ChemCaculat(express, rounds[stdCics[i].ChemName]);
if (stdCics[i].RepName == "CEpcm" || stdCics[i].RepName == "CEⅡw")
{
calStdCics[i].Stdmax = ChemCaculat(express, rounds[stdCics[i].RepName], stdCics[i].RepName);
}
}
}
//暂时随便取一个复合元素值(不同CIC对应的替代元素可能不一样)
if (stdCics[i].ChemType == "B")
{
express = stdCics[i].ChemFormula;
express = FillJhyElemetValue(express, jhyElement, stdCics[i], true);
string value = ChemCaculat(express, rounds[stdCics[i].ChemName]);
if (stdCics[i].ChemName == "CEpcm" || stdCics[i].ChemName == "CEⅡw")
{
value = ChemCaculat(express, rounds[stdCics[i].ChemName], stdCics[i].ChemName);
}
row.Cells[stdCics[i].ChemName].Value = value;
}
}
return calStdCics;
}
//private CraftOrdDesignStdCicEntity getMergeStdCic(CraftOrdDesignStdCicEntity[] stdCics, int rowIndex, string assayNo)
//{
// if (stdCics.Length == 0) return null;
// CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity();
// if (stdCics[0].ComplexType == "0")
// {
// foreach (var stdCic in stdCics)
// {
// mergeStdCic
// }
// }
// _jhyElementsList.Where(a => a.SampleNo == ultraGrid1.GetActiveRowValue("SampleNo")).FirstOrDefault();
// CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity();
// foreach (var stdCic in stdCics)
// {
// string value = "";
// string stdSign = "";
// if (rowIndex % 2 == 0)
// {
// value = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
// expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round);
// }
// else
// {
// expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
// expresss = stdCic.StdminSign + ChemCaculat(expresss, round);
// }
// }
//}
//private List GetExpressValue(CraftOrdDesignStdCicEntity stdCic, QcmJhyElementsEntity jhyElement)
//{
// List expresss = new List();
// if (stdCic.Stdmin != "")
// {
// string express = "";
// express = stdCic.Stdmin;
// express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName);
// express = stdCic.StdminSign + express;
// expresss.Add(express);
// }
// if(stdCic.Stdmax != "")
// {
// string express = "";
// express = stdCic.Stdmax;
// express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName);
// express = stdCic.StdmaxSign + express;
// expresss.Add(express);
// }
// return expresss;
//}
//private string GetChemFormulaValue(CraftOrdDesignStdCicEntity stdCic,
// List craftDesignStdCicList, UltraGrid jhyElementGrid)
//{
// string chemFormula = stdCic.ChemFormula;
// chemFormula = FillJhyElemetValue(chemFormula, craftDesignStdCicList, jhyElementGrid);
// return chemFormula.CompileFormula().ToString2();
//}
private static string ChemCaculat(string express, string round)
{
string strValue = JudgeHelper.Eval(express);
if (!strValue.TryParseDecimal())
{
return strValue;
}
//double value = Math.Abs(double.Parse(strValue));
return Math.Round(Decimal.Round(Decimal.Parse(strValue), 8), int.Parse(round)).ToString("F" + round);
}
private static string ChemCaculat(string express, string round,string chem)
{
string strValue = JudgeHelper.Eval(express);
if (!strValue.TryParseDecimal())
{
return strValue;
}
//double value = Math.Abs(double.Parse(strValue));
return Math.Round(Decimal.Round(Decimal.Parse(strValue), 8), int.Parse(round), MidpointRounding.ToEven).ToString("F" + round);
}
private string FillJhyElemetValue(string express, QcmJhyElementsEntity jhyElement, CraftOrdDesignStdCicEntity stdCic,
bool isMultiChem)
{
var properties = jhyElement.GetType().GetProperties();
Array.Sort(properties, new MyCompare());
//复合元素处理
foreach (var property in properties)
{
string replaceName = property.Name;
if (property.Name == "Asn")
{
replaceName = "As";
}
if (property.Name == "F")
{
replaceName = "f";
}
if ("NbV" == property.Name)
{
string a = "";
string b = "";
}
if (express.Contains(replaceName))
{
string value = property.GetValue(jhyElement, null).ToString2();
if (value.StartsWith("-"))
{
if (replaceName == "B" && value == "-0.0005")
{
value = "0";
}
else
{
value = value.TrimStart('-'); //负号表示小于某个值。
if (value.TryParseDecimal())
{
value = (decimal.Parse(value) - 0.00000001M).ToString();
}
}
}
if (isMultiChem)
{
if (stdCic.RepName == replaceName && stdCic.RepVal != "")
{
String repExpress = "";
bool repResult = true;
bool evalResult = false;
if (stdCic.RepMinSign != "")
{
repExpress = stdCic.RepMinSign + stdCic.RepMin;
if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult)
{
repResult = false;
}
}
if (stdCic.RepMaxSign != "")
{
repExpress = stdCic.RepMaxSign + stdCic.RepMax;
if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult)
{
repResult = false;
}
}
if (jhyElement.Assaytype == "熔炼成分" && replaceName == "B" && stdCic.ChemCode == "C031")
{
}
else if (repResult)
{
string repVal = FillJhyElemetValue(stdCic.RepVal, jhyElement, stdCic, false).Eval();
value = repVal;
}
}
}
if (value != "")
{
express = express.Replace(replaceName, value);
}
}
}
return express;
}
///
/// 从长到短排序, 这样就不会替换元素错误, 比如 S和Sn。
///
private class MyCompare : IComparer
{
public int Compare(PropertyInfo x, PropertyInfo y)
{
if (x.Name.Length < y.Name.Length)
{
return 1;
}
else if (x.Name.Length > y.Name.Length)
{
return -1;
}
else
{
return 0;
}
}
}
private class ChemSeqCompare : IComparer
{
public int Compare(CraftOrdDesignStdCicEntity x, CraftOrdDesignStdCicEntity y)
{
if (decimal.Parse(x.ChemSeq) < decimal.Parse(y.ChemSeq))
{
return -1;
}
else if (decimal.Parse(x.ChemSeq) > decimal.Parse(y.ChemSeq))
{
return 1;
}
else
{
return 0;
}
}
}
private void ultraGrid1_CellChange(object sender, CellEventArgs e)
{
ultraGrid1.UpdateData();
}
public void ClearData()
{
if (ultraGrid1.DataSource != null)
{
((DataTable)ultraGrid1.DataSource).Clear();
}
}
private void ultraGrid1_AfterSortChange(object sender, BandEventArgs e)
{
GridHelper.RefreshAndAutoSize(ultraGrid1);
}
private void ultraGrid1_BeforeRowDeactivate(object sender, CancelEventArgs e)
{
//var a = Cursor.Position;
//var b = Control.MousePosition;
//var element = ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(ultraGrid1.PointToClient(a));
//if (element == null) return;
//var row = (UltraGridRow)element.GetContext(typeof(UltraGridRow));
//if (row != null && row.Fixed)
//{
// e.Cancel = true;
//}
}
private void ultraTextEditor1_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
{
var row = ultraGrid1.ActiveRow;
PopupTextBox popupTextBox = new PopupTextBox(row.GetValue("judgeStoveNo"), 4000);
popupTextBox.TxtInfo.ReadOnly = true;
popupTextBox.UltraPanel1.Visible = false;
popupTextBox.Show();
}
}
}