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(); } } }