frmGlodMain.cs 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242
  1. using com.hnshituo.core.webapp.vo;
  2. using Common;
  3. using Infragistics.Win;
  4. using Infragistics.Win.UltraWinGrid;
  5. using JC_MeasuringSystem;
  6. using MeterConditionLibrary;
  7. using MeterPlugInLibrary;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.Drawing;
  12. using System.Linq;
  13. using System.Media;
  14. using System.Net;
  15. using System.Reflection;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. using System.Windows.Forms;
  19. namespace StorageMeterSystem
  20. {
  21. public partial class frmGlodMain : Form
  22. {
  23. public frmGlodMain()
  24. {
  25. InitializeComponent();
  26. }
  27. #region
  28. SoundPlayer play_ls = null;
  29. decimal iCntTime = 0, iCntMainTIme = 0; //iCntTime副秤计时器,CntMainTIme主秤计时器
  30. List<StorageCollectModel> ltScModel = new List<StorageCollectModel>();
  31. private BaseGlodDbCls bd = new BaseGlodDbCls();
  32. Log l = Log.GetInstance();
  33. CoreAppUser appUser = null;
  34. bool bSaveFlag = false, bSaveFlagM = false;
  35. ProductDataControl collectionM = new ProductDataControl();
  36. ProductDataControl collectionF = new ProductDataControl();
  37. MeterWorkStorageActualService actualService = new MeterWorkStorageActualService();
  38. MeterWorkCalibrationMainService calibrationMainService = new MeterWorkCalibrationMainService();
  39. PbModelDbService<string> PbModelDbService = new PbModelDbService<string>();
  40. private MeterMonitorNoteService noteService = new MeterMonitorNoteService();
  41. MeterWorkStorageActual actualForLims = null, actualForLimsMain = null;
  42. List<MeterWorkStockOnline> lmo = new List<MeterWorkStockOnline>();
  43. string _controlIp = "";
  44. #endregion
  45. #region 事件处理
  46. private void frmGlodMain_Load(object sender, EventArgs e)
  47. {
  48. cbPC.SelectedIndex = 0;
  49. ValueList vlistFlag3 = new ValueList();
  50. vlistFlag3.ValueListItems.Add("0", "作废");
  51. vlistFlag3.ValueListItems.Add("1", "有效");
  52. this.ultraGridSj.DisplayLayout.Bands[0].Columns["valueFlag"].ValueList = vlistFlag3;
  53. _controlIp = GetIP();
  54. appUser = ((ST_MainForm)(this.MdiParent)).AppUser;
  55. if (!bd.setBaseDb() || !bd.getBaseDb())
  56. {
  57. MessageBox.Show("基础数据载入失败,请稍后重试,或联系管理员");
  58. return;
  59. }
  60. DataTable dt = dtJGPointInfo.Clone();
  61. string strPointKeys = "";
  62. foreach (MeterBaseSpotInfo mbsi in PbStorageGlodCache.sportInfos)
  63. {
  64. List<MeterWorkStockOnline> lm = PbStorageGlodCache.ltMonitor.Where(s => s.baseSpotNo == mbsi.baseSpotNo).ToList();
  65. if (lm != null && lm.Count > 0)
  66. {
  67. strPointKeys += lm[0].pointNo + ","; //Meter_Work_Stock_Online表配置了需采集的信息
  68. DataRow dr = dt.NewRow();
  69. dr["baseSpotNo"] = mbsi.baseSpotNo;
  70. dr["baseSpotName"] = mbsi.baseSpotName;
  71. dr["validFlag"] = string.IsNullOrEmpty(mbsi.controlIp) ? "未接管" : "已接管";
  72. dr["controlIp"] = mbsi.controlIp;
  73. dr["weightDiff"] = lm[0].weightDiff;
  74. dt.Rows.Add(dr);
  75. lmo.AddRange(lm);
  76. }
  77. }
  78. strPointKeys = strPointKeys.Length > 0 ? strPointKeys.Substring(0, strPointKeys.Length - 1) : "";
  79. ClsControlPack.CopyDataToDatatable(ref dt, ref this.dtJGPointInfo, true);
  80. ClsControlPack.RefreshAndAutoSize(ultraGridPW);
  81. collectionF.EventDataCollectionArgs += new ProductDataCollection(EventDataF);
  82. collectionM.EventDataCollectionArgs += new ProductDataCollection(EventDataM);
  83. timer1.Start();
  84. timer2.Start();
  85. //ClsControlPack.SetUltraGridRowFilter(ref ultraGridSj, true);
  86. }
  87. public void EventDataF(object o, List<StorageCollectModel> lt)
  88. {
  89. //这里每隔0.5秒执行一次
  90. try
  91. {
  92. if (!bSaveFlag)
  93. {
  94. PbStorageGlodCache.ltCollectF = lt;
  95. foreach (StorageCollectModel sm in PbStorageGlodCache.ltCollectF)
  96. {
  97. setGridColorInfo(ultraGridPW, sm);
  98. if (PbStorageGlodCache.sportInfo == null)
  99. {
  100. ucStorageWeightG1.setWgt(0);
  101. ucStorageWeightG1.setStable(true);
  102. }
  103. if (!bTest)
  104. {
  105. ucStorageWeightG1.setWgt(Math.Round(sm.mainWgt, 3));
  106. ucStorageWeightG1.setStable(sm.mainWeightStatus != 1 ? true : false);
  107. PbStorageGlodCache.collectF = sm;
  108. }
  109. }
  110. }
  111. }
  112. catch (Exception ex)
  113. {
  114. l.WriteLog(0, "frmMeterMain.EventData异常8:" + ex.Message);
  115. }
  116. }
  117. public void EventDataM(object o, List<StorageCollectModel> lt)
  118. {
  119. //这里每隔0.5秒执行一次
  120. try
  121. {
  122. if (!bSaveFlagM)
  123. {
  124. PbStorageGlodCache.ltCollectM = lt;
  125. foreach (StorageCollectModel sm in PbStorageGlodCache.ltCollectM)
  126. {
  127. setGridColorInfo(ultraGridPW, sm);
  128. if (PbStorageGlodCache.sportInfo == null)
  129. {
  130. ucStorageWeightG2.setWgt(0);
  131. ucStorageWeightG2.setStable(true);
  132. }
  133. if (!bTest)
  134. {
  135. ucStorageWeightG2.setWgt(Math.Round(sm.mainWgt, 3));
  136. ucStorageWeightG2.setStable(sm.mainWeightStatus != 1 ? true : false);
  137. PbStorageGlodCache.collectM = sm;
  138. }
  139. }
  140. }
  141. }
  142. catch (Exception ex)
  143. {
  144. l.WriteLog(0, "frmMeterMain.EventData异常8:" + ex.Message);
  145. }
  146. }
  147. private void frmGlodMain_FormClosing(object sender, FormClosingEventArgs e)
  148. {
  149. timer1.Stop();
  150. timer2.Stop();
  151. try
  152. {
  153. collectionF.Stop();
  154. }
  155. catch { }
  156. try
  157. {
  158. collectionM.Stop();
  159. } catch { }
  160. try
  161. {
  162. Clean();
  163. }
  164. catch { }
  165. }
  166. validCalibration vCalib = new validCalibration();
  167. private void btnSave_Click(object sender, EventArgs e)
  168. {
  169. btnClickSave();//手动副秤保存
  170. }
  171. private void btnSaveMain_Click(object sender, EventArgs e)
  172. {
  173. btnClickSaveMain();
  174. }
  175. #region 副秤保存
  176. bool btnSaveFlag = false;
  177. private void btnClickSave()
  178. {
  179. if (PbStorageGlodCache.sportInfo == null) return;
  180. if (btnSaveFlag) return;
  181. string msgInfo = "";
  182. bool isCalibration = vCalib.ValidMethod(new MeterWorkCalibrationMain { baseSpotNo = PbStorageGlodCache.sportInfo.baseSpotNo, valueFlag = "2" }, out msgInfo);
  183. if (!isCalibration)
  184. {
  185. txtMsgInfoV.Text = msgInfo;
  186. return;
  187. }
  188. #region
  189. if (ucStorageWeightG1.getWgt() < 100)
  190. {
  191. txtMsgInfoV.Text = "当前重量过小,无法计量";
  192. SoudVoice("重量过小.wav");
  193. return;
  194. }
  195. if (txtMatterNo.Text.Trim() == "")
  196. {
  197. txtMsgInfoV.Text = $"批次[{txtBATCH_NO.Text.Trim()}]未找到检验数据";
  198. SoudVoice("该批号未找到检验数据.wav");
  199. return;
  200. }
  201. #endregion
  202. bSaveFlag = true;
  203. btnSave.Enabled = false;
  204. try
  205. {
  206. string actNo = "";
  207. bool flag = SaveDB(out actNo);
  208. if (flag)
  209. {
  210. btnSaveFlag = true;
  211. bFQuery = false;
  212. #region 截取图片信息
  213. try
  214. {
  215. //* 截取屏幕信息
  216. Point screenPoint = this.PointToScreen(new Point());
  217. Rectangle rect = new Rectangle(screenPoint, this.Size);
  218. Image img = new Bitmap(rect.Width, rect.Height);
  219. Graphics g = Graphics.FromImage(img);
  220. g.CopyFromScreen(rect.X - 1, rect.Y - 1, 0, 0, rect.Size);//"D://file/1.jpg"
  221. img.Save(string.Format("{0}imgShort\\formalImg\\{1}_{2}_{3}.jpg",
  222. AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  223. PbStorageGlodCache.sportInfo.baseSpotNo,
  224. "G" + actNo,
  225. 1), System.Drawing.Imaging.ImageFormat.Jpeg);
  226. }
  227. catch (Exception ex)
  228. {
  229. l.WriteLog(8, "截图失败");
  230. }
  231. #endregion
  232. SoudVoice("称重完成.wav");
  233. }
  234. }
  235. catch (Exception ex)
  236. {
  237. txtMsgInfoV.Text = "保存失败" + ex.Message.Trim();
  238. l.WriteLog(8, "保存失败" + ex.Message.Trim());
  239. }
  240. bSaveFlag = false;
  241. }
  242. private bool SaveDB(out string actNo)
  243. {
  244. actNo = "";
  245. MeterWorkStorageActual mwraf = new MeterWorkStorageActual();
  246. mwraf.predictionNo = DateTime.Now.ToString("yyyyMMddHHmmssfff") + 1;
  247. mwraf.batchNo = txtBATCH_NO.Text.Trim();
  248. mwraf.memo = txtMEMO.Text.Trim();
  249. mwraf.valueFlag = "1";
  250. mwraf.checkFlag = "0";
  251. mwraf.createManNo = appUser.userid;
  252. mwraf.createManName = appUser.username;
  253. mwraf.createTime = DateTime.Now;
  254. mwraf.productNo = actualForLims?.productNo;
  255. mwraf.productName = txtMatterNo.Text.Trim();
  256. mwraf.gradeNo = actualForLims?.gradeNo;
  257. mwraf.gradeName = txtGrade.Text.Trim();
  258. mwraf.standardNo = actualForLims?.standardNo;
  259. mwraf.standardName = txtStandard.Text.Trim();
  260. mwraf.packageNo = txtPACKAGE_NO.Text.Trim();
  261. mwraf.blockNum = txtBLOCK_NUM.Value +"";
  262. mwraf.productDate = txtPRODUCT_DATE.Value;
  263. //mwraf.grossWeight = PbStorageGlodCache.collect.mainWgt;
  264. //mwraf.tareWeight = Convert.ToDouble(txtFirst_WEIGHT.Value);
  265. //mwraf.weightType = "0";
  266. mwraf.baseSpotNo = PbStorageGlodCache.sportInfo.baseSpotNo;
  267. mwraf.baseSpotName = PbStorageGlodCache.sportInfo.baseSpotName;
  268. mwraf.referWeight = PbStorageGlodCache.collectF.mainWgt;
  269. RESTfulResult<string> rm = actualService.doAddWf(mwraf);
  270. if (rm.Succeed)
  271. {
  272. actNo = rm.Data;
  273. setMsgInfo(txtMsgInfoV, $"批次:{txtBATCH_NO.Text.Trim()},块号:{txtPACKAGE_NO.Value},保存成功", "");
  274. return true;
  275. }
  276. else
  277. {
  278. setMsgInfo(txtMsgInfoV, "保存失败" + rm.Message, "");
  279. l.WriteLog(8, "保存失败" + rm.Message);
  280. return false;
  281. }
  282. }
  283. #endregion
  284. #region 主秤保存
  285. bool btnSaveFlagMain = false;
  286. private void btnClickSaveMain()
  287. {
  288. if (PbStorageGlodCache.sportInfo == null) return;
  289. if (btnSaveFlagMain) return;
  290. string msgInfo = "";
  291. bool isCalibration = vCalib.ValidMethod(new MeterWorkCalibrationMain { baseSpotNo = PbStorageGlodCache.sportInfo.baseSpotNo, valueFlag = "2" }, out msgInfo);
  292. if (!isCalibration)
  293. {
  294. txtMsgInfoM.Text = msgInfo;
  295. return;
  296. }
  297. #region
  298. if (ucStorageWeightG2.getWgt() < 100)
  299. {
  300. txtMsgInfoM.Text = "当前重量过小,无法计量";
  301. SoudVoice("重量过小.wav");
  302. return;
  303. }
  304. if (txtMatterNoMain.Text.Trim() == "")
  305. {
  306. txtMsgInfoM.Text = $"批次[{txtBATCH_NOMain.Text.Trim()}]未找到检验数据";
  307. SoudVoice("该批号未找到检验数据.wav");
  308. return;
  309. }
  310. if (actualForLimsMain == null)
  311. {
  312. txtMsgInfoM.Text = $"批次[{txtBATCH_NOMain.Text.Trim()}]未找到副秤计量数据";
  313. return;
  314. }
  315. double wcWgt = Math.Round((double)txtWcWgt.Value, 3);
  316. double wdWgt = Math.Round((double)txtFirst_WEIGHT.Value, 3);
  317. //这里设置1的原因是担心decmial转double可能存在精度丢失导致0的时候大于0的情况,一般应该不会
  318. if (wdWgt > 0)
  319. {
  320. switch (cbPC.Text.Trim())
  321. {
  322. case "+":
  323. {
  324. if ((ucStorageWeightG2.getWgt() > (wdWgt + wcWgt) || ucStorageWeightG2.getWgt() < wdWgt))
  325. {
  326. txtMsgInfoM.Text = $"双秤差值大于设定值{txtWcWgt.Value}g,无法计量";
  327. SoudVoice("双秤差值大于设定值.wav");
  328. return;
  329. }
  330. }; break;
  331. case "-":
  332. {
  333. if ((ucStorageWeightG2.getWgt() > wdWgt || ucStorageWeightG2.getWgt() < (wdWgt - wcWgt)))
  334. {
  335. txtMsgInfoM.Text = $"双秤差值大于设定值{txtWcWgt.Value}g,无法计量";
  336. SoudVoice("双秤差值大于设定值.wav");
  337. return;
  338. }
  339. }; break;
  340. default:
  341. {
  342. if ((ucStorageWeightG2.getWgt() > (wdWgt + wcWgt) || ucStorageWeightG2.getWgt() < (wdWgt - wcWgt)))
  343. {
  344. txtMsgInfoM.Text = $"双秤差值大于设定值{txtWcWgt.Value}g,无法计量";
  345. SoudVoice("双秤差值大于设定值.wav");
  346. return;
  347. }
  348. }; break;
  349. }
  350. }
  351. #endregion
  352. bSaveFlagM = true;
  353. btnSaveMain.Enabled = false;
  354. try
  355. {
  356. bool flag = SaveDBMain();
  357. if (flag)
  358. {
  359. bMainQuery = false;
  360. btnSaveFlagMain = true;
  361. #region 截取图片信息
  362. try
  363. {
  364. //* 截取屏幕信息
  365. Point screenPoint = this.PointToScreen(new Point());
  366. Rectangle rect = new Rectangle(screenPoint, this.Size);
  367. Image img = new Bitmap(rect.Width, rect.Height);
  368. Graphics g = Graphics.FromImage(img);
  369. g.CopyFromScreen(rect.X - 1, rect.Y - 1, 0, 0, rect.Size);//"D://file/1.jpg"
  370. img.Save(string.Format("{0}imgShort\\formalImg\\{1}_{2}_{3}.jpg",
  371. AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  372. PbStorageGlodCache.sportInfo.baseSpotNo,
  373. "G" + actualForLimsMain.actualNo,
  374. 2), System.Drawing.Imaging.ImageFormat.Jpeg);
  375. }
  376. catch (Exception ex)
  377. {
  378. l.WriteLog(8, "截图失败");
  379. }
  380. #endregion
  381. try
  382. {
  383. QueryInfo();
  384. }
  385. catch { }
  386. SoudVoice("称重完成.wav");
  387. }
  388. }
  389. catch (Exception ex)
  390. {
  391. txtMsgInfoM.Text = "保存失败" + ex.Message.Trim();
  392. l.WriteLog(8, "保存失败" + ex.Message.Trim());
  393. }
  394. bSaveFlagM = false;
  395. }
  396. private bool SaveDBMain()
  397. {
  398. MeterWorkStorageActual mwraf = new MeterWorkStorageActual();
  399. mwraf.actualNo = actualForLimsMain.actualNo;
  400. mwraf.memo = txtMEMOMain.Text.Trim();
  401. mwraf.actualWeight = ucStorageWeightG2.getWgt();
  402. mwraf.netWeight = ucStorageWeightG2.getWgt();
  403. List<MeterWorkStorageActual> ltU = new List<MeterWorkStorageActual>();
  404. ltU.Add(mwraf);
  405. RESTfulResult<int> rm = actualService.doUpdateWf(ltU);
  406. if (rm.Succeed)
  407. {
  408. setMsgInfo(txtMsgInfoM, $"批次:{txtBATCH_NOMain.Text.Trim()},块号:{txtPACKAGE_NOMain.Value},保存成功", "");
  409. return true;
  410. }
  411. else
  412. {
  413. setMsgInfo(txtMsgInfoM, "保存失败:" + rm.Message, "");
  414. l.WriteLog(8, "保存失败:" + rm.Message);
  415. return false;
  416. }
  417. }
  418. #endregion
  419. /// <summary>
  420. /// 如果输入了批次号则只查一个批次的数据,如果没有批次号则查当天所有的
  421. /// 查询的数据是主秤计量的数据
  422. /// </summary>
  423. private void QueryInfo()
  424. {
  425. if (PbStorageGlodCache.sportInfo != null)
  426. {
  427. DataTable dtSj = dataTable1.Clone();
  428. RESTfulResult<List<MeterWorkStorageActual>> rms = actualService.doQueryWf(new MeterWorkStorageActual { valueFlag = "1", baseSpotNo = PbStorageGlodCache.sportInfo.baseSpotNo, batchNo = txtBATCH_NOMain.Text.Trim() });
  429. if (rms.Succeed && rms.Data != null && rms.Data.Count > 0)
  430. {
  431. rms.Data = rms.Data.Where(s => s.netWeight != null && s.netWeight > 0).ToList();
  432. if (rms.Data != null && rms.Data.Count > 0)
  433. {
  434. dtSj = rms.Data.ListToDataTable<MeterWorkStorageActual>();
  435. }
  436. }
  437. ClsControlPack.CopyDataToDatatable(ref dtSj, ref dataTable1, true);
  438. ClsControlPack.RefreshAndAutoSize(ultraGridSj);
  439. foreach (UltraGridRow ugr in ultraGridSj.Rows)
  440. {
  441. if (ugr.Cells["valueFlag"].Value.ToString() == "0")
  442. {
  443. ugr.Appearance.BackColor = Color.Red;
  444. }
  445. else
  446. {
  447. ugr.Appearance.BackColor = Color.White;
  448. }
  449. }
  450. }
  451. }
  452. #endregion
  453. #region 数据初始清理
  454. private void Clean()
  455. {
  456. updateSport("");
  457. //*
  458. PbStorageGlodCache.sportInfo = null;
  459. PbStorageGlodCache.collectM = null;
  460. PbStorageGlodCache.collectF = null;
  461. CleanForm();
  462. //*/
  463. }
  464. private void CleanForm()
  465. {
  466. txtMatterNo.Text = "";
  467. txtGrade.Text = "";
  468. txtStandard.Text = "";
  469. txtBLOCK_NUM.Value = 0;
  470. txtBATCH_NO.Text = "";
  471. txtPRODUCT_DATE.Value = DateTime.Now;
  472. txtPACKAGE_NO.Value = 0;
  473. txtMEMO.Text = "";
  474. txtFirst_WEIGHT.Value = 0;
  475. txtMsgInfoV.Text = "";
  476. txtMatterNoMain.Text = "";
  477. txtGradeMain.Text = "";
  478. txtStandardMain.Text = "";
  479. txtBLOCK_NUMMain.Value = 0;
  480. txtBATCH_NOMain.Text = "";
  481. txtPRODUCT_DATEMain.Value = DateTime.Now;
  482. txtPACKAGE_NOMain.Value = 0;
  483. txtMEMOMain.Text = "";
  484. txtMsgInfoM.Text = "";
  485. DataTable dtSj = dataTable1.Clone();
  486. ClsControlPack.CopyDataToDatatable(ref dtSj, ref dataTable1, true);
  487. ClsControlPack.RefreshAndAutoSize(ultraGridSj);
  488. ucStorageWeightG1.setWgt(0);
  489. ucStorageWeightG1.setStable(true);
  490. ucStorageWeightG2.setWgt(0);
  491. ucStorageWeightG2.setStable(true);
  492. }
  493. #endregion
  494. #region 声音播放,现场无音箱等,所以注释
  495. private bool SoudVoice(string soundName)
  496. {
  497. //string fileUrl = string.Format("{0}\\Sound\\{1}", AppDomain.CurrentDomain.SetupInformation.ApplicationBase, soundName);
  498. try
  499. {
  500. //play_ls = new SoundPlayer(fileUrl);
  501. //play_ls.Play();
  502. return true;
  503. }
  504. catch
  505. {
  506. return false;
  507. }
  508. }
  509. #endregion
  510. #region 控件值设置
  511. //如果ResultMessage为true或者false,则sType 为0的时候readonly 1为enable 2为visable
  512. public void setMsgInfo(Control control, string ResultMessage, string sType)
  513. {
  514. setMsgMsg(control, ResultMessage, sType);
  515. }
  516. /// <summary>
  517. /// 如果ResultMessage为true或者false,则sType 为0的时候readonly 1为enable 2为visable 3为check
  518. /// </summary>
  519. /// <param name="control"></param>
  520. /// <param name="ResultMessage"></param>
  521. /// <param name="sType"></param>
  522. private void setMsgMsg(Control control, string ResultMessage, string sType)
  523. {
  524. if (control.InvokeRequired)
  525. {
  526. Action<Control, string, string> action = new Action<Control, string, string>(setMsgInfo);
  527. Invoke(action, new object[] { control, ResultMessage, sType });
  528. }
  529. else
  530. {
  531. if (ResultMessage == "true" || ResultMessage == "false")
  532. {
  533. switch (sType)
  534. {
  535. case "1":
  536. control.Enabled = ResultMessage == "true" ? true : false;
  537. ; break;
  538. case "2":
  539. control.Visible = ResultMessage == "true" ? true : false;
  540. ; break;
  541. case "3":
  542. ((CheckBox)control).Checked = ResultMessage == "true" ? true : false;
  543. break;
  544. default: break;
  545. }
  546. }
  547. else if (ResultMessage == "color")
  548. {
  549. switch (sType)
  550. {
  551. case "Red":
  552. control.BackColor = Color.Red;
  553. ; break;
  554. case "Lime":
  555. control.BackColor = Color.Lime;
  556. ; break;
  557. default: break;
  558. }
  559. }
  560. else
  561. {
  562. control.Text = ResultMessage == null ? "" : ResultMessage;
  563. }
  564. }
  565. }
  566. delegate object GetControlPropertyCallBack(Control control, string name);
  567. public object GetControlProperty(Control control, string name)
  568. {
  569. if (control.InvokeRequired == true)
  570. {
  571. GetControlPropertyCallBack CallBack = new GetControlPropertyCallBack(GetControlProperty);
  572. return control.Invoke(CallBack, new object[] { control, name });
  573. }
  574. else
  575. {
  576. Type type = control.GetType();
  577. return type.InvokeMember(name,
  578. BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance,
  579. null, control, null);
  580. }
  581. }
  582. public void setGridColorInfo(UltraGrid ugr, StorageCollectModel sModel)
  583. {
  584. setGridColorMsg(ugr, sModel);
  585. }
  586. private void setGridColorMsg(UltraGrid control, StorageCollectModel sModel)
  587. {
  588. if (control.InvokeRequired)
  589. {
  590. Action<UltraGrid, StorageCollectModel> action = new Action<UltraGrid, StorageCollectModel>(setGridColorInfo);
  591. Invoke(action, new object[] { control, sModel });
  592. }
  593. else
  594. {
  595. foreach (UltraGridRow urg in control.Rows)
  596. {
  597. if (PbStorageGlodCache.sportInfo != null && urg.Cells["baseSpotNo"].Text == PbStorageGlodCache.sportInfo.baseSpotNo)
  598. {
  599. urg.Appearance.BackColor = Color.Red;
  600. break;
  601. }
  602. else if (sModel.pointid == urg.Cells["baseSpotNo"].Text)
  603. {
  604. if (sModel.mainWgt > 20)
  605. {
  606. urg.Appearance.BackColor = Color.Orange;
  607. }
  608. else
  609. {
  610. urg.Appearance.BackColor = Color.White;
  611. }
  612. break;
  613. }
  614. }
  615. }
  616. }
  617. #endregion
  618. public string GetIP()
  619. {
  620. try
  621. {
  622. IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());
  623. IPAddress ipAddr = ipHost.AddressList[0];
  624. return ipAddr.ToString();
  625. }
  626. catch (Exception exp)
  627. {
  628. Random rd = new Random();
  629. return rd.Next(99999, 999999) + "";
  630. }
  631. }
  632. private void btnStart_Click(object sender, EventArgs e)
  633. {
  634. try
  635. {
  636. btnStart.Enabled = false;
  637. btnSave.Enabled = false;
  638. btnSaveMain.Enabled = false;
  639. if (btnStart.Text != "释放")
  640. {
  641. UltraGridRow ugr = ultraGridPW.ActiveRow;
  642. if (ugr != null)
  643. {
  644. if (!string.IsNullOrEmpty(ugr.Cells["controlIp"].Text) && ugr.Cells["controlIp"].Text != _controlIp)
  645. {
  646. MessageBox.Show("当前计量点已被他人接管");
  647. return;
  648. }
  649. PbStorageGlodCache.sportInfo = PbStorageGlodCache.sportInfos.Where(s => s.baseSpotNo == ugr.Cells["baseSpotNo"].Text.Trim()).FirstOrDefault();
  650. string pointM = lmo.Where(s => s.baseSpotNo == PbStorageGlodCache.sportInfo.baseSpotNo && s.weightFlag == "2").FirstOrDefault()?.pointNo;
  651. string pointF = lmo.Where(s => s.baseSpotNo == PbStorageGlodCache.sportInfo.baseSpotNo && s.weightFlag == "1").FirstOrDefault()?.pointNo;
  652. collectionF.Start(new string[1] { pointF });
  653. collectionM.Start(new string[1] { pointM });
  654. btnStart.BackColor = Color.Red;
  655. btnStart.Text = "释放";
  656. //将主副秤秤体允许偏差值写入
  657. PbStorageGlodCache.sportInfo.deleteManName = ugr.Cells["weightDiff"].Text == "" ? "0" : ugr.Cells["weightDiff"].Text.Trim();
  658. //controlIp
  659. updateSport(_controlIp);
  660. #region 增加包号
  661. string sql = string.Format("select nvl(max(package_no),'0')+1 baseCode from meter_work_storage_actual where base_spot_no='{0}' and BATCH_NO='{1}'", PbStorageGlodCache.sportInfo.baseSpotNo, txtBATCH_NO.Text.Trim());
  662. PbModelDbService<List<ComBaseInfo>> pb = new PbModelDbService<List<ComBaseInfo>>();
  663. RESTfulResult<List<ComBaseInfo>> rmType = pb.executeSqlDataWf(sql);
  664. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  665. {
  666. txtPACKAGE_NO.Text = rmType.Data[0].baseCode;
  667. }
  668. else
  669. {
  670. l.WriteLog(8, "包号载入失败:" + sql);
  671. }
  672. QueryInfo();
  673. #endregion
  674. }
  675. }
  676. else
  677. {
  678. try { collectionF.Stop(); }
  679. catch { }
  680. try { collectionM.Stop(); }
  681. catch { }
  682. foreach (UltraGridRow ugrs in ultraGridPW.Rows)
  683. {
  684. ugrs.Appearance.BackColor = Color.White;
  685. }
  686. btnStart.BackColor = Color.DodgerBlue;
  687. btnStart.Text = "接管";
  688. Clean();//释放按钮
  689. }
  690. }
  691. catch (Exception ex)
  692. {
  693. MessageBox.Show("btnStart_Click接管按钮异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  694. l.WriteLog(13, "btnStart_Click接管按钮异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  695. }
  696. finally
  697. {
  698. btnStart.Enabled = true;
  699. btnSave.Enabled = true;
  700. btnSaveMain.Enabled = true;
  701. }
  702. }
  703. /// <summary>
  704. /// 修改监控表的状态
  705. /// </summary>
  706. /// <param name="controlIp"></param>
  707. private void updateSport(string controlIp)
  708. {
  709. try
  710. {
  711. string sql = string.Format("update meter_base_spot_info set CONTROL_IP = '{0}' where CONTROL_IP='{1}' or base_spot_no='{2}'", controlIp, _controlIp, (PbStorageGlodCache.sportInfo == null ? "" : PbStorageGlodCache.sportInfo.baseSpotNo));
  712. RESTfulResult<string> rm = PbModelDbService.executeSqlDataWf(sql);
  713. if (rm.Succeed)
  714. {
  715. WriteMonitorNote("修改meter_base_spot_info接管状态为" + (string.IsNullOrEmpty(controlIp) ? "取消接管" : "接管"));
  716. }
  717. }
  718. catch (Exception ex)
  719. {
  720. MessageBox.Show("updateSport方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  721. l.WriteLog(13, "updateSport方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  722. }
  723. }
  724. private void WriteMonitorNote(string content)
  725. {
  726. try
  727. {
  728. if (PbStorageGlodCache.sportInfo != null && PbStorageGlodCache.sportInfo.baseSpotNo != null)
  729. {
  730. RESTfulResult<string> rm = noteService.doAddWf(new MeterMonitorNote
  731. {
  732. baseSpotNo = PbStorageGlodCache.sportInfo.baseSpotNo,
  733. baseSpotName = PbStorageGlodCache.sportInfo.baseSpotName,
  734. operationContent = content,//str + chk.Text,
  735. carNo = "",
  736. meterManNo = appUser.userid,
  737. meterManName = appUser.username,
  738. meterNoteSource = "8"
  739. });
  740. if (!rm.Succeed)
  741. {
  742. l.WriteLog(8, "成品秤写入操作日志异常:" + content);
  743. }
  744. }
  745. }
  746. catch (Exception ex)
  747. {
  748. MessageBox.Show("WriteMonitorNote方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  749. l.WriteLog(13, "WriteMonitorNote方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  750. }
  751. }
  752. private void timer1_Tick(object sender, EventArgs e)
  753. {
  754. try
  755. {
  756. #region 每2秒查一次接管数据,若接管则改变状态 controlIp
  757. MeterBaseSpotInfoService service = new MeterBaseSpotInfoService();
  758. RESTfulResult<List<MeterBaseSpotInfo>> rms = service.doQueryWf(new MeterBaseSpotInfo { validFlag = "1", spotTypeNo = "001002003" });
  759. if (rms.Succeed && rms.Data != null && rms.Data.Count > 0)
  760. {
  761. //PbStorageGlodCache.sportInfos = rms.Data;
  762. string str = "";
  763. string cIp = "";
  764. bool bRefash = false;
  765. DataTable dt = dtJGPointInfo.Clone();
  766. foreach (DataRow dr in dtJGPointInfo.Rows)
  767. {
  768. MeterBaseSpotInfo msi = rms.Data.Where(s => s.baseSpotNo == dr["baseSpotNo"].ToString().Trim()).FirstOrDefault();
  769. if (msi != null && msi.baseSpotNo != null)
  770. {
  771. str = (string.IsNullOrEmpty(msi.controlIp) ? "未接管" : "已接管");
  772. if (dr["validFlag"].ToString().Trim() != str)
  773. {
  774. dr["validFlag"] = str;
  775. bRefash = true;
  776. }
  777. cIp = (string.IsNullOrEmpty(msi.controlIp) ? "" : msi.controlIp);
  778. if (dr["controlIp"].ToString().Trim() != cIp)
  779. {
  780. dr["controlIp"] = cIp;
  781. bRefash = true;
  782. }
  783. }
  784. dt.Rows.Add(dr.ItemArray);
  785. }
  786. if (bRefash)
  787. {
  788. ClsControlPack.CopyDataToDatatable(ref dt, ref this.dtJGPointInfo, true);
  789. }
  790. }
  791. #endregion
  792. }
  793. catch (Exception ex)
  794. {
  795. MessageBox.Show("timer1_Tick任务异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  796. l.WriteLog(13, "timer1_Tick任务异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  797. }
  798. }
  799. bool bTest = false;
  800. //*
  801. private void button1_Click(object sender, EventArgs e)
  802. {
  803. bTest = !bTest;
  804. if (bTest)
  805. {
  806. ucStorageWeightG1.setWgt(1000);
  807. ucStorageWeightG1.setStable(true);
  808. PbStorageGlodCache.collectF = new StorageCollectModel
  809. {
  810. mainWgt = 1000,
  811. pointid = "CAR24"
  812. };
  813. /*
  814. ucStorageWeightG2.setWgt(1000);
  815. ucStorageWeightG2.setStable(true);
  816. PbStorageGlodCache.collectM = new StorageCollectModel
  817. {
  818. mainWgt = 1000,
  819. pointid = "CAR25"
  820. };
  821. //*/
  822. }
  823. }
  824. //*/
  825. //完成计量后会设置为false,当没有进行查询且重量小于10g的情况下进行一次查询
  826. bool bMainQuery = false;
  827. bool bFQuery = false;
  828. private void timer2_Tick(object sender, EventArgs e)
  829. {
  830. txtPRODUCT_DATE.Value = DateTime.Now;
  831. txtPRODUCT_DATEMain.Value = txtPRODUCT_DATE.Value;
  832. if (PbStorageGlodCache.sportInfo != null)
  833. {
  834. #region 副秤保存
  835. if (ucStorageWeightG1.getWgt() < 10)
  836. {
  837. btnSaveFlag = false;
  838. if (!btnSave.Enabled)
  839. {
  840. btnSave.Enabled = true;
  841. }
  842. iCntTime = 0;
  843. try
  844. {
  845. if (!bFQuery && !btnSaveFlag)
  846. {
  847. if (txtBLOCK_NUM.Value > 0)
  848. {
  849. bFQuery = true;
  850. if (txtPACKAGE_NO.Text.Trim() == "")
  851. {
  852. txtPACKAGE_NO.Value = 0;
  853. }
  854. else
  855. {
  856. int m = Convert.ToInt32(txtPACKAGE_NO.Text.Trim()) + 1;
  857. if (m >= txtBLOCK_NUM.Value)
  858. {
  859. try
  860. {
  861. if (txtBATCH_NO.Text.Trim().ToUpper().IndexOf("SIX") == 0)
  862. {
  863. //金锭SI企业代码,X-1kg代码,21年代码,001批次,01块号 SIX2100101
  864. txtBATCH_NO.Text = $"SIX{Convert.ToInt32(txtBATCH_NO.Text.Trim().Substring(3, txtBATCH_NO.Text.Trim().Length - 3)) + 1}";
  865. }
  866. else if (txtBATCH_NO.Text.Trim().ToUpper().IndexOf("SI") == 0)
  867. {
  868. //银锭一批十块,第二块是SI2100011,第三块是SI2100012,一直到SI2100019
  869. txtBATCH_NO.Text = $"SI{Convert.ToInt32(txtBATCH_NO.Text.Trim().Substring(2, txtBATCH_NO.Text.Trim().Length - 2)) + 1}";
  870. }
  871. else if (txtBATCH_NO.Text.Trim().ToUpper().IndexOf("Z") == 0)
  872. {
  873. //12.5Kg的批号格式是Z21000101,一批一块
  874. txtBATCH_NO.Text = $"Z{Convert.ToInt32(txtBATCH_NO.Text.Trim().Substring(1, txtBATCH_NO.Text.Trim().Length - 1)) + 1}";
  875. }
  876. else
  877. {
  878. txtMsgInfoM.Text = $"批号【{txtBATCH_NO.Text}】格式不在提供的累加规则格式中,请手动输入新的批号!";
  879. txtBATCH_NO.Text = "";
  880. txtBATCH_NO.Focus();
  881. }
  882. }
  883. catch
  884. {
  885. txtMsgInfoM.Text = $"批号【{txtBATCH_NO.Text}】格式不在提供的累加规则格式中,请手动输入新的批号!";
  886. txtBATCH_NO.Text = "";
  887. txtBATCH_NO.Focus();
  888. }
  889. txtPACKAGE_NO.Value = 0;
  890. }
  891. else
  892. {
  893. txtPACKAGE_NO.Value += 1;
  894. }
  895. }
  896. }
  897. }
  898. }
  899. catch { }
  900. }
  901. else
  902. {
  903. if (ucStorageWeightG1.isGreen)
  904. {
  905. iCntTime++;
  906. if (iCntTime > txtTimeLength.Value)
  907. {
  908. iCntTime = txtTimeLength.Value;
  909. }
  910. }
  911. else
  912. {
  913. iCntTime = 0;
  914. }
  915. }
  916. if (iCntTime >= txtTimeLength.Value && cbAuto.Checked && ucStorageWeightG1.getWgt() > 100 && ucStorageWeightG1.isGreen && txtBATCH_NO.Text.Trim() != "")
  917. {
  918. btnClickSave();
  919. }
  920. #endregion
  921. #region 主秤保存
  922. if (ucStorageWeightG2.getWgt() < 10)
  923. {
  924. //在自动计量的情况下,自动找副秤计量的最后一条数据,然后填充。假如要手动录入的情况不要选自动计量
  925. if (cbAuto.Checked)
  926. {
  927. if (!bMainQuery && !btnSaveFlagMain)
  928. {
  929. txtMatterNoMain.Text = "";
  930. txtGradeMain.Text = "";
  931. txtStandardMain.Text = "";
  932. txtBLOCK_NUMMain.Value = 0;
  933. txtBATCH_NOMain.Text = "";
  934. txtPACKAGE_NOMain.Value = 0;
  935. txtMEMOMain.Text = "";
  936. txtMsgInfoM.Text = "";
  937. if (txtBATCH_NOMain.Text.Trim() == "") //如果前一次已经计量完成或者还没有给定批次信息的情况下,则查找最近的副秤计量数据填充
  938. {
  939. bMainQuery = true;
  940. BindMainControlValue();
  941. }
  942. }
  943. }
  944. btnSaveFlagMain = false;
  945. if (!btnSaveMain.Enabled)
  946. {
  947. btnSaveMain.Enabled = true;
  948. }
  949. iCntMainTIme = 0;
  950. }
  951. else
  952. {
  953. //在自动计量的情况下,自动找副秤计量的最后一条数据,然后填充。假如要手动录入的情况不要选自动计量
  954. if (cbAuto.Checked)
  955. {
  956. if (txtBATCH_NOMain.Text.Trim() == "") //还没有给定批次信息且重量大于10g的情况下,则查找最近的副秤计量数据填充
  957. {
  958. BindMainControlValue();
  959. }
  960. }
  961. if (ucStorageWeightG2.isGreen)
  962. {
  963. iCntMainTIme++;
  964. if (iCntMainTIme > txtTimeLength.Value)
  965. {
  966. iCntMainTIme = txtTimeLength.Value;
  967. }
  968. }
  969. else
  970. {
  971. iCntMainTIme = 0;
  972. }
  973. }
  974. if (iCntMainTIme >= txtTimeLength.Value && cbAuto.Checked && ucStorageWeightG2.getWgt() > 100 && ucStorageWeightG2.isGreen && txtBATCH_NOMain.Text.Trim() != "")
  975. {
  976. btnClickSaveMain();
  977. }
  978. #endregion
  979. }
  980. }
  981. private void BindMainControlValue()
  982. {
  983. actualForLimsMain = null;
  984. string sqlLims = $@"select actual_no actualNo,
  985. prediction_no predictionNo,
  986. batch_no batchNo,
  987. product_no productNo,
  988. product_name productName,
  989. grade_no gradeNo,
  990. grade_name gradeName,
  991. standard_no standardNo,
  992. standard_name standardName,
  993. package_no packageNo,
  994. block_num blockNum,
  995. refer_weight referWeight
  996. from METER_WORK_STORAGE_ACTUAL t
  997. where base_spot_no = '{PbStorageGlodCache.sportInfo.baseSpotNo}'
  998. and value_flag = '1'
  999. and t.prediction_no = (select max(prediction_no)
  1000. from METER_WORK_STORAGE_ACTUAL
  1001. where base_spot_no = '{PbStorageGlodCache.sportInfo.baseSpotNo}'
  1002. and value_flag = '1' and (net_weight is null or net_weight<1) )";
  1003. PbModelDbService<List<MeterWorkStorageActual>> pbModelDbServiceLims = new PbModelDbService<List<MeterWorkStorageActual>>();
  1004. RESTfulResult<List<MeterWorkStorageActual>> rESLims = pbModelDbServiceLims.executeSqlDataWf(sqlLims);
  1005. if (rESLims.Succeed && rESLims.Data != null && rESLims.Data.Count > 0)
  1006. {
  1007. txtBATCH_NOMain.Text = rESLims.Data[0].batchNo;
  1008. txtPACKAGE_NOMain.Value = Convert.ToInt32(rESLims.Data[0].packageNo);
  1009. txtMatterNoMain.Text = rESLims.Data[0].productName;
  1010. txtGradeMain.Text = rESLims.Data[0].gradeName;
  1011. txtStandardMain.Text = rESLims.Data[0].standardName;
  1012. txtBLOCK_NUMMain.Value = Convert.ToInt32(rESLims.Data[0].blockNum);
  1013. txtMEMOMain.Text = rESLims.Data[0].memo;
  1014. txtFirst_WEIGHT.Value = (decimal)rESLims.Data[0].referWeight.Value;
  1015. actualForLimsMain = rESLims.Data[0];
  1016. }
  1017. else
  1018. {
  1019. //setMsgInfo(txtMsgInfoM, "当前计量点不存在已进行副秤计量未进行主秤计量的数据", "");
  1020. }
  1021. }
  1022. private void button2_Click(object sender, EventArgs e)
  1023. {
  1024. bTest = !bTest;
  1025. if (bTest)
  1026. {
  1027. ucStorageWeightG2.setWgt(800);
  1028. ucStorageWeightG2.setStable(true);
  1029. PbStorageGlodCache.collectM = new StorageCollectModel
  1030. {
  1031. mainWgt = 1000,
  1032. pointid = "CAR25"
  1033. };
  1034. }
  1035. }
  1036. private void cbAuto_CheckedChanged(object sender, EventArgs e)
  1037. {
  1038. if (cbAuto.Checked && txtBATCH_NO.Text.Trim() == "")
  1039. {
  1040. MessageBox.Show("请先输入批号");
  1041. cbAuto.Checked = false;
  1042. return;
  1043. }
  1044. btnSave.Visible = !cbAuto.Checked;
  1045. if (!cbAuto.Checked)
  1046. {
  1047. txtWcWgt.Value = 0;
  1048. }
  1049. }
  1050. private void txtBATCH_NO_KeyDown(object sender, KeyEventArgs e)
  1051. {
  1052. if (e.KeyValue == 13)
  1053. {
  1054. BatchNoChange();
  1055. }
  1056. }
  1057. /*
  1058. private void txtBATCH_NO_ValueChanged(object sender, EventArgs e)
  1059. {
  1060. BatchNoChange();
  1061. }
  1062. //*/
  1063. private void BatchNoChange()
  1064. {
  1065. actualForLims = null;
  1066. if (bTest)
  1067. {
  1068. actualForLims = new MeterWorkStorageActual
  1069. {
  1070. productNo = "0001",
  1071. productName = txtMatterNo.Text,
  1072. gradeNo = "0001",
  1073. gradeName = txtGrade.Text,
  1074. standardNo = "测试标准",
  1075. standardName = txtStandard.Text
  1076. };
  1077. return;
  1078. }
  1079. //return;
  1080. txtMatterNo.Text = "";
  1081. txtGrade.Text = "";
  1082. txtStandard.Text = "";
  1083. //根据批次号查询检化验的表数据,此sql需丁老板那边给定
  1084. string sqlLims = $@"select batch_no batchNo,mat_no productNo,mat_name productName,grade_no_jd gradeNo,grade_name_jd gradeName from LIMS_SAMPLE_JUDGE
  1085. where batch_no='{txtBATCH_NO.Text.Trim()}";
  1086. PbModelDbService<List<MeterWorkStorageActual>> pbModelDbServiceLims = new PbModelDbService<List<MeterWorkStorageActual>>();
  1087. RESTfulResult<List<MeterWorkStorageActual>> rESLims = pbModelDbServiceLims.executeSqlDataWf(sqlLims);
  1088. if (rESLims.Succeed && rESLims.Data != null && rESLims.Data.Count > 0)
  1089. {
  1090. txtMatterNo.Text = rESLims.Data[0].productName;
  1091. txtGrade.Text = rESLims.Data[0].gradeName;
  1092. //txtStandard.Text = rESLims.Data[0].standardName;
  1093. txtMsgInfoV.Text = "";
  1094. actualForLims = rESLims.Data[0];
  1095. }
  1096. else
  1097. {
  1098. txtMsgInfoV.Text = $"批号[{txtBATCH_NO.Text.Trim()}]找不到检验数据,时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\n\r";
  1099. }
  1100. }
  1101. }
  1102. }