frmCarSalePurchase.cs 73 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397
  1. using CarMeterSystem.OptionCls;
  2. using com.hnshituo.core.webapp.vo;
  3. using Common;
  4. using MeterConditionLibrary;
  5. using MeterPlugInLibrary;
  6. using MeterSceneLibrary;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.Drawing;
  11. using System.Linq;
  12. using System.Threading;
  13. using System.Windows.Forms;
  14. namespace CarMeterSystem
  15. {
  16. public partial class frmCarSalePurchase : Form
  17. {
  18. public frmCarSalePurchase()
  19. {
  20. InitializeComponent();
  21. }
  22. private Print printClass = new Print();//打印
  23. private MeterWorkCarRecoverService carRecoverService = new MeterWorkCarRecoverService(); //复磅操作
  24. private MeterBaseTermTareDataService termTareDate = new MeterBaseTermTareDataService();//留期限皮操作
  25. private MeterWorkMonitorService monitor = new MeterWorkMonitorService(); //设备及远程呼叫监控表
  26. private MeterWorkCarActualFirstService workCarActualFirstService = new MeterWorkCarActualFirstService(); //一次计量数据
  27. private PreTrackScaleService trackService = new PreTrackScaleService();//查询预报信息
  28. private validTermTareCar termTareCar = new validTermTareCar();//验证是否可留期限皮
  29. private validRecoverInfo recoverInfo = new validRecoverInfo();//验证是否需要复磅以及是否满足复磅条件
  30. private MeterWorkCarActualFirst firstDb = null;//一次计量数据
  31. private SceneControl inner = new SceneControl(); //非内倒业务处理
  32. private validPrediction validPred = new validPrediction(); //验证预报信息
  33. private validUnloadAutomatic unloadAutomatic = new validUnloadAutomatic(); //自动卸货
  34. private VoicePlay vicPlayClass = new VoicePlay();//语音播放
  35. private Log lg = Log.GetInstance(); //写日志
  36. private double firstWgt = 0;
  37. private bool bRailwayActual = true;
  38. private bool isVoiceDownCar = false;//车上人员请下车播放一次
  39. private string firstCode = "";//上次扫码编号
  40. private string TrackCarNo = "";//预报车号
  41. private string sPreCarNo = "";//摄像头识别车号
  42. private string limsMsg = "";
  43. public bool isTest = false;
  44. private void frmCarSalePurchase_Load(object sender, EventArgs e)
  45. {
  46. try
  47. {
  48. timer1.Start();
  49. lbPointName.Text = PbCache.sportInfo.baseSpotName;
  50. ucCarMeterInfo21.setMeterType(PbCache.bussinessTypeName);
  51. }
  52. catch (Exception ex)
  53. {
  54. lg.WriteLog(13, PbCache.lockCarNo + "frmCarSalePurchase_Load事件异常:" + ex.Message);
  55. }
  56. }
  57. private void btnSave_Click(object sender, EventArgs e)
  58. {
  59. try
  60. {
  61. if (PbCache.collect == null) return;
  62. PbCache.isLockFrm = true;
  63. PbCache.lockCarNo = TrackCarNo;
  64. PbCache.lockWgt = PbCache.collect.weight;
  65. btnSave.Enabled = false;
  66. lg.WriteLog(15, PbCache.lockCarNo + "点击保存按钮");
  67. //2021年6月22日 存在需要复磅的数据,不允许进行保存操作
  68. recoverInfo.ValidAllowSave(PbCache.lockCarNo);
  69. if (PbCache.isAllowRecover)
  70. {
  71. PbCache.isLockFrm = false;
  72. btnSave.Enabled = true;
  73. setMsg(PbCache.ResultMessage);
  74. return;
  75. }
  76. txtMsgInfo.Text = "称重保存中......";
  77. FrmMessage frmMessage = FrmMess("是否确认保存当前计量数据!", "继续保存");
  78. if (frmMessage.ShowDialog(this) == DialogResult.Cancel)
  79. {
  80. PbCache.isLockFrm = false;
  81. btnSave.Enabled = true;
  82. txtMsgInfo.Text = "";
  83. lg.WriteLog(15, PbCache.lockCarNo + "保存按钮选择否");
  84. return;
  85. }
  86. try
  87. {
  88. //是否在黑名单内
  89. MeterBaseCarBlacelistService bService = new MeterBaseCarBlacelistService();
  90. RESTfulResult<List<MeterBaseCarBlacelist>> rmB = bService.doQueryWf(new MeterBaseCarBlacelist { carNo = PbCache.lockCarNo, valueFlag = "0" });
  91. if (rmB.Succeed)
  92. {
  93. if (rmB.Data != null && rmB.Data.Count > 0)
  94. {
  95. PbCache.ResultMessage = string.Format("车辆[{0}在黑名单内,不能计量", PbCache.lockCarNo);
  96. lg.WriteLog(3, string.Format("车辆[{0}在黑名单内,不能计量", PbCache.lockCarNo));
  97. PbCache.isLockFrm = false;
  98. btnSave.Enabled = true;
  99. return;
  100. }
  101. }
  102. else
  103. {
  104. PbCache.ResultMessage = "保存失败,获取黑名单数据异常,请稍后再试";
  105. lg.WriteLog(3, "获取黑名单数据异常,请稍后再试");
  106. PbCache.isLockFrm = false;
  107. btnSave.Enabled = true;
  108. return;
  109. }
  110. PreTrackScale preTrack = ucCarMeterInfo21._preTrack;
  111. string strMsg = "";
  112. // 2021年6月24日 智能计量做退货流程的配置
  113. ComBaseInfoService cis = new ComBaseInfoService();
  114. RESTfulResult<List<PbModelDb>> rm = cis.doQueryWf(new ComBaseInfo { baseCode = "001036001", validFlag = "1" });
  115. if (rm.Succeed && rm.Data != null && rm.Data.Count == 1)
  116. {
  117. if (PbCache.monitor != null && !"2".Equals(PbCache.monitor.isTakeOver) && preTrack != null && preTrack.meterTypeName.Contains("退货"))
  118. {
  119. PbCache.isLockFrm = false;
  120. btnSave.Enabled = true;
  121. setMsg("[" + preTrack.meterTypeName + "]流程,不允许进行在自助计量,请点击[语音求助]由司秤工远程过磅!");
  122. return;
  123. }
  124. }
  125. PbCache.addWgt = preTrack.addWeightSum == null ? 0 : preTrack.addWeightSum.Value;
  126. bool flag = false;
  127. //说明:不管是成功还是失败,都在180行有提示信息
  128. if (inner.WeightMeter(preTrack, null, out strMsg)) //meterTypeNo "001006001","001006002"
  129. {
  130. flag = true;
  131. //票据打印
  132. Print1(PbCache.actualFirstNo);
  133. try
  134. {
  135. #region 截取图片信息
  136. //截取屏幕信息
  137. Point screenPoint = this.PointToScreen(new Point());
  138. Rectangle rect = new Rectangle(screenPoint, this.Size);
  139. Image img = new Bitmap(rect.Width, rect.Height);
  140. Graphics g = Graphics.FromImage(img);
  141. g.CopyFromScreen(rect.X - 1, rect.Y - 1, 0, 0, rect.Size);//"D://file/1.jpg"
  142. img.Save(string.Format("{0}imgShort\\formalImg\\{1}_{2}_{3}.jpg",
  143. AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
  144. PbCache.sportInfo.baseSpotNo, "C" + PbCache.actualFirstNo, 7), System.Drawing.Imaging.ImageFormat.Jpeg);
  145. //(PbCache.videoChild.Count + 1)), System.Drawing.Imaging.ImageFormat.Jpeg);
  146. //*
  147. //最后进行截图操作
  148. CameraShotCls cameraShot = new CameraShotCls();
  149. cameraShot.CapMethod(PbCache.actualFirstNo);
  150. //*/
  151. #endregion 截取图片信息
  152. }
  153. catch (Exception ex)
  154. {
  155. lg.WriteLog(3, "计量完成,但图片截取失败,编号:" + PbCache.actualFirstNo);
  156. }
  157. //自动卸货
  158. unloadAutomatic.ValidMethod(preTrack);
  159. //若不是测试,保存完成后则不能返回,若是测试界面进入的则可点击返回按钮
  160. if (!isTest)
  161. {
  162. btnFH.Enabled = false;
  163. }
  164. }
  165. else
  166. {
  167. PbCache.isLockFrm = false;
  168. btnSave.Enabled = true;
  169. }
  170. #region 2021-02-22 add 增加留期限皮提醒
  171. string sql = @"select base_spot_no baseSpotNo,
  172. base_spot_name baseSpotName,
  173. warn_time warnTime,
  174. end_time endTime,
  175. car_no carNo
  176. from Meter_Base_Term_Tare_Data
  177. where car_no='" + PbCache.lockCarNo + "' and value_flag='0'";
  178. PbModelDbService<List<MeterBaseTermTareData>> pbModelDbService = new PbModelDbService<List<MeterBaseTermTareData>>();
  179. RESTfulResult<List<MeterBaseTermTareData>> rES = pbModelDbService.executeSqlDataWf(sql);
  180. if (rES.Succeed)
  181. {
  182. if (rES.Data != null && rES.Data.Count > 0)
  183. {
  184. if (DateTime.Now.CompareTo(rES.Data[0].endTime) >= 0)
  185. {
  186. PbCache.ResultMessage += "\n\r提醒:期限皮重已过期,请及时留期限皮";
  187. }
  188. else if (DateTime.Now.CompareTo(rES.Data[0].warnTime) >= 0)
  189. {
  190. PbCache.ResultMessage += "\n\r提醒:期限皮重将要过期,请及时留期限皮";
  191. }
  192. }
  193. }
  194. #endregion 2021-02-22 add 增加留期限皮提醒
  195. //语音提醒部分
  196. //flag =true表示称重成功
  197. if (flag && PbCache.ResultMessage.Contains("请及时留期限皮"))
  198. {
  199. vicPlayClass.GetVoicePlay("称重完成空车留期限皮", PbCache.lockCarNo);
  200. }
  201. else
  202. {
  203. vicPlayClass.GetVoicePlay(strMsg, PbCache.lockCarNo);
  204. }
  205. //提示信息,
  206. //txtMsgInfo.Text = PbCache.ResultMessage;
  207. lblog = string.IsNullOrEmpty(PbCache.ResultMessage) ? strMsg : PbCache.ResultMessage;//偶尔出现ResultMessage为空的情况
  208. DoShowlbLog(lblog);
  209. #region 2021-02-23 add 期限皮按钮显示
  210. if (flag && !btnTare.Visible)
  211. {
  212. try
  213. {
  214. //2021年3月15日 杨秀东 期限皮重显示按钮的显示方法修改 isShowBtnTare ValidMethod
  215. if (!string.IsNullOrEmpty(TrackCarNo) && termTareCar.isShowBtnTare(TrackCarNo))
  216. {
  217. btnTare.Visible = true;
  218. }
  219. }
  220. catch (Exception ex)
  221. {
  222. lg.WriteLog(13, PbCache.lockCarNo + "期限皮重按钮显示事件异常:" + ex.Message);
  223. }
  224. }
  225. #endregion 2021-02-23 add 期限皮按钮显示
  226. #region LED写入
  227. PbCache.ledInfo = string.Format("计量完成,车号:{0},车重:{1},物资:{2}", PbCache.lockCarNo, PbCache.lockWgt, preTrack != null ? preTrack.matterName : "");
  228. #endregion LED写入
  229. }
  230. catch (Exception ex)
  231. {
  232. //语音播报
  233. vicPlayClass.GetVoicePlay("称重数据保存失败", PbCache.lockCarNo);
  234. //提示信息,
  235. //txtMsgInfo.Text = "称重数据保存失败";
  236. lblog = "称重数据保存失败";
  237. DoShowlbLog(lblog);
  238. lg.WriteLog(3, PbCache.lockCarNo + "称重保存失败:" + ex.Message);
  239. PbCache.isLockFrm = false;
  240. btnSave.Enabled = true;
  241. }
  242. }
  243. catch (Exception ex)
  244. {
  245. lg.WriteLog(13, PbCache.lockCarNo + "保存事件异常:" + ex.Message);
  246. }
  247. }
  248. private void btnHelp_Click(object sender, EventArgs e)
  249. {
  250. if (PbCache.monitor.isHelp == "0")
  251. {
  252. RESTfulResult<string> rms = monitor.doUpdateWf(new MeterWorkMonitor { pointNo = PbCache.sportInfo.baseSpotNo, isHelp = "1" });
  253. if (!rms.Succeed)
  254. {
  255. lg.WriteLog(3, PbCache.lockCarNo + "求助写入失败");
  256. }
  257. }
  258. lg.WriteLog(15, PbCache.lockCarNo + "点击了语音求助按钮");
  259. }
  260. private bool isOverSound = false;
  261. private bool isCalibration = true;
  262. private bool bRelation = true;
  263. private bool isShowRecover = true; //是否需要判断显示复磅按钮
  264. //验证校秤数据
  265. private validCalibration vCalib = new validCalibration();
  266. private validCarno vCarNo = new validCarno();
  267. private bool bXCStart = false;
  268. private void timer1_Tick(object sender, EventArgs e)
  269. {
  270. #region 初始设置值
  271. try
  272. {
  273. if (PbCache.collect.weight < 500)
  274. {
  275. isCalibration = true;
  276. PbCache.addWgt = 0;
  277. this.Close();
  278. }
  279. #region 求助按钮控制
  280. if (PbCache.monitor != null && !string.IsNullOrEmpty(PbCache.monitor.isHelp))
  281. {
  282. switch (PbCache.monitor.isHelp)
  283. {
  284. case "0": //未呼叫
  285. {
  286. if (btnHelp.Text != "语音求助")
  287. {
  288. btnHelp.BackColor = Color.DodgerBlue;
  289. btnHelp.Text = "语音求助";
  290. }
  291. }; break;
  292. case "1": //呼叫待接听
  293. {
  294. if (btnHelp.Text != "呼叫中")
  295. {
  296. btnHelp.BackColor = Color.Red;
  297. btnHelp.Text = "呼叫中";
  298. }
  299. }; break;
  300. case "2": //呼叫已接听
  301. {
  302. if (btnHelp.Text != "已接听")
  303. {
  304. btnHelp.BackColor = Color.Green;
  305. btnHelp.Text = "已接听";
  306. }
  307. }; break;
  308. }
  309. }
  310. #endregion 求助按钮控制
  311. if (!PbCache.isLockFrm)
  312. {
  313. //ucWeightT1.setWgt(PbCache.collect.weight);
  314. ucWeightT1.setWgt(Math.Round((double)PbCache.collect.weight / 1000, 2)); //2021年5月10日界面显示单位,调整为T
  315. ucWeightT1.setStable(PbCache.collect.weightStatus != 1 ? true : false);
  316. ucWeightT1.setExceed(PbCache.collect.weight > PbCache.range.upperRange ? false : true);
  317. #region 远程计量
  318. //如果处于远程计量状态,且远程保存完成了,则提示保存完成,让司机知道
  319. if (PbCache.monitor != null)// && PbCache.collect.weight > 500)
  320. {
  321. if (!string.IsNullOrEmpty(PbCache.monitor.isOverWgt) && PbCache.monitor.isTakeOver == "2" && !isOverSound) //&& !PbCache.isLockFrm)
  322. {
  323. txtMsgInfo.Text = "称重完成";
  324. vicPlayClass.GetVoicePlay("称重完成", PbCache.collect.carno);
  325. isOverSound = true;
  326. Print1(PbCache.monitor.isOverWgt);
  327. return;
  328. }
  329. if (PbCache.monitor.isTakeOver == "2" || !string.IsNullOrEmpty(PbCache.monitor.isOverWgt))
  330. {
  331. btnSave.Visible = false;
  332. bRelation = true;
  333. lg.WriteLog(14, "车号:" + PbCache.collect.carno + ";远程计量完成后,保存按钮隐藏!");
  334. if (PbCache.monitor.isTakeOver == "2" && !txtMsgInfo.Text.Contains("称重完成"))
  335. {
  336. txtMsgInfo.Text = "司秤工正在远程计量,请等待处理!!";
  337. }
  338. return;
  339. }
  340. }
  341. #endregion 远程计量
  342. if (string.IsNullOrEmpty(TrackCarNo))
  343. {
  344. txtCarNo.Text = PbCache.collect.carno;
  345. }
  346. else
  347. {
  348. txtCarNo.Text = TrackCarNo;
  349. if (PbCache.collect != null && !string.IsNullOrEmpty(PbCache.collect.carno))
  350. {
  351. if (TrackCarNo != PbCache.collect.carno)
  352. {
  353. if (PbCache.monitor.carErr != "1") //写入一次车号异常
  354. {
  355. RESTfulResult<string> rms = monitor.doUpdateWf(new MeterWorkMonitor { pointNo = PbCache.sportInfo.baseSpotNo, carErr = "1" });
  356. }
  357. }
  358. else if (PbCache.monitor.carErr == "1") //若车号相等,但是之前写了一次车号异常,此时要改为车号正常
  359. {
  360. RESTfulResult<string> rms = monitor.doUpdateWf(new MeterWorkMonitor { pointNo = PbCache.sportInfo.baseSpotNo, carErr = "0" });
  361. }
  362. }
  363. vCarNo.ValidMethod(new PreTrackScale { carNo = TrackCarNo });
  364. if (TrackCarNo != PbCache.collect.carno && !PbCache.monitorResult.valid_carno)
  365. {
  366. // 2021年5月11日 未识别到车牌号,进行提示,避免出现重新扫码点保存的情况
  367. if (string.IsNullOrEmpty(PbCache.collect.carno))
  368. {
  369. txtMsgInfo.Text = string.Format("摄像头未识别到车牌号,不允许进行【保存】操作,请点击语音求助!");
  370. lg.WriteLog(14, "摄像头未识别到车牌号,不允许进行【保存】操作,请点击语音求助!");
  371. }
  372. else
  373. {
  374. txtMsgInfo.Text = string.Format("预报车号【{0}】与摄像头识别车号【{1}】不一致,请点击语音求助", TrackCarNo, PbCache.collect.carno);
  375. lg.WriteLog(14, "车号:" + PbCache.collect.carno + ";预报车号" + TrackCarNo + "与摄像头识别车号" + PbCache.collect.carno + "不一致!");
  376. }
  377. btnSave.Visible = false;
  378. return;
  379. }
  380. else
  381. {
  382. if (txtMsgInfo.Text.Contains("摄像头"))
  383. {
  384. txtMsgInfo.Text = ""; //将原来的不允许计量的提示给去掉
  385. }
  386. PbCache.collect.carno = TrackCarNo;
  387. }
  388. }
  389. }
  390. #endregion 初始设置值
  391. #region 查一次是否校秤,若未校秤则不能计量
  392. //*
  393. if (bRelation)
  394. {
  395. string msgInfo = "";
  396. isCalibration = vCalib.ValidMethod(new MeterWorkCalibrationMain { baseSpotNo = PbCache.sportInfo.baseSpotNo, valueFlag = "2" }, out msgInfo);
  397. bRelation = false;
  398. }
  399. if (!isCalibration)
  400. {
  401. MeterBaseCalibraNumRel calibraNumRel = PbCache.ltBaseCalibraNumRel.Where(s => s.baseSpotNo == PbCache.sportInfo.baseSpotNo).FirstOrDefault();
  402. if (calibraNumRel == null || calibraNumRel.isMeter == "否" || PbCache.collect.weight > (calibraNumRel.upWeight == null ? 0 : calibraNumRel.upWeight.Value))
  403. {
  404. if (!bXCStart)
  405. {
  406. vicPlayClass.GetVoicePlay("未校秤", "");
  407. bXCStart = true;
  408. }
  409. txtMsgInfo.Text = "未校秤无法计量";
  410. return;
  411. }
  412. }
  413. //*/
  414. #endregion 查一次是否校秤,若未校秤则不能计量
  415. #region 判断是否需要复磅
  416. if (isShowRecover && !string.IsNullOrEmpty(txtCarNo.Text))
  417. {
  418. recoverInfo.ValidMethod(txtCarNo.Text);
  419. if (PbCache.isAllowRecover)
  420. {
  421. btnRecover.Visible = true;
  422. }
  423. else
  424. {
  425. btnRecover.Visible = false;
  426. }
  427. isShowRecover = false;
  428. }
  429. #endregion 判断是否需要复磅
  430. #region 第一次查询,有车号,重量稳定,红外验证通过的情况只查一次
  431. //如果没有查过一次,且扫描到车号信息,且重量稳定
  432. if ((bRailwayActual || sPreCarNo != TrackCarNo || firstCode != PbCache.strCode) && PbCache.collect.weightStatus == 0 && !string.IsNullOrEmpty(TrackCarNo) && PbCache.monitorResult.valid_park_status)
  433. {
  434. firstWgt = 0;
  435. sPreCarNo = TrackCarNo;
  436. #region 查询一次计量表中是否存在一条未结净的数据,非一车联运情况扫码两次,一车联运的话
  437. RESTfulResult<List<MeterWorkCarActualFirst>> RESTfulResult = workCarActualFirstService.doQueryWf(new MeterWorkCarActualFirst { carNo = TrackCarNo, valueFlag = "1" });
  438. if (RESTfulResult.Succeed)
  439. {
  440. if (RESTfulResult.Data != null && RESTfulResult.Data.Count > 0)
  441. {
  442. firstWgt = RESTfulResult.Data[0].meterWeight.Value;
  443. firstDb = RESTfulResult.Data[0];
  444. //给用户控件设置值
  445. ucCarMeterInfo21.setFormControlValue(firstDb);
  446. }
  447. bRailwayActual = false;
  448. }
  449. #endregion 查询一次计量表中是否存在一条未结净的数据,非一车联运情况扫码两次,一车联运的话
  450. #region 查一次是否可留期限皮,可以则显示按钮
  451. PbCache.lockWgt = PbCache.collect.weight;
  452. //*
  453. btnTare.Visible = false;
  454. //2021年3月15日 期限皮重显示按钮的显示方法修改 isShowBtnTare ValidMethod
  455. if (termTareCar.isShowBtnTare(TrackCarNo))
  456. {
  457. lg.WriteLog(3, string.Format("9车辆[{0}进入期限皮重显示按钮的显示判断", TrackCarNo));
  458. btnTare.Visible = true;
  459. }
  460. //*/
  461. #endregion 查一次是否可留期限皮,可以则显示按钮
  462. }
  463. #endregion 第一次查询,有车号,重量稳定,红外验证通过的情况只查一次
  464. #region 查询扫码信息
  465. if (string.IsNullOrEmpty(PbCache.strCode))
  466. {
  467. firstCode = "";
  468. }
  469. else if (!PbCache.isLockFrm)
  470. {
  471. if (firstCode != PbCache.strCode)
  472. {
  473. //将预报信息查出来,然后写入到界面
  474. RESTfulResult<List<PreTrackScale>> rm = trackService.doQueryWf(new PreTrackScale { predictionNo = PbCache.strCode });
  475. if (rm.Succeed)
  476. {
  477. firstCode = PbCache.strCode;
  478. if (rm.Data == null || rm.Data.Count == 0)
  479. {
  480. lblog = "未找到编号为[" + PbCache.strCode + "]的有效预报";
  481. DoShowlbLog(lblog);
  482. //未找到预报信息,预报已删除
  483. vicPlayClass.GetVoicePlay("未找到有效预报", PbCache.collect.carno);
  484. lg.WriteLog(14, "车号:" + PbCache.lockCarNo + ";未找到有效预报,保存按钮隐藏!");
  485. btnSave.Visible = false;
  486. return;
  487. }
  488. else
  489. {
  490. lblog = "请仔细核对扫码信息,无误且重量稳定后请点击保存";
  491. DoShowlbLog(lblog);
  492. string ResultMessage = "";
  493. //验证预报信息
  494. if (validPred.ValidMethod(rm.Data[0], out ResultMessage))
  495. {
  496. //预报验证无误,则将预报信息写入到用户控件
  497. TrackCarNo = rm.Data[0].carNo;
  498. ucCarMeterInfo21.setFormControlValue(rm.Data[0]);//预报信息写入界面
  499. //将扫码车号信息录入
  500. RESTfulResult<string> rms = monitor.doUpdateWf(new MeterWorkMonitor { pointNo = PbCache.sportInfo.baseSpotNo, scanCar = TrackCarNo });
  501. #region 这里查下这个车有没有期限皮,当前物料是否能使用期限皮 termTareDate
  502. // and t2.meter_nature_name like '%外%' //此为车辆计量属性; 例如:若不是中控,则不允许使用期限皮重(九江取消了)
  503. if (firstWgt < 500)
  504. {
  505. firstWgt = 0;
  506. string sql = @"select t1.meter_weight meterWeight,
  507. t1.data_no dataNo,
  508. t1.create_time createTime,
  509. t1.base_spot_no baseSpotNo,
  510. t1.base_spot_name baseSpotName
  511. from Meter_Base_Term_Tare_Data t1, Meter_Base_Term_Tare_Car t2
  512. where t1.car_no = t2.car_no
  513. and t2.value_flag = '0'
  514. and t1.value_flag = '0'
  515. and t1.car_no = '" + rm.Data[0].carNo + @"'
  516. and t1.end_time>sysdate";
  517. PbModelDbService<List<MeterBaseTermTareData>> pb = new PbModelDbService<List<MeterBaseTermTareData>>();
  518. RESTfulResult<List<MeterBaseTermTareData>> rmType = pb.executeSqlDataWf(sql);
  519. if (rmType.Succeed)
  520. {
  521. // //and t.meter_nature_name like '%外%' //此为物料计量属性,例如:若不是外购物料,则不允许使用期限皮重;(九江取消了)
  522. if (rmType.Data != null && rmType.Data.Count > 0)
  523. {
  524. //查下当前拖的物料是否可用期限皮;验证业务类型是否允许使用期限皮重
  525. string sqls = @"select t.matter_no id, t.matter_name text
  526. from meter_base_matter_info t,meter_base_metertype_conf t2
  527. where t.allowed_tare_weight = '1'
  528. and t.valid_flag = '1'
  529. and t.matter_no='" + rm.Data[0].matterNo + @"'
  530. and t2.is_allow_term_tare = '1' and t2.meter_type_no = '" + rm.Data[0].meterTypeNo + @"'";
  531. PbModelDbService<List<PbModelDb>> pbp = new PbModelDbService<List<PbModelDb>>();
  532. RESTfulResult<List<PbModelDb>> rmT = pbp.executeSqlDataWf(sqls);
  533. if (rmT.Succeed)
  534. {
  535. if (rmT.Data != null && rmT.Data.Count > 0)
  536. {
  537. //查找期限皮重信息
  538. firstWgt = rmType.Data[0].meterWeight.Value;
  539. }
  540. }
  541. }
  542. }
  543. }
  544. #endregion 这里查下这个车有没有期限皮,当前物料是否能使用期限皮 termTareDate
  545. }
  546. else
  547. {
  548. //播报语音,提示预报异常
  549. vicPlayClass.GetVoicePlay(ResultMessage, PbCache.collect.carno);
  550. lblog = PbCache.ResultMessage;
  551. DoShowlbLog(lblog);
  552. btnSave.Visible = false;
  553. lg.WriteLog(14, "车号:" + PbCache.lockCarNo + ";预报查询异常,保存按钮隐藏!");
  554. return;
  555. }
  556. }
  557. }
  558. else
  559. {
  560. lg.WriteLog(1, "查询预报编号异常");
  561. vicPlayClass.GetVoicePlay("未找到有效预报", PbCache.collect.carno);
  562. lblog = "获取预报失败!";
  563. DoShowlbLog(lblog);
  564. btnSave.Visible = false;
  565. lg.WriteLog(14, "车号:" + PbCache.lockCarNo + ";未找到有效预报,保存按钮隐藏!");
  566. return;
  567. }
  568. }
  569. #region 如果存在一次信息,且当前预报编号与一次的不一样
  570. if (firstDb != null && !string.IsNullOrEmpty(firstDb.predictionNo) && !string.IsNullOrEmpty(PbCache.strCode))
  571. {
  572. if (PbCache.strCode != firstDb.predictionNo)
  573. {
  574. if (firstDb.predictionType != "2")//一次计量的计量预报如果不是联运预报,那么当前扫的码必须与前面那个一致
  575. {
  576. string str = "当前计量预报【" + PbCache.strCode + "】与上次未结净数据预报【" + firstDb.predictionNo + "】不一致,请重新扫码或语音求助!";
  577. if (lblog != str)
  578. {
  579. vicPlayClass.GetVoicePlay("预报不一致", PbCache.collect.carno);
  580. lblog = str;
  581. DoShowlbLog(lblog);
  582. }
  583. btnSave.Visible = false;
  584. lg.WriteLog(14, "车号:" + PbCache.lockCarNo + ";当前计量预报【" + PbCache.strCode + "】与上次未结净数据预报【" + firstDb.predictionNo + "】不一致,保存按钮隐藏!");
  585. return;
  586. }
  587. else //如果一次计量是联运预报,且预报的使用状态为4(正使用)则认为走了互锁式计量,因为非互锁的情况计量一次预报状态会变为2
  588. {
  589. RESTfulResult<List<PreTrackScale>> rm = trackService.doQueryWf(new PreTrackScale { predictionNo = firstDb.predictionNo, valueFlag = "4" });
  590. if (rm.Succeed)
  591. {
  592. if (rm.Data != null && rm.Data.Count > 0)
  593. {
  594. string str = "当前计量预报【" + PbCache.strCode + "】与上次未结净数据预报【" + firstDb.predictionNo + "】不一致,请重新扫码或语音求助!";
  595. if (lblog != str)
  596. {
  597. vicPlayClass.GetVoicePlay("预报不一致", PbCache.collect.carno);
  598. lblog = str;
  599. DoShowlbLog(lblog);
  600. }
  601. btnSave.Visible = false;
  602. lg.WriteLog(14, "车号:" + PbCache.lockCarNo + ";计量预报【" + PbCache.strCode + "】与上次未结净数据预报【" + firstDb.predictionNo + "】不一致,保存按钮隐藏!");
  603. return;
  604. }
  605. else //非互锁的情况计量,此时编号应该存在在一次计量中的编号中
  606. {
  607. string sCode = firstDb.predictionCombination.Split(',').ToList().Where(s => s.CompareTo(PbCache.strCode) == 0).FirstOrDefault();
  608. if (string.IsNullOrEmpty(sCode))
  609. {
  610. string str = "当前计量预报【" + PbCache.strCode + "】不在上次计量联运预报【" + firstDb.predictionCombination + "】中,请重新扫码或语音求助!";
  611. if (lblog != str)
  612. {
  613. vicPlayClass.GetVoicePlay("预报不一致", PbCache.collect.carno);
  614. lblog = str;
  615. DoShowlbLog(lblog);
  616. }
  617. btnSave.Visible = false;
  618. lg.WriteLog(14, "车号:" + PbCache.lockCarNo + ";计量预报【" + PbCache.strCode + "】不在上次计量联运预报【" + firstDb.predictionCombination + "】中,保存按钮隐藏!");
  619. return;
  620. }
  621. }
  622. }
  623. else
  624. {
  625. lg.WriteLog(1, "查询预报编号异常");
  626. vicPlayClass.GetVoicePlay("未找到有效预报", PbCache.collect.carno);
  627. lblog = "获取一次计量时的预报失败,预报编号【" + firstDb.predictionNo + "】!";
  628. DoShowlbLog(lblog);
  629. btnSave.Visible = false;
  630. lg.WriteLog(14, "车号:" + PbCache.lockCarNo + ";获取一次计量时的预报失败,预报编号【" + firstDb.predictionNo + "】,保存按钮隐藏!");
  631. return;
  632. }
  633. }
  634. }
  635. }
  636. #endregion 如果存在一次信息,且当前预报编号与一次的不一样
  637. }
  638. #endregion 查询扫码信息
  639. #region 毛皮净赋值
  640. if (PbCache.collect.weightStatus == 0 && firstWgt > 500)
  641. {
  642. if (Math.Abs(firstWgt - PbCache.collect.weight) > AppConfigCache.differenceWgt)
  643. {
  644. //2021年5月10日界面显示单位,调整为T
  645. if (PbCache.collect.weight > firstWgt)
  646. {
  647. txtGroess.Text = Math.Round((double)PbCache.collect.weight / 1000, 2) + "";
  648. txtTare.Text = Math.Round(firstWgt / 1000, 2) + "";
  649. }
  650. else
  651. {
  652. txtTare.Text = Math.Round((double)PbCache.collect.weight / 1000, 2) + "";
  653. txtGroess.Text = Math.Round(firstWgt / 1000, 2) + "";
  654. }
  655. txtNet.Text = Math.Round(Math.Abs(PbCache.collect.weight - firstWgt) / 1000, 2) + "";
  656. }
  657. }
  658. #endregion 毛皮净赋值
  659. #region 界面未锁定的情况下,如果,有车号,重量稳定了,停车线验证通过,完成了扫码验证
  660. //没有远程接管,且已查过一次数据,且界面未锁定的情况下,如果,有车号,重量稳定了,停车线验证通过,完成了扫码验证的情况下,则按钮可用
  661. if (PbCache.monitor != null && PbCache.monitor.isTakeOver == "0" && !bRailwayActual
  662. && !PbCache.isLockFrm && PbCache.collect.weightStatus == 0 && !string.IsNullOrEmpty(firstCode)
  663. && PbCache.monitorResult.valid_park_status && ucWeightT1.isGreenWgt)
  664. {
  665. if (!btnSave.Visible)
  666. {
  667. btnSave.Visible = true;
  668. }
  669. if (!isVoiceDownCar)
  670. {
  671. isVoiceDownCar = true;
  672. vicPlayClass.GetVoicePlay("车上人员请下车", PbCache.collect.carno);
  673. //txtMsgInfo.Text = "请核对车号后,扫描您手机中的二维码";
  674. }
  675. }
  676. else
  677. {
  678. if (btnSave.Visible && !PbCache.isLockFrm)
  679. {
  680. btnSave.Visible = false;
  681. lg.WriteLog(14, "车号:" + PbCache.collect.carno + ";对射没对准【" + PbCache.monitorResult.valid_park_status + "】" +
  682. "||重量不是绿色【" + ucWeightT1.isGreenWgt + "】" +
  683. "||重量不稳定 0:重量稳定; 1:重量不稳定; 2:空磅【" + PbCache.collect.weightStatus + "】" +
  684. "||不是智能计量状态【" + PbCache.monitor.isTakeOver + "】" +
  685. "||扫码编号为空隐藏【" + firstCode + "】" +
  686. "||一次计量数据已经查询完成【" + bRailwayActual + "】" +
  687. "||界面已锁定【" + PbCache.isLockFrm + "】,保存按钮隐藏!");
  688. }
  689. }
  690. #endregion 界面未锁定的情况下,如果,有车号,重量稳定了,停车线验证通过,完成了扫码验证
  691. }
  692. catch (Exception ex)
  693. {
  694. lg.WriteLog(13, "采购销售页面timer1异常!异常信息:" + ex);
  695. }
  696. }
  697. #region 信息提示框
  698. private string lblog;//信息显示
  699. public string Lblog//信息显示
  700. {
  701. get { return lblog; }
  702. set
  703. {
  704. lblog = value;
  705. DoShowlbLog(value);
  706. }
  707. }
  708. private delegate void ShowlbLog(string lblog);
  709. private void DoShowlbLog(string _lbLog)
  710. {
  711. if (this.txtMsgInfo.InvokeRequired)
  712. {//在线程里以安全方式调用控件
  713. ShowlbLog _MyInvokeOne = new ShowlbLog(DoShowlbLog);
  714. txtMsgInfo.Invoke(_MyInvokeOne, new object[] { _lbLog });
  715. }
  716. else
  717. {
  718. txtMsgInfo.Text = _lbLog;
  719. }
  720. //2021年3月13日;不管是哪一种方式调用界面控件的值,均记录现场日志
  721. if (!string.IsNullOrEmpty(lblog) && PbCache.collect != null)
  722. {
  723. lg.WriteLog(9, "[" + PbCache.collect.carno + "]" + lblog);
  724. }
  725. }
  726. #endregion 信息提示框
  727. private void frmCarSalePurchase_FormClosing(object sender, FormClosingEventArgs e)
  728. {
  729. try
  730. {
  731. //初始化一些线程及数据,并关闭该界面
  732. if (PbCache.collect != null && !string.IsNullOrEmpty(PbCache.collect.carno))
  733. {
  734. PbCache.collect.carno = "";
  735. }
  736. isShowRecover = true;//是否去查询“复磅”按钮的显示与否
  737. PbCache.strCode = "";
  738. bRailwayActual = true; //为true时会重新查询一次计量数据
  739. isShowRecover = true;//是否去查询“复磅”按钮的显示与否
  740. PbCache.Load();
  741. //关闭一些线程及定时任务
  742. timer1.Stop();
  743. timer1.Dispose();
  744. #region 清理一次监控表的几个数值,防止上车速度过快导致提示称重完成
  745. //RESTfulResult<string> rms = monitor.doUpdateWf(new MeterWorkMonitor { pointNo = PbCache.sportInfo.baseSpotNo, isOverWgt = "" });
  746. RESTfulResult<string> rms = monitor.doUpdateWf(new MeterWorkMonitor
  747. {
  748. pointNo = PbCache.sportInfo.baseSpotNo,
  749. validWgt = "1",
  750. validCarno = "1",
  751. validTareTime = "1",
  752. validMatTime = "1",
  753. validTimeInterval = "1",
  754. validParkStatus = "1",
  755. validExceedWgt = "1",
  756. validPredictionDiff = "1",
  757. setCar = "",
  758. rfidCar = "",
  759. photoCar = "",
  760. scanCar = "",
  761. editCar = "",
  762. carErr = "0",
  763. wgtErr = "0",
  764. stopOverTime = "0",
  765. msgInfo = "",
  766. isOverWgt = "",
  767. isHelp = "0",
  768. wgt = 0
  769. });
  770. }
  771. catch (Exception ex)
  772. {
  773. lg.WriteLog(0, "frmCarSalePurchase_FormClosing异常:下秤关闭界面异常!异常信息:" + ex);
  774. }
  775. #endregion 清理一次监控表的几个数值,防止上车速度过快导致提示称重完成
  776. }
  777. #region 打印
  778. private string strFirstNo = "";
  779. private class PrintCls
  780. {
  781. public int printNum { get; set; }
  782. public MeterWorkCarActual printDb { get; set; }
  783. public int iType { get; set; } //0毛 1 皮 2净
  784. public string qrCode { get; set; }
  785. }
  786. private PrintCls printData = new PrintCls();
  787. private void Print1(string firstNo)
  788. {
  789. try
  790. {
  791. //lg.WriteLog(1, "打印开始");
  792. #region 获取打印信息,若需要打印则调用打印操作
  793. List<PrintCls> prrintC = new List<PrintCls>();
  794. string sql = @"select actual_no actualNo,
  795. prediction_no predictionNo,
  796. car_no carNo,
  797. matter_no matterNo,
  798. matter_name matterName,
  799. gross_weight grossWeight,
  800. gross_time grossTime,
  801. tare_weight tareWeight,
  802. tare_time tareTime,
  803. net_weight netWeight,
  804. net_Time netTime,
  805. 'x' meterTypeNo,
  806. meter_type_name meterTypeName,
  807. spec_name specName,
  808. forwarding_unit_name forwardingUnitName,
  809. receiving_uint_name receivingUintName,
  810. load_point_name loadPointName,
  811. add_weight addWeight,
  812. '1' uploadFlag --1结净数据 0一次表数据
  813. from meter_work_car_actual where actual_first1_no = '" + firstNo + @"' or actual_first2_no='" + firstNo + @"'
  814. union all
  815. select t.actual_first_no actualNo,
  816. t.prediction_no predictionNo,
  817. t.car_no carNo,
  818. t.matter_no matterNo,
  819. t.matter_name matterName,
  820. t.meter_weight grossWeight,
  821. t.create_time grossTime,
  822. 0 tareWeight,
  823. t.create_time tareTime,
  824. 0 netWeight,
  825. null netTime,
  826. t.weight_type meterTypeNo, --0毛重 否则皮重
  827. t.meter_type_name meterTypeName,
  828. t.spec_name specName,
  829. t.forwarding_unit_name forwardingUnitName,
  830. t.receiving_uint_name receivingUintName,
  831. t.load_point_name loadPointName,
  832. t.add_weight addWeight,
  833. '0' uploadFlag
  834. from METER_WORK_CAR_ACTUAL_FIRST t
  835. where t.actual_first_no = '" + firstNo + "' or t.actual_first_no = (select max(actual_first2_no) from meter_work_car_actual where actual_first1_no='" + firstNo + "')";
  836. //查下如果有毛重或者结净数据,则可进入打印判断
  837. PbModelDbService<List<MeterWorkCarActual>> pbModelDbService = new PbModelDbService<List<MeterWorkCarActual>>();
  838. RESTfulResult<List<MeterWorkCarActual>> rm = pbModelDbService.executeSqlDataWf(sql);
  839. //lg.WriteLog(1, "打印第一个sql:" + sql);
  840. if (rm.Succeed)
  841. {
  842. if (rm.Data != null && rm.Data.Count > 0)
  843. {
  844. //2021年6月26日 对一车联运的进行处理;用一次计量编号查二次计量数据,
  845. sql = @"select t3.actual_no actualNo, t3.prediction_no predictionNo, t3.car_no carNo, t3.matter_no matterNo, t3.matter_name matterName,
  846. t3.gross_weight grossWeight, t3.gross_time grossTime, t3.tare_weight tareWeight, t3.tare_time tareTime, t3.net_weight netWeight,
  847. t3.net_Time netTime, 'x' meterTypeNo, t3.meter_type_name meterTypeName, t3.spec_name specName,
  848. t3.forwarding_unit_name forwardingUnitName, t3.receiving_uint_name receivingUintName, t3.load_point_name loadPointName,
  849. t3.add_weight addWeight, '1' uploadFlag from meter_work_car_actual_first t2
  850. left join meter_work_car_actual t3 on t2.actual_first_no = t3.actual_first1_no
  851. where t2.prediction_combination in (select t.prediction_combination
  852. from meter_work_car_actual_first t
  853. where t3.value_flag = '0' and t.actual_first_no = '" + firstNo + @"' and
  854. instr(t.prediction_combination, '20') > 0) order by t3.net_time desc";
  855. RESTfulResult<List<MeterWorkCarActual>> rmLy = pbModelDbService.executeSqlDataWf(sql);
  856. if (rmLy.Succeed && rmLy.Data != null && rmLy.Data.Count == 1)
  857. {
  858. rm.Data = rmLy.Data; //一车联运,将毛重替换为净重数据
  859. }
  860. //若有毛重或者净重,找到对应数据的物料信息,若有,那么去找打印配置信息数据
  861. List<MeterWorkCarActual> mwa = rm.Data.Where(s => !string.IsNullOrEmpty(s.matterNo) && (s.meterTypeNo == "x" || s.meterTypeNo == "0")).ToList();
  862. if (mwa != null && mwa.Count > 0 && !string.IsNullOrEmpty(mwa[0].matterNo))
  863. {
  864. sql = @"select BASE_SPOT_NO baseSpotNo,
  865. load_point_no loadPointNo,
  866. matter_no matterNo,
  867. METER_TYPE_NO meterTypeNo,
  868. weight_type_name weightTypeName,
  869. PRINT_NUM printNum
  870. from METER_BASE_BILL_PRINT
  871. where matter_no = '" + mwa[0].matterNo + @"'
  872. and nvl(METER_TYPE_NO, '" + PbCache.bussinessTypeCode + @"') = '" + PbCache.bussinessTypeCode + @"'
  873. and nvl(BASE_SPOT_NO, '" + PbCache.sportInfo.baseSpotNo + @"') = '" + PbCache.sportInfo.baseSpotNo + @"'
  874. and nvl(load_point_no, '" + (mwa[0].loadPointNo == null ? "1" : mwa[0].loadPointNo) + @"') = '" + (mwa[0].loadPointNo == null ? "1" : mwa[0].loadPointNo) + @"'";
  875. //lg.WriteLog(1, "打印第二个sql:" + sql);
  876. //and nvl(METER_TYPE_NO, '') = ''
  877. PbModelDbService<List<MeterBaseBillPrint>> pbPrintService = new PbModelDbService<List<MeterBaseBillPrint>>();
  878. RESTfulResult<List<MeterBaseBillPrint>> rmPint = pbPrintService.executeSqlDataWf(sql);
  879. if (rmPint.Succeed)
  880. {
  881. if (rmPint.Data != null && rmPint.Data.Count > 0)
  882. {
  883. //若有净重信息:1毛重时间晚于皮重时间,则打印毛、皮、净重,2毛重早于皮重,打印皮、净
  884. //若只有毛重信息则打印毛重
  885. List<MeterBaseBillPrint> lGrossprint = rmPint.Data.Where(s => s.weightTypeName.Contains("毛")).ToList();
  886. List<MeterBaseBillPrint> lTarePrint = rmPint.Data.Where(s => s.weightTypeName.Contains("皮")).ToList();
  887. List<MeterBaseBillPrint> lNetprint = rmPint.Data.Where(s => s.weightTypeName.Contains("净")).ToList();
  888. List<MeterWorkCarActual> mwaChild = mwa.Where(s => s.meterTypeNo == "x").ToList();
  889. if (mwaChild != null && mwaChild.Count > 0) //若有净重信息
  890. {
  891. if (lTarePrint != null && lTarePrint.Count > 0)
  892. {
  893. //获取非毛,非净重信息如果没有则用的期限皮,此时不打,否则则打印
  894. MeterWorkCarActual mwca = rm.Data.Where(s => s.meterTypeNo != "x" && s.meterTypeNo != "0").FirstOrDefault();
  895. if (mwca != null)
  896. {
  897. PrintCls cls = new PrintCls();
  898. cls.printNum = (int)(lTarePrint[0].printNum == null ? 0 : lTarePrint[0].printNum.Value);
  899. cls.iType = 1;//皮重
  900. cls.printDb = mwca;
  901. prrintC.Add(cls);
  902. }
  903. }
  904. if (lGrossprint != null && lGrossprint.Count > 0)
  905. {
  906. //获取毛重信息
  907. MeterWorkCarActual mwca = rm.Data.Where(s => s.meterTypeNo == "0").FirstOrDefault();
  908. if (mwca != null)
  909. {
  910. PrintCls cls = new PrintCls();
  911. cls.printNum = (int)(lGrossprint[0].printNum == null ? 0 : lGrossprint[0].printNum.Value);
  912. cls.iType = 0;//毛重
  913. cls.printDb = mwca;
  914. prrintC.Add(cls);
  915. }
  916. }
  917. if (lNetprint != null && lNetprint.Count > 0)
  918. {
  919. //获取净重信息
  920. MeterWorkCarActual mwca = rm.Data.Where(s => s.meterTypeNo == "x").FirstOrDefault();
  921. if (mwca != null)
  922. {
  923. PrintCls cls = new PrintCls();
  924. cls.printNum = (int)(lNetprint[0].printNum == null ? 0 : lNetprint[0].printNum.Value);
  925. cls.iType = 2;//净重
  926. cls.printDb = mwca;
  927. prrintC.Add(cls);
  928. }
  929. }
  930. }
  931. else //只有毛重信息则打印毛重
  932. {
  933. if (lGrossprint != null && lGrossprint.Count > 0)
  934. {
  935. //获取毛重信息
  936. MeterWorkCarActual mwca = rm.Data.Where(s => s.meterTypeNo == "0").FirstOrDefault();
  937. if (mwca != null)
  938. {
  939. PrintCls cls = new PrintCls();
  940. cls.printNum = (int)(lGrossprint[0].printNum == null ? 0 : lGrossprint[0].printNum.Value);
  941. cls.iType = 0;//毛重
  942. cls.printDb = mwca;
  943. prrintC.Add(cls);
  944. }
  945. }
  946. }
  947. if (prrintC != null && prrintC.Count > 0)
  948. {
  949. FrmMessage frmMessage = FrmMess("是否打印第【1】张票据!", "打印");
  950. if (frmMessage.ShowDialog(this) == DialogResult.OK)
  951. {
  952. lg.WriteLog(10, "车号【" + PbCache.lockCarNo + "】是否打印选择了【是】");
  953. lg.WriteLog(15, PbCache.lockCarNo + "是否打印选择了【是】");
  954. strFirstNo = firstNo;
  955. //printDocument1.PrinterSettings.PrinterName = PbCache.sportInfo.printerName;//strPntSvrName;
  956. System.Drawing.Printing.PaperSize customSize1 = new System.Drawing.Printing.PaperSize("TestPaper", 398, 433); //101mm*110mm,换算成英寸
  957. printDocument1.DefaultPageSettings.PaperSize = customSize1;//将自定义的Papersize赋给PrintDocument
  958. System.Drawing.Printing.Margins marginss = new System.Drawing.Printing.Margins(0, 0, 0, 0);
  959. printDocument1.DefaultPageSettings.Margins = marginss;
  960. printDocument1.PrintController = new System.Drawing.Printing.StandardPrintController();
  961. foreach (PrintCls db in prrintC)
  962. {
  963. switch (db.printDb.meterTypeNo)
  964. {
  965. case "0": //毛
  966. db.qrCode = db.printDb.actualNo + "," + db.printDb.grossWeight + "," + "1";
  967. break;
  968. case "x": //净
  969. db.qrCode = db.printDb.actualNo + "," + db.printDb.netWeight + "," + "2";
  970. break;
  971. default: //皮
  972. db.qrCode = db.printDb.actualNo + "," + db.printDb.grossWeight + "," + "1";
  973. break;
  974. }
  975. RESTfulResult<string> rQRCode = workCarActualFirstService.doQRCodeWf(db.qrCode);
  976. db.qrCode = rQRCode.Data;
  977. for (int i = 0; i < db.printNum; i++)
  978. {
  979. if (i == 0)
  980. {
  981. printData = db;
  982. printDocument1.Print();
  983. lg.WriteLog(10, "当前第" + (i + 1) + "次打印:" + printData.iType + " 车号:" + db.printDb.carNo + ",二维码:" + db.qrCode);
  984. }
  985. else
  986. {
  987. FrmMessage frmMessageContinue = FrmMess("已打印【" + i + "】张,是否继续打印第【" + (i + 1) + "】张票据!", "打印");
  988. if (frmMessageContinue.ShowDialog(this) == DialogResult.OK)
  989. {
  990. printData = db;
  991. printDocument1.Print();
  992. lg.WriteLog(10, "当前第" + (i + 1) + "次打印:" + printData.iType + " 车号:" + db.printDb.carNo + ",二维码:" + db.qrCode);
  993. }
  994. else
  995. {
  996. lg.WriteLog(10, "车号【" + PbCache.lockCarNo + "】第" + i + "次是否打印,选择了【否】");
  997. }
  998. }
  999. //printData = db;
  1000. //printDocument1.Print();
  1001. //lg.WriteLog(11, "当前打印:" + printData.iType + " 车号:" + db.printDb.carNo);
  1002. }
  1003. }
  1004. }
  1005. else
  1006. {
  1007. lg.WriteLog(10, "车号【" + PbCache.lockCarNo + "】是否打印选择了【否】");
  1008. lg.WriteLog(15, PbCache.lockCarNo + "是否打印选择了【否】");
  1009. }
  1010. }
  1011. }
  1012. }
  1013. else
  1014. {
  1015. lg.WriteLog(10, "车号【" + PbCache.lockCarNo + "】获取打印配置数据信息异常sql:【" + sql + "】");
  1016. }
  1017. }
  1018. }
  1019. }
  1020. else
  1021. {
  1022. lg.WriteLog(10, "车号【" + PbCache.lockCarNo + "】获取计量数据信息异常sql:【" + sql + "】");
  1023. }
  1024. #endregion 获取打印信息,若需要打印则调用打印操作
  1025. }
  1026. catch (Exception ex)
  1027. {
  1028. lg.WriteLog(10, "车号【" + PbCache.lockCarNo + "】打印异常" + ex);
  1029. }
  1030. }
  1031. private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
  1032. {
  1033. try
  1034. {
  1035. if (printData != null && printData.printDb != null)
  1036. {
  1037. printClass.PrintAllPage(e, printData.printDb, printData.qrCode);
  1038. /*
  1039. //结净打印
  1040. if (printData.iType == 2)
  1041. {
  1042. printClass.PrintPage(e, printData.printDb, PbCache.strQRCode);
  1043. }
  1044. else //非结净打印
  1045. {
  1046. printClass.PrintWgtPage(e, printData.printDb, PbCache.strQRCode);
  1047. }
  1048. //*/
  1049. }
  1050. }
  1051. catch (Exception ex)
  1052. {
  1053. lg.WriteLog(11, "打印异常" + ex);
  1054. }
  1055. }
  1056. #endregion 打印
  1057. private void btnFH_Click(object sender, EventArgs e)
  1058. {
  1059. lg.WriteLog(15, PbCache.lockCarNo + "点击了返回主界面");
  1060. this.Close();
  1061. }
  1062. private static FrmMessage FrmMess(string strMess, string strBtnSaveInfo)
  1063. {
  1064. FrmMessage frmMessage = new FrmMessage();
  1065. frmMessage.StartPosition = FormStartPosition.Manual;
  1066. frmMessage.Location = new Point(350, 450);
  1067. frmMessage.ShowMessage = strMess;
  1068. frmMessage.BtnSaveText = strBtnSaveInfo;
  1069. frmMessage.BtnCancelText = "取消";
  1070. return frmMessage;
  1071. }
  1072. private void btnTare_Click(object sender, EventArgs e)
  1073. {
  1074. try
  1075. {
  1076. if (PbCache.collect == null) return;
  1077. //界面锁定
  1078. PbCache.lockWgt = PbCache.collect.weight;
  1079. PbCache.lockCarNo = PbCache.collect.carno;
  1080. //PbCache.lockCarNo = TrackCarNo;
  1081. btnTare.Enabled = false;
  1082. lg.WriteLog(15, PbCache.lockCarNo + "点击期限皮重按钮");
  1083. //2021年3月13日 杨秀东新增逻辑,车号为空则不允许进行期限皮重保存操作
  1084. if (string.IsNullOrEmpty(PbCache.lockCarNo))
  1085. {
  1086. vicPlayClass.GetVoicePlay("不允许进行期限皮重保存", PbCache.lockCarNo);
  1087. PbCache.ResultMessage = "未抓拍到车牌号,进行期限皮重保存,请点[语音求助]!";
  1088. setMsg(PbCache.ResultMessage);
  1089. btnTare.Enabled = true;
  1090. return;
  1091. }
  1092. //*
  1093. //查一次是否可留期限皮
  1094. if (!termTareCar.ValidMethod(PbCache.lockCarNo))
  1095. {
  1096. vicPlayClass.GetVoicePlay("不允许进行期限皮重保存", PbCache.lockCarNo);
  1097. setMsg(PbCache.ResultMessage);
  1098. btnTare.Enabled = true;
  1099. return;
  1100. }
  1101. //*/
  1102. //暂停取实时数据
  1103. setMsg("称重保存中......");
  1104. FrmMessage frmMessage = FrmMess("是否确认保存期限皮重!", "继续保存");
  1105. if (frmMessage.ShowDialog(this) == DialogResult.Cancel)
  1106. {
  1107. setMsg("");
  1108. btnTare.Enabled = true;
  1109. lg.WriteLog(15, PbCache.lockCarNo + "期限皮重继续保存选择了【否】");
  1110. return;
  1111. }
  1112. MeterBaseTermTareData mbttd = new MeterBaseTermTareData();
  1113. mbttd.baseSpotNo = PbCache.sportInfo.baseSpotNo;
  1114. mbttd.baseSpotName = PbCache.sportInfo.baseSpotName;
  1115. mbttd.carNo = PbCache.collect.carno;
  1116. mbttd.meterWeight = PbCache.lockWgt;
  1117. mbttd.valueFlag = "0";
  1118. mbttd.createTime = DateTime.Now;
  1119. mbttd.createManNo = PbCache.sportInfo.baseSpotNo;
  1120. mbttd.createManName = PbCache.sportInfo.baseSpotName;
  1121. mbttd.meterTime = mbttd.createTime.Value;
  1122. mbttd.startTime = mbttd.createTime.Value;
  1123. //操作日志
  1124. MeterMonitorNote monitorNote = new MeterMonitorNote();
  1125. monitorNote.baseSpotNo = mbttd.baseSpotNo;
  1126. monitorNote.baseSpotName = mbttd.baseSpotName;
  1127. monitorNote.operationContent = string.Format("保存期限皮重");
  1128. monitorNote.operationTime = mbttd.createTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
  1129. monitorNote.carNo = mbttd.carNo;
  1130. monitorNote.meterNoteSource = "0";
  1131. //期限皮重数据保存
  1132. RESTfulResult<string> RESTfulResult = termTareDate.doSaveWf(mbttd, monitorNote);
  1133. if (RESTfulResult.Succeed)
  1134. {
  1135. //保存成功,语音提示保存成功
  1136. vicPlayClass.GetVoicePlay("期限皮重保存成功", PbCache.lockCarNo);//播放语音
  1137. btnTare.Visible = false;
  1138. lg.WriteLog(3, string.Format("车号[{0}]期限皮重保存成功", PbCache.lockCarNo));
  1139. setMsg("称重保存成功,请离开秤台!");
  1140. }
  1141. else
  1142. {
  1143. btnTare.Enabled = true;
  1144. setMsg(RESTfulResult.ResultMessage);
  1145. vicPlayClass.GetVoicePlay("期限皮重保存失败", PbCache.lockCarNo);//播放语音
  1146. lg.WriteLog(3, string.Format("车号[{0}]期限皮重保存失败", PbCache.lockCarNo));
  1147. }
  1148. }
  1149. catch (Exception ex)
  1150. {
  1151. lg.WriteLog(13, PbCache.lockCarNo + "期限皮重事件异常:" + ex.Message);
  1152. }
  1153. }
  1154. /// <summary>
  1155. /// 复磅保存
  1156. /// </summary>
  1157. /// <param name="sender"></param>
  1158. /// <param name="e"></param>
  1159. private void btnRecover_Click(object sender, EventArgs e)
  1160. {
  1161. try
  1162. {
  1163. if (PbCache.collect == null) return;
  1164. PbCache.isLockFrm = true;
  1165. PbCache.lockCarNo = PbCache.collect.carno;
  1166. PbCache.lockWgt = PbCache.collect.weight;
  1167. btnRecover.Enabled = false;
  1168. lg.WriteLog(15, PbCache.lockCarNo + "点击【复磅】按钮");
  1169. //验证是否满足复磅的条件
  1170. recoverInfo.ValidMethod(PbCache.lockCarNo);
  1171. if (!PbCache.isAllowRecover)
  1172. {
  1173. PbCache.isLockFrm = false;
  1174. btnRecover.Enabled = true;
  1175. setMsg(PbCache.ResultMessage);
  1176. lg.WriteLog(15, PbCache.lockCarNo + "不满足复磅条件!" + PbCache.ResultMessage);
  1177. return;
  1178. }
  1179. txtMsgInfo.Text = "复磅保存中......";
  1180. FrmMessage frmMessage = FrmMess("是否确认保存当前复磅重量数据!", "继续保存");
  1181. if (frmMessage.ShowDialog(this) == DialogResult.Cancel)
  1182. {
  1183. PbCache.isLockFrm = false;
  1184. btnRecover.Enabled = true;
  1185. txtMsgInfo.Text = "";
  1186. lg.WriteLog(15, PbCache.lockCarNo + "【复磅】按钮选择否");
  1187. return;
  1188. }
  1189. //复磅数据保存
  1190. RESTfulResult<string> RESTfulResult = carRecoverService.doRecover(new MeterWorkCarRecover { carNo = PbCache.lockCarNo, recMeterWeight = PbCache.lockWgt });
  1191. if (RESTfulResult.Succeed)
  1192. {
  1193. //保存成功,语音提示保存成功
  1194. vicPlayClass.GetVoicePlay("称重完成", PbCache.lockCarNo);//播放语音
  1195. btnTare.Visible = false;
  1196. lg.WriteLog(3, string.Format("车号[{0}]复磅保存成功", PbCache.lockCarNo));
  1197. setMsg("复磅保存成功,请离开秤台!");
  1198. }
  1199. else
  1200. {
  1201. PbCache.isLockFrm = false;
  1202. btnRecover.Enabled = true;
  1203. setMsg(RESTfulResult.ResultMessage);
  1204. vicPlayClass.GetVoicePlay("称重数据保存失败", PbCache.lockCarNo);//播放语音
  1205. lg.WriteLog(3, string.Format("车号[{0}]复磅保存失败" + RESTfulResult.Message, PbCache.lockCarNo));
  1206. }
  1207. }
  1208. catch (Exception ex)
  1209. {
  1210. lg.WriteLog(13, PbCache.lockCarNo + "复磅保存事件异常:" + ex.Message);
  1211. }
  1212. }
  1213. #region 信息提示框
  1214. public void setMsgInfo(string ResultMessage)
  1215. {
  1216. setMsg(ResultMessage);
  1217. }
  1218. private void setMsg(string ResultMessage)
  1219. {
  1220. if (txtMsgInfo.InvokeRequired)
  1221. {
  1222. Action<string> action = new Action<string>(setMsgInfo);
  1223. Invoke(action, new object[] { ResultMessage });
  1224. }
  1225. else
  1226. {
  1227. txtMsgInfo.Text = ResultMessage;
  1228. }
  1229. if (!string.IsNullOrEmpty(ResultMessage) && PbCache.collect != null)
  1230. {
  1231. lg.WriteLog(9, "[" + PbCache.collect.carno + "]" + ResultMessage);
  1232. }
  1233. }
  1234. #endregion 信息提示框
  1235. /// <summary>
  1236. /// 车号改变时,判断是否需要显示复磅按钮
  1237. /// </summary>
  1238. /// <param name="sender"></param>
  1239. /// <param name="e"></param>
  1240. private void txtCarNo_TextChanged(object sender, EventArgs e)
  1241. {
  1242. //第一次判断由timerk控件执行
  1243. if (!string.IsNullOrEmpty(txtCarNo.Text) && !isShowRecover)
  1244. {
  1245. recoverInfo.ValidMethod(txtCarNo.Text);
  1246. if (PbCache.isAllowRecover)
  1247. {
  1248. btnRecover.Visible = true;
  1249. }
  1250. else
  1251. {
  1252. btnRecover.Visible = false;
  1253. }
  1254. isShowRecover = false;
  1255. }
  1256. }
  1257. }
  1258. }