Form2.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. using Common;
  2. using MeterConditionLibrary;
  3. using MeterPlugInLibrary;
  4. using MeterSceneLibrary;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Data;
  9. using System.Drawing;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. using com.hnshituo.core.webapp.vo;
  15. using CarMeterSystem.OptionCls;
  16. namespace CarMeterSystem
  17. {
  18. public partial class Form2 : Form
  19. {
  20. public Form2()
  21. {
  22. InitializeComponent();
  23. }
  24. Print printClass = new Print();//打印
  25. validTermTareCar termTareCar = new validTermTareCar();//验证是否可留期限皮
  26. MeterBaseTermTareDataService termTareDate = new MeterBaseTermTareDataService();//留期限皮操作
  27. MeterWorkMonitorService monitor = new MeterWorkMonitorService(); //设备及远程呼叫监控表
  28. MeterWorkCarActualFirst firstDb = null;//一次计量数据
  29. SceneControl inner = new SceneControl(); //内倒业务处理
  30. PreTrackScaleService trackService = new PreTrackScaleService();//查询预报信息
  31. validPrediction validPred = new validPrediction(); //验证预报信息
  32. VoicePlay vicPlayClass = new VoicePlay();//语音播放
  33. Log lg = Log.GetInstance(); //写日志
  34. double firstWgt = 0;
  35. bool bRailwayActual = true;
  36. bool isVoiceDownCar = false;//车上人员请下车播放一次
  37. int iCollection = 0, licType = 0;
  38. string firstCode = "";//上次扫码编号
  39. string TrackCarNo = "";//预报车号
  40. private void frmCarSalePurchase_Load(object sender, EventArgs e)
  41. {
  42. lbPointName.Text = PbCache.sportInfo.baseSpotName;
  43. ucCarMeterInfo21.setMeterType(PbCache.bussinessTypeName);
  44. }
  45. private void btnSave_Click(object sender, EventArgs e)
  46. {
  47. PbCache.isLockFrm = true;
  48. PbCache.lockCarNo = PbCache.collect.carno;
  49. btnSave.Enabled = false;
  50. FrmMessage frmMessage = FrmMess("是否确认保存当前计量数据!");
  51. if (frmMessage.ShowDialog(this) == DialogResult.Cancel)
  52. {
  53. PbCache.isLockFrm = false;
  54. btnSave.Enabled = true;
  55. return;
  56. }
  57. try
  58. {
  59. //是否在黑名单内
  60. MeterBaseCarBlacelistService bService = new MeterBaseCarBlacelistService();
  61. RESTfulResult<List<MeterBaseCarBlacelist>> rmB = bService.doQueryWf(new MeterBaseCarBlacelist { carNo = PbCache.lockCarNo, valueFlag = "0" });
  62. if (rmB.Succeed)
  63. {
  64. if (rmB.Data != null && rmB.Data.Count > 0)
  65. {
  66. PbCache.ResultMessage = string.Format("车辆[{0}在黑名单内,不能计量", PbCache.lockCarNo);
  67. lg.WriteLog(3, string.Format("车辆[{0}在黑名单内,不能计量", PbCache.lockCarNo));
  68. PbCache.isLockFrm = false;
  69. btnSave.Enabled = true;
  70. return;
  71. }
  72. }
  73. else
  74. {
  75. PbCache.ResultMessage = "保存失败,获取黑名单数据异常,请稍后再试";
  76. lg.WriteLog(3, "获取黑名单数据异常,请稍后再试");
  77. PbCache.isLockFrm = false;
  78. btnSave.Enabled = true;
  79. return;
  80. }
  81. PreTrackScale preTrack = ucCarMeterInfo21._preTrack;
  82. string strMsg = "";
  83. if (inner.WeightMeter(preTrack, out strMsg)) //meterTypeNo "001006001","001006002"
  84. {
  85. //票据打印
  86. Print1(PbCache.actualFirstNo);
  87. try
  88. {
  89. #region 截取图片信息
  90. //截取屏幕信息
  91. Point screenPoint = this.PointToScreen(new Point());
  92. Rectangle rect = new Rectangle(screenPoint, this.Size);
  93. Image img = new Bitmap(rect.Width, rect.Height);
  94. Graphics g = Graphics.FromImage(img);
  95. g.CopyFromScreen(rect.X - 1, rect.Y - 1, 0, 0, rect.Size);//"D://file/1.jpg"
  96. img.Save(string.Format("{0}imgShort\\tempImg\\{1}_{2}_{3}",
  97. AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  98. PbCache.sportInfo.baseSpotNo,
  99. PbCache.actualFirstNo,
  100. (PbCache.videoChild.Count + 1)), System.Drawing.Imaging.ImageFormat.Jpeg);
  101. //*
  102. //最后进行截图操作
  103. CameraShotCls cameraShot = new CameraShotCls();
  104. cameraShot.CapMethod(PbCache.actualFirstNo);
  105. //*/
  106. #endregion
  107. }
  108. catch (Exception ex)
  109. {
  110. }
  111. btnFH.Enabled = false;
  112. }
  113. else
  114. {
  115. btnSave.Enabled = true;
  116. }
  117. vicPlayClass.GetVoicePlay(strMsg, PbCache.lockCarNo);
  118. //提示信息,
  119. //txtMsgInfo.Text = PbCache.ResultMessage;
  120. lblog = PbCache.ResultMessage;
  121. #region LED写入
  122. PbCache.ledInfo = string.Format("计量完成,车号:{0},车重:{1},物资:{2}", PbCache.lockCarNo, PbCache.lockWgt, preTrack != null ? preTrack.matterName : "");
  123. #endregion
  124. }
  125. catch (Exception ex)
  126. {
  127. //语音播报
  128. vicPlayClass.GetVoicePlay("称重数据保存失败", PbCache.lockCarNo);
  129. //提示信息,
  130. //txtMsgInfo.Text = "称重数据保存失败";
  131. lblog = "称重数据保存失败";
  132. lg.WriteLog(3, PbCache.lockCarNo + "称重保存失败:" + ex.Message);
  133. }
  134. }
  135. private void btnHelp_Click(object sender, EventArgs e)
  136. {
  137. if (PbCache.monitor.isHelp == "0")
  138. {
  139. RESTfulResult<string> rms = monitor.doUpdateWf(new MeterWorkMonitor { pointNo = PbCache.sportInfo.baseSpotNo, isHelp = "1" });
  140. if (!rms.Succeed)
  141. {
  142. lg.WriteLog(3, PbCache.lockCarNo + "求助写入失败");
  143. }
  144. }
  145. }
  146. private void timer1_Tick(object sender, EventArgs e)
  147. {
  148. #region 采集线程中断超过30秒则自动关闭界面
  149. /*
  150. if (licType == PbCache.collect.licType)
  151. {
  152. iCollection++;
  153. if (iCollection > 30) //若连续30秒采集不到数据则关闭界面
  154. {
  155. this.Close();
  156. }
  157. }
  158. else
  159. {
  160. iCollection = 0;
  161. }
  162. licType = PbCache.collect.licType;
  163. //*/
  164. #endregion
  165. #region 查询扫码信息
  166. if (string.IsNullOrEmpty(PbCache.strCode))
  167. {
  168. firstCode = "";
  169. }
  170. else
  171. {
  172. if (firstCode != PbCache.strCode)
  173. {
  174. firstCode = "";
  175. //将预报信息查出来,然后写入到界面
  176. RESTfulResult<List<PreTrackScale>> rm = trackService.doQueryWf(new PreTrackScale { predictionNo = PbCache.strCode });
  177. if (rm.Succeed)
  178. {
  179. if (rm.Data == null || rm.Data.Count == 0)
  180. {
  181. //未找到预报信息,预报已删除
  182. vicPlayClass.GetVoicePlay("未找到有效预报", PbCache.collect.carno);
  183. }
  184. else
  185. {
  186. string ResultMessage = "";
  187. //验证预报信息
  188. if (validPred.ValidMethod(rm.Data[0], out ResultMessage))
  189. {
  190. //预报验证无误,则将预报信息写入到用户控件
  191. TrackCarNo = rm.Data[0].carNo;
  192. ucCarMeterInfo21.setFormControlValue(rm.Data[0]);//预报信息写入界面
  193. firstCode = PbCache.strCode;
  194. }
  195. else
  196. {
  197. //播报语音,提示预报异常
  198. vicPlayClass.GetVoicePlay(ResultMessage, PbCache.collect.carno);
  199. lblog = PbCache.ResultMessage;
  200. }
  201. }
  202. }
  203. else
  204. {
  205. lg.WriteLog(1, "查询预报编号异常");
  206. vicPlayClass.GetVoicePlay("未找到有效预报", PbCache.collect.carno);
  207. lblog = "获取预报失败!";
  208. }
  209. }
  210. }
  211. #endregion
  212. #region 第一次查询,有车号,重量稳定,红外验证通过的情况只查一次
  213. //如果没有查过一次,且扫描到车号信息,且重量稳定
  214. if (bRailwayActual && PbCache.collect.weightStatus == 0 && !string.IsNullOrEmpty(PbCache.collect.carno) && PbCache.monitorResult.valid_park_status)
  215. {
  216. #region 查询一次计量表中是否存在一条未洁净的数据,非一车联运情况扫码两次,一车联运的话
  217. MeterWorkCarActualFirstService workCarActualFirstService = new MeterWorkCarActualFirstService();
  218. RESTfulResult<List<MeterWorkCarActualFirst>> RESTfulResult = workCarActualFirstService.doQueryWf(new MeterWorkCarActualFirst { carNo = PbCache.collect.carno, valueFlag = "1" });
  219. if (RESTfulResult.Succeed)
  220. {
  221. if (RESTfulResult.Data != null && RESTfulResult.Data.Count > 0)
  222. {
  223. firstWgt = RESTfulResult.Data[0].meterWeight.Value;
  224. if (RESTfulResult.Data[0].weightType == "0")
  225. {
  226. txtGroess.Text = RESTfulResult.Data[0].meterWeight.Value + "";
  227. }
  228. else
  229. {
  230. txtTare.Text = RESTfulResult.Data[0].meterWeight.Value + "";
  231. }
  232. firstDb = RESTfulResult.Data[0];
  233. //给用户控件设置值
  234. ucCarMeterInfo21.setFormControlValue(firstDb);
  235. }
  236. bRailwayActual = false;
  237. }
  238. #endregion
  239. #region 查一次是否可留期限皮,可以则显示按钮
  240. /*
  241. if (termTareCar.ValidMethod(PbCache.collect.carno))
  242. {
  243. btnTare.Visible = true;
  244. }
  245. //*/
  246. #endregion
  247. }
  248. #endregion
  249. #region 毛皮净赋值
  250. if (PbCache.collect.weightStatus == 0 && PbCache.collect.carno != null && PbCache.collect.carno != "")
  251. {
  252. if (Math.Abs(PbCache.collect.weight - firstWgt) >= AppConfigCache.differenceWgt)
  253. {
  254. if (PbCache.collect.weight > firstWgt)
  255. {
  256. txtGroess.Text = PbCache.collect.weight + "";
  257. txtTare.Text = firstWgt + "";
  258. }
  259. else
  260. {
  261. txtTare.Text = PbCache.collect.weight + "";
  262. txtGroess.Text = firstWgt + "";
  263. }
  264. txtNet.Text = Math.Abs(PbCache.collect.weight - firstWgt) + "";
  265. }
  266. }
  267. #endregion
  268. #region 界面未锁定情况下,保存按钮的控制
  269. //界面未锁定的情况下
  270. if (!PbCache.isLockFrm)
  271. {
  272. ucWeightT1.setWgt(PbCache.collect.weight);
  273. ucWeightT1.setStable(PbCache.collect.weightStatus != 1 ? true : false);
  274. ucWeightT1.setExceed(PbCache.collect.weight > PbCache.range.upperRange ? false : true);
  275. txtCarNo.Text = PbCache.collect.carno;
  276. //界面未锁定的情况下,如果,有车号,重量稳定了,停车线验证通过,完成了扫码验证的情况下,则按钮可用
  277. if (!string.IsNullOrEmpty(PbCache.collect.carno) && PbCache.collect.weightStatus == 0 && !string.IsNullOrEmpty(firstCode) && PbCache.monitorResult.valid_park_status && ucWeightT1.isGreenWgt)
  278. {
  279. if (!btnSave.Visible)
  280. {
  281. btnSave.Visible = true;
  282. }
  283. if (!isVoiceDownCar)
  284. {
  285. isVoiceDownCar = true;
  286. vicPlayClass.GetVoicePlay("车上人员请下车", PbCache.collect.carno);
  287. }
  288. }
  289. else
  290. {
  291. if (btnSave.Visible)
  292. {
  293. btnSave.Visible = false;
  294. }
  295. }
  296. }
  297. #endregion
  298. #region 求助按钮控制
  299. switch (PbCache.monitor.isHelp)
  300. {
  301. case "0": //未呼叫
  302. {
  303. if (btnHelp.Text != "语音求助")
  304. {
  305. btnHelp.BackColor = Color.DodgerBlue;
  306. btnHelp.Text = "语音求助";
  307. }
  308. }; break;
  309. case "1": //呼叫待接听
  310. {
  311. if (btnHelp.Text != "呼叫中")
  312. {
  313. btnHelp.BackColor = Color.Red;
  314. btnHelp.Text = "呼叫中";
  315. }
  316. }; break;
  317. case "2": //呼叫已接听
  318. {
  319. if (btnHelp.Text != "已接听")
  320. {
  321. btnHelp.BackColor = Color.Green;
  322. btnHelp.Text = "已接听";
  323. }
  324. }; break;
  325. }
  326. #endregion
  327. }
  328. #region 信息提示框
  329. private string lblog;//信息显示
  330. public string Lblog//信息显示
  331. {
  332. get { return lblog; }
  333. set
  334. {
  335. lblog = value;
  336. DoShowlbLog(value);
  337. }
  338. }
  339. private delegate void ShowlbLog(string lblog);
  340. private void DoShowlbLog(string _lbLog)
  341. {
  342. if (this.txtMsgInfo.InvokeRequired)
  343. {//在线程里以安全方式调用控件
  344. ShowlbLog _MyInvokeOne = new ShowlbLog(DoShowlbLog);
  345. txtMsgInfo.Invoke(_MyInvokeOne, new object[] { _lbLog });
  346. }
  347. else
  348. {
  349. txtMsgInfo.Text = _lbLog;
  350. }
  351. }
  352. #endregion
  353. private void frmCarSalePurchase_FormClosing(object sender, FormClosingEventArgs e)
  354. {
  355. //关闭一些线程及定时任务
  356. timer1.Enabled = false;
  357. //初始化一些线程及数据,并关闭该界面
  358. PbCache.Load();
  359. }
  360. #region 打印
  361. string strFirstNo = "";
  362. private void Print1(string firstNo)
  363. {
  364. try
  365. {
  366. strFirstNo = firstNo;
  367. System.Drawing.Printing.PaperSize customSize1 = new System.Drawing.Printing.PaperSize("TestPaper", 300, 480); //101mm*110mm,换算成英寸
  368. printDocument1.DefaultPageSettings.PaperSize = customSize1;//将自定义的Papersize赋给PrintDocument
  369. printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = PbCache.sportInfo.printerName;//strPntSvrName;
  370. System.Drawing.Printing.Margins marginss = new System.Drawing.Printing.Margins(0, 0, 0, 0);
  371. printDocument1.DefaultPageSettings.Margins = marginss;
  372. printDocument1.Print();
  373. }
  374. catch (Exception ex)
  375. {
  376. lg.WriteLog(3, "打印异常");
  377. }
  378. }
  379. private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
  380. {
  381. try
  382. {
  383. if (string.IsNullOrEmpty(strFirstNo))
  384. {
  385. string sql = @"select actual_no actualNo,
  386. prediction_no predictionNo,
  387. car_no carNo,
  388. matter_name matterName,
  389. gross_weight grossWeight,
  390. gross_time grossTime,
  391. tare_weight tareWeight,
  392. tare_time tareTime,
  393. net_weight netWeight,
  394. meter_type_name meterTypeName,
  395. spec_name specName,
  396. forwarding_unit_name forwardingUnitName,
  397. receiving_uint_name receivingUintName,
  398. load_point_name loadPointName
  399. from meter_work_car_actual where actual_first1_no='" + strFirstNo + "' or actual_first2_no='" + strFirstNo + "'";
  400. //查下如果有洁净数据,表示这个数据是洁净,那么进行打印
  401. PbModelDbService<List<MeterWorkCarActual>> pbModelDbService = new PbModelDbService<List<MeterWorkCarActual>>();
  402. RESTfulResult<List<MeterWorkCarActual>> rm = pbModelDbService.executeSqlDataWf(sql);
  403. if (rm.Succeed)
  404. {
  405. if (rm.Data != null && rm.Data.Count > 0)
  406. {
  407. printClass.PrintPage(e, rm.Data[0]);
  408. }
  409. }
  410. }
  411. }
  412. catch (Exception ex)
  413. {
  414. lg.WriteLog(3, "打印异常");
  415. }
  416. }
  417. #endregion
  418. private void btnFH_Click(object sender, EventArgs e)
  419. {
  420. this.Close();
  421. }
  422. private static FrmMessage FrmMess(string strMess)
  423. {
  424. FrmMessage frmMessage = new FrmMessage();
  425. frmMessage.StartPosition = FormStartPosition.Manual;
  426. frmMessage.Location = new Point(350, 450);
  427. frmMessage.ShowMessage = strMess;
  428. return frmMessage;
  429. }
  430. }
  431. }