QcmJhyElementsCtrl.cs 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using CoreFS.CA06;
  10. using Core.Mes.Client.Comm.Tool;
  11. using System.Reflection;
  12. using Infragistics.Win.UltraWinGrid;
  13. using Core.Mes.Client.Comm.Control;
  14. namespace Core.StlMes.Client.YdmStuffManage
  15. {
  16. public partial class QcmJhyElementsCtrl : UserControl
  17. {
  18. private JudgeType _judgeType;
  19. private Dal _d;
  20. /// <summary>
  21. ///
  22. /// </summary>
  23. /// <param name="container"></param>
  24. /// <param name="ob"></param>
  25. /// <param name="judgeType">判定类型:0-炼钢 1-铸造 2-轧管 8-综合</param>
  26. public QcmJhyElementsCtrl(Control container, OpeBase ob, JudgeType judgeType)
  27. {
  28. InitializeComponent();
  29. _judgeType = judgeType;
  30. _d = new Dal(ob);
  31. container.Controls.Add(this);
  32. this.Dock = DockStyle.Fill;
  33. this.BringToFront();
  34. EntityHelper.ShowGridCaption<QcmJhyElementsEntity>(ultraGrid1.DisplayLayout.Bands[0]);
  35. }
  36. private List<CraftOrdDesignStdCicEntity> _craftDesignStdCicList = new List<CraftOrdDesignStdCicEntity>();
  37. private List<QcmJhyElementsEntity> _jhyElementsList = new List<QcmJhyElementsEntity>();
  38. public void QueryCraftResultByStoveNo(string stoveNo, string judgeStoveNo, DataTable dtCraftCic, string processCode,string cic)
  39. {
  40. _jhyElementsList = _d.GetEntitysByXmlId<QcmJhyElementsEntity>("QcmJhyElementsDAL.queryByStoveNo", processCode, stoveNo);
  41. _craftDesignStdCicList.Clear();
  42. if (dtCraftCic.Rows.Count == 0)
  43. {
  44. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
  45. }
  46. else
  47. {
  48. foreach (DataRow drCraftCic in dtCraftCic.Rows)
  49. {
  50. var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmJhyElementsDAL.queryCraftResultCic",
  51. drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, cic,
  52. new string[] { "0", "1", "2" });
  53. foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
  54. {
  55. _craftDesignStdCicList.Add(craftCic);
  56. }
  57. }
  58. }
  59. _craftDesignStdCicList.Sort(new ChemSeqCompare());
  60. InitGrid();
  61. }
  62. public void SteelMakingColligateQuery(string judgeStoveNo, DataTable dtCraftCic, string processCode)
  63. {
  64. _jhyElementsList = _d.GetEntitysByXmlId<QcmJhyElementsEntity>("QcmJhyElementsDAL.steelMakingColligateQuery", judgeStoveNo);
  65. _craftDesignStdCicList.Clear();
  66. if (dtCraftCic.Rows.Count == 0)
  67. {
  68. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmGpJugdeApplyDAL.queryApplyChemByJudgeStoveNo", judgeStoveNo);
  69. }
  70. else
  71. {
  72. foreach (DataRow drCraftCic in dtCraftCic.Rows)
  73. {
  74. var tmpCraftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmJhyElementsDAL.queryCraftResultCic",
  75. drCraftCic["desginKey"].ToString(), drCraftCic["mscPline"].ToString(), processCode, drCraftCic["cic"].ToString(),
  76. new string[] { "0", "1", "2" });
  77. foreach (CraftOrdDesignStdCicEntity craftCic in tmpCraftDesignStdCicList)
  78. {
  79. _craftDesignStdCicList.Add(craftCic);
  80. }
  81. }
  82. }
  83. _craftDesignStdCicList.Sort(new ChemSeqCompare());
  84. InitGrid();
  85. }
  86. public void QueryCraftResultByJudgeStoveNo(string judgeStoveNo, string designKey, string mscPline, string processCode, string cic)
  87. {
  88. _jhyElementsList = _d.GetEntitysByXmlId<QcmJhyElementsEntity>("QcmJhyElementsDAL.queryByJudgeStoveNo", processCode, judgeStoveNo);
  89. _craftDesignStdCicList = _d.GetEntitysByXmlId<CraftOrdDesignStdCicEntity>("QcmJhyElementsDAL.queryCraftResultCic", designKey,
  90. mscPline, processCode, cic, new string[] { "0", "1", "2" });
  91. InitGrid();
  92. }
  93. private DataTable _dtBaseChem = null;
  94. private Dictionary<string, string> rounds = new Dictionary<string, string>();
  95. private void InitGrid()
  96. {
  97. try
  98. {
  99. ultraGrid1.DisplayLayout.Rows.FixedRows.Clear();
  100. ultraGrid1.DataSource = null;
  101. //查询圆整位数
  102. _dtBaseChem = _d.GetTableByXmlId("JdgComBaseChem.queryRound");
  103. rounds.Clear();
  104. foreach (DataRow drBaseChem in _dtBaseChem.Rows)
  105. {
  106. rounds.Add(drBaseChem["chemName"].ToString(), drBaseChem["roundingDigits"].ToString());
  107. }
  108. // //先赋值
  109. // foreach (var craftCic in _craftDesignStdCicList)
  110. // {
  111. // //替代元素
  112. //string express = "";
  113. //string round = "2";
  114. //foreach(DataRow drBaseChem in _dtBaseChem.Rows){
  115. // if(drBaseChem["chemName"].ToString() == craftCic.ChemName){
  116. // round = drBaseChem["roundingDigits"].ToString();
  117. // break;
  118. // }
  119. //}
  120. //if(craftCic.RepName != "" && craftCic.RepVal != "" && !craftCic.RepVal.TryParseDecimal()){
  121. // express = FillJhyElemetValue(craftCic.RepVal, _jhyElementsEntity, craftDesingStdCicN, false);
  122. // craftDesingStdCicN.setRepVal(chemCaculat(express, round));
  123. //}
  124. //if (craftDesingStdCicN.getComplexType().equals("1")) {
  125. // //标准元素
  126. // if(!craftDesingStdCicN.getStdmin().equals("")){
  127. // express = FillJhyElemetValue(craftDesingStdCicN.getStdmin(), jhyElementsEntity, craftDesingStdCicN, false);
  128. // craftDesingStdCicN.setStdmin(chemCaculat(express, round));
  129. // }
  130. // if(!craftDesingStdCicN.getStdmax().equals("")){
  131. // express = FillJhyElemetValue(craftDesingStdCicN.getStdmax(), jhyElementsEntity, craftDesingStdCicN, false);
  132. // craftDesingStdCicN.setStdmax(chemCaculat(express, round));
  133. // }
  134. //}
  135. //if (craftDesingStdCicN.getChemType().equals("A")) {
  136. // String fieldName = craftDesingStdCicN.getChemName();
  137. // if(fieldName.equals("As")){
  138. // fieldName = "Asn";
  139. // }
  140. // String value = EntityTool.getValue(jhyElementsEntity, fieldName);
  141. // jhyResults.put(craftDesingStdCicN.getChemName(), value);
  142. //} else {
  143. // round = "2";
  144. // for(ComBaseChemEntity baseChem : baseChems){
  145. // if(baseChem.getChemName().equals(craftDesingStdCicN.getChemName())){
  146. // round = baseChem.getRoundingDigits();
  147. // break;
  148. // }
  149. // }
  150. // express = craftDesingStdCicN.getChemFormula();
  151. // express = FillJhyElemetValue(express, jhyElementsEntity, craftDesingStdCicN, true);
  152. // String value = chemCaculat(express, round);
  153. // jhyResults.put(craftDesingStdCicN.getChemName(), value);
  154. //}
  155. // }
  156. DataTable dt = CreateDataTable(_craftDesignStdCicList);
  157. //添加检化验数据
  158. foreach (QcmJhyElementsEntity jhyElement in _jhyElementsList)
  159. {
  160. //var row = ultraGrid1.DisplayLayout.Bands[0].AddNew();
  161. //foreach(var cell in row.Cells)
  162. //{
  163. // string key = cell.Column.Key;
  164. // string round = "2";
  165. // foreach (DataRow drBaseChem in _dtBaseChem.Rows)
  166. // {
  167. // if (drBaseChem["chemName"].ToString() == key)
  168. // {
  169. // round = drBaseChem["roundingDigits"].ToString();
  170. // break;
  171. // }
  172. // }
  173. // if(cell.Column.Key != cell.Column.Header.Caption)
  174. // {
  175. // cell.Value = EntityHelper.GetEntityPropertyValue(jhyElement, key);
  176. // }
  177. // else
  178. // {
  179. // var craftDesignStdCic = _craftDesignStdCicList.Where(
  180. // a => a.SpeclFl == "2" && a.ChemName == key).FirstOrDefault();
  181. // if (craftDesignStdCic == null) continue;
  182. // if (craftDesignStdCic.ChemType == "B")
  183. // {
  184. // cell.Value = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true);
  185. // cell.Value = ChemCaculat(cell.Value.ToString(), round);
  186. // }
  187. // else
  188. // {
  189. // string columnName = key;
  190. // if (columnName == "As")
  191. // {
  192. // columnName = "Asn";
  193. // }
  194. // cell.Value = EntityHelper.GetEntityPropertyValue(jhyElement, columnName);
  195. // }
  196. // }
  197. //}
  198. DataRow dr = dt.NewRow();
  199. foreach (DataColumn column in dt.Columns)
  200. {
  201. if (column.ColumnName != column.Caption)
  202. {
  203. dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, column.ColumnName);
  204. }
  205. else
  206. {
  207. var craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "2" && a.ChemName == column.ColumnName).FirstOrDefault();
  208. if (craftDesignStdCic == null) //优先使用内控,没有则用MSC0->MSCn
  209. {
  210. craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "0" && a.ChemName == column.ColumnName).FirstOrDefault();
  211. if (craftDesignStdCic == null)
  212. {
  213. craftDesignStdCic = _craftDesignStdCicList.Where(a => a.SpeclFl == "1" && a.ChemName == column.ColumnName).FirstOrDefault();
  214. if (craftDesignStdCic == null)
  215. {
  216. continue;
  217. }
  218. }
  219. }
  220. ////处理替代元素
  221. //if (craftDesignStdCic.RepName != "" && craftDesignStdCic.RepVal != "" && !craftDesignStdCic.RepVal.TryParseDecimal())
  222. //{
  223. // string express = FillJhyElemetValue(craftDesignStdCic.RepVal, jhyElement, craftDesignStdCic, false);
  224. // craftDesingStdCicN.setRepVal(chemCaculat(express, round));
  225. //}
  226. if (craftDesignStdCic.ChemType == "B")
  227. {
  228. string express = FillJhyElemetValue(craftDesignStdCic.ChemFormula, jhyElement, craftDesignStdCic, true);
  229. dr[column.ColumnName] = ChemCaculat(express, rounds[column.ColumnName]);
  230. }
  231. else
  232. {
  233. string columnName = column.ColumnName;
  234. if (columnName == "As")
  235. {
  236. columnName = "Asn";
  237. }
  238. dr[column.ColumnName] = EntityHelper.GetEntityPropertyValue(jhyElement, columnName);
  239. }
  240. }
  241. }
  242. dt.Rows.Add(dr);
  243. }
  244. ultraGrid1.BeginUpdate();
  245. ultraGrid1.DataSource = dt;
  246. ultraGrid1.DataBind();
  247. ultraGrid1.DisplayLayout.Override.FixedRowSortOrder = FixedRowSortOrder.FixOrder;
  248. ultraGrid1.DisplayLayout.Override.FixedRowAppearance.BackColor = Color.FromArgb(255, 250, 240);
  249. ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[0]);
  250. ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[1]);
  251. ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[2]);
  252. ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[3]);
  253. ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[4]);
  254. ultraGrid1.DisplayLayout.Rows.FixedRows.Add(ultraGrid1.DisplayLayout.Rows[5]);
  255. //显示复合元素字段
  256. foreach (var column in ultraGrid1.DisplayLayout.Bands[0].Columns)
  257. {
  258. var craftDesignStdCic = _craftDesignStdCicList.Where(
  259. a => a.ChemName == column.Key).FirstOrDefault();
  260. if (craftDesignStdCic != null && craftDesignStdCic.ChemType == "B")
  261. {
  262. column.Header.Appearance.BackColor = Color.FromArgb(189, 183, 107);
  263. column.Header.ToolTipText = craftDesignStdCic.ChemFormula;
  264. }
  265. }
  266. //绑定工艺评审记录到标准中
  267. foreach (var row in ultraGrid1.Rows)
  268. {
  269. if (row.Fixed)
  270. {
  271. string speclFl = "";
  272. if (row.Index == 0 || row.Index == 1)
  273. {
  274. speclFl = "0";
  275. }
  276. else if (row.Index == 2 || row.Index == 3)
  277. {
  278. speclFl = "1";
  279. }
  280. else
  281. {
  282. speclFl = "2";
  283. }
  284. foreach (var cell in row.Cells)
  285. {
  286. var craftDesignStdCics = _craftDesignStdCicList.Where(
  287. a => a.SpeclFl == speclFl && a.ChemName == cell.Column.Key).ToArray();
  288. cell.Tag = craftDesignStdCics;
  289. }
  290. }
  291. else
  292. {
  293. int cnt601F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("601F")).Count();
  294. int cnt602F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("602F")).Count();
  295. int cnt603F = _jhyElementsList.Where(a => a.SampleNo.StartsWith("603F")).Count();
  296. if (row.GetValue("assayNo").Split('_')[1] == "601" && cnt601F > 0)
  297. {
  298. row.Appearance.BackColor = Color.Gray;
  299. }
  300. if (row.GetValue("assayNo").Split('_')[1] == "602" && cnt602F > 0)
  301. {
  302. row.Appearance.BackColor = Color.Gray;
  303. }
  304. if (row.GetValue("assayNo").Split('_')[1] == "603" && cnt603F > 0)
  305. {
  306. row.Appearance.BackColor = Color.Gray;
  307. }
  308. }
  309. }
  310. if (ultraGrid1.Rows.Count >= 7)
  311. {
  312. ultraGrid1.Rows[6].Activate();
  313. }
  314. GridHelper.RefreshAndAutoSize(ultraGrid1);
  315. }
  316. finally
  317. {
  318. ultraGrid1.EndUpdate();
  319. }
  320. }
  321. private DataTable CreateDataTable(List<CraftOrdDesignStdCicEntity> craftDesignStdCicList)
  322. {
  323. DataTable dt = new DataTable();
  324. //new DataColumn[] {new DataColumn("Chk"){Caption = "选择", DataType = typeof(bool)},
  325. dt.Columns.AddRange(new DataColumn[] {
  326. new DataColumn("Assayno"){Caption = "成分化验号"},
  327. new DataColumn("StoveNo"){Caption = "熔炼炉号"}});
  328. foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesignStdCicList)
  329. {
  330. if (dt.Columns.Contains(stdCicEntity.ChemName)) continue;
  331. dt.Columns.Add(new DataColumn(stdCicEntity.ChemName));
  332. }
  333. //添加国家标准
  334. var craftDesingStdCicG = craftDesignStdCicList.Where(a => a.SpeclFl == "0");
  335. DataRow dr = GetJhyElementsByCraft(craftDesingStdCicG.ToList(), dt, "1");
  336. dr["Assayno"] = "MSC0上限";
  337. if (craftDesingStdCicG.Count() > 0)
  338. {
  339. foreach (var groupRow in craftDesingStdCicG.GroupBy(a => a.Cic))
  340. {
  341. if (dr["StoveNo"].ToString() == "")
  342. {
  343. dr["StoveNo"] = groupRow.Key;
  344. }
  345. else
  346. {
  347. dr["StoveNo"] += "," + groupRow.Key;
  348. }
  349. }
  350. }
  351. var craftDesingStdCicG2 = craftDesignStdCicList.Where(a => a.SpeclFl == "0");
  352. dr = GetJhyElementsByCraft(craftDesingStdCicG2.ToList(), dt, "2");
  353. dr["Assayno"] = "MSC0下限";
  354. if (craftDesingStdCicG2.Count() > 0)
  355. {
  356. foreach (var groupRow in craftDesingStdCicG2.GroupBy(a => a.Cic))
  357. {
  358. if (dr["StoveNo"].ToString() == "")
  359. {
  360. dr["StoveNo"] = groupRow.Key;
  361. }
  362. else
  363. {
  364. dr["StoveNo"] += "," + groupRow.Key;
  365. }
  366. }
  367. }
  368. //添加客户标准
  369. var craftDesingStdCicA = craftDesignStdCicList.Where(a => a.SpeclFl == "1");
  370. dr = GetJhyElementsByCraft(craftDesingStdCicA.ToList(), dt, "1");
  371. dr["Assayno"] = "MSC(n)上限";
  372. if (craftDesingStdCicA.Count() > 0)
  373. {
  374. foreach (var groupRow in craftDesingStdCicA.GroupBy(a => a.Cic))
  375. {
  376. if (dr["StoveNo"].ToString() == "")
  377. {
  378. dr["StoveNo"] = groupRow.Key;
  379. }
  380. else
  381. {
  382. dr["StoveNo"] += "," + groupRow.Key;
  383. }
  384. }
  385. }
  386. var craftDesingStdCicA2 = craftDesignStdCicList.Where(a => a.SpeclFl == "1");
  387. dr = GetJhyElementsByCraft(craftDesingStdCicA2.ToList(), dt, "2");
  388. dr["Assayno"] = "MSC(n)下限";
  389. if (craftDesingStdCicA2.Count() > 0)
  390. {
  391. foreach (var groupRow in craftDesingStdCicA2.GroupBy(a => a.Cic))
  392. {
  393. if (dr["StoveNo"].ToString() == "")
  394. {
  395. dr["StoveNo"] = groupRow.Key;
  396. }
  397. else
  398. {
  399. dr["StoveNo"] += "," + groupRow.Key;
  400. }
  401. }
  402. }
  403. //添加内控标准
  404. var craftDesingStdCicN = craftDesignStdCicList.Where(a => a.SpeclFl == "2");
  405. dr = GetJhyElementsByCraft(craftDesingStdCicN.ToList(), dt, "1");
  406. dr["Assayno"] = "内控标准上限";
  407. if (craftDesingStdCicN.Count() > 0)
  408. {
  409. foreach (var groupRow in craftDesingStdCicN.GroupBy(a => a.Cic))
  410. {
  411. if (dr["StoveNo"].ToString() == "")
  412. {
  413. dr["StoveNo"] = groupRow.Key;
  414. }
  415. else
  416. {
  417. dr["StoveNo"] += "," + groupRow.Key;
  418. }
  419. }
  420. }
  421. var craftDesingStdCicN2 = craftDesignStdCicList.Where(a => a.SpeclFl == "2");
  422. dr = GetJhyElementsByCraft(craftDesingStdCicN2.ToList(), dt, "2");
  423. dr["Assayno"] = "内控标准下限";
  424. if (craftDesingStdCicN2.Count() > 0)
  425. {
  426. foreach (var groupRow in craftDesingStdCicN2.GroupBy(a => a.Cic))
  427. {
  428. if (dr["StoveNo"].ToString() == "")
  429. {
  430. dr["StoveNo"] = groupRow.Key;
  431. }
  432. else
  433. {
  434. dr["StoveNo"] += "," + groupRow.Key;
  435. }
  436. }
  437. }
  438. return dt;
  439. }
  440. private DataRow GetJhyElementsByCraft(List<CraftOrdDesignStdCicEntity> craftDesingStdCics, DataTable dt, string flag)
  441. {
  442. try
  443. {
  444. DataRow dr = dt.NewRow();
  445. if (craftDesingStdCics.Count() == 0)
  446. {
  447. foreach (CraftOrdDesignStdCicEntity stdCicEntity in craftDesingStdCics)
  448. {
  449. foreach (DataColumn column in dt.Columns)
  450. {
  451. if (column.ColumnName == stdCicEntity.ChemName)
  452. {
  453. dr[column.ColumnName] = "";
  454. }
  455. }
  456. }
  457. }
  458. else
  459. {
  460. foreach (DataColumn column in dt.Columns)
  461. {
  462. var chems = craftDesingStdCics.Where(a => a.ChemName == column.ColumnName);
  463. if (chems.Count() == 0) continue;
  464. if (flag == "1")
  465. {
  466. //多个索引码 上限值取最小
  467. if (chems.Where(a => a.Stdmax != "").Count() == 0) continue;
  468. if (chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()).Count() > 0)
  469. {
  470. string minStdMax = "";
  471. string stdMaxSign = "";
  472. foreach (var chem in chems.Where(a => a.Stdmax != "" && a.Stdmax.TryParseDecimal()))
  473. {
  474. if (minStdMax == "" || decimal.Parse(chem.Stdmax) < decimal.Parse(minStdMax))
  475. {
  476. minStdMax = chem.Stdmax;
  477. stdMaxSign = chem.StdmaxSign;
  478. }
  479. }
  480. dr[column.ColumnName] = JudgeHelper.GetExpress("", "", stdMaxSign, minStdMax);
  481. }
  482. else
  483. {
  484. dr[column.ColumnName] = chems.FirstOrDefault().Stdmax;
  485. }
  486. }
  487. else
  488. {
  489. //多个索引码下限值取最大
  490. if (chems.Where(a => a.Stdmin != "").Count() == 0) continue;
  491. if (chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()).Count() > 0)
  492. {
  493. string maxStdmin = "";
  494. string stdminSign = "";
  495. foreach (var chem in chems.Where(a => a.Stdmin != "" && a.Stdmin.TryParseDecimal()))
  496. {
  497. if (maxStdmin == "" || decimal.Parse(chem.Stdmin) > decimal.Parse(maxStdmin))
  498. {
  499. maxStdmin = chem.Stdmin;
  500. stdminSign = chem.StdminSign;
  501. }
  502. }
  503. dr[column.ColumnName] = JudgeHelper.GetExpress(stdminSign, maxStdmin, "", "");
  504. }
  505. else
  506. {
  507. dr[column.ColumnName] = chems.FirstOrDefault().Stdmin;
  508. }
  509. }
  510. }
  511. }
  512. dt.Rows.Add(dr);
  513. return dr;
  514. }
  515. catch (Exception ex)
  516. {
  517. return null;
  518. }
  519. }
  520. private string _tipMsg = "";
  521. public string TipMsg
  522. {
  523. get { return _tipMsg; }
  524. set { _tipMsg = value; }
  525. }
  526. private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
  527. {
  528. try
  529. {
  530. this.Cursor = Cursors.WaitCursor;
  531. ultraGrid1.BeginUpdate();
  532. DataRowView dataRow = (DataRowView)ultraGrid1.ActiveRow.ListObject;
  533. if (dataRow["ASSAYNO"].ToString().Contains("限"))
  534. {
  535. return;
  536. }
  537. _tipMsg = "";
  538. GridActiveDele();
  539. }
  540. finally
  541. {
  542. ultraGrid1.EndUpdate();
  543. this.Cursor = Cursors.Default;
  544. }
  545. }
  546. private void GridActiveDele()
  547. {
  548. Color yellow = Color.FromArgb(238, 238, 0);
  549. Color red = Color.FromArgb(255, 106, 106);
  550. Color green = Color.FromArgb(60, 179, 113);
  551. Color gray = Color.FromArgb(205, 201, 201);
  552. foreach (UltraGridRow row in ultraGrid1.DisplayLayout.Rows.FixedRows)
  553. {
  554. //if (!row.GetValue("ASSAYNO").Contains("内控")) continue;
  555. foreach (UltraGridCell cell in row.Cells)
  556. {
  557. if (cell.Column.Key != cell.Column.Header.Caption) continue;
  558. CraftOrdDesignStdCicEntity[] stdCics = (CraftOrdDesignStdCicEntity[])cell.Tag;
  559. if (stdCics.Length == 0) continue;
  560. var actRow = ultraGrid1.ActiveRow;
  561. CraftOrdDesignStdCicEntity[] calStdCics = GetCalStdCics(stdCics, ultraGrid1.ActiveRow);
  562. //合并后的加严标准
  563. CraftOrdDesignStdCicEntity stdCic = EntityHelper.CopyEntity<CraftOrdDesignStdCicEntity>(calStdCics[0]);
  564. foreach (CraftOrdDesignStdCicEntity calStdCic in calStdCics)
  565. {
  566. //取检、判、报
  567. if (calStdCic.Ischeck != "")
  568. {
  569. stdCic.Ischeck = calStdCic.Ischeck;
  570. }
  571. if (calStdCic.Isjudge != "")
  572. {
  573. stdCic.Isjudge = calStdCic.Isjudge;
  574. }
  575. if (calStdCic.Isquote != "")
  576. {
  577. stdCic.Isquote = calStdCic.Isquote;
  578. }
  579. //取最严的标准上下限
  580. decimal min = stdCic.Stdmin == "" ? 0M : decimal.Parse(stdCic.Stdmin);
  581. decimal calMin = calStdCic.Stdmin == "" ? 0M : decimal.Parse(calStdCic.Stdmin);
  582. if (calMin > min)
  583. {
  584. stdCic.Stdmin = calStdCic.Stdmin;
  585. }
  586. decimal max = stdCic.Stdmax == "" ? 999999M : decimal.Parse(stdCic.Stdmax);
  587. decimal calMax = calStdCic.Stdmax == "" ? 999999M : decimal.Parse(calStdCic.Stdmax);
  588. if (calMax < max)
  589. {
  590. stdCic.Stdmax = calStdCic.Stdmax;
  591. }
  592. //取限制元素
  593. if (calStdCic.EleName != "")
  594. {
  595. stdCic.EleName = calStdCic.EleName;
  596. }
  597. }
  598. //foreach (var stdCic in stdCics)
  599. //{
  600. // if (row.Index % 2 == 0)
  601. // {
  602. // expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
  603. // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round);
  604. // }
  605. // else
  606. // {
  607. // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
  608. // expresss = stdCic.StdminSign + ChemCaculat(expresss, round);
  609. // }
  610. //}
  611. string activeValue = ultraGrid1.GetActiveRowValue(cell.Column.Key);
  612. //activeValue = activeValue.TrimStart('-'); //负号表示小于某个值。
  613. if (stdCic.Isjudge == "0")
  614. {
  615. if (stdCic.Isquote == "0")
  616. {
  617. continue;
  618. }
  619. else
  620. {
  621. if (activeValue == "")
  622. {
  623. cell.Appearance.BackColor = yellow;
  624. }
  625. else
  626. {
  627. cell.Appearance.BackColor = gray;
  628. }
  629. continue;
  630. }
  631. }
  632. if (cell.Value.ToString() == "") continue;
  633. //限制元素处理(如果不符合限制元素则不判定)
  634. string expresss = "";
  635. string strEval = "";
  636. bool checkResult = false;
  637. if (row.Index == 4 || row.Index == 5)
  638. {
  639. if (stdCic.EleMinSign != "")
  640. {
  641. expresss = stdCic.EleMinSign + stdCic.EleMin;
  642. strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval();
  643. if (bool.TryParse(strEval, out checkResult) && !checkResult)
  644. {
  645. cell.Column.Hidden = true;
  646. continue;
  647. }
  648. else
  649. {
  650. cell.Column.Hidden = false;
  651. }
  652. }
  653. if (stdCic.EleMaxSign != "")
  654. {
  655. expresss = stdCic.EleMaxSign + stdCic.EleMax;
  656. strEval = (ultraGrid1.GetActiveRowValue(stdCic.EleName) + expresss).Eval();
  657. if (bool.TryParse(strEval, out checkResult) && !checkResult)
  658. {
  659. cell.Column.Hidden = true;
  660. continue;
  661. }
  662. else
  663. {
  664. cell.Column.Hidden = false;
  665. }
  666. }
  667. }
  668. //if (stdCic.ComplexType == "0")
  669. //{
  670. // expresss = cell.Value.ToString();
  671. //}
  672. //else
  673. //{
  674. // var jhyElement = _jhyElementsList.Where(a => a.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault();
  675. // string round = "2";
  676. // if (rounds.ContainsKey(cell.Column.Key))
  677. // {
  678. // round = rounds[cell.Column.Key];
  679. // }
  680. // if(row.Index % 2 == 0)
  681. // {
  682. // expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
  683. // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round);
  684. // }
  685. // else
  686. // {
  687. // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
  688. // expresss = stdCic.StdminSign + ChemCaculat(expresss, round);
  689. // }
  690. // cell.Value = expresss;
  691. //}
  692. if (stdCic.ComplexType == "0")
  693. {
  694. expresss = cell.Value.ToString();
  695. }
  696. else
  697. {
  698. var jhyElement = _jhyElementsList.Where(a => a.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault();
  699. if (row.Index % 2 == 0)
  700. {
  701. expresss = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
  702. expresss = stdCic.StdmaxSign + ChemCaculat(expresss, rounds[cell.Column.Key]);
  703. }
  704. else
  705. {
  706. expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
  707. expresss = stdCic.StdminSign + ChemCaculat(expresss, rounds[cell.Column.Key]);
  708. }
  709. cell.Value = expresss;
  710. }
  711. strEval = (activeValue + expresss).Eval();
  712. if (activeValue == "" || !bool.TryParse(strEval, out checkResult) || !checkResult)
  713. {
  714. string tipMsg = string.Format("成分化验号:{0}中的{1}不符合内控标准!", ultraGrid1.GetActiveRowValue("ASSAYNO"), cell.Column.Key);
  715. if (_tipMsg == "")
  716. {
  717. _tipMsg = tipMsg;
  718. }
  719. cell.Appearance.BackColor = red;
  720. }
  721. else
  722. {
  723. cell.Appearance.BackColor = green;
  724. }
  725. }
  726. }
  727. if (_tipMsg == "")
  728. {
  729. _tipMsg = "无";
  730. }
  731. ultraGrid1.UpdateData();
  732. }
  733. /// <summary>
  734. /// 获取计算好的标准上下限
  735. /// </summary>
  736. /// <param name="stdCics"></param>
  737. /// <param name="row"></param>
  738. /// <param name="assayNo"></param>
  739. /// <returns></returns>
  740. private CraftOrdDesignStdCicEntity[] GetCalStdCics(CraftOrdDesignStdCicEntity[] stdCics, UltraGridRow row)
  741. {
  742. CraftOrdDesignStdCicEntity[] calStdCics = new CraftOrdDesignStdCicEntity[stdCics.Length];
  743. String express = "";
  744. var jhyElement = _jhyElementsList.Where(a => a.Assayno == row.GetValue("Assayno")).FirstOrDefault();
  745. for (int i = 0; i < stdCics.Length; i++)
  746. {
  747. calStdCics[i] = EntityHelper.CopyEntity<CraftOrdDesignStdCicEntity>(stdCics[i]);
  748. if (stdCics[i].RepName != "" && stdCics[i].RepVal != "" && stdCics[i].RepVal.TryParseDecimal())
  749. {
  750. express = FillJhyElemetValue(stdCics[i].RepVal, jhyElement, stdCics[i], false);
  751. calStdCics[i].RepVal = ChemCaculat(express, rounds[stdCics[i].RepName]);
  752. }
  753. if (stdCics[i].ComplexType == "1")
  754. {
  755. //标准元素
  756. if (stdCics[i].Stdmin != "")
  757. {
  758. express = FillJhyElemetValue(stdCics[i].Stdmin, jhyElement, stdCics[i], false);
  759. calStdCics[i].Stdmin = ChemCaculat(express, rounds[stdCics[i].ChemName]);
  760. }
  761. if (stdCics[i].Stdmax != "")
  762. {
  763. express = FillJhyElemetValue(stdCics[i].Stdmax, jhyElement, stdCics[i], false);
  764. calStdCics[i].Stdmax = ChemCaculat(express, rounds[stdCics[i].ChemName]);
  765. }
  766. }
  767. //暂时随便取一个复合元素值(不同CIC对应的替代元素可能不一样)
  768. if (stdCics[i].ChemType == "B")
  769. {
  770. express = stdCics[i].ChemFormula;
  771. express = FillJhyElemetValue(express, jhyElement, stdCics[i], true);
  772. string value = ChemCaculat(express, rounds[stdCics[i].ChemName]);
  773. row.Cells[stdCics[i].ChemName].Value = value;
  774. }
  775. }
  776. return calStdCics;
  777. }
  778. //private CraftOrdDesignStdCicEntity getMergeStdCic(CraftOrdDesignStdCicEntity[] stdCics, int rowIndex, string assayNo)
  779. //{
  780. // if (stdCics.Length == 0) return null;
  781. // CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity();
  782. // if (stdCics[0].ComplexType == "0")
  783. // {
  784. // foreach (var stdCic in stdCics)
  785. // {
  786. // mergeStdCic
  787. // }
  788. // }
  789. // _jhyElementsList.Where(a => a.Assayno == ultraGrid1.GetActiveRowValue("Assayno")).FirstOrDefault();
  790. // CraftOrdDesignStdCicEntity mergeStdCic = new CraftOrdDesignStdCicEntity();
  791. // foreach (var stdCic in stdCics)
  792. // {
  793. // string value = "";
  794. // string stdSign = "";
  795. // if (rowIndex % 2 == 0)
  796. // {
  797. // value = FillJhyElemetValue(stdCic.Stdmax, jhyElement, stdCic, false);
  798. // expresss = stdCic.StdmaxSign + ChemCaculat(expresss, round);
  799. // }
  800. // else
  801. // {
  802. // expresss = FillJhyElemetValue(stdCic.Stdmin, jhyElement, stdCic, false);
  803. // expresss = stdCic.StdminSign + ChemCaculat(expresss, round);
  804. // }
  805. // }
  806. //}
  807. //private List<string> GetExpressValue(CraftOrdDesignStdCicEntity stdCic, QcmJhyElementsEntity jhyElement)
  808. //{
  809. // List<string> expresss = new List<string>();
  810. // if (stdCic.Stdmin != "")
  811. // {
  812. // string express = "";
  813. // express = stdCic.Stdmin;
  814. // express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName);
  815. // express = stdCic.StdminSign + express;
  816. // expresss.Add(express);
  817. // }
  818. // if(stdCic.Stdmax != "")
  819. // {
  820. // string express = "";
  821. // express = stdCic.Stdmax;
  822. // express = FillJhyElemetValue(express, jhyElement, stdCic.ChemName);
  823. // express = stdCic.StdmaxSign + express;
  824. // expresss.Add(express);
  825. // }
  826. // return expresss;
  827. //}
  828. //private string GetChemFormulaValue(CraftOrdDesignStdCicEntity stdCic,
  829. // List<CraftOrdDesignStdCicEntity> craftDesignStdCicList, UltraGrid jhyElementGrid)
  830. //{
  831. // string chemFormula = stdCic.ChemFormula;
  832. // chemFormula = FillJhyElemetValue(chemFormula, craftDesignStdCicList, jhyElementGrid);
  833. // return chemFormula.CompileFormula().ToString2();
  834. //}
  835. private static string ChemCaculat(string express, string round)
  836. {
  837. string strValue = JudgeHelper.Eval(express);
  838. if (!strValue.TryParseDecimal())
  839. {
  840. return strValue;
  841. }
  842. double value = Math.Abs(double.Parse(strValue));
  843. return Math.Round(value, int.Parse(round)).ToString("F" + round);
  844. }
  845. private string FillJhyElemetValue(string express, QcmJhyElementsEntity jhyElement, CraftOrdDesignStdCicEntity stdCic,
  846. bool isMultiChem)
  847. {
  848. var properties = jhyElement.GetType().GetProperties();
  849. Array.Sort(properties, new MyCompare());
  850. //复合元素处理
  851. foreach (var property in properties)
  852. {
  853. string replaceName = property.Name;
  854. if (property.Name == "Asn")
  855. {
  856. replaceName = "As";
  857. }
  858. if (express.Contains(replaceName))
  859. {
  860. string value = property.GetValue(jhyElement, null).ToString2();
  861. value = value.TrimStart('-');
  862. if (isMultiChem)
  863. {
  864. if (stdCic.RepName == replaceName && stdCic.RepVal != "")
  865. {
  866. String repExpress = "";
  867. bool repResult = true;
  868. bool evalResult = false;
  869. if (stdCic.RepMinSign != "")
  870. {
  871. repExpress = stdCic.RepMinSign + stdCic.RepMin;
  872. if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult)
  873. {
  874. repResult = false;
  875. }
  876. }
  877. if (stdCic.RepMaxSign != "")
  878. {
  879. repExpress = stdCic.RepMaxSign + stdCic.RepMax;
  880. if (bool.TryParse(JudgeHelper.Eval(value + repExpress), out evalResult) && !evalResult)
  881. {
  882. repResult = false;
  883. }
  884. }
  885. if (repResult)
  886. {
  887. string repVal = FillJhyElemetValue(stdCic.RepVal, jhyElement, stdCic, false).Eval();
  888. value = repVal;
  889. }
  890. }
  891. }
  892. if (value != "")
  893. {
  894. express = express.Replace(replaceName, value);
  895. }
  896. }
  897. }
  898. return express;
  899. }
  900. /// <summary>
  901. /// 从长到短排序, 这样就不会替换元素错误, 比如 S和Sn。
  902. /// </summary>
  903. private class MyCompare : IComparer<PropertyInfo>
  904. {
  905. public int Compare(PropertyInfo x, PropertyInfo y)
  906. {
  907. if (x.Name.Length < y.Name.Length)
  908. {
  909. return 1;
  910. }
  911. else if (x.Name.Length > y.Name.Length)
  912. {
  913. return -1;
  914. }
  915. else
  916. {
  917. return 0;
  918. }
  919. }
  920. }
  921. private class ChemSeqCompare : IComparer<CraftOrdDesignStdCicEntity>
  922. {
  923. public int Compare(CraftOrdDesignStdCicEntity x, CraftOrdDesignStdCicEntity y)
  924. {
  925. if (decimal.Parse(x.ChemSeq) < decimal.Parse(y.ChemSeq))
  926. {
  927. return -1;
  928. }
  929. else if (decimal.Parse(x.ChemSeq) > decimal.Parse(y.ChemSeq))
  930. {
  931. return 1;
  932. }
  933. else
  934. {
  935. return 0;
  936. }
  937. }
  938. }
  939. private void ultraGrid1_CellChange(object sender, CellEventArgs e)
  940. {
  941. ultraGrid1.UpdateData();
  942. }
  943. public void ClearData()
  944. {
  945. ultraGrid1.DataSource = null;
  946. }
  947. private void ultraGrid1_AfterSortChange(object sender, BandEventArgs e)
  948. {
  949. GridHelper.RefreshAndAutoSize(ultraGrid1);
  950. }
  951. private void ultraGrid1_BeforeRowDeactivate(object sender, CancelEventArgs e)
  952. {
  953. var a = Cursor.Position;
  954. var b = Control.MousePosition;
  955. var element = ultraGrid1.DisplayLayout.UIElement.ElementFromPoint(ultraGrid1.PointToClient(a));
  956. if (element == null) return;
  957. var row = (UltraGridRow)element.GetContext(typeof(UltraGridRow));
  958. if (row != null && row.Fixed)
  959. {
  960. e.Cancel = true;
  961. }
  962. }
  963. }
  964. }