frmMain.cs 58 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494
  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.Configuration;
  11. using System.Data;
  12. using System.Drawing;
  13. using System.Linq;
  14. using System.Media;
  15. using System.Net;
  16. using System.Reflection;
  17. using System.Windows.Forms;
  18. namespace StorageMeterSystem
  19. {
  20. public partial class frmMain : Form
  21. {
  22. #region
  23. private string rk_CurPath = Application.StartupPath; //System.Environment.CurrentDirectory;//获取到当前路径
  24. private SoundPlayer play_ls = null;
  25. private string computerSound = ConfigurationManager.AppSettings["ComputerSound"]?.ToString().Trim();
  26. private decimal iCntTime = 0;
  27. private List<StorageCollectModel> ltScModel = new List<StorageCollectModel>();
  28. private BaseDbCls bd = new BaseDbCls();
  29. private Log l = Log.GetInstance();
  30. private CoreAppUser appUser = null;
  31. private int iPic = 0;
  32. private bool bSaveFlag = false;
  33. private ProductDataControl collection = new ProductDataControl();
  34. private MeterWorkStorageActualService actualService = new MeterWorkStorageActualService();
  35. private MeterWorkCalibrationMainService calibrationMainService = new MeterWorkCalibrationMainService();
  36. private PbModelDbService<string> PbModelDbService = new PbModelDbService<string>();
  37. private MeterMonitorNoteService noteService = new MeterMonitorNoteService();
  38. //Led控制
  39. private LED_Control led_controler = null;
  40. private string _controlIp = "";
  41. #endregion
  42. public frmMain()
  43. {
  44. InitializeComponent();
  45. }
  46. #region 事件处理
  47. private void frmMain_Load(object sender, EventArgs e)
  48. {
  49. ucStorageWeightKg2.Visible = false;
  50. cbPC.SelectedIndex = 0;
  51. ValueList vlistFlag1 = new ValueList();
  52. vlistFlag1.ValueListItems.Add("1", "校秤失败");
  53. vlistFlag1.ValueListItems.Add("2", "校秤成功");
  54. vlistFlag1.ValueListItems.Add("3", "正在校秤");
  55. this.ultraGridJl.DisplayLayout.Bands[0].Columns["valueFlag"].ValueList = vlistFlag1;
  56. ValueList vlistFlag2 = new ValueList();
  57. vlistFlag2.ValueListItems.Add("1", "成功");
  58. vlistFlag2.ValueListItems.Add("2", "失败");
  59. this.ultraGridJl.DisplayLayout.Bands[1].Columns["valueFlag"].ValueList = vlistFlag2;
  60. ValueList vlistFlag3 = new ValueList();
  61. vlistFlag3.ValueListItems.Add("0", "作废");
  62. vlistFlag3.ValueListItems.Add("1", "有效");
  63. this.ultraGridSj.DisplayLayout.Bands[0].Columns["valueFlag"].ValueList = vlistFlag3;
  64. _controlIp = GetIP();
  65. appUser = ((ST_MainForm)(this.MdiParent)).AppUser;
  66. if (!bd.setBaseDb() || !bd.getBaseDb())
  67. {
  68. MessageBox.Show("基础数据载入失败,请稍后重试,或联系管理员");
  69. return;
  70. }
  71. DataTable dt = dtJGPointInfo.Clone();
  72. string strPointKeys = "";
  73. foreach (MeterBaseSpotInfo mbsi in PbStorageCache.sportInfos)
  74. {
  75. List<MeterWorkStockOnline> lm = PbStorageCache.ltMonitor.Where(s => s.baseSpotNo == mbsi.baseSpotNo).ToList();
  76. if (lm != null && lm.Count > 0)
  77. {
  78. strPointKeys += lm[0].pointNo + ","; //Meter_Work_Stock_Online表配置了需采集的信息
  79. DataRow dr = dt.NewRow();
  80. dr["baseSpotNo"] = mbsi.baseSpotNo;
  81. dr["baseSpotName"] = mbsi.baseSpotName;
  82. dr["validFlag"] = string.IsNullOrEmpty(mbsi.controlIp) ? "未接管" : "已接管";
  83. dr["controlIp"] = mbsi.controlIp;
  84. dr["weightDiff"] = lm[0].weightDiff;
  85. dt.Rows.Add(dr);
  86. }
  87. }
  88. strPointKeys = strPointKeys.Length > 0 ? strPointKeys.Substring(0, strPointKeys.Length - 1) : "";
  89. ClsControlPack.CopyDataToDatatable(ref dt, ref this.dtJGPointInfo, true);
  90. ClsControlPack.RefreshAndAutoSize(ultraGridPW);
  91. #region
  92. string sql = @"SELECT base_code baseCode,base_name baseName,memo FROM Com_Base_Info where p_base_code='001025' and valid_Flag='1'";
  93. PbModelDbService<List<ComBaseInfo>> pb = new PbModelDbService<List<ComBaseInfo>>();
  94. RESTfulResult<List<ComBaseInfo>> rmType = pb.executeSqlDataWf(sql);
  95. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  96. {
  97. ClsControlPack.SetUltraComboDataSource(cmbMatterNo, rmType.Data.ListToDataTable<ComBaseInfo>(), "baseCode", "baseName");
  98. }
  99. else
  100. {
  101. MessageBox.Show("产品信息载入失败");
  102. return;
  103. }
  104. sql = @"SELECT base_code baseCode,base_name baseName,memo FROM Com_Base_Info where p_base_code='001026' and valid_Flag='1'";
  105. rmType = pb.executeSqlDataWf(sql);
  106. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  107. {
  108. ClsControlPack.SetUltraComboDataSource(cmbGrade, rmType.Data.ListToDataTable<ComBaseInfo>(), "baseCode", "baseName");
  109. }
  110. else
  111. {
  112. MessageBox.Show("牌号载入失败");
  113. return;
  114. }
  115. sql = @"SELECT base_code baseCode,base_name baseName,memo FROM Com_Base_Info where p_base_code='001027' and valid_Flag='1'";
  116. rmType = pb.executeSqlDataWf(sql);
  117. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  118. {
  119. ClsControlPack.SetUltraComboDataSource(cmbStandard, rmType.Data.ListToDataTable<ComBaseInfo>(), "baseCode", "baseName");
  120. }
  121. else
  122. {
  123. MessageBox.Show("标准载入失败");
  124. return;
  125. }
  126. //cmbBUCKET_NO 桶信息
  127. //sql = @"select utensil_no,utensil_name,utensil_weight,utensil_type_no,utensil_utensil_name from Meter_Base_Add_Weight where value_flag = '0' and utensil_type_no = '001009001'";
  128. sql = @"select utensil_name baseName,utensil_weight baseCode from Meter_Base_Add_Weight where value_flag = '0' and utensil_type_no = '001009002'";
  129. rmType = pb.executeSqlDataWf(sql);
  130. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  131. {
  132. ClsControlPack.SetUltraComboDataSource(cmbBUCKET_NO, rmType.Data.ListToDataTable<ComBaseInfo>(), "baseCode", "baseName");
  133. }
  134. else
  135. {
  136. MessageBox.Show("桶类型载入失败");
  137. return;
  138. }
  139. //cmbDH 斗号
  140. //sql = @"select utensil_no,utensil_name,utensil_weight,utensil_type_no,utensil_utensil_name from Meter_Base_Add_Weight where value_flag = '0' and utensil_type_no = '001009001'";
  141. sql = @"select utensil_no baseName,utensil_weight baseCode from Meter_Base_Add_Weight where value_flag = '0' and utensil_type_no = '001009001'";
  142. rmType = pb.executeSqlDataWf(sql);
  143. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  144. {
  145. ClsControlPack.SetUltraComboDataSource(cmbDH, rmType.Data.ListToDataTable<ComBaseInfo>(), "baseCode", "baseName");
  146. }
  147. else
  148. {
  149. MessageBox.Show("斗号载入失败");
  150. return;
  151. }
  152. #endregion
  153. collection.EventDataCollectionArgs += new ProductDataCollection(EventData);
  154. collection.Start(strPointKeys.Split(','));
  155. timer1.Start();
  156. timer2.Start();
  157. //ClsControlPack.SetUltraGridRowFilter(ref ultraGridSj, true);
  158. }
  159. private int iLedWrite = 0;
  160. public void EventData(object o, List<StorageCollectModel> lt)
  161. {
  162. //这里每隔0.5秒执行一次
  163. try
  164. {
  165. if (!bSaveFlag)
  166. {
  167. PbStorageCache.ltCollect = lt;
  168. foreach (StorageCollectModel sm in PbStorageCache.ltCollect)
  169. {
  170. setGridColorInfo(ultraGridPW, sm);
  171. if (PbStorageCache.sportInfo == null)
  172. {
  173. ucStorageWeightKg1.setWgt(0);
  174. ucStorageWeightKg1.setStable(true);
  175. ucStorageWeightKg2.setWgt(0);
  176. ucStorageWeightKg2.setStable(true);
  177. }
  178. //我在deleteManNo中存的是CAR20之类的数据
  179. if (PbStorageCache.sportInfo != null && PbStorageCache.sportInfo.deleteManNo == sm.pointid)
  180. {
  181. if (!bTest)
  182. {
  183. iLedWrite++;
  184. if (pDHSelected.bFlag && !pBucketSelected.bFlag)
  185. {
  186. txtNetWgt.Invoke(new Action(() =>
  187. {
  188. txtNetWgt.Value = (decimal)sm.mainWgt - pDHSelected.dValue;
  189. }));
  190. if (iLedWrite % 2 == 0)
  191. {
  192. led_controler.setStaticLineMsg(PbStorageCache.sportInfo.ledIp, Math.Round(sm.mainWgt, 1) + "kg");
  193. iLedWrite = 0;
  194. }
  195. }
  196. else if (!pDHSelected.bFlag && pBucketSelected.bFlag)
  197. {
  198. txtNetWgt.Invoke(new Action(() =>
  199. {
  200. txtNetWgt.Value = Math.Round((decimal)sm.mainWgt - pBucketSelected.dValue, 1);
  201. }));
  202. //如果选择了桶类型,那么显示的重量是当前重量-皮重,否则显示毛重
  203. if (iLedWrite % 2 == 0)
  204. {
  205. led_controler.setStaticLineMsg(PbStorageCache.sportInfo.ledIp, Math.Round(((decimal)sm.mainWgt - pBucketSelected.dValue), 1) + "kg");
  206. iLedWrite = 0;
  207. }
  208. }
  209. else
  210. {
  211. //如果录入了净重的情况
  212. if (netWgt > 0)
  213. {
  214. txtTARE_WEIGHT.Invoke(new Action(() =>
  215. {
  216. txtTARE_WEIGHT.Value = Math.Round((decimal)sm.mainWgt - netWgt, 1);
  217. }));
  218. }
  219. if (iLedWrite % 2 == 0)
  220. {
  221. led_controler.setStaticLineMsg(PbStorageCache.sportInfo.ledIp, Math.Round(sm.mainWgt, 1) + "kg");
  222. iLedWrite = 0;
  223. }
  224. }
  225. ucStorageWeightKg1.setWgt(Math.Round(sm.mainWgt, 1));
  226. ucStorageWeightKg1.setStable(sm.mainWeightStatus != 1 ? true : false);
  227. ucStorageWeightKg2.setWgt(Math.Round(sm.viceWgt, 1));
  228. ucStorageWeightKg2.setStable(sm.mainWeightStatus != 1 ? true : false);
  229. PbStorageCache.collect = sm;
  230. }
  231. }
  232. }
  233. }
  234. }
  235. catch (Exception ex)
  236. {
  237. l.WriteLog(0, "frmMeterMain.EventData异常8:" + ex.Message);
  238. }
  239. }
  240. private void btnOpenVoice_Click(object sender, EventArgs e)
  241. {
  242. if (panel1.Controls.Count > 0)
  243. {
  244. if (btnOpenVoice.Text == "打开对讲")
  245. {
  246. VoiceOpen();
  247. }
  248. else
  249. {
  250. VoiceClose();
  251. }
  252. }
  253. }
  254. /// <summary>
  255. /// 放大图像
  256. /// </summary>
  257. private void PictureBoxDoubleClick(object sender, EventArgs e)
  258. {
  259. if (iPic != 0)
  260. {
  261. if (PbStorageCache.sportInfo != null && PbStorageCache.sportInfo.baseSpotNo == "00015")
  262. cameraShotMain.StopRealPlay(iPic + 2);
  263. else
  264. cameraShotMain.StopRealPlay(iPic);
  265. }
  266. PictureBox picture = (PictureBox)sender;
  267. iPic = Convert.ToInt32(picture.Name.Substring(picture.Name.Length - 1, 1));
  268. plImgShow.Visible = true;
  269. if (PbStorageCache.sportInfo != null && PbStorageCache.sportInfo.baseSpotNo == "00015")
  270. cameraShotMain.RealPlay(pictureShow, iPic + 2);
  271. else
  272. cameraShotMain.RealPlay(pictureShow, iPic);
  273. }
  274. /// <summary>
  275. /// 不显示大图
  276. /// </summary>
  277. private void pictureShow_DoubleClick(object sender, EventArgs e)
  278. {
  279. plImgShow.Visible = false;
  280. if (PbStorageCache.sportInfo != null && PbStorageCache.sportInfo.baseSpotNo == "00015")
  281. cameraShotMain.StopRealPlay(iPic + 2);
  282. else
  283. cameraShotMain.StopRealPlay(iPic);
  284. iPic = 0;
  285. }
  286. private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
  287. {
  288. timer1.Stop();
  289. timer2.Stop();
  290. try
  291. {
  292. collection.Stop();
  293. }
  294. catch { }
  295. try
  296. {
  297. Clean();
  298. }
  299. catch { }
  300. }
  301. private validCalibration vCalib = new validCalibration();
  302. private void btnSave_Click(object sender, EventArgs e)
  303. {
  304. btnClickSave();
  305. }
  306. private bool btnSaveFlag = false;
  307. private void btnClickSave()
  308. {
  309. if (PbStorageCache.sportInfo == null) return;
  310. if (btnSaveFlag) return;
  311. #if DEBUG
  312. PbCache.isNotValid = true;
  313. #endif
  314. string msgInfo = "";
  315. bool isCalibration = vCalib.ValidMethod(new MeterWorkCalibrationMain { baseSpotNo = PbStorageCache.sportInfo.baseSpotNo, valueFlag = "2" }, out msgInfo);
  316. if (!isCalibration)
  317. {
  318. txtMsgInfo.Text = msgInfo;
  319. return;
  320. }
  321. #region
  322. if (ucStorageWeightKg1.getWgt() < 10)
  323. {
  324. //MessageBox.Show("当前重量小于10kg无法计量");
  325. led_controler.setProductOneLineMsg(PbStorageCache.sportInfo.ledIp, "当前重量过小");
  326. txtMsgInfo.Text = "当前重量过小,无法计量";
  327. SoudVoice("重量过小.wav");
  328. return;
  329. }
  330. if (cmbMatterNo.Value == null)
  331. {
  332. //MessageBox.Show("请选择产品名称");
  333. led_controler.setProductOneLineMsg(PbStorageCache.sportInfo.ledIp, "请先选择产品");
  334. txtMsgInfo.Text = "请选择产品名称,再进行计量";
  335. SoudVoice("请选择产品名称.wav");
  336. return;
  337. }
  338. if (cmbGrade.Value == null)
  339. {
  340. //MessageBox.Show("请选择牌号");
  341. led_controler.setProductOneLineMsg(PbStorageCache.sportInfo.ledIp, "请先选择牌号");
  342. txtMsgInfo.Text = "请选择牌号,再进行计量";
  343. SoudVoice("请选择牌号.wav");
  344. return;
  345. }
  346. if (cmbStandard.Value == null)
  347. {
  348. //MessageBox.Show("请选择标准");
  349. led_controler.setProductOneLineMsg(PbStorageCache.sportInfo.ledIp, "请先选择标准");
  350. txtMsgInfo.Text = "请选择标准,再进行计量";
  351. SoudVoice("请选择标准.wav");
  352. return;
  353. }
  354. string strMs = "";
  355. if (ucStorageWeightKg2.Visible)
  356. {
  357. double d = Math.Round(Convert.ToDouble(PbStorageCache.sportInfo.deleteManName), 2);
  358. if (Math.Round(Math.Abs(ucStorageWeightKg1.getWgt() - ucStorageWeightKg2.getWgt()), 1) > d)
  359. {
  360. strMs = string.Format("双秤差值大于设定值{0}kg,无法计量", d);
  361. led_controler.setProductOneLineMsg(PbStorageCache.sportInfo.ledIp, strMs);
  362. txtMsgInfo.Text = strMs;
  363. SoudVoice("双秤差值大于设定值.wav");
  364. return;
  365. }
  366. }
  367. #endregion
  368. bSaveFlag = true;
  369. //DialogResult dr = MessageBox.Show(strMs + "是否确认保存当前计量数据?", "提示", MessageBoxButtons.OKCancel);
  370. //if (dr == DialogResult.OK)
  371. {
  372. btnCheckBalance.Enabled = false;
  373. btnOpenVoice.Enabled = false;
  374. btnSave.Enabled = false;
  375. try
  376. {
  377. string actNo = "";
  378. bool flag = SaveDB(out actNo);
  379. if (flag)
  380. {
  381. btnSaveFlag = true;
  382. #region 截取图片信息
  383. try
  384. {
  385. //* 截取屏幕信息
  386. Point screenPoint = this.PointToScreen(new Point());
  387. Rectangle rect = new Rectangle(screenPoint, this.Size);
  388. Image img = new Bitmap(rect.Width, rect.Height);
  389. Graphics g = Graphics.FromImage(img);
  390. g.CopyFromScreen(rect.X - 1, rect.Y - 1, 0, 0, rect.Size);//"D://file/1.jpg"
  391. img.Save(string.Format("{0}imgShort\\formalImg\\{1}_{2}_{3}.jpg",
  392. AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  393. PbStorageCache.sportInfo.baseSpotNo,
  394. "S" + actNo,
  395. (PbStorageCache.videoChild.Count + 1)), System.Drawing.Imaging.ImageFormat.Jpeg);
  396. /* 最后进行截图操作
  397. CameraShotCls cameraShot = new CameraShotCls();
  398. cameraShot.CapMethod(actNo);
  399. //*/
  400. //循环摄像头,然后根据摄像头有多少,则取硬盘录像机多少个通道数据
  401. for (uint i = 1; i <= CarCache.cameraShots.Count; i++)
  402. {
  403. cameraShotMain.CapPicFromVideo(i,
  404. string.Format("{0}\\imgShort\\formalImg\\{1}_{2}_{3}",
  405. AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  406. PbStorageCache.sportInfo.baseSpotNo,
  407. "S" + actNo, i)
  408. );
  409. }
  410. }
  411. catch (Exception ex)
  412. {
  413. l.WriteLog(8, "截图失败");
  414. }
  415. #endregion
  416. try
  417. {
  418. QueryInfo();
  419. }
  420. catch { }
  421. #region 数据清理
  422. //cmbDH.Text = "";
  423. //cmbBUCKET_NO.Text = "";
  424. //txtCOMBIN_NO.Text = "";
  425. //txtMEMO.Text = "";
  426. #endregion
  427. try
  428. {
  429. txtPACKAGE_NO.Text = txtPACKAGE_NO.Text.Trim() == "" ? "1" : (Convert.ToInt32(txtPACKAGE_NO.Text.Trim()) + 1) + "";
  430. try
  431. {
  432. txtSEAL_NO.Text = txtSEAL_NO.Text.Trim() == "" ? "" : (txtSEAL_NO.Text.Trim().Length > 3 ? (txtSEAL_NO.Text.Trim().Substring(0, 3) + (Convert.ToInt32(txtSEAL_NO.Text.Trim().Substring(3, txtSEAL_NO.Text.Trim().Length - 3)) + 1 + "").PadLeft(3, '0')) : "");
  433. }
  434. catch { }
  435. }
  436. catch { }
  437. SoudVoice("称重完成.wav");
  438. }
  439. }
  440. catch (Exception ex)
  441. {
  442. txtMsgInfo.Text = "保存失败:" + ex.Message.Trim();
  443. l.WriteLog(8, "保存失败:" + ex.Message.Trim());
  444. }
  445. }
  446. bSaveFlag = false;
  447. }
  448. private void btnCheckBalance_Click(object sender, EventArgs e)
  449. {
  450. if (PbStorageCache.collect != null)
  451. {
  452. if (ucStorageWeightKg1.getWgt() < 10)
  453. {
  454. MessageBox.Show("当前重量小于10kg无法校秤");
  455. return;
  456. }
  457. frmCalibration fc = new frmCalibration();
  458. fc.cameraShotMain = cameraShotMain;
  459. fc.userId = appUser.userid;
  460. fc.userName = appUser.username;
  461. if (fc.ShowDialog() == DialogResult.OK)
  462. {
  463. txtMsgInfo.Text = "校秤完成";
  464. QueryXC();
  465. }
  466. }
  467. }
  468. private bool SaveDB(out string actNo)
  469. {
  470. actNo = "";
  471. MeterWorkStorageActual mwraf = new MeterWorkStorageActual();
  472. #if DEBUG
  473. mwraf.predictionNo = DateTime.Now.ToString("yyyyMMddHHmmssfff");
  474. #endif
  475. mwraf.batchNo = txtBATCH_NO.Text.Trim();
  476. mwraf.memo = txtMEMO.Text.Trim();
  477. mwraf.valueFlag = "1";
  478. mwraf.checkFlag = "0";
  479. mwraf.createManNo = appUser.userid;
  480. mwraf.createManName = appUser.username;
  481. mwraf.createTime = DateTime.Now;
  482. mwraf.productNo = cmbMatterNo.Value.ToString();
  483. mwraf.productName = cmbMatterNo.Text.Trim();
  484. mwraf.gradeNo = cmbGrade.Value.ToString();
  485. mwraf.gradeName = cmbGrade.Text.Trim();
  486. mwraf.standardNo = cmbStandard.Value.ToString();
  487. mwraf.standardName = cmbStandard.Text.Trim();
  488. mwraf.packageNo = txtPACKAGE_NO.Text.Trim();
  489. mwraf.blockNum = txtBLOCK_NUM.Value + "";
  490. mwraf.productDate = txtPRODUCT_DATE.Value;
  491. mwraf.sealNo = txtSEAL_NO.Text;
  492. mwraf.deleteManName = txtMEMO.Text.Trim() != "" ? (txtMEMO.Text.Trim() + "|" + cmbBUCKET_NO.Text) : cmbBUCKET_NO.Text; //不记录选的是哪个桶类型或者斗信息
  493. if (cmbDH.Text.Trim() != "")
  494. {
  495. mwraf.memo = mwraf.memo != "" ? (mwraf.memo + "|斗号:" + cmbDH.Text.Trim()) : ("斗号:" + cmbDH.Text.Trim());
  496. }
  497. if (cmbBUCKET_NO.Text.Trim() != "")
  498. {
  499. mwraf.memo = mwraf.memo != "" ? (mwraf.memo + "|桶类型:" + cmbBUCKET_NO.Text.Trim()) : ("桶类型:" + cmbBUCKET_NO.Text.Trim());
  500. }
  501. mwraf.grossWeight = PbStorageCache.collect.mainWgt;
  502. mwraf.tareWeight = Convert.ToDouble(txtTARE_WEIGHT.Value);
  503. mwraf.combinPackageNo = txtCOMBIN_NO.Text.Trim();
  504. //mwraf.weightType = "0";
  505. mwraf.baseSpotNo = PbStorageCache.sportInfo.baseSpotNo;
  506. mwraf.baseSpotName = PbStorageCache.sportInfo.baseSpotName;
  507. mwraf.actualWeight = PbStorageCache.collect.mainWgt;
  508. mwraf.netWeight = mwraf.grossWeight - mwraf.tareWeight;
  509. #region eason add 好像存在皮重计算存在小数差值问题,所以如果录入了净重,则皮重是毛-净
  510. if (netWgt > 0)
  511. {
  512. mwraf.netWeight = Math.Round((double)netWgt, 1);
  513. mwraf.tareWeight = mwraf.grossWeight - mwraf.netWeight;
  514. }
  515. #endregion
  516. #region 2021-06-24 add
  517. if (txtBucketNo.Value > 0 && txtBucketAddValue.Value > 0)
  518. {
  519. if (txtBucketAddValue.Value > 1)
  520. {
  521. mwraf.bucketNo = txtBucketNo.Value + "-" + (txtBucketNo.Value + txtBucketAddValue.Value - 1);
  522. }
  523. else
  524. {
  525. mwraf.bucketNo = txtBucketNo.Value + "";
  526. }
  527. txtBucketNo.Value += txtBucketAddValue.Value;
  528. }
  529. else if (txtBucketNo.Value > 0)
  530. {
  531. mwraf.bucketNo = txtBucketNo.Value + "";
  532. }
  533. #endregion
  534. if (ucStorageWeightKg2.Visible)
  535. {
  536. mwraf.referWeight = PbStorageCache.collect.viceWgt;
  537. }
  538. RESTfulResult<string> rm = actualService.doAddWf(mwraf);
  539. if (rm.Succeed)
  540. {
  541. actNo = rm.Data;
  542. setMsgInfo(txtMsgInfo, "保存成功", "");
  543. return true;
  544. }
  545. else
  546. {
  547. setMsgInfo(txtMsgInfo, "保存失败:" + rm.Message, "");
  548. l.WriteLog(8, "保存失败:" + rm.Message);
  549. return false;
  550. }
  551. }
  552. private void QueryInfo()
  553. {
  554. if (PbStorageCache.sportInfo != null)
  555. {
  556. DataTable dtSj = dataTable1.Clone();
  557. RESTfulResult<List<MeterWorkStorageActual>> rms = actualService.doQueryWf(new MeterWorkStorageActual { valueFlag = "1", baseSpotNo = PbStorageCache.sportInfo.baseSpotNo });
  558. if (rms.Succeed && rms.Data != null && rms.Data.Count > 0)
  559. {
  560. dtSj = rms.Data.ListToDataTable<MeterWorkStorageActual>();
  561. ClsControlPack.CopyDataToDatatable(ref dtSj, ref dataTable1, true);
  562. ClsControlPack.RefreshAndAutoSize(ultraGridSj);
  563. foreach (UltraGridRow ugr in ultraGridSj.Rows)
  564. {
  565. if (ugr.Cells["valueFlag"].Value.ToString() == "0")
  566. {
  567. ugr.Appearance.BackColor = Color.Red;
  568. }
  569. else
  570. {
  571. ugr.Appearance.BackColor = Color.White;
  572. }
  573. }
  574. }
  575. }
  576. }
  577. /// <summary>
  578. /// 校秤数据查下
  579. /// </summary>
  580. private void QueryXC()
  581. {
  582. if (PbStorageCache.sportInfo != null)
  583. {
  584. DataTable dtJlM = dtCalibration.Clone();
  585. DataTable dtJlC = dtBranch.Clone();
  586. //dtCalibration dtBranch
  587. CommonPage<MeterWorkCalibrationMain> cpc = new CommonPage<MeterWorkCalibrationMain>();
  588. MeterWorkCalibrationMain mwca = new MeterWorkCalibrationMain();
  589. mwca.baseSpotNo = PbStorageCache.sportInfo.baseSpotNo;
  590. cpc.param = mwca;
  591. cpc.pageNum = 1;
  592. cpc.pageSize = 10;
  593. RESTfulResult<PbGetSomeModel<MeterWorkCalibrationMain, MeterWorkCalibrationBranch>> rms = calibrationMainService.doQuerySomeWf(cpc);
  594. if (rms.Succeed && rms.Data != null)
  595. {
  596. dtJlM = rms.Data.one.ListToDataTable<MeterWorkCalibrationMain>();
  597. dtJlC = rms.Data.two.ListToDataTable<MeterWorkCalibrationBranch>();
  598. dtBranch.Clear();
  599. dtCalibration.Clear();
  600. ClsControlPack.CopyDataToDatatable(ref dtJlM, ref dtCalibration, true);
  601. ClsControlPack.CopyDataToDatatable(ref dtJlC, ref dtBranch, true);
  602. ClsControlPack.RefreshAndAutoSize(ultraGridJl, true);
  603. }
  604. }
  605. }
  606. #endregion
  607. #region 数据初始清理
  608. private void Clean()
  609. {
  610. updateSport("");
  611. if (PbStorageCache.sportInfo != null)
  612. {
  613. led_controler.setProductOneLineMsg(PbStorageCache.sportInfo.ledIp, "欢迎使用九钢智能计量系统");
  614. }
  615. //*
  616. PbStorageCache.videoInfo = null;
  617. //PbStorageCache.dtStartTime = null;
  618. PbStorageCache.sportInfo = null;
  619. PbStorageCache.collect = null;
  620. //退出语音登录
  621. try
  622. {
  623. VoiceClose();
  624. IPVideoClose();
  625. }
  626. catch (Exception ex) { }
  627. setPanelRemovenfo(panel1);
  628. CleanForm();
  629. //*/
  630. }
  631. private void CleanForm()
  632. {
  633. cmbMatterNo.Text = "";
  634. cmbGrade.Text = "";
  635. cmbStandard.Text = "";
  636. txtBLOCK_NUM.Value = 0;
  637. txtBATCH_NO.Text = "";
  638. txtPRODUCT_DATE.Value = DateTime.Now;
  639. txtPACKAGE_NO.Text = "";
  640. txtSEAL_NO.Text = "";
  641. cmbBUCKET_NO.Text = "";
  642. txtCOMBIN_NO.Text = "";
  643. txtMEMO.Text = "";
  644. txtTARE_WEIGHT.Value = 0;
  645. txtMsgInfo.Text = "";
  646. cmbDH.Text = "";
  647. netWgt = 0;
  648. txtNetWgt.Value = 0;
  649. //cmbDH.Value = null;
  650. DataTable dtSj = dataTable1.Clone();
  651. ClsControlPack.CopyDataToDatatable(ref dtSj, ref dataTable1, true);
  652. ClsControlPack.RefreshAndAutoSize(ultraGridSj);
  653. dtBranch.Clear();
  654. dtCalibration.Clear();
  655. DataTable dtJl = dtCalibration.Clone();
  656. DataTable dtJlC = dtBranch.Clone();
  657. ClsControlPack.CopyDataToDatatable(ref dtJl, ref dtCalibration, true);
  658. ClsControlPack.CopyDataToDatatable(ref dtJlC, ref dtBranch, true);
  659. ClsControlPack.RefreshAndAutoSize(ultraGridJl);
  660. ucStorageWeightKg1.setWgt(0);
  661. ucStorageWeightKg1.setStable(true);
  662. ucStorageWeightKg2.Visible = false;
  663. ucStorageWeightKg2.setWgt(0);
  664. ucStorageWeightKg2.setStable(true);
  665. }
  666. #endregion
  667. #region 对讲代码
  668. private bool SoudVoice(string soundName)
  669. {
  670. string fileUrl = string.Format("{0}\\Sound\\{1}", AppDomain.CurrentDomain.SetupInformation.ApplicationBase, soundName);
  671. if (computerSound == "1")
  672. {
  673. try
  674. {
  675. play_ls = new SoundPlayer(fileUrl);
  676. play_ls.Play();
  677. return true;
  678. }
  679. catch
  680. {
  681. return false;
  682. }
  683. }
  684. else
  685. {
  686. return cameraShotMain.SoundVoice(fileUrl);
  687. }
  688. }
  689. /// <summary>
  690. /// 硬盘录像机登录
  691. /// </summary>
  692. private CameraShotCls cameraShotMain = new CameraShotCls();
  693. /// <summary>
  694. /// 必须先打开连接
  695. /// </summary>
  696. private bool GetIPVideo(MeterBaseVideoinfo video)
  697. {
  698. try
  699. {
  700. cameraShotMain.ip = video.videoip;
  701. cameraShotMain.port = video.vdoPort;
  702. cameraShotMain.uid = video.vdoUser;
  703. cameraShotMain.pwd = video.vdoPwd;
  704. cameraShotMain.Connection();
  705. }
  706. catch (Exception ex)
  707. {
  708. setMsgInfo(txtMsgInfo, "视频连接打开失败:" + ex.Message, "");
  709. return false;
  710. }
  711. return true;
  712. }
  713. /// <summary>
  714. /// 必须先打开视频,然后再打开语音
  715. /// </summary>
  716. private void VoiceOpen()
  717. {
  718. try
  719. {
  720. if (cameraShotMain.StartTalk())
  721. {
  722. btnOpenVoice.Text = "关闭对讲";
  723. }
  724. }
  725. catch (Exception ex)
  726. {
  727. setMsgInfo(txtMsgInfo, "打开语音失败:" + ex.Message, "");
  728. }
  729. }
  730. /// <summary>
  731. /// 关闭语音对讲
  732. /// </summary>
  733. private void VoiceClose()
  734. {
  735. try
  736. {
  737. if (cameraShotMain.StopTalk())
  738. {
  739. setMsgInfo(btnOpenVoice, "打开对讲", "");
  740. }
  741. }
  742. catch (Exception ex)
  743. {
  744. setMsgInfo(txtMsgInfo, "打开对讲失败:" + ex.Message, "");
  745. }
  746. }
  747. /// <summary>
  748. /// 关闭视频
  749. /// </summary>
  750. private void IPVideoClose()
  751. {
  752. try
  753. {
  754. cameraShotMain.Close();
  755. }
  756. catch (Exception ex)
  757. {
  758. setMsgInfo(txtMsgInfo, "关闭对讲失败:" + ex.Message, "");
  759. }
  760. }
  761. private List<PictureBox> ltPicBoxs = new List<PictureBox>();
  762. private void setPicBoxSet()
  763. {
  764. if (PbStorageCache.videoChild != null && PbStorageCache.videoChild.Count > 0)
  765. {
  766. if (PbStorageCache.sportInfo != null)
  767. {
  768. for (int k = 1; k <= 2; k++)
  769. {
  770. PictureBox pb = new PictureBox();
  771. pb.Name = "pb" + k;
  772. pb.Dock = DockStyle.Top;
  773. pb.Height = 260;
  774. pb.DoubleClick += new EventHandler(PictureBoxDoubleClick);
  775. pb.BorderStyle = BorderStyle.FixedSingle;
  776. panel1.Controls.Add(pb);
  777. ltPicBoxs.Add(pb);
  778. if (PbStorageCache.sportInfo.baseSpotNo == "00015")
  779. cameraShotMain.RealPlay(pb, k + 2);
  780. else
  781. cameraShotMain.RealPlay(pb, k);
  782. }
  783. }
  784. }
  785. }
  786. public void setPanelRemovenfo(Panel control)
  787. {
  788. setPanelRemoveMsg(control);
  789. }
  790. /// <summary>
  791. /// 如果ResultMessage为true或者false,则sType 为0的时候readonly 1为enable 2为visable
  792. /// </summary>
  793. /// <param name="control"></param>
  794. /// <param name="ResultMessage"></param>
  795. /// <param name="sType"></param>
  796. private void setPanelRemoveMsg(Panel p)
  797. {
  798. if (p.InvokeRequired)
  799. {
  800. Action<Panel> action = new Action<Panel>(setPanelRemovenfo);
  801. Invoke(action, new object[] { p });
  802. }
  803. else
  804. {
  805. for (int i = p.Controls.Count - 1; i >= 0; i--)
  806. {
  807. p.Controls.RemoveAt(i);
  808. }
  809. }
  810. }
  811. #endregion
  812. #region 控件值设置
  813. //如果ResultMessage为true或者false,则sType 为0的时候readonly 1为enable 2为visable
  814. public void setMsgInfo(Control control, string ResultMessage, string sType)
  815. {
  816. setMsgMsg(control, ResultMessage, sType);
  817. }
  818. /// <summary>
  819. /// 如果ResultMessage为true或者false,则sType 为0的时候readonly 1为enable 2为visable 3为check
  820. /// </summary>
  821. /// <param name="control"></param>
  822. /// <param name="ResultMessage"></param>
  823. /// <param name="sType"></param>
  824. private void setMsgMsg(Control control, string ResultMessage, string sType)
  825. {
  826. if (control.InvokeRequired)
  827. {
  828. Action<Control, string, string> action = new Action<Control, string, string>(setMsgInfo);
  829. Invoke(action, new object[] { control, ResultMessage, sType });
  830. }
  831. else
  832. {
  833. if (ResultMessage == "true" || ResultMessage == "false")
  834. {
  835. switch (sType)
  836. {
  837. case "1":
  838. control.Enabled = ResultMessage == "true" ? true : false;
  839. ; break;
  840. case "2":
  841. control.Visible = ResultMessage == "true" ? true : false;
  842. ; break;
  843. case "3":
  844. ((CheckBox)control).Checked = ResultMessage == "true" ? true : false;
  845. break;
  846. default: break;
  847. }
  848. }
  849. else if (ResultMessage == "color")
  850. {
  851. switch (sType)
  852. {
  853. case "Red":
  854. control.BackColor = Color.Red;
  855. ; break;
  856. case "Lime":
  857. control.BackColor = Color.Lime;
  858. ; break;
  859. default: break;
  860. }
  861. }
  862. else
  863. {
  864. control.Text = ResultMessage == null ? "" : ResultMessage;
  865. }
  866. }
  867. }
  868. private delegate object GetControlPropertyCallBack(Control control, string name);
  869. public object GetControlProperty(Control control, string name)
  870. {
  871. if (control.InvokeRequired == true)
  872. {
  873. GetControlPropertyCallBack CallBack = new GetControlPropertyCallBack(GetControlProperty);
  874. return control.Invoke(CallBack, new object[] { control, name });
  875. }
  876. else
  877. {
  878. Type type = control.GetType();
  879. return type.InvokeMember(name,
  880. BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Instance,
  881. null, control, null);
  882. }
  883. }
  884. public void setGridColorInfo(UltraGrid ugr, StorageCollectModel sModel)
  885. {
  886. setGridColorMsg(ugr, sModel);
  887. }
  888. private void setGridColorMsg(UltraGrid control, StorageCollectModel sModel)
  889. {
  890. if (control.InvokeRequired)
  891. {
  892. Action<UltraGrid, StorageCollectModel> action = new Action<UltraGrid, StorageCollectModel>(setGridColorInfo);
  893. Invoke(action, new object[] { control, sModel });
  894. }
  895. else
  896. {
  897. foreach (UltraGridRow urg in control.Rows)
  898. {
  899. if (PbStorageCache.sportInfo != null && urg.Cells["baseSpotNo"].Text == PbStorageCache.sportInfo.baseSpotNo)
  900. {
  901. urg.Appearance.BackColor = Color.Red;
  902. break;
  903. }
  904. else if (sModel.pointid == urg.Cells["baseSpotNo"].Text)
  905. {
  906. if (sModel.mainWgt > 20)
  907. {
  908. urg.Appearance.BackColor = Color.Orange;
  909. }
  910. else
  911. {
  912. urg.Appearance.BackColor = Color.White;
  913. }
  914. break;
  915. }
  916. }
  917. }
  918. }
  919. #endregion
  920. public string GetIP()
  921. {
  922. try
  923. {
  924. IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());
  925. IPAddress ipAddr = ipHost.AddressList[0];
  926. return ipAddr.ToString();
  927. }
  928. catch (Exception exp)
  929. {
  930. Random rd = new Random();
  931. return rd.Next(99999, 999999) + "";
  932. }
  933. }
  934. private void btnStart_Click(object sender, EventArgs e)
  935. {
  936. try
  937. {
  938. btnStart.Enabled = false;
  939. btnCheckBalance.Enabled = false;
  940. btnOpenVoice.Enabled = false;
  941. btnSave.Enabled = false;
  942. if (btnStart.Text != "释放")
  943. {
  944. UltraGridRow ugr = ultraGridPW.ActiveRow;
  945. if (ugr != null)
  946. {
  947. if (!string.IsNullOrEmpty(ugr.Cells["controlIp"].Text) && ugr.Cells["controlIp"].Text != _controlIp)
  948. {
  949. MessageBox.Show("当前计量点已被他人接管");
  950. return;
  951. }
  952. btnStart.BackColor = Color.Red;
  953. btnStart.Text = "释放";
  954. PbStorageCache.sportInfo = PbStorageCache.sportInfos.Where(s => s.baseSpotNo == ugr.Cells["baseSpotNo"].Text.Trim()).FirstOrDefault();
  955. led_controler = new LED_Control(PbStorageCache.sportInfo.ledIp);
  956. //将主副秤秤体允许偏差值写入
  957. PbStorageCache.sportInfo.deleteManName = ugr.Cells["weightDiff"].Text == "" ? "0" : ugr.Cells["weightDiff"].Text.Trim();
  958. //controlIp
  959. updateSport(_controlIp);
  960. int icnt = PbStorageCache.scalePoints.Where(s => s.baseSpotNo == PbStorageCache.sportInfo.baseSpotNo).Count();
  961. if (icnt > 1) //双秤
  962. {
  963. ucStorageWeightKg2.Visible = true;
  964. }
  965. else //单秤
  966. {
  967. ucStorageWeightKg2.Visible = false;
  968. }
  969. bd.getSpot();
  970. GetIPVideo(PbStorageCache.videoInfo);
  971. setPicBoxSet();
  972. #region 增加包号
  973. 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}'", PbStorageCache.sportInfo.baseSpotNo, txtBATCH_NO.Text.Trim());
  974. PbModelDbService<List<ComBaseInfo>> pb = new PbModelDbService<List<ComBaseInfo>>();
  975. RESTfulResult<List<ComBaseInfo>> rmType = pb.executeSqlDataWf(sql);
  976. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  977. {
  978. txtPACKAGE_NO.Text = rmType.Data[0].baseCode;
  979. }
  980. else
  981. {
  982. l.WriteLog(8, "包号载入失败:" + sql);
  983. }
  984. QueryInfo();
  985. QueryXC();
  986. #endregion
  987. }
  988. }
  989. else
  990. {
  991. btnStart.BackColor = Color.DodgerBlue;
  992. btnStart.Text = "接管";
  993. foreach (UltraGridRow ugrs in ultraGridPW.Rows)
  994. {
  995. ugrs.Appearance.BackColor = Color.White;
  996. }
  997. ucStorageWeightKg2.Visible = false;
  998. Clean();//释放按钮
  999. }
  1000. }
  1001. catch (Exception ex)
  1002. {
  1003. MessageBox.Show("btnStart_Click接管按钮异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1004. l.WriteLog(13, "btnStart_Click接管按钮异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1005. }
  1006. finally
  1007. {
  1008. btnStart.Enabled = true;
  1009. btnCheckBalance.Enabled = true;
  1010. btnOpenVoice.Enabled = true;
  1011. btnSave.Enabled = true;
  1012. }
  1013. }
  1014. /// <summary>
  1015. /// 修改监控表的状态
  1016. /// </summary>
  1017. /// <param name="controlIp"></param>
  1018. private void updateSport(string controlIp)
  1019. {
  1020. try
  1021. {
  1022. string sql = string.Format("update meter_base_spot_info set CONTROL_IP = '{0}' where CONTROL_IP='{1}' or base_spot_no='{2}'", controlIp, _controlIp, (PbStorageCache.sportInfo == null ? "" : PbStorageCache.sportInfo.baseSpotNo));
  1023. RESTfulResult<string> rm = PbModelDbService.executeSqlDataWf(sql);
  1024. if (rm.Succeed)
  1025. {
  1026. WriteMonitorNote("修改meter_base_spot_info接管状态为" + (string.IsNullOrEmpty(controlIp) ? "取消接管" : "接管"));
  1027. }
  1028. }
  1029. catch (Exception ex)
  1030. {
  1031. MessageBox.Show("updateSport方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1032. l.WriteLog(13, "updateSport方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1033. }
  1034. }
  1035. private void WriteMonitorNote(string content)
  1036. {
  1037. try
  1038. {
  1039. if (PbStorageCache.sportInfo != null && PbStorageCache.sportInfo.baseSpotNo != null)
  1040. {
  1041. RESTfulResult<string> rm = noteService.doAddWf(new MeterMonitorNote
  1042. {
  1043. baseSpotNo = PbStorageCache.sportInfo.baseSpotNo,
  1044. baseSpotName = PbStorageCache.sportInfo.baseSpotName,
  1045. operationContent = content,//str + chk.Text,
  1046. carNo = "",
  1047. meterManNo = appUser.userid,
  1048. meterManName = appUser.username,
  1049. meterNoteSource = "8"
  1050. });
  1051. if (!rm.Succeed)
  1052. {
  1053. l.WriteLog(8, "成品秤写入操作日志异常:" + content);
  1054. }
  1055. }
  1056. }
  1057. catch (Exception ex)
  1058. {
  1059. MessageBox.Show("WriteMonitorNote方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1060. l.WriteLog(13, "WriteMonitorNote方法异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1061. }
  1062. }
  1063. private void timer1_Tick(object sender, EventArgs e)
  1064. {
  1065. try
  1066. {
  1067. #region 每2秒查一次接管数据,若接管则改变状态 controlIp
  1068. MeterBaseSpotInfoService service = new MeterBaseSpotInfoService();
  1069. RESTfulResult<List<MeterBaseSpotInfo>> rms = service.doQueryWf(new MeterBaseSpotInfo { validFlag = "1", spotTypeNo = "001002003" });
  1070. if (rms.Succeed && rms.Data != null && rms.Data.Count > 0)
  1071. {
  1072. //PbStorageCache.sportInfos = rms.Data;
  1073. string str = "";
  1074. string cIp = "";
  1075. bool bRefash = false;
  1076. DataTable dt = dtJGPointInfo.Clone();
  1077. foreach (DataRow dr in dtJGPointInfo.Rows)
  1078. {
  1079. MeterBaseSpotInfo msi = rms.Data.Where(s => s.baseSpotNo == dr["baseSpotNo"].ToString().Trim()).FirstOrDefault();
  1080. if (msi != null && msi.baseSpotNo != null)
  1081. {
  1082. str = (string.IsNullOrEmpty(msi.controlIp) ? "未接管" : "已接管");
  1083. if (dr["validFlag"].ToString().Trim() != str)
  1084. {
  1085. dr["validFlag"] = str;
  1086. bRefash = true;
  1087. }
  1088. cIp = (string.IsNullOrEmpty(msi.controlIp) ? "" : msi.controlIp);
  1089. if (dr["controlIp"].ToString().Trim() != cIp)
  1090. {
  1091. dr["controlIp"] = cIp;
  1092. bRefash = true;
  1093. }
  1094. }
  1095. dt.Rows.Add(dr.ItemArray);
  1096. }
  1097. if (bRefash)
  1098. {
  1099. ClsControlPack.CopyDataToDatatable(ref dt, ref this.dtJGPointInfo, true);
  1100. }
  1101. }
  1102. #endregion
  1103. }
  1104. catch (Exception ex)
  1105. {
  1106. MessageBox.Show("timer1_Tick任务异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1107. l.WriteLog(13, "timer1_Tick任务异常,请关闭界面并稍后打开,或联系管理员!\r\n异常原因:\r\n" + ex);
  1108. }
  1109. }
  1110. private bool bTest = false;
  1111. /*
  1112. private void button1_Click(object sender, EventArgs e)
  1113. {
  1114. bTest = !bTest;
  1115. if (bTest)
  1116. {
  1117. ucStorageWeightKg1.setWgt((double)numericUpDown1.Value);
  1118. ucStorageWeightKg1.setStable(PbStorageCache.collect.mainWeightStatus != 1 ? true : false);
  1119. ucStorageWeightKg2.setWgt((double)numericUpDown2.Value);
  1120. ucStorageWeightKg2.setStable(PbStorageCache.collect.mainWeightStatus != 1 ? true : false);
  1121. PbStorageCache.collect = new StorageCollectModel
  1122. {
  1123. mainWgt = (double)numericUpDown1.Value,
  1124. viceWgt = (double)numericUpDown2.Value,
  1125. mainWeightStatus = 0,
  1126. pointid = "CAR20"
  1127. };
  1128. //"172.22.42.34"
  1129. }
  1130. }
  1131. //*/
  1132. private void timer2_Tick(object sender, EventArgs e)
  1133. {
  1134. txtPRODUCT_DATE.Value = DateTime.Now;
  1135. if (ucStorageWeightKg1.getWgt() < 10)
  1136. {
  1137. btnSaveFlag = false;
  1138. if (!btnSave.Enabled)
  1139. {
  1140. btnSave.Enabled = true;
  1141. btnCheckBalance.Enabled = true;
  1142. btnOpenVoice.Enabled = true;
  1143. }
  1144. iCntTime = 0;
  1145. }
  1146. else
  1147. {
  1148. if (ucStorageWeightKg1.isGreen)
  1149. {
  1150. iCntTime++;
  1151. if (iCntTime > txtTimeLength.Value)
  1152. {
  1153. iCntTime = txtTimeLength.Value;
  1154. }
  1155. }
  1156. else
  1157. {
  1158. iCntTime = 0;
  1159. }
  1160. }
  1161. if (iCntTime >= txtTimeLength.Value && cbAuto.Checked && ucStorageWeightKg1.getWgt() > 10 && ucStorageWeightKg1.isGreen && txtBATCH_NO.Text.Trim() != "")
  1162. {
  1163. double wcWgt = Math.Round((double)txtWcWgt.Value, 1);
  1164. double wdWgt = Math.Round((double)txtWdWgt.Value, 1);
  1165. double pzWgt = Math.Round((double)txtTARE_WEIGHT.Value, 1);
  1166. //这里设置1的原因是担心decmial转double可能存在精度丢失导致0的时候大于0的情况,一般应该不会
  1167. if (wdWgt > 1)
  1168. {
  1169. if (cbPC.Text == "±") { }
  1170. switch (cbPC.Text.Trim())
  1171. {
  1172. case "±":
  1173. {
  1174. if (((ucStorageWeightKg1.getWgt() - pzWgt) <= (wdWgt + wcWgt) && (ucStorageWeightKg1.getWgt() - pzWgt) >= (wdWgt - wcWgt)))
  1175. {
  1176. btnClickSave();
  1177. }
  1178. }; break;
  1179. case "+":
  1180. {
  1181. if (((ucStorageWeightKg1.getWgt() - pzWgt) <= (wdWgt + wcWgt) && (ucStorageWeightKg1.getWgt() - pzWgt) >= wdWgt))
  1182. {
  1183. btnClickSave();
  1184. }
  1185. }; break;
  1186. case "-":
  1187. {
  1188. if (((ucStorageWeightKg1.getWgt() - pzWgt) <= wdWgt && (ucStorageWeightKg1.getWgt() - pzWgt) >= (wdWgt - wcWgt)))
  1189. {
  1190. btnClickSave();
  1191. }
  1192. }; break;
  1193. default:
  1194. {
  1195. if (((ucStorageWeightKg1.getWgt() - pzWgt) <= (wdWgt + wcWgt) && (ucStorageWeightKg1.getWgt() - pzWgt) >= (wdWgt - wcWgt)))
  1196. {
  1197. btnClickSave();
  1198. }
  1199. }; break;
  1200. }
  1201. }
  1202. else
  1203. {
  1204. btnClickSave();
  1205. }
  1206. }
  1207. }
  1208. private PNumberModel pDHSelected = new PNumberModel() { bFlag = false, dValue = 0 };
  1209. private void cmbDH_RowSelected(object sender, RowSelectedEventArgs e)
  1210. {
  1211. txtTARE_WEIGHT.Value = e?.Row?.Cells["baseCode"]?.Value == null ? 0 : Convert.ToDecimal(e?.Row?.Cells["baseCode"]?.Value);
  1212. if (e?.Row?.Cells["baseCode"]?.Value == null)
  1213. {
  1214. pDHSelected.bFlag = false;
  1215. pDHSelected.dValue = txtTARE_WEIGHT.Value;
  1216. }
  1217. else
  1218. {
  1219. pDHSelected.bFlag = true;
  1220. pDHSelected.dValue = txtTARE_WEIGHT.Value;
  1221. }
  1222. cmbBUCKET_NO.Enabled = !pDHSelected.bFlag;
  1223. setNetWgt();
  1224. }
  1225. private PNumberModel pBucketSelected = new PNumberModel() { bFlag = false, dValue = 0 };
  1226. private void cmbBUCKET_NO_RowSelected(object sender, RowSelectedEventArgs e)
  1227. {
  1228. txtTARE_WEIGHT.Value = e?.Row?.Cells["baseCode"]?.Value == null ? 0 : Convert.ToDecimal(e?.Row?.Cells["baseCode"]?.Value);
  1229. if (e?.Row?.Cells["baseCode"]?.Value == null)
  1230. {
  1231. pBucketSelected.bFlag = false;
  1232. pBucketSelected.dValue = txtTARE_WEIGHT.Value;
  1233. }
  1234. else
  1235. {
  1236. pBucketSelected.bFlag = true;
  1237. pBucketSelected.dValue = txtTARE_WEIGHT.Value;
  1238. }
  1239. cmbDH.Enabled = !pBucketSelected.bFlag;
  1240. setNetWgt();
  1241. }
  1242. private void setNetWgt()
  1243. {
  1244. if (!pDHSelected.bFlag && !pBucketSelected.bFlag)
  1245. {
  1246. txtNetWgt.Invoke(new Action(() =>
  1247. {
  1248. txtNetWgt.Value = 0;
  1249. }));
  1250. }
  1251. }
  1252. private decimal netWgt = 0;
  1253. private void txtNetWgt_ValueChanged(object sender, EventArgs e)
  1254. {
  1255. netWgt = txtNetWgt.Value;
  1256. }
  1257. private void txtBATCH_NO_MouseLeave(object sender, EventArgs e)
  1258. {
  1259. if (PbStorageCache.sportInfo != null)
  1260. {
  1261. string sql = string.Format("select nvl(max(package_no),'0') baseCode from meter_work_storage_actual t where length(package_no)=(select max(length(package_no)) from meter_work_storage_actual where base_spot_no = '{0}' and BATCH_NO = '{1}') and base_spot_no='{0}' and BATCH_NO='{1}'", PbStorageCache.sportInfo.baseSpotNo, txtBATCH_NO.Text.Trim());
  1262. PbModelDbService<List<ComBaseInfo>> pb = new PbModelDbService<List<ComBaseInfo>>();
  1263. RESTfulResult<List<ComBaseInfo>> rmType = pb.executeSqlDataWf(sql);
  1264. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  1265. {
  1266. if (rmType.Data[0].baseCode != "0" && rmType.Data[0].baseCode.Length > 0)
  1267. {
  1268. try
  1269. {
  1270. string[] str = rmType.Data[0].baseCode.Split('-');
  1271. txtPACKAGE_NO.Value = Convert.ToInt32(rmType.Data[0].baseCode.Split('-')[str.Length - 1]) + 1;
  1272. }
  1273. catch { }
  1274. }
  1275. else
  1276. {
  1277. txtPACKAGE_NO.Text = "1";
  1278. }
  1279. }
  1280. else
  1281. {
  1282. l.WriteLog(8, "包号载入失败:" + sql);
  1283. }
  1284. #region eason add 2021-06-24增加通号新增
  1285. sql = string.Format("select nvl(max(bucket_no),'0') baseName from meter_work_storage_actual t where length(bucket_no)=(select max(length(bucket_no)) from meter_work_storage_actual where base_spot_no = '{0}' and BATCH_NO = '{1}') and base_spot_no='{0}' and BATCH_NO='{1}'", PbStorageCache.sportInfo.baseSpotNo, txtBATCH_NO.Text.Trim());
  1286. rmType = pb.executeSqlDataWf(sql);
  1287. if (rmType.Succeed && rmType.Data != null && rmType.Data.Count > 0)
  1288. {
  1289. if (rmType.Data[0].baseName != "0" && rmType.Data[0].baseName.Length > 0)
  1290. {
  1291. try
  1292. {
  1293. string[] str = rmType.Data[0].baseName.Split('-');
  1294. txtBucketNo.Value = Convert.ToInt32(rmType.Data[0].baseName.Split('-')[str.Length - 1]) + 1;
  1295. }
  1296. catch { }
  1297. }
  1298. else if (txtBucketAddValue.Value > 0)
  1299. {
  1300. txtBucketNo.Value = 1;
  1301. }
  1302. }
  1303. else
  1304. {
  1305. l.WriteLog(8, "初始箱号载入失败:" + sql);
  1306. }
  1307. #endregion
  1308. }
  1309. }
  1310. private void cbAuto_CheckedChanged(object sender, EventArgs e)
  1311. {
  1312. if (cbAuto.Checked && txtBATCH_NO.Text.Trim() == "")
  1313. {
  1314. MessageBox.Show("请先输入批号");
  1315. cbAuto.Checked = false;
  1316. return;
  1317. }
  1318. btnSave.Visible = !cbAuto.Checked;
  1319. btnCheckBalance.Visible = !cbAuto.Checked;
  1320. label3.Visible = cbAuto.Checked;
  1321. txtWdWgt.Visible = cbAuto.Checked;
  1322. cbPC.Visible = cbAuto.Checked;
  1323. txtWcWgt.Visible = cbAuto.Checked;
  1324. if (!cbAuto.Checked)
  1325. {
  1326. txtWdWgt.Value = 0;
  1327. txtWcWgt.Value = 0;
  1328. }
  1329. }
  1330. }
  1331. public class PNumberModel
  1332. {
  1333. public bool bFlag { get; set; }
  1334. public decimal dValue { get; set; }
  1335. }
  1336. }