QcmJhyElementsCtrl.cs 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410
  1. using Core.Mes.Client.Comm.Control;
  2. using Core.Mes.Client.Comm.Tool;
  3. using Core.StlMes.Client.Judge.Commons;
  4. using Core.StlMes.Client.Judge.Forms;
  5. using Core.StlMes.Client.Judge.Models;
  6. using CoreFS.CA06;
  7. using Infragistics.Win.UltraWinGrid;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using System.Diagnostics;
  13. using System.Drawing;
  14. using System.Linq;
  15. using System.Reflection;
  16. using System.Windows.Forms;
  17. namespace Core.StlMes.Client.Judge.Controls
  18. {
  19. public partial class QcmJhyElementsCtrl : UserControl
  20. {
  21. private Dal _d;
  22. private bool _showProcess;
  23. private string _processCode = "";
  24. private string _processDesc = "";
  25. /// <summary>
  26. ///
  27. /// </summary>
  28. /// <param name="container"></param>
  29. /// <param name="ob"></param>
  30. /// <param name="judgeType">判定类型:0-炼钢 1-铸造 2-轧管 8-综合</param>
  31. public QcmJhyElementsCtrl(Control container, OpeBase ob, bool showProcess)
  32. {
  33. InitializeComponent();
  34. _d = new Dal(ob);
  35. _showProcess = showProcess;
  36. container.Controls.Add(this);
  37. this.Dock = DockStyle.Fill;
  38. this.BringToFront();
  39. //EntityHelper.ShowGridCaption<QcmJhyElementsEntity>(ultraGrid1.DisplayLayout.Bands[0]);
  40. }
  41. private List<CraftOrdDesignStdCicEntity> _craftDesignStdCicList = new List<CraftOrdDesignStdCicEntity>();
  42. private List<QcmJhyElementsEntity> _jhyElementsList = new List<QcmJhyElementsEntity>();
  43. /// <summary>
  44. /// 炼钢成分判定查询
  45. /// </summary>
  46. /// <param name="stoveNo"></param>
  47. /// <param name="judgeStoveNo"></param>
  48. /// <param name="dtCraftCic"></param>
  49. /// <param name="processCode"></param>
  50. public void QueryCraftResultByStoveNo(string stoveNo, string judgeStoveNo, DataTable dtCraftCic, string processCode, string[] zgProPlanIds)
  51. {
  52. _processCode = processCode;
  53. _jhyElementsList = _d.GetEntitysByXmlId<QcmJhyElementsEntity>("QcmJhyElementsDAL.queryByStoveNo", processCode, stoveNo);
  54. _craftDesignStdCicList.Clear();
  55. //从基础成分取数据改为从工艺取数据
  56. //if (dtCraftCic.Rows.Count == 0)
  57. //{
  58. // _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
  59. //}
  60. if (dtCraftCic.Rows.Count == 0)
  61. {
  62. DataTable dtCraftNo = _d.GetTableByXmlId("JdgPlnOrderZgS.queryCraftNoByZgProPlanId", new object[] { zgProPlanIds });
  63. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
  64. if (_craftDesignStdCicList.Count > 0 && dtCraftNo.Rows.Count > 0)
  65. {
  66. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryApplyChemByDesignAndCic", dtCraftNo.Rows[0]["DESGINKEY"].ToString(), _craftDesignStdCicList[0].Cic);
  67. }
  68. if (_craftDesignStdCicList.Count == 0)
  69. {
  70. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryBaseChemByJudgeStoveNo", judgeStoveNo);
  71. }
  72. }
  73. else
  74. {
  75. foreach (DataRow drCraftCic in dtCraftCic.Rows)
  76. {
  77. var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("CraftOrdDesignStdCic.getCraftJfChem",
  78. drCraftCic["desginKey"].ToString(), drCraftCic["cic"].ToString());
  79. foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
  80. {
  81. _craftDesignStdCicList.Add(craftCic);
  82. }
  83. var tmpCraftDesignStdCicList2 = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmLgChemJudgeDAL.getCraftNkChem",
  84. drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString());
  85. foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList2)
  86. {
  87. _craftDesignStdCicList.Add(craftCic);
  88. }
  89. }
  90. }
  91. _craftDesignStdCicList.Sort(new ChemSeqCompare());
  92. if (_jhyElementsList.Count == 0 && _craftDesignStdCicList.Count == 0)
  93. {
  94. ClearData();
  95. return;
  96. }
  97. InitGrid();
  98. }
  99. /// <summary>
  100. /// 炼钢综合判定查询
  101. /// </summary>
  102. /// <param name="judgeStoveNo"></param>
  103. /// <param name="dtCraftCic"></param>
  104. /// <param name="processCode"></param>
  105. public void SteelMakingColligateQuery(string stoveNo, string judgeStoveNo, DataTable dtCraftCic, string processCode, string[] zgProPlanIds)
  106. {
  107. _processCode = processCode;
  108. _jhyElementsList = _d.GetEntitysByXmlId<QcmJhyElementsEntity>("QcmJhyElementsDAL.steelMakingColligateQuery", stoveNo);
  109. _craftDesignStdCicList.Clear();
  110. if (dtCraftCic.Rows.Count == 0)
  111. {
  112. DataTable dtCraftNo = _d.GetTableByXmlId("JdgPlnOrderZgS.queryCraftNoByZgProPlanId", new object[] { zgProPlanIds });
  113. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
  114. if (_craftDesignStdCicList.Count > 0 && dtCraftNo.Rows.Count > 0)
  115. {
  116. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryApplyChemByDesignAndCic", dtCraftNo.Rows[0]["DESGINKEY"].ToString(), _craftDesignStdCicList[0].Cic);
  117. }
  118. if (_craftDesignStdCicList.Count == 0)
  119. {
  120. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryBaseChemByJudgeStoveNo", judgeStoveNo);
  121. }
  122. }
  123. else
  124. {
  125. foreach (DataRow drCraftCic in dtCraftCic.Rows)
  126. {
  127. //var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmJhyElementsDAL.queryCraftResultCic",
  128. // drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString(),
  129. // new string[] { "0", "1", "2" });
  130. //foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
  131. //{
  132. // _craftDesignStdCicList.Add(craftCic);
  133. //}
  134. var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("CraftOrdDesignStdCic.getCraftJfChem",
  135. drCraftCic["desginKey"].ToString(), drCraftCic["cic"].ToString());
  136. foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
  137. {
  138. _craftDesignStdCicList.Add(craftCic);
  139. }
  140. var tmpCraftDesignStdCicList2 = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmLgChemJudgeDAL.getCraftNkChem",
  141. drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString());
  142. foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList2)
  143. {
  144. _craftDesignStdCicList.Add(craftCic);
  145. }
  146. }
  147. }
  148. _craftDesignStdCicList.Sort(new ChemSeqCompare());
  149. if (_jhyElementsList.Count == 0 && _craftDesignStdCicList.Count == 0)
  150. {
  151. ClearData();
  152. return;
  153. }
  154. InitGrid();
  155. }
  156. /// <summary>
  157. /// 半成品查询
  158. /// </summary>
  159. /// <param name="judgeStoveNo"></param>
  160. /// <param name="dtCraftCic"></param>
  161. /// <param name="processCode"></param>
  162. public void QueryCraftResultByBatchNo(string stoveNo, string judgeStoveNo, string batchNo, string ordLnPk, string ordLnDlyPk, string craftSeq,
  163. string mscPline, string processCode, string cic, string sampleId, string sampleNo, string craftSource)
  164. {
  165. _processCode = processCode;
  166. if (_processCode == "") _processCode = "D";
  167. _craftDesignStdCicList.Clear();
  168. if (_processCode == "A")
  169. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("CraftOrdDesignStdCic.getCraftJfChemByOrdLnPkMaking", ordLnPk,
  170. craftSeq, cic);
  171. else
  172. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("CraftOrdDesignStdCic.getCraftJfChemByOrdLnPk", ordLnPk,
  173. craftSeq, mscPline, "A", cic);
  174. if (_processCode == "A")
  175. {
  176. _jhyElementsList = _d.GetEntitysByXmlId<QcmJhyElementsEntity>("QcmJhyElementsDAL.steelMakingColligateQuery", stoveNo);
  177. for (int i = _jhyElementsList.Count - 1; i >= 0; i--)
  178. {
  179. if (_jhyElementsList[i].SampleNo != sampleNo)
  180. {
  181. _jhyElementsList.Remove(_jhyElementsList[i]);
  182. }
  183. }
  184. var _craftDesignStdCicListTmp = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("CraftOrdDesignStdCic.queryMeltingCraftChemByOrdLnPk", ordLnPk,
  185. craftSeq, mscPline, "A", cic);
  186. foreach (var craftDesignStdCic in _craftDesignStdCicListTmp)
  187. {
  188. _craftDesignStdCicList.Add(craftDesignStdCic);
  189. }
  190. }
  191. else
  192. {
  193. _jhyElementsList = _d.GetEntitysByXmlId<QcmJhyElementsEntity>("QcmJhyElementsDAL.queryBySampleNo", processCode, judgeStoveNo,
  194. batchNo, sampleId, sampleNo);
  195. var _craftDesignStdCicListTmp = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("CraftOrdDesignStdCic.queryCraftChemByOrdLnPk", ordLnPk,
  196. craftSeq, mscPline, "A", cic, craftSource);
  197. foreach (var craftDesignStdCic in _craftDesignStdCicListTmp)
  198. {
  199. _craftDesignStdCicList.Add(craftDesignStdCic);
  200. }
  201. }
  202. _craftDesignStdCicList.Sort(new ChemSeqCompare());
  203. if (_jhyElementsList.Count == 0 && _craftDesignStdCicList.Count == 0)
  204. {
  205. ClearData();
  206. return;
  207. }
  208. InitGrid();
  209. }
  210. ///// <summary>
  211. ///// 成品查询
  212. ///// </summary>
  213. ///// <param name="judgeStoveNo"></param>
  214. ///// <param name="dtCraftCic"></param>
  215. ///// <param name="processCode"></param>
  216. //public void QueryCraftResultByBatchNoZc(string judgeStoveNo, DataTable dtCraftCic,
  217. // string ordLnDlyPk, string craftSeq,
  218. // string mscPline, string processCode, string cic, string sampleId, string sampleNo)
  219. //{
  220. // _processCode = processCode;
  221. // DataRow drProcess = _d.GetRowByXmlId("JdgComBaseProcess.Query", _processCode);
  222. // _processDesc = _processCode == "B" ? "炼钢" : drProcess["processDesc"].ToString();
  223. // if (processCode == "A")
  224. // {
  225. // SteelMakingColligateQuery(judgeStoveNo, dtCraftCic, processCode);
  226. // }
  227. // else
  228. // {
  229. // QueryCraftResultByBatchNo(judgeStoveNo, ordLnDlyPk, craftSeq, mscPline, processCode, cic, sampleId, sampleNo);
  230. // }
  231. //}
  232. private DataTable _dtBaseChem = null;
  233. private Dictionary<string, string> rounds = new Dictionary<string, string>();
  234. private DataTable _biasChems = null;
  235. private void InitGrid()
  236. {
  237. try
  238. {
  239. ultraGrid1.DisplayLayout.Rows.FixedRows.Clear();
  240. ultraGrid1.DataSource = null;
  241. //查询圆整位数
  242. _dtBaseChem = _d.GetTableByXmlId("JdgComBaseChem.queryRound");
  243. rounds.Clear();
  244. foreach (DataRow drBaseChem in _dtBaseChem.Rows)
  245. {
  246. var stdCics = _craftDesignStdCicList.Where(a => a.SpeclFl == "2" && a.ChemName == drBaseChem["chemName"].ToString()).ToArray();
  247. List<int> lens = new List<int>();
  248. foreach (CraftOrdDesignStdCicEntity stdCic in stdCics)
  249. {
  250. if (stdCic.Stdmin.Split('.').Length > 1)
  251. {
  252. lens.Add(stdCic.Stdmin.Split('.')[1].Length);
  253. }
  254. if (stdCic.Stdmax.Split('.').Length > 1)
  255. {
  256. lens.Add(stdCic.Stdmax.Split('.')[1].Length);
  257. }
  258. }
  259. if (lens.Count > 0)
  260. {
  261. rounds.Add(drBaseChem["chemName"].ToString(), lens.Max().ToString());
  262. }
  263. else
  264. {
  265. rounds.Add(drBaseChem["chemName"].ToString(), drBaseChem["roundingDigits"].ToString());
  266. }
  267. }
  268. if (_craftDesignStdCicList.Count > 0 && _processCode != "" && _processCode.ToCharArray()[0] >= 'D')
  269. {
  270. _biasChems = _d.GetTableByXmlId("CraftOrdDesignStdCic.getBiasChem", _craftDesignStdCicList[0].DesginKey);
  271. }
  272. DataTable dt = CreateDataTable(_craftDesignStdCicList);
  273. //添加检化验数据
  274. foreach (QcmJhyElementsEntity jhyElement in _jhyElementsList)
  275. {
  276. DataRow dr = dt.NewRow();
  277. foreach (DataColumn column in dt.Columns)
  278. {
  279. if (column.ColumnName != column.Caption)
  280. {
  281. if (column.ColumnName == "Process")//工序
  282. {
  283. dr[column.ColumnName] = _processDesc;
  284. }
  285. else
  286. {
  287. dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, column.ColumnName);
  288. }
  289. }
  290. else
  291. {
  292. var craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "2" && a.ChemName == column.ColumnName).FirstOrDefault();
  293. if (craftDesignStdCic == null) //优先使用内控,没有则用MSC0->MSCn
  294. {
  295. craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "0" && a.ChemName == column.ColumnName).FirstOrDefault();
  296. if (craftDesignStdCic == null)
  297. {
  298. craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "1" && a.ChemName == column.ColumnName).FirstOrDefault();
  299. if (craftDesignStdCic == null)
  300. {
  301. continue;
  302. }
  303. }
  304. }
  305. if (craftDesignStdCic.ChemType == "B")
  306. {
  307. // if (craftDesignStdCic.ChemName == "CEⅡw")
  308. // {
  309. // string s = "";
  310. // }
  311. string express = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true);
  312. var craftDesignStdCics = _craftDesignStdCicList.Where(a => a.ChemName == craftDesignStdCic.EleName).FirstOrDefault();
  313. //if (!String.IsNullOrEmpty(craftDesignStdCic.EleName))
  314. //{
  315. // bool checkResult = false;
  316. // Type Ts = jhyElement.GetType();
  317. // object o = Ts.GetProperty(craftDesignStdCic.EleName).GetValue(jhyElement, null);
  318. // string Value = Convert.ToString(o);
  319. // string strEval = (Value + craftDesignStdCic.EleMinSign + craftDesignStdCic.EleMin).Eval();
  320. // if (bool.TryParse(strEval, out checkResult) && !checkResult)
  321. // {
  322. // //cell.Column.Hidden = true;
  323. // continue;
  324. // }
  325. //}
  326. if (column.ColumnName == "CEpcm" || column.ColumnName == "CEⅡw")
  327. {
  328. dr[column.ColumnName] = ChemCaculat(express, rounds[column.ColumnName], column.ColumnName);
  329. }
  330. else {
  331. dr[column.ColumnName] = ChemCaculat(express, rounds[column.ColumnName]);
  332. }
  333. }
  334. else
  335. {
  336. string columnName = column.ColumnName;
  337. if (columnName == "As")
  338. {
  339. columnName = "Asn";
  340. }
  341. dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, columnName);
  342. }
  343. }
  344. }
  345. dt.Rows.Add(dr);
  346. }
  347. ultraGrid1.BeginUpdate();
  348. ultraGrid1.DataBind();
  349. ultraGrid1.DataSource = dt;
  350. ultraGrid1.DisplayLayout.Override.FixedRowSortOrder = FixedRowSortOrder.FixOrder;
  351. ultraGrid1.DisplayLayout.Override.FixedRowAppearance.BackColor = Color.FromArgb(255, 250, 240);
  352. //ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[0]);
  353. //ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[1]);
  354. //ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[2]);
  355. //ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[3]);
  356. //ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[4]);
  357. //ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[5]);
  358. //显示复合元素字段
  359. foreach (var column in ultraGrid1.DisplayLayout.Bands[0].Columns)
  360. {
  361. var craftDesignStdCic = _craftDesignStdCicList.Where(
  362. a => a.ChemName == column.Key).FirstOrDefault();
  363. if(craftDesignStdCic == null){
  364. continue;
  365. }
  366. if (craftDesignStdCic != null && craftDesignStdCic.ChemType == "B")
  367. {
  368. column.Header.Appearance.BackColor = Color.FromArgb(189, 183, 107);
  369. column.Header.ToolTipText = craftDesignStdCic.ChemFormula;
  370. }
  371. //var tmpJhy = _jhyElementsList.Where(a => a.SampleNo == row.GetValue("sampleNo")).FirstOrDefault();
  372. }
  373. //绑定工艺评审记录到标准中
  374. foreach (var row in ultraGrid1.Rows)
  375. {
  376. if (row.Index <= 3)
  377. {
  378. if (row.Index == 0 || row.Index == 1)
  379. {
  380. foreach (var cell in row.Cells)
  381. {
  382. var craftDesignStdCics = _craftDesignStdCicList.Where(
  383. a => (a.SpeclFl == "0" || a.SpeclFl == "1") && a.ChemName == cell.Column.Key).ToArray();
  384. cell.Tag = craftDesignStdCics;
  385. }
  386. }
  387. else
  388. {
  389. foreach (var cell in row.Cells)
  390. {
  391. var craftDesignStdCics = _craftDesignStdCicList.Where(
  392. a => a.SpeclFl == "2" && a.ChemName == cell.Column.Key).ToArray();
  393. cell.Tag = craftDesignStdCics;
  394. }
  395. }
  396. }
  397. else
  398. {
  399. int cnt601F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("601F")).Count();
  400. int cnt602F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("602F")).Count();
  401. int cnt603F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("603F")).Count();
  402. if (row.GetValue("sampleNo") == "601" && cnt601F > 0)
  403. {
  404. row.Appearance.BackColor = Color.Gray;
  405. }
  406. if (row.GetValue("sampleNo") == "602" && cnt602F > 0)
  407. {
  408. row.Appearance.BackColor = Color.Gray;
  409. }
  410. if (row.GetValue("sampleNo") == "603" && cnt603F > 0)
  411. {
  412. row.Appearance.BackColor = Color.Gray;
  413. }
  414. //检验不合数据变色
  415. var tmpJhy = _jhyElementsList.Where(a => a.SampleNo == row.GetValue("sampleNo")).FirstOrDefault();
  416. if (tmpJhy != null && tmpJhy.NkResult == "不合格" && _processCode == "A")
  417. {
  418. row.RowSelectorAppearance.BackColor = Color.FromArgb(255, 106, 106);
  419. }
  420. }
  421. if (row.Index == 2 && row.Cells["judgeStoveNo"].Value.ToString() != "")
  422. {
  423. row.Cells["judgeStoveNo"].EditorComponent = ultraTextEditor1;
  424. }
  425. }
  426. ultraGrid1.DisplayLayout.Bands[0].Columns["judgeStoveNo"].Width = 100;
  427. ultraGrid1.DisplayLayout.Bands[0].Columns["judgeStoveNo"].ButtonDisplayStyle = ButtonDisplayStyle.Always;
  428. if (ultraGrid1.Rows.Count >= 5)
  429. {
  430. ultraGrid1.Rows[4].Activate();
  431. }
  432. GridHelper.RefreshAndAutoSize(ultraGrid1);
  433. }
  434. finally
  435. {
  436. ultraGrid1.EndUpdate();
  437. }
  438. }
  439. private DataTable CreateDataTable(List<CraftOrdDesignStdCicEntity> craftDesignStdCicList)
  440. {
  441. DataTable dt = new DataTable();
  442. //new DataColumn[] {new DataColumn("Chk"){Caption = "选择", DataType = typeof(bool)},
  443. dt.Columns.AddRange(new DataColumn[] {
  444. new DataColumn("SampleNo"){Caption = "试样号"},
  445. new DataColumn("StoveNo"){Caption = "熔炼炉号"},
  446. new DataColumn("JudgeStoveNo"){Caption = "判定炉号"}});
  447. if (_showProcess)
  448. {
  449. dt.Columns.Add(new DataColumn("Process") { Caption = "工序" });
  450. }
  451. foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesignStdCicList)
  452. {
  453. if (dt.Columns.Contains(stdCicEntity.ChemName)) continue;
  454. if (stdCicEntity.Ischeck != "1" && stdCicEntity.Isjudge != "1") continue;
  455. dt.Columns.Add(new DataColumn(stdCicEntity.ChemName));
  456. }
  457. //成品成分需要显示偏差标准
  458. if (_processCode.ToCharArray()[0] >= 'D')
  459. {
  460. dt.Columns.Add(new DataColumn("BiasStd") { Caption = "偏差标准" });
  461. }
  462. //添加国家标准
  463. var craftDesingStdCicG = craftDesignStdCicList.Where(a => a.SpeclFl == "0" || a.SpeclFl == "1");
  464. DataRow dr = GetJhyElementsByCraft(craftDesingStdCicG.ToList(), dt, "1");
  465. dr["SampleNo"] = "交付上限";
  466. if (dt.Columns.Contains("BiasStd"))
  467. {
  468. var bias = _biasChems.Rows.Cast<DataRow>().Where(a => a["speclFl"].ToString() == "0").FirstOrDefault();
  469. if (bias != null)
  470. {
  471. dr["BiasStd"] = bias["stdName"].ToString();
  472. }
  473. }
  474. if (craftDesingStdCicG.Count() > 0)
  475. {
  476. foreach (var groupRow in craftDesingStdCicG.GroupBy(a => a.Cic))
  477. {
  478. if (dr["StoveNo"].ToString() == "")
  479. {
  480. dr["StoveNo"] = groupRow.Key;
  481. }
  482. else
  483. {
  484. dr["StoveNo"] += "," + groupRow.Key;
  485. }
  486. }
  487. }
  488. //string stdMemoG = GetStdMemo(craftDesingStdCicG);
  489. //dr["judgeStoveNo"] = stdMemoG;
  490. var craftDesingStdCicG2 = craftDesignStdCicList.Where(a => a.SpeclFl == "0" || a.SpeclFl == "1");
  491. dr = GetJhyElementsByCraft(craftDesingStdCicG2.ToList(), dt, "2");
  492. dr["SampleNo"] = "交付下限";
  493. if (dt.Columns.Contains("BiasStd"))
  494. {
  495. var bias = _biasChems.Rows.Cast<DataRow>().Where(a => a["speclFl"].ToString() == "0").FirstOrDefault();
  496. if (bias != null)
  497. {
  498. dr["BiasStd"] = bias["stdName"].ToString();
  499. }
  500. }
  501. if (craftDesingStdCicG2.Count() > 0)
  502. {
  503. foreach (var groupRow in craftDesingStdCicG2.GroupBy(a => a.Cic))
  504. {
  505. if (dr["StoveNo"].ToString() == "")
  506. {
  507. dr["StoveNo"] = groupRow.Key;
  508. }
  509. else
  510. {
  511. dr["StoveNo"] += "," + groupRow.Key;
  512. }
  513. }
  514. }
  515. ////添加客户标准
  516. //var craftDesingStdCicA = craftDesignStdCicList.Where(a => a.SpeclFl == "1");
  517. //dr = GetJhyElementsByCraft(craftDesingStdCicA.ToList(), dt, "1");
  518. //dr["SampleNo"] = "MSC(n)上限";
  519. //if (dt.Columns.Contains("BiasStd"))
  520. //{
  521. // var bias = _biasChems.Rows.Cast<DataRow>().Where(a => a["speclFl"].ToString() == "1").FirstOrDefault();
  522. // if (bias != null)
  523. // {
  524. // dr["BiasStd"] = bias["stdName"].ToString();
  525. // }
  526. //}
  527. //if (craftDesingStdCicA.Count() > 0)
  528. //{
  529. // foreach (var groupRow in craftDesingStdCicA.GroupBy(a => a.Cic))
  530. // {
  531. // if (dr["StoveNo"].ToString() == "")
  532. // {
  533. // dr["StoveNo"] = groupRow.Key;
  534. // }
  535. // else
  536. // {
  537. // dr["StoveNo"] += "," + groupRow.Key;
  538. // }
  539. // }
  540. //}
  541. ////string stdMemoA = GetStdMemo(craftDesingStdCicA);
  542. ////dr["judgeStoveNo"] = stdMemoA;
  543. //var craftDesingStdCicA2 = craftDesignStdCicList.Where(a => a.SpeclFl == "1");
  544. //dr = GetJhyElementsByCraft(craftDesingStdCicA2.ToList(), dt, "2");
  545. //dr["SampleNo"] = "MSC(n)下限";
  546. //if (dt.Columns.Contains("BiasStd"))
  547. //{
  548. // var bias = _biasChems.Rows.Cast<DataRow>().Where(a => a["speclFl"].ToString() == "1").FirstOrDefault();
  549. // if (bias != null)
  550. // {
  551. // dr["BiasStd"] = bias["stdName"].ToString();
  552. // }
  553. //}
  554. //if (craftDesingStdCicA2.Count() > 0)
  555. //{
  556. // foreach (var groupRow in craftDesingStdCicA2.GroupBy(a => a.Cic))
  557. // {
  558. // if (dr["StoveNo"].ToString() == "")
  559. // {
  560. // dr["StoveNo"] = groupRow.Key;
  561. // }
  562. // else
  563. // {
  564. // dr["StoveNo"] += "," + groupRow.Key;
  565. // }
  566. // }
  567. //}
  568. //添加内控标准
  569. var craftDesingStdCicN = craftDesignStdCicList.Where(a => a.SpeclFl == "2");
  570. dr = GetJhyElementsByCraft(craftDesingStdCicN.ToList(), dt, "1");
  571. dr["SampleNo"] = "内控上限";
  572. if (_showProcess)
  573. {
  574. dr["Process"] = _processDesc;
  575. }
  576. if (craftDesingStdCicN.Count() > 0)
  577. {
  578. foreach (var groupRow in craftDesingStdCicN.GroupBy(a => a.Cic))
  579. {
  580. if (dr["StoveNo"].ToString() == "")
  581. {
  582. dr["StoveNo"] = groupRow.Key;
  583. }
  584. else
  585. {
  586. dr["StoveNo"] += "," + groupRow.Key;
  587. }
  588. }
  589. }
  590. string stdMemoN = GetStdMemo(craftDesingStdCicN);
  591. dr["judgeStoveNo"] = stdMemoN;
  592. var craftDesingStdCicN2 = craftDesignStdCicList.Where(a => a.SpeclFl == "2");
  593. dr = GetJhyElementsByCraft(craftDesingStdCicN2.ToList(), dt, "2");
  594. dr["SampleNo"] = "内控下限";
  595. if (_showProcess)
  596. {
  597. dr["Process"] = _processDesc;
  598. }
  599. if (craftDesingStdCicN2.Count() > 0)
  600. {
  601. foreach (var groupRow in craftDesingStdCicN2.GroupBy(a => a.Cic))
  602. {
  603. if (dr["StoveNo"].ToString() == "")
  604. {
  605. dr["StoveNo"] = groupRow.Key;
  606. }
  607. else
  608. {
  609. dr["StoveNo"] += "," + groupRow.Key;
  610. }
  611. }
  612. }
  613. return dt;
  614. }
  615. private string GetStdMemo(IEnumerable<CraftOrdDesignStdCicEntity> stdCics)
  616. {
  617. string stdMemo = "";
  618. foreach (var stdCic in stdCics)
  619. {
  620. if (stdCic.Stdmemo == "") continue;
  621. if (stdMemo == "")
  622. {
  623. stdMemo = stdCic.ChemName + ":" + stdCic.Stdmemo;
  624. }
  625. else
  626. {
  627. stdMemo += "\r\n" + stdCic.ChemName + ":" + stdCic.Stdmemo;
  628. }
  629. }
  630. return stdMemo;
  631. }
  632. private DataRow GetJhyElementsByCraft(List<CraftOrdDesignStdCicEntity> craftDesingStdCics, DataTable dt, string flag)
  633. {
  634. try
  635. {
  636. DataRow dr = dt.NewRow();
  637. if (craftDesingStdCics.Count() == 0)
  638. {
  639. foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesingStdCics)
  640. {
  641. foreach (DataColumn column in dt.Columns)
  642. {
  643. if (column.ColumnName == stdCicEntity.ChemName)
  644. {
  645. dr[column.ColumnName] = "";
  646. }
  647. }
  648. }
  649. }
  650. else
  651. {
  652. foreach (DataColumn column in dt.Columns)
  653. {
  654. var chems = craftDesingStdCics.Where(a => a.ChemName == column.ColumnName);
  655. if (chems.Count() == 0) continue;
  656. if (flag == "1")
  657. {
  658. //多个索引码 上限值取最小
  659. if (chems.Where(a => a.Stdmax != "").Count() == 0) continue;
  660. if (chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()).Count() > 0)
  661. {
  662. string stdMax = "";
  663. string stdMaxSign = "";
  664. foreach (var chem in chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()))
  665. {
  666. if (stdMax == "" || decimal.Parse(chem.Stdmax) < decimal.Parse(stdMax))
  667. {
  668. stdMax = chem.Stdmax;
  669. stdMaxSign = chem.StdmaxSign;
  670. }
  671. }
  672. //处理成品成分偏差
  673. if (_processCode.ToCharArray()[0] >= 'D')
  674. {
  675. string chemCode = chems.ToArray()[0].ChemCode;
  676. stdMax = AdjustBiasChem(stdMax, chemCode, false, chems.ToArray()[0].SpeclFl);
  677. }
  678. dr[column.ColumnName] = JudgeHelper.GetExpress("", "", stdMaxSign, stdMax);
  679. }
  680. else
  681. {
  682. dr[column.ColumnName] = chems.FirstOrDefault().Stdmax;
  683. }
  684. }
  685. else
  686. {
  687. //多个索引码下限值取最大
  688. if (chems.Where(a => a.Stdmin != "").Count() == 0) continue;
  689. if (chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()).Count() > 0)
  690. {
  691. string stdMin = "";
  692. string stdminSign = "";
  693. foreach (var chem in chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()))
  694. {
  695. if (stdMin == "" || decimal.Parse(chem.Stdmin) > decimal.Parse(stdMin))
  696. {
  697. stdMin = chem.Stdmin;
  698. stdminSign = chem.StdminSign;
  699. }
  700. }
  701. //处理成品成分偏差
  702. if (_processCode.ToCharArray()[0] >= 'D')
  703. {
  704. string chemCode = chems.ToArray()[0].ChemCode;
  705. stdMin = AdjustBiasChem(stdMin, chemCode, true, chems.ToArray()[0].SpeclFl);
  706. }
  707. dr[column.ColumnName] = JudgeHelper.GetExpress(stdminSign, stdMin, "", "");
  708. }
  709. else
  710. {
  711. dr[column.ColumnName] = chems.FirstOrDefault().Stdmin;
  712. }
  713. }
  714. }
  715. }
  716. dt.Rows.Add(dr);
  717. return dr;
  718. }
  719. catch (Exception ex)
  720. {
  721. Debug.WriteLine(ex.Message);
  722. return null;
  723. }
  724. }
  725. private string _tipMsg = "";
  726. public string TipMsg
  727. {
  728. get { return _tipMsg; }
  729. set { _tipMsg = value; }
  730. }
  731. private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
  732. {
  733. try
  734. {
  735. this.Cursor = Cursors.WaitCursor;
  736. ultraGrid1.BeginUpdate();
  737. DataRowView dataRow = (DataRowView)ultraGrid1.ActiveRow.ListObject;
  738. if (dataRow["sampleNo"].ToString().Contains("限"))
  739. {
  740. return;
  741. }
  742. _tipMsg = "";
  743. GridActiveDele();
  744. }
  745. finally
  746. {
  747. ultraGrid1.EndUpdate();
  748. this.Cursor = Cursors.Default;
  749. }
  750. }
  751. private void GridActiveDele()
  752. {
  753. Color yellow = Color.FromArgb(238, 238, 0);
  754. Color red = Color.FromArgb(255, 106, 106);
  755. Color green = Color.FromArgb(60, 179, 113);
  756. Color gray = Color.FromArgb(205, 201, 201);
  757. for (int i = 0; i < 4; i++)
  758. {
  759. UltraGridRow row = ultraGrid1.Rows[i];
  760. //if (!row.GetValue("sampleNo").Contains("内控")) continue;
  761. foreach (UltraGridCell cell in row.Cells)
  762. {
  763. if (cell.Column.Key != cell.Column.Header.Caption) continue;
  764. CraftOrdDesignStdCicEntity[] stdCics = (CraftOrdDesignStdCicEntity[])cell.Tag;
  765. if (stdCics.Length == 0) continue;
  766. var actRow = ultraGrid1.ActiveRow;
  767. CraftOrdDesignStdCicEntity[] calStdCics = GetCalStdCics(stdCics, ultraGrid1.ActiveRow);
  768. //合并后的加严标准
  769. CraftOrdDesignStdCicEntity stdCic = EntityHelper.CopyEntity<CraftOrdDesignStdCicEntity>(calStdCics[0]);
  770. foreach (CraftOrdDesignStdCicEntity calStdCic in calStdCics)
  771. {
  772. //取检、判、报
  773. if (calStdCic.Ischeck != "")
  774. {
  775. stdCic.Ischeck = calStdCic.Ischeck;
  776. }
  777. if (calStdCic.Isjudge != "")
  778. {
  779. stdCic.Isjudge = calStdCic.Isjudge;
  780. }
  781. if (calStdCic.Isquote != "")
  782. {
  783. stdCic.Isquote = calStdCic.Isquote;
  784. }
  785. //取最严的标准上下限
  786. decimal min = stdCic.Stdmin == "" ? 0M : decimal.Parse(stdCic.Stdmin);
  787. decimal calMin = calStdCic.Stdmin == "" ? 0M : decimal.Parse(calStdCic.Stdmin);
  788. if (calMin > min)
  789. {
  790. stdCic.Stdmin = calStdCic.Stdmin;
  791. stdCic.StdminSign = calStdCic.StdminSign;
  792. }
  793. decimal max = stdCic.Stdmax == "" ? 999999M : decimal.Parse(stdCic.Stdmax);
  794. decimal calMax = calStdCic.Stdmax == "" ? 999999M : decimal.Parse(calStdCic.Stdmax);
  795. if (calMax < max)
  796. {
  797. stdCic.Stdmax = calStdCic.Stdmax;
  798. stdCic.StdmaxSign = calStdCic.StdmaxSign;
  799. }
  800. //取限制元素
  801. if (calStdCic.EleName != "")
  802. {
  803. stdCic.EleName = calStdCic.EleName;
  804. }
  805. }
  806. //foreach (var stdCic in stdCics)
  807. //{
  808. // if (row.Index % 2 == 0)
  809. // {
  810. // expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
  811. // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round);
  812. // }
  813. // else
  814. // {
  815. // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
  816. // expresss = stdCic.StdminSign + ChemCaculat(expresss, round);
  817. // }
  818. //}
  819. string activeValue = ultraGrid1.GetActiveRowValue(cell.Column.Key);
  820. if (activeValue.StartsWith("-"))
  821. {
  822. activeValue = activeValue.TrimStart('-'); //负号表示小于某个值。
  823. if (activeValue.TryParseDecimal())
  824. {
  825. activeValue = (decimal.Parse(activeValue) - 0.00000001M).ToString();
  826. }
  827. }
  828. if (stdCic.Isjudge == "0")
  829. {
  830. if (stdCic.Isquote == "0")
  831. {
  832. continue;
  833. }
  834. else
  835. {
  836. if (activeValue == "")
  837. {
  838. cell.Appearance.BackColor = yellow;
  839. }
  840. else
  841. {
  842. cell.Appearance.BackColor = gray;
  843. }
  844. continue;
  845. }
  846. }
  847. if (cell.Value.ToString() == "") continue;
  848. //限制元素处理(如果不符合限制元素则不判定)
  849. string expresss = "";
  850. string strEval = "";
  851. bool checkResult = false;
  852. if (row.Index == 2 || row.Index == 3)
  853. {
  854. if (stdCic.EleMinSign != "")
  855. {
  856. expresss = stdCic.EleMinSign + stdCic.EleMin;
  857. strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval();
  858. if (bool.TryParse(strEval, out checkResult) && !checkResult)
  859. {
  860. cell.Column.Hidden = true;
  861. continue;
  862. }
  863. else
  864. {
  865. cell.Column.Hidden = false;
  866. }
  867. }
  868. if (stdCic.EleMaxSign != "")
  869. {
  870. expresss = stdCic.EleMaxSign + stdCic.EleMax;
  871. strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval();
  872. if (bool.TryParse(strEval, out checkResult) && !checkResult)
  873. {
  874. cell.Column.Hidden = true;
  875. continue;
  876. }
  877. else
  878. {
  879. cell.Column.Hidden = false;
  880. }
  881. }
  882. }
  883. if (stdCic.ComplexType == "0")
  884. {
  885. expresss = cell.Value.ToString();
  886. }
  887. else
  888. {
  889. var jhyElement = _jhyElementsList.Where(a => a.SampleNo == ultraGrid1.GetActiveRowValue("SampleNo")).FirstOrDefault();
  890. if (row.Index % 2 == 0)
  891. {
  892. expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
  893. string value = ChemCaculat(expresss, rounds[cell.Column.Key]);
  894. if (cell.Column.Key == "CEpcm" || cell.Column.Key == "CEⅡw")
  895. {
  896. value = ChemCaculat(expresss, rounds[cell.Column.Key], cell.Column.Key);
  897. }
  898. value = AdjustBiasChem(value, stdCic.ChemCode, false, stdCic.SpeclFl);
  899. expresss = stdCic.StdmaxSign + value;
  900. }
  901. else
  902. {
  903. expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
  904. string value = ChemCaculat(expresss, rounds[cell.Column.Key]);
  905. if (cell.Column.Key == "CEpcm" || cell.Column.Key == "CEⅡw")
  906. {
  907. value = ChemCaculat(expresss, rounds[cell.Column.Key], cell.Column.Key);
  908. }
  909. value = AdjustBiasChem(value, stdCic.ChemCode, true, stdCic.SpeclFl);
  910. expresss = stdCic.StdminSign + value;
  911. }
  912. cell.Value = expresss;
  913. }
  914. strEval = (activeValue + expresss).Eval();
  915. if (activeValue == "" || !bool.TryParse(strEval, out checkResult) || !checkResult)
  916. {
  917. string tipMsg = string.Format("成分化验号:{0}中的{1}不符合内控标准!", ultraGrid1.GetActiveRowValue("sampleNo"), cell.Column.Key);
  918. if (_tipMsg == "")
  919. {
  920. _tipMsg = tipMsg;
  921. }
  922. cell.Appearance.BackColor = red;
  923. }
  924. else
  925. {
  926. cell.Appearance.BackColor = green;
  927. }
  928. }
  929. }
  930. if (_tipMsg == "")
  931. {
  932. _tipMsg = "无";
  933. }
  934. ultraGrid1.UpdateData();
  935. }
  936. private string AdjustBiasChem(string value, string chemCode, bool min, string speclFl)
  937. {
  938. if (_craftDesignStdCicList.Count == 0 || _processCode.ToCharArray()[0] < 'D')
  939. {
  940. return value;
  941. }
  942. var biasChems = _biasChems.Rows.Cast<DataRow>().Where(a => a["speclFl"].ToString() == speclFl);
  943. foreach (DataRow biasChem in biasChems)
  944. {
  945. if (chemCode != biasChem["chemCode"].ToString()) continue;
  946. if ((biasChem["minSign"].ToString() == "" || checkStr(value, biasChem["minSign"].ToString(), biasChem["minVal"].ToString()))
  947. && (biasChem["maxSign"].ToString() == "" || checkStr(value, biasChem["maxSign"].ToString(), biasChem["maxVal"].ToString())))
  948. {
  949. if (min)
  950. {
  951. double stdMin = biasChem["stdMinVal"].ToString() == "" ? 0.0 : Math.Abs(double.Parse(biasChem["stdMinVal"].ToString()));
  952. return (double.Parse(value) - stdMin).ToString();
  953. }
  954. else
  955. {
  956. double stdMax = biasChem["stdMaxVal"].ToString() == "" ? 0.0 : Math.Abs(double.Parse(biasChem["stdMaxVal"].ToString()));
  957. return (double.Parse(value) + stdMax).ToString();
  958. }
  959. }
  960. }
  961. return value;
  962. }
  963. public static bool checkStr(string strA, string sign, string strB)
  964. {
  965. if (strA.Length == 0 || strB.Length == 0)
  966. {
  967. return true;
  968. }
  969. double a = double.Parse(strA);
  970. double b = double.Parse(strB);
  971. if (sign == "=")
  972. {
  973. if (a == b)
  974. {
  975. return true;
  976. }
  977. else
  978. {
  979. return false;
  980. }
  981. }
  982. if (sign == ">")
  983. {
  984. if (a > b)
  985. {
  986. return true;
  987. }
  988. else
  989. {
  990. return false;
  991. }
  992. }
  993. if (sign == ">=")
  994. {
  995. if (a >= b)
  996. {
  997. return true;
  998. }
  999. else
  1000. {
  1001. return false;
  1002. }
  1003. }
  1004. if (sign == "<")
  1005. {
  1006. if (a < b)
  1007. {
  1008. return true;
  1009. }
  1010. else
  1011. {
  1012. return false;
  1013. }
  1014. }
  1015. if (sign == "<=")
  1016. {
  1017. if (a <= b)
  1018. {
  1019. return true;
  1020. }
  1021. else
  1022. {
  1023. return false;
  1024. }
  1025. }
  1026. return false;
  1027. }
  1028. /// <summary>
  1029. /// 获取计算好的标准上下限
  1030. /// </summary>
  1031. /// <param name="stdCics"></param>
  1032. /// <param name="row"></param>
  1033. /// <param name="sampleNo"></param>
  1034. /// <returns></returns>
  1035. private CraftOrdDesignStdCicEntity[] GetCalStdCics(CraftOrdDesignStdCicEntity[] stdCics, UltraGridRow row)
  1036. {
  1037. CraftOrdDesignStdCicEntity[] calStdCics = new CraftOrdDesignStdCicEntity[stdCics.Length];
  1038. String express = "";
  1039. var jhyElement = _jhyElementsList.Where(a => a.SampleNo == row.GetValue("SampleNo")).FirstOrDefault();
  1040. for (int i = 0; i < stdCics.Length; i++)
  1041. {
  1042. calStdCics[i] = EntityHelper.CopyEntity<CraftOrdDesignStdCicEntity>(stdCics[i]);
  1043. if (stdCics[i].RepName != "" && stdCics[i].RepVal != "" && stdCics[i].RepVal.TryParseDecimal())
  1044. {
  1045. express = FillJhyElemetValue(stdCics[i].RepVal, jhyElement, stdCics[i], false);
  1046. calStdCics[i].RepVal = ChemCaculat(express, rounds[stdCics[i].RepName]);
  1047. if (stdCics[i].RepName == "CEpcm" || stdCics[i].RepName == "CEⅡw")
  1048. {
  1049. calStdCics[i].RepVal = ChemCaculat(express, rounds[stdCics[i].RepName], stdCics[i].RepName);
  1050. }
  1051. }
  1052. if (stdCics[i].ComplexType == "1")
  1053. {
  1054. //标准元素
  1055. if (stdCics[i].Stdmin != "")
  1056. {
  1057. express = FillJhyElemetValue(stdCics[i].Stdmin, jhyElement, stdCics[i], false);
  1058. calStdCics[i].Stdmin = ChemCaculat(express, rounds[stdCics[i].ChemName]);
  1059. if (stdCics[i].RepName == "CEpcm" || stdCics[i].RepName == "CEⅡw")
  1060. {
  1061. calStdCics[i].Stdmin = ChemCaculat(express, rounds[stdCics[i].ChemName], stdCics[i].ChemName);
  1062. }
  1063. }
  1064. if (stdCics[i].Stdmax != "")
  1065. {
  1066. express = FillJhyElemetValue(stdCics[i].Stdmax, jhyElement, stdCics[i], false);
  1067. calStdCics[i].Stdmax = ChemCaculat(express, rounds[stdCics[i].ChemName]);
  1068. if (stdCics[i].RepName == "CEpcm" || stdCics[i].RepName == "CEⅡw")
  1069. {
  1070. calStdCics[i].Stdmax = ChemCaculat(express, rounds[stdCics[i].RepName], stdCics[i].RepName);
  1071. }
  1072. }
  1073. }
  1074. //暂时随便取一个复合元素值(不同CIC对应的替代元素可能不一样)
  1075. if (stdCics[i].ChemType == "B")
  1076. {
  1077. express = stdCics[i].ChemFormula;
  1078. express = FillJhyElemetValue(express, jhyElement, stdCics[i], true);
  1079. string value = ChemCaculat(express, rounds[stdCics[i].ChemName]);
  1080. if (stdCics[i].ChemName == "CEpcm" || stdCics[i].ChemName == "CEⅡw")
  1081. {
  1082. value = ChemCaculat(express, rounds[stdCics[i].ChemName], stdCics[i].ChemName);
  1083. }
  1084. row.Cells[stdCics[i].ChemName].Value = value;
  1085. }
  1086. }
  1087. return calStdCics;
  1088. }
  1089. //private CraftOrdDesignStdCicEntity getMergeStdCic(CraftOrdDesignStdCicEntity[] stdCics, int rowIndex, string assayNo)
  1090. //{
  1091. // if (stdCics.Length == 0) return null;
  1092. // CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity();
  1093. // if (stdCics[0].ComplexType == "0")
  1094. // {
  1095. // foreach (var stdCic in stdCics)
  1096. // {
  1097. // mergeStdCic
  1098. // }
  1099. // }
  1100. // _jhyElementsList.Where(a => a.SampleNo == ultraGrid1.GetActiveRowValue("SampleNo")).FirstOrDefault();
  1101. // CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity();
  1102. // foreach (var stdCic in stdCics)
  1103. // {
  1104. // string value = "";
  1105. // string stdSign = "";
  1106. // if (rowIndex % 2 == 0)
  1107. // {
  1108. // value = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
  1109. // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round);
  1110. // }
  1111. // else
  1112. // {
  1113. // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
  1114. // expresss = stdCic.StdminSign + ChemCaculat(expresss, round);
  1115. // }
  1116. // }
  1117. //}
  1118. //private List<string> GetExpressValue(CraftOrdDesignStdCicEntity stdCic, QcmJhyElementsEntity jhyElement)
  1119. //{
  1120. // List<string> expresss = new List<string>();
  1121. // if (stdCic.Stdmin != "")
  1122. // {
  1123. // string express = "";
  1124. // express = stdCic.Stdmin;
  1125. // express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName);
  1126. // express = stdCic.StdminSign + express;
  1127. // expresss.Add(express);
  1128. // }
  1129. // if(stdCic.Stdmax != "")
  1130. // {
  1131. // string express = "";
  1132. // express = stdCic.Stdmax;
  1133. // express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName);
  1134. // express = stdCic.StdmaxSign + express;
  1135. // expresss.Add(express);
  1136. // }
  1137. // return expresss;
  1138. //}
  1139. //private string GetChemFormulaValue(CraftOrdDesignStdCicEntity stdCic,
  1140. // List<CraftOrdDesignStdCicEntity> craftDesignStdCicList, UltraGrid jhyElementGrid)
  1141. //{
  1142. // string chemFormula = stdCic.ChemFormula;
  1143. // chemFormula = FillJhyElemetValue(chemFormula, craftDesignStdCicList, jhyElementGrid);
  1144. // return chemFormula.CompileFormula().ToString2();
  1145. //}
  1146. private static string ChemCaculat(string express, string round)
  1147. {
  1148. string strValue = JudgeHelper.Eval(express);
  1149. if (!strValue.TryParseDecimal())
  1150. {
  1151. return strValue;
  1152. }
  1153. //double value = Math.Abs(double.Parse(strValue));
  1154. return Math.Round(Decimal.Round(Decimal.Parse(strValue), 8), int.Parse(round)).ToString("F" + round);
  1155. }
  1156. private static string ChemCaculat(string express, string round,string chem)
  1157. {
  1158. string strValue = JudgeHelper.Eval(express);
  1159. if (!strValue.TryParseDecimal())
  1160. {
  1161. return strValue;
  1162. }
  1163. //double value = Math.Abs(double.Parse(strValue));
  1164. return Math.Round(Decimal.Round(Decimal.Parse(strValue), 8), int.Parse(round), MidpointRounding.ToEven).ToString("F" + round);
  1165. }
  1166. private string FillJhyElemetValue(string express, QcmJhyElementsEntity jhyElement, CraftOrdDesignStdCicEntity stdCic,
  1167. bool isMultiChem)
  1168. {
  1169. var properties = jhyElement.GetType().GetProperties();
  1170. Array.Sort(properties, new MyCompare());
  1171. //复合元素处理
  1172. foreach (var property in properties)
  1173. {
  1174. string replaceName = property.Name;
  1175. if (property.Name == "Asn")
  1176. {
  1177. replaceName = "As";
  1178. }
  1179. if (property.Name == "F")
  1180. {
  1181. replaceName = "f";
  1182. }
  1183. if ("NbV" == property.Name)
  1184. {
  1185. string a = "";
  1186. string b = "";
  1187. }
  1188. if (express.Contains(replaceName))
  1189. {
  1190. string value = property.GetValue(jhyElement, null).ToString2();
  1191. if (value.StartsWith("-"))
  1192. {
  1193. if (replaceName == "B" && value == "-0.0005")
  1194. {
  1195. value = "0";
  1196. }
  1197. else
  1198. {
  1199. value = value.TrimStart('-'); //负号表示小于某个值。
  1200. if (value.TryParseDecimal())
  1201. {
  1202. value = (decimal.Parse(value) - 0.00000001M).ToString();
  1203. }
  1204. }
  1205. }
  1206. if (isMultiChem)
  1207. {
  1208. if (stdCic.RepName == replaceName && stdCic.RepVal != "")
  1209. {
  1210. String repExpress = "";
  1211. bool repResult = true;
  1212. bool evalResult = false;
  1213. if (stdCic.RepMinSign != "")
  1214. {
  1215. repExpress = stdCic.RepMinSign + stdCic.RepMin;
  1216. if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult)
  1217. {
  1218. repResult = false;
  1219. }
  1220. }
  1221. if (stdCic.RepMaxSign != "")
  1222. {
  1223. repExpress = stdCic.RepMaxSign + stdCic.RepMax;
  1224. if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult)
  1225. {
  1226. repResult = false;
  1227. }
  1228. }
  1229. if (jhyElement.Assaytype == "熔炼成分" && replaceName == "B" && stdCic.ChemCode == "C031")
  1230. {
  1231. }
  1232. else if (repResult)
  1233. {
  1234. string repVal = FillJhyElemetValue(stdCic.RepVal, jhyElement, stdCic, false).Eval();
  1235. value = repVal;
  1236. }
  1237. }
  1238. }
  1239. if (value != "")
  1240. {
  1241. express = express.Replace(replaceName, value);
  1242. }
  1243. }
  1244. }
  1245. return express;
  1246. }
  1247. /// <summary>
  1248. /// 从长到短排序, 这样就不会替换元素错误, 比如 S和Sn。
  1249. /// </summary>
  1250. private class MyCompare : IComparer<PropertyInfo>
  1251. {
  1252. public int Compare(PropertyInfo x, PropertyInfo y)
  1253. {
  1254. if (x.Name.Length < y.Name.Length)
  1255. {
  1256. return 1;
  1257. }
  1258. else if (x.Name.Length > y.Name.Length)
  1259. {
  1260. return -1;
  1261. }
  1262. else
  1263. {
  1264. return 0;
  1265. }
  1266. }
  1267. }
  1268. private class ChemSeqCompare : IComparer<CraftOrdDesignStdCicEntity>
  1269. {
  1270. public int Compare(CraftOrdDesignStdCicEntity x, CraftOrdDesignStdCicEntity y)
  1271. {
  1272. if (decimal.Parse(x.ChemSeq) < decimal.Parse(y.ChemSeq))
  1273. {
  1274. return -1;
  1275. }
  1276. else if (decimal.Parse(x.ChemSeq) > decimal.Parse(y.ChemSeq))
  1277. {
  1278. return 1;
  1279. }
  1280. else
  1281. {
  1282. return 0;
  1283. }
  1284. }
  1285. }
  1286. private void ultraGrid1_CellChange(object sender, CellEventArgs e)
  1287. {
  1288. ultraGrid1.UpdateData();
  1289. }
  1290. public void ClearData()
  1291. {
  1292. if (ultraGrid1.DataSource != null)
  1293. {
  1294. ((DataTable)ultraGrid1.DataSource).Clear();
  1295. }
  1296. }
  1297. private void ultraGrid1_AfterSortChange(object sender, BandEventArgs e)
  1298. {
  1299. GridHelper.RefreshAndAutoSize(ultraGrid1);
  1300. }
  1301. private void ultraGrid1_BeforeRowDeactivate(object sender, CancelEventArgs e)
  1302. {
  1303. //var a = Cursor.Position;
  1304. //var b = Control.MousePosition;
  1305. //var element = ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(ultraGrid1.PointToClient(a));
  1306. //if (element == null) return;
  1307. //var row = (UltraGridRow)element.GetContext(typeof(UltraGridRow));
  1308. //if (row != null && row.Fixed)
  1309. //{
  1310. // e.Cancel = true;
  1311. //}
  1312. }
  1313. private void ultraTextEditor1_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
  1314. {
  1315. var row = ultraGrid1.ActiveRow;
  1316. PopupTextBox popupTextBox = new PopupTextBox(row.GetValue("judgeStoveNo"), 4000);
  1317. popupTextBox.TxtInfo.ReadOnly = true;
  1318. popupTextBox.UltraPanel1.Visible = false;
  1319. popupTextBox.Show();
  1320. }
  1321. }
  1322. }