using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CoreFS.CA06;
using Core.Mes.Client.Comm.Tool;
using System.Reflection;
using Infragistics.Win.UltraWinGrid;
using Core.Mes.Client.Comm.Control;
namespace Core.StlMes.Client.YdmStuffManage
{
public partial class QcmJhyElementsCtrl : UserControl
{
private JudgeType _judgeType;
private Dal _d;
///
///
///
///
///
/// 判定类型:0-炼钢 1-铸造 2-轧管 8-综合
public QcmJhyElementsCtrl(Control container, OpeBase ob, JudgeType judgeType)
{
InitializeComponent();
_judgeType = judgeType;
_d = new Dal(ob);
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 cic)
{
_jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryByStoveNo", processCode, stoveNo);
_craftDesignStdCicList.Clear();
if (dtCraftCic.Rows.Count == 0)
{
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
}
else
{
foreach (DataRow drCraftCic in dtCraftCic.Rows)
{
var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryCraftResultCic",
drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, cic,
new string[] { "0", "1", "2" });
foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
{
_craftDesignStdCicList.Add(craftCic);
}
}
}
_craftDesignStdCicList.Sort(new ChemSeqCompare());
InitGrid();
}
public void SteelMakingColligateQuery(string judgeStoveNo, DataTable dtCraftCic, string processCode)
{
_jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.steelMakingColligateQuery", judgeStoveNo);
_craftDesignStdCicList.Clear();
if (dtCraftCic.Rows.Count == 0)
{
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", 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);
}
}
}
_craftDesignStdCicList.Sort(new ChemSeqCompare());
InitGrid();
}
public void QueryCraftResultByJudgeStoveNo(string judgeStoveNo, string designKey, string mscPline, string processCode, string cic)
{
_jhyElementsList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryByJudgeStoveNo", processCode, judgeStoveNo);
_craftDesignStdCicList = _d.GetEntitysByXmlId("QcmJhyElementsDAL.queryCraftResultCic", designKey,
mscPline, processCode, cic, new string[] { "0", "1", "2" });
InitGrid();
}
private DataTable _dtBaseChem = null;
private Dictionary rounds = new Dictionary();
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)
{
rounds.Add(drBaseChem["chemName"].ToString(), drBaseChem["roundingDigits"].ToString());
}
// //先赋值
// foreach (var craftCic in _craftDesignStdCicList)
// {
// //替代元素
//string express = "";
//string round = "2";
//foreach(DataRow drBaseChem in _dtBaseChem.Rows){
// if(drBaseChem["chemName"].ToString() == craftCic.ChemName){
// round = drBaseChem["roundingDigits"].ToString();
// break;
// }
//}
//if(craftCic.RepName != "" && craftCic.RepVal != "" && !craftCic.RepVal.TryParseDecimal()){
// express = FillJhyElemetValue(craftCic.RepVal, _jhyElementsEntity, craftDesingStdCicN, false);
// craftDesingStdCicN.setRepVal(chemCaculat(express, round));
//}
//if (craftDesingStdCicN.getComplexType().equals("1")) {
// //标准元素
// if(!craftDesingStdCicN.getStdmin().equals("")){
// express = FillJhyElemetValue(craftDesingStdCicN.getStdmin(), jhyElementsEntity, craftDesingStdCicN, false);
// craftDesingStdCicN.setStdmin(chemCaculat(express, round));
// }
// if(!craftDesingStdCicN.getStdmax().equals("")){
// express = FillJhyElemetValue(craftDesingStdCicN.getStdmax(), jhyElementsEntity, craftDesingStdCicN, false);
// craftDesingStdCicN.setStdmax(chemCaculat(express, round));
// }
//}
//if (craftDesingStdCicN.getChemType().equals("A")) {
// String fieldName = craftDesingStdCicN.getChemName();
// if(fieldName.equals("As")){
// fieldName = "Asn";
// }
// String value = EntityTool.getValue(jhyElementsEntity, fieldName);
// jhyResults.put(craftDesingStdCicN.getChemName(), value);
//} else {
// round = "2";
// for(ComBaseChemEntity baseChem : baseChems){
// if(baseChem.getChemName().equals(craftDesingStdCicN.getChemName())){
// round = baseChem.getRoundingDigits();
// break;
// }
// }
// express = craftDesingStdCicN.getChemFormula();
// express = FillJhyElemetValue(express, jhyElementsEntity, craftDesingStdCicN, true);
// String value = chemCaculat(express, round);
// jhyResults.put(craftDesingStdCicN.getChemName(), value);
//}
// }
DataTable dt = CreateDataTable(_craftDesignStdCicList);
//添加检化验数据
foreach (QcmJhyElementsEntity jhyElement in _jhyElementsList)
{
//var row = ultraGrid1.DisplayLayout.Bands[0].AddNew();
//foreach(var cell in row.Cells)
//{
// string key = cell.Column.Key;
// string round = "2";
// foreach (DataRow drBaseChem in _dtBaseChem.Rows)
// {
// if (drBaseChem["chemName"].ToString() == key)
// {
// round = drBaseChem["roundingDigits"].ToString();
// break;
// }
// }
// if(cell.Column.Key != cell.Column.Header.Caption)
// {
// cell.Value = EntityHelper.GetEntityPropertyValue(jhyElement, key);
// }
// else
// {
// var craftDesignStdCic = _craftDesignStdCicList.Where(
// a => a.SpeclFl == "2" && a.ChemName == key).FirstOrDefault();
// if (craftDesignStdCic == null) continue;
// if (craftDesignStdCic.ChemType == "B")
// {
// cell.Value = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true);
// cell.Value = ChemCaculat(cell.Value.ToString(), round);
// }
// else
// {
// string columnName = key;
// if (columnName == "As")
// {
// columnName = "Asn";
// }
// cell.Value = EntityHelper.GetEntityPropertyValue(jhyElement, columnName);
// }
// }
//}
DataRow dr = dt.NewRow();
foreach (DataColumn column in dt.Columns)
{
if (column.ColumnName != column.Caption)
{
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.RepName != "" && craftDesignStdCic.RepVal != "" && !craftDesignStdCic.RepVal.TryParseDecimal())
//{
// string express = FillJhyElemetValue(craftDesignStdCic.RepVal, jhyElement, craftDesignStdCic, false);
// craftDesingStdCicN.setRepVal(chemCaculat(express, round));
//}
if (craftDesignStdCic.ChemType == "B")
{
string express = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true);
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.DataSource = dt;
ultraGrid1.DataBind();
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 && craftDesignStdCic.ChemType == "B")
{
column.Header.Appearance.BackColor = Color.FromArgb(189, 183, 107);
column.Header.ToolTipText = craftDesignStdCic.ChemFormula;
}
}
//绑定工艺评审记录到标准中
foreach (var row in ultraGrid1.Rows)
{
if (row.Fixed)
{
string speclFl = "";
if (row.Index == 0 || row.Index == 1)
{
speclFl = "0";
}
else if (row.Index == 2 || row.Index == 3)
{
speclFl = "1";
}
else
{
speclFl = "2";
}
foreach (var cell in row.Cells)
{
var craftDesignStdCics = _craftDesignStdCicList.Where(
a => a.SpeclFl == speclFl && 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("assayNo").Split('_')[1] == "601" && cnt601F > 0)
{
row.Appearance.BackColor = Color.Gray;
}
if (row.GetValue("assayNo").Split('_')[1] == "602" && cnt602F > 0)
{
row.Appearance.BackColor = Color.Gray;
}
if (row.GetValue("assayNo").Split('_')[1] == "603" && cnt603F > 0)
{
row.Appearance.BackColor = Color.Gray;
}
}
}
if (ultraGrid1.Rows.Count >= 7)
{
ultraGrid1.Rows[6].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("Assayno"){Caption = "成分化验号"},
new DataColumn("StoveNo"){Caption = "熔炼炉号"}});
foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesignStdCicList)
{
if (dt.Columns.Contains(stdCicEntity.ChemName)) continue;
dt.Columns.Add(new DataColumn(stdCicEntity.ChemName));
}
//添加国家标准
var craftDesingStdCicG = craftDesignStdCicList.Where(a => a.SpeclFl == "0");
DataRow dr = GetJhyElementsByCraft(craftDesingStdCicG.ToList(), dt, "1");
dr["Assayno"] = "MSC0上限";
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;
}
}
}
var craftDesingStdCicG2 = craftDesignStdCicList.Where(a => a.SpeclFl == "0");
dr = GetJhyElementsByCraft(craftDesingStdCicG2.ToList(), dt, "2");
dr["Assayno"] = "MSC0下限";
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["Assayno"] = "MSC(n)上限";
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;
}
}
}
var craftDesingStdCicA2 = craftDesignStdCicList.Where(a => a.SpeclFl == "1");
dr = GetJhyElementsByCraft(craftDesingStdCicA2.ToList(), dt, "2");
dr["Assayno"] = "MSC(n)下限";
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["Assayno"] = "内控标准上限";
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;
}
}
}
var craftDesingStdCicN2 = craftDesignStdCicList.Where(a => a.SpeclFl == "2");
dr = GetJhyElementsByCraft(craftDesingStdCicN2.ToList(), dt, "2");
dr["Assayno"] = "内控标准下限";
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 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 minStdMax = "";
string stdMaxSign = "";
foreach (var chem in chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()))
{
if (minStdMax == "" || decimal.Parse(chem.Stdmax) < decimal.Parse(minStdMax))
{
minStdMax = chem.Stdmax;
stdMaxSign = chem.StdmaxSign;
}
}
dr[column.ColumnName] = JudgeHelper.GetExpress("", "", stdMaxSign, minStdMax);
}
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 maxStdmin = "";
string stdminSign = "";
foreach (var chem in chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()))
{
if (maxStdmin == "" || decimal.Parse(chem.Stdmin) > decimal.Parse(maxStdmin))
{
maxStdmin = chem.Stdmin;
stdminSign = chem.StdminSign;
}
}
dr[column.ColumnName] = JudgeHelper.GetExpress(stdminSign, maxStdmin, "", "");
}
else
{
dr[column.ColumnName] = chems.FirstOrDefault().Stdmin;
}
}
}
}
dt.Rows.Add(dr);
return dr;
}
catch (Exception ex)
{
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["ASSAYNO"].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);
foreach (UltraGridRow row in ultraGrid1.DisplayLayout.Rows.FixedRows)
{
//if (!row.GetValue("ASSAYNO").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;
}
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;
}
//取限制元素
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);
//activeValue = activeValue.TrimStart('-'); //负号表示小于某个值。
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 == 4 || row.Index == 5)
{
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.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault();
// string round = "2";
// if (rounds.ContainsKey(cell.Column.Key))
// {
// round = rounds[cell.Column.Key];
// }
// 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);
// }
// cell.Value = expresss;
//}
if (stdCic.ComplexType == "0")
{
expresss = cell.Value.ToString();
}
else
{
var jhyElement = _jhyElementsList.Where(a => a.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault();
if (row.Index % 2 == 0)
{
expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
expresss = stdCic.StdmaxSign + ChemCaculat(expresss, rounds[cell.Column.Key]);
}
else
{
expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
expresss = stdCic.StdminSign + ChemCaculat(expresss, rounds[cell.Column.Key]);
}
cell.Value = expresss;
}
strEval = (activeValue + expresss).Eval();
if (activeValue == "" || !bool.TryParse(strEval, out checkResult) || !checkResult)
{
string tipMsg = string.Format("成分化验号:{0}中的{1}不符合内控标准!", ultraGrid1.GetActiveRowValue("ASSAYNO"), cell.Column.Key);
if (_tipMsg == "")
{
_tipMsg = tipMsg;
}
cell.Appearance.BackColor = red;
}
else
{
cell.Appearance.BackColor = green;
}
}
}
if (_tipMsg == "")
{
_tipMsg = "无";
}
ultraGrid1.UpdateData();
}
///
/// 获取计算好的标准上下限
///
///
///
///
///
private CraftOrdDesignStdCicEntity[] GetCalStdCics(CraftOrdDesignStdCicEntity[] stdCics, UltraGridRow row)
{
CraftOrdDesignStdCicEntity[] calStdCics = new CraftOrdDesignStdCicEntity[stdCics.Length];
String express = "";
var jhyElement = _jhyElementsList.Where(a => a.Assayno == row.GetValue("Assayno")).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].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].Stdmax != "")
{
express = FillJhyElemetValue(stdCics[i].Stdmax, jhyElement, stdCics[i], false);
calStdCics[i].Stdmax = ChemCaculat(express, rounds[stdCics[i].ChemName]);
}
}
//暂时随便取一个复合元素值(不同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]);
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.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).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(value, int.Parse(round)).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 (express.Contains(replaceName))
{
string value = property.GetValue(jhyElement, null).ToString2();
value = value.TrimStart('-');
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 (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()
{
ultraGrid1.DataSource = null;
}
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;
}
}
}
}