using CarMeterSystem.OptionCls; using com.hnshituo.core.webapp.vo; using Common; using iCore.Rtdb; using iCore.Rtdb.RtdbTable; using MeterConditionLibrary; using MeterModelLibrary; using MeterModuleLibrary.uc; using MeterPlugInLibrary; using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Net.NetworkInformation; using System.Threading; using System.Windows.Forms; using SystemOffLine; namespace CarMeterSystem { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } private Log l = Log.GetInstance(); private Print printClass = new Print();//打印 //内存表 private MemoryTableDataSocket MemoClass = new MemoryTableDataSocket(""); //实时表数据采集 private DataCollectionControl collection = new DataCollectionControl(); //图片控制器含图片压缩及上传curl private ImageCurlControl imageCurlControl = new ImageCurlControl(); //与监控界面对接的表 private MeterWorkMonitorService meterWorkMonitor = new MeterWorkMonitorService(); //零点报警表 private meterworkzeroalarmservice zeroAlarmService = new meterworkzeroalarmservice(); //车号修正 private CarNoModfiy modfiy = new CarNoModfiy(); /// /// 这个是保存前一次采集中的车号信息 /// private string preCarNo = ""; //一码通接口调用 private HttpRequest httpRequest = new HttpRequest(); //验证对射 private validParkStatus valid = new validParkStatus(); //语音播报 private VoicePlay vicPlayClass = new VoicePlay(); private LED_Control led_controler = null; //监控表操作 private MeterMonitorWeightService monitorWeightService = new MeterMonitorWeightService(); private MeterWorkScheduledHelpService meterWorkScheduledHelpService = new MeterWorkScheduledHelpService(); //历史皮操作 private MeterBaseHisTareDataService hisTareDataService = new MeterBaseHisTareDataService(); /// /// 欢迎界面 /// private frmWelcome_Jisco frmWelcome = new frmWelcome_Jisco();//欢迎 /// /// 计量页 /// private frmOneYardToEnd fcc = null; /// /// 基础数据载入 /// private BaseDbCls bd = new BaseDbCls(); //扫码修正车号标识 private bool codeFlag = false; private List lu = new List(); private bool isVoiceDownCar = false;//车上人员请下车播放一次 private bool isShowFrmWelcome = true; //是否显示欢迎界面 private bool isOpened = false;//是否已经打开了扫码计量界面 private bool noteCode = false; string validParkStatuConfig = ConfigurationManager.AppSettings["validParkStatuConfig"].ToString(); //扫码器 private SerialPortES sweepCodeClass = new SerialPortES(); private SerialPortES sweepCodeClass2 = new SerialPortES(); private void frmMain_Load(object sender, EventArgs e) { //* try { this.Hide(); LoginCls lg = new LoginCls(); // 计量页 fcc = new frmOneYardToEnd(); timer1.Start(); //2021年6月21日 杨秀东添加 if (isShowFrmWelcome) { frmWelcome.Show(); frmWelcome.Visible = true; } if (lg.LoginIn()) { //if (SystemUpdate(false)) //{ // return; //} if (bd.setBaseDb() && bd.getBaseDb()) { if (!string.IsNullOrEmpty(PbCache.sportInfo.ledIp)) { led_controler = new LED_Control(PbCache.sportInfo.ledIp); } //调用该方法时已赋值 test git 测试git推送代码123;456 RESTfulResult> rm = meterWorkMonitor.doQueryOneWf(new MeterWorkMonitor { validFlag = "1", pointNo = PbCache.sportInfo.baseSpotNo }); if (!rm.Succeed) { l.WriteLog(1, "载入监控表数据异常"); return; } else if (rm.Data != null && rm.Data.Count > 0) { if (string.IsNullOrEmpty(PbCache.collect_no)) { PbCache.collect_no = rm.Data[0].collectionCode; MemoClass = new MemoryTableDataSocket(PbCache.collect_no); } } else { l.WriteLog(1, "为配置监控数据"); return; } //若未校秤的话,也不允许计量 //载入界面业务按钮 if (PbCache.businessType != null && PbCache.businessType.Count > 0) { foreach (ComBaseInfo info in PbCache.businessType) { ucBusinessType uc = new ucBusinessType(); switch (info.baseCode) { case "001006003": uc.setControl(info.baseName, info.memo, info.baseCode); break; case "001006001": case "001006002": uc.setControl(info.baseName, info.memo, info.baseCode); break; default: uc.setControl(info.baseName, info.memo, info.baseCode); break; } uc.Dock = DockStyle.Top; //uc.setControl("","","",); uc.ucEvent += new EventHandler(ucEvents); lu.Add(uc); //panel7.Controls.Add(uc); } } //开启基础进程 l.WriteLog(0, "系统登录成功"); collection.EventDataCollectionArgs += new EventDataCollection(EventData);//数据采集及扫码信息 collection.Start(PbCache.sportInfo.baseSpotNo, PbCache.sportInfo.baseSpotName); StartWriteMonitor(0);//启动更新监控表线程 // 数据提交线程 imageCurlControl.Start(); //图片上传线程 //新扫码线程 if (AppConfigCache._comPara?.Split(new char[] { ',' })?.Length == 5) { sweepCodeClass.StartThreadSweep(AppConfigCache._comPara); //扫码线程 } if (AppConfigCache._comPara2?.Split(new char[] { ',' })?.Length == 5) { sweepCodeClass2.StartThreadSweep(AppConfigCache._comPara2); //扫码线程 } } else { l.WriteLog(0, "系统登录失败"); } } else { l.WriteLog(0, "按IP地址找不到计量点信息,系统登录失败,ip:" + IpAddress.getIp); } } catch (Exception ex) { l.WriteLog(0, "系统加载失败:" + ex.Message); } //*/ } private void timer1_Tick(object sender, EventArgs e) { //timer1.Stop(); try { if ( PbCache.collect?.weight > 500) { PbCache.bussinessTypeName = ""; PbCache.bussinessTypeCode = ""; if (fcc.Visible == false) { fcc.Visible = true; fcc.init(); } } timer1.Interval = 1000; } catch (Exception ee) { //GlobalInstanceController.Instance.LastCallMessage = ee.Message; timer1.Interval = 1000; } //timer1.Start(); } /// /// 直接打开扫码计量界面 /// /// /// //private void timer1_Tick(object sender, EventArgs e) //{ // if (!isOpened && PbCache.collect?.weight > 500) // { // l.WriteLog(31, "frmOneYardToEnd页面打开(timer1_Tick:frmMain),车号:" + PbCache.resultCarNo + "||" + (PbCache.collect == null ? "" : PbCache.collect.carno)); // isOpened = true; // PbCache.bussinessTypeName = ""; // PbCache.bussinessTypeCode = ""; // try // { // if(fcc.Visible == false) // { // fcc.Visible = true; // fcc.init(); // } // } // catch(Exception exp) // { // } // } //} #region //* /// /// 委托的方式调用控件的点击事件 /// /// /// public void ucEvents(object sender, EventArgs e) { Control control = (Control)sender; ucBusinessType um = control.Parent.Parent as ucBusinessType; try { switch (control.Name) { case "btnContext": case "btnPurchase": { PbCache.bussinessTypeName = um._bussiness == null ? "" : um._bussiness; PbCache.bussinessTypeCode = um._code; switch (um._code) { case "001006003": frmInternalTransport frm = new frmInternalTransport(); frm.ShowDialog(); break; /* case "001006001": case "001006002": frmCarSalePurchase frmCar = new frmCarSalePurchase(); frmCar.ShowDialog(); break; //*/ default: frmCarSalePurchase frmCar = new frmCarSalePurchase(); frmCar.ShowDialog(); break; } }; break; default: break; } } catch (Exception ex) { //MessageBox.Show("操作异常:" + ex.Message); } } //*/ #endregion #region private void setThisVis(bool visb) { if (this.InvokeRequired) { Action action = new Action(setThisVis); Invoke(action, new object[] { visb }); } else { if (this.Visible != visb) { this.Visible = visb; } } } #endregion #region private void setWelecomeVis(bool visb) { if (!isShowFrmWelcome) return;//2021年6月21日 杨秀东添加 if (frmWelcome.InvokeRequired) { Action action = new Action(setWelecomeVis); Invoke(action, new object[] { visb }); } else { if (frmWelcome.Visible != visb) { frmWelcome.Visible = visb; frmWelcome.setLogin(); } } //*/ } #endregion private int iCount = 0, iHodeTime = 0; private bool flagCarMonit = false;//车号修正 private bool bEditCar = false; //手动修正车号 private bool isOpenMeter = false; //是否已打开计量界面,若已经打开则这里关于超量程及红外的语音将停止播报 private string firstCode = "";//上次扫码的信息 private string ledTxt = ""; private bool isLedWrite = false;//是否写入一次LED private string sPreNo = ""; //记录重量曲线变化 private int preWgt = 0;//前一次重量,用于重量曲线 private string sCarNo = ""; private int iCountPark = 0; private string editCarNo = ""; private bool isCarSource = false; private bool isResFlag = true; private string RFIDCarNo = ""; private string isWriteRFID = AppConfigCache.isWriteRFID; private int num = 0; //EventData实例化 RESTfulResult rmsEventDataLastTime = new RESTfulResult(); RESTfulResult> rmUpdateEventDataMonitor = new RESTfulResult>(); MeterWorkMonitor updateEventDataMonitor = new MeterWorkMonitor(); MeterMonitorWeight meterMonitorWeightEventData1 = new MeterMonitorWeight(); MeterMonitorWeight meterMonitorWeightEventData2 = new MeterMonitorWeight(); MeterWorkMonitor mwUpdate = new MeterWorkMonitor(); PbModelDbService> pbpRFIDEventData = new PbModelDbService>(); RESTfulResult> rmTRFIDEventData = new RESTfulResult>(); RESTfulResult rmsmwUpdateEventData = new RESTfulResult(); MeterWorkScheduledHelp meterWorkScheduledHelp1 = new MeterWorkScheduledHelp(); MeterWorkScheduledHelp meterWorkScheduledHelpRFID = new MeterWorkScheduledHelp(); RESTfulResult rmsdoUpdateWfEventData = new RESTfulResult(); RESTfulResult rmssEventData = new RESTfulResult(); MeterWorkMonitor meterWorkMonitorEventDataI = new MeterWorkMonitor(); MeterWorkCarActualFirstService mwcfs = new MeterWorkCarActualFirstService(); RESTfulResult rmsSweepCodeClass = new RESTfulResult(); frmOneYardToEnd frmOneYardToEnd = new frmOneYardToEnd(); /// /// 数据采集 /// /// /// private void EventData(object o, DataCollectionArgs e) { if (!timer1.Enabled) { timer1.Enabled = true; //l.WriteLog(32, "定时器重启(timer1_Tick:frmMain),车号:" + PbCache.resultCarNo + "||" + (PbCache.collect == null ? "" : PbCache.collect.carno)); } #region //num++; //e.carno = "湘G88888"; //e.weight = 23580; //e.weightStatus = 0; //if (num < 20) //{ // e.weight = 23580; // e.weightStatus = 1; //} //else if (num < 26) //{ // e.weight = 23580; // e.weightStatus = 0; //} //else if (num < 39) //{ // e.weight = 23580; // e.weightStatus = 0; //} //else if (num < 45) //{ // e.weight = 15000; // e.weightStatus = 1; //} //else //{ // e.weight = 400; //} #endregion //这里每隔0.5秒执行一次 try { if (PbCache.carNoSource == 0) { PbCache.carNoSource = 1; } if (e.carno == "nown") { e.carno = ""; } #region 扫码信息 //if (string.IsNullOrEmpty(sweepCodeClass.StrCode)) //{ // if (string.IsNullOrEmpty(PbCache.strCode)) // { // codeFlag = false; // firstCode = ""; // PbCache.strCode = ""; // l.WriteLog(12, "主线程扫码值为空时清空;sweepCodeClass.StrCode值为" + sweepCodeClass.StrCode + " ;PbCache.strCode值为:" + PbCache.strCode); // } //} //else //{ // codeFlag = true; // frmOneYardToEnd frmOneYardToEnd = new frmOneYardToEnd(); // Hashtable hashTable = new Hashtable(); // hashTable.Add("message", sweepCodeClass.StrCode); // rmsSweepCodeClass = mwcfs.DecryptionForWfTest(hashTable); // if (rmsSweepCodeClass.Code == "0") // { // PbCache.collect.carno = rmsSweepCodeClass.Data; // PbCache.strCode = rmsSweepCodeClass.Data; // } // if (rmsSweepCodeClass.Code == "1") // { // vicPlayClass.GetVoicePlay("车号二维码已过期", PbCache.collect.carno); // frmOneYardToEnd.setMsgInfo("车号二维码已过期"); // } // if (rmsSweepCodeClass.Code == "2") // { // vicPlayClass.GetVoicePlay("不是有效车号二维码", PbCache.collect.carno); // frmOneYardToEnd.setMsgInfo("不是有效车号二维码"); // } // if (rmsSweepCodeClass.Code == "9") // { // vicPlayClass.GetVoicePlay("不是有效车号二维码", PbCache.collect.carno); // frmOneYardToEnd.setMsgInfo("不是有效车号二维码"); // } // l.WriteLog(12, "测试扫码值" + rmsSweepCodeClass.Data); //} // 司机扫码为空,取工控机二维码 if (PbCache.sportInfo.scanRequireValid == "1") { if (PbCache.monitor.isValidScan == "0") { if (string.IsNullOrEmpty(sweepCodeClass2.StrCode)) { if (string.IsNullOrEmpty(sweepCodeClass.StrCode)) { if (string.IsNullOrEmpty(PbCache.strCode)) { codeFlag = false; firstCode = ""; PbCache.strCode = ""; //l.WriteLog(12, "主线程扫码值为空时清空;sweepCodeClass.StrCode值为" + sweepCodeClass.StrCode + " ;PbCache.strCode值为:" + PbCache.strCode); } } else { if (sweepCodeClass.StrCode.Substring(0, 3) == "TWB") { DecodeQRCodeYMT(sweepCodeClass.StrCode); } else { DecodeQRCode(sweepCodeClass.StrCode); } } } else { if (sweepCodeClass2.StrCode.Substring(0, 3) == "TWB") { DecodeQRCodeYMT(sweepCodeClass2.StrCode); } else { DecodeQRCode(sweepCodeClass2.StrCode); } } } } else { if (string.IsNullOrEmpty(sweepCodeClass2.StrCode)) { if (string.IsNullOrEmpty(sweepCodeClass.StrCode)) { if (string.IsNullOrEmpty(PbCache.strCode)) { codeFlag = false; firstCode = ""; PbCache.strCode = ""; //l.WriteLog(12, "主线程扫码值为空时清空;sweepCodeClass.StrCode值为" + sweepCodeClass.StrCode + " ;PbCache.strCode值为:" + PbCache.strCode); } } else { if (sweepCodeClass.StrCode.Substring(0, 3) == "TWB") { DecodeQRCodeYMT(sweepCodeClass.StrCode); } else { DecodeQRCode(sweepCodeClass.StrCode); } } } else { if (sweepCodeClass2.StrCode.Substring(0, 3) == "TWB") { DecodeQRCodeYMT(sweepCodeClass2.StrCode); } else { DecodeQRCode(sweepCodeClass2.StrCode); } } } #endregion #region 秤上无车10分钟获取一次基础数据 if (iCount < 1200) { iCount++; } else { try { //秤上没有车时,每隔10分钟获取一次基础数据 if (e.weight < 500) { if (bd.setBaseDb()) { l.WriteLog(0, "十分钟获取基础数据成功"); } else { l.WriteLog(0, "十分钟获取基础数据失败"); } iCount = 0; } } catch (Exception ex) { l.WriteLog(0, "十分钟获取基础数据失败:" + ex.Message); iCount = 0; } } #endregion #region 每10秒写入一次当前时间 if (iCount % 20 == 0) { //更新在线时间 rmsEventDataLastTime = meterWorkMonitor.doUpdateWfBySpotNo(new MeterWorkMonitor { pointNo = PbCache.sportInfo.baseSpotNo}); if (!rmsEventDataLastTime.Succeed) { l.WriteLog(0, "frmMain.EventData异常:写入时间异常,原因:" + rmsEventDataLastTime.ResultMessage); } } #endregion #region //一旦界面锁定则不采集数据 if (!PbCache.isLockFrm) { PbCache.collect.pointid = PbCache.sportInfo.baseSpotNo; PbCache.collect.weight = e.weight; PbCache.collect.weight = e.weight; PbCache.collect.weightStatus = e.weightStatus; PbCache.collect.parkStatus = e.parkStatus; PbCache.collect.datetime = e.datetime; PbCache.collect.licType = e.licType; if (!bEditCar && !codeFlag && String.IsNullOrEmpty(RFIDCarNo)) { PbCache.collect.carno = e.carno; } PbCache.collect.videoCarNo1 = e.videoCarNo1; PbCache.collect.videoCarNo2 = e.videoCarNo2; PbCache.collect.rfidCarNo = e.RfidNos; PbCache.collect.carnoAlert = e.carnoAlert; } if (PbCache.collect != null && PbCache.collect.weightStatus == 0) { if (string.IsNullOrEmpty(PbCache.resultWgt)) { PbCache.resultWgt = e.weight + ""; } if (!string.IsNullOrEmpty(PbCache.resultWgt) && e.weight > Convert.ToInt32(PbCache.resultWgt)) { PbCache.resultWgt = e.weight + ""; } if (!string.IsNullOrEmpty(e.carno) && PbCache.resultCarNo != e.carno) { PbCache.resultCarNo = e.carno + ""; //l.WriteLog(28, "车号賦值跟蹤:PbCache.resultCarNo" + PbCache.resultCarNo + "||e.carno" + e.carno); } } //*/ // 更新监控表 //doLive(); //重量大于500的情况下 if (e.weight > 500) { isResFlag = true; isCarSource = true; if (PbCache.dtStartTime == null) PbCache.dtStartTime = DateTime.Now; isLedWrite = true; PbCache.strState = "0"; #region 车上人员请下车 try { //界面未锁定的情况下,有车号,如果重量稳定了,停车线验证通过,未超量程的情况下,则按钮可用 if (PbCache.collect != null && !string.IsNullOrEmpty(PbCache.collect.carno) && PbCache.collect.weightStatus == 0 && PbCache.monitorResult.valid_park_status && PbCache.collect.weight < PbCache.range.upperRange) { if (!isVoiceDownCar) { isVoiceDownCar = true; vicPlayClass.GetVoicePlay("车上人员请下车", PbCache.collect.carno); } } } catch { } #endregion setWelecomeVis(false); //每隔1秒刷一次计量实时监控表数据值 if (iCount % 2 == 0) { //调用该方法时已赋值 updateEventDataMonitor.validFlag = "1"; updateEventDataMonitor.pointNo = PbCache.sportInfo.baseSpotNo; rmUpdateEventDataMonitor = meterWorkMonitor.doQueryOneWf(updateEventDataMonitor); if (!rmUpdateEventDataMonitor.Succeed) { l.WriteLog(0, "frmMain.EventData异常419:" + rmUpdateEventDataMonitor.ResultMessage); } else { if (rmUpdateEventDataMonitor.Data != null && rmUpdateEventDataMonitor.Data.Count > 0) { PbCache.monitor = rmUpdateEventDataMonitor.Data[0]; if (string.IsNullOrEmpty(PbCache.collect_no)) { PbCache.collect_no = rmUpdateEventDataMonitor.Data[0].collectionCode; } if (ledTxt != rmUpdateEventDataMonitor.Data[0].ledWriter && rmUpdateEventDataMonitor.Data[0].ledWriter != "") { //调用LED信息写入****************************** ledTxt = rmUpdateEventDataMonitor.Data[0].ledWriter; } if (string.IsNullOrEmpty(ledTxt)) { ledTxt = "欢迎使用酒钢汽车衡智能计量系统!"; } } } #region 2021-03-29 #region 摄像头当前采集的车号与上次采集的不一样且当前未勾选不验证,且当前车号未进行手动修正的情况下 if (preCarNo != e.carno && PbCache.monitor != null && PbCache.monitor.validCarno != "0" && !bEditCar) { flagCarMonit = false; } preCarNo = e.carno; #endregion if (!flagCarMonit) { sCarNo = e.carno; } //* //有车号,且重量稳定的情况下,只修正一次车号 if (!string.IsNullOrEmpty(e.carno) && e.weightStatus == 0 && !flagCarMonit && PbCache.monitor != null && PbCache.monitor.carMonitor == "1" && PbCache.monitor.carMonitorLvl > 0) { flagCarMonit = true; string methods = ""; for (int i = 0; i <= PbCache.monitor.carMonitorLvl; i++) { methods += "CarNoTrustCorrect" + i + ","; } editCarNo = modfiy.CarNoCorrect(e.carno, methods.Substring(0, methods.Length - 1)); sCarNo = editCarNo; //mwUpdate } //勾选了不验证车号的情况 if (PbCache.monitor.validCarno == "0") { flagCarMonit = true; } #endregion #region 每隔1秒写入一次重量曲线 try { if (preWgt != e.weight) { preWgt = e.weight; sPreNo = PbCache.sportInfo.baseSpotNo + DateTime.Now.ToString("yyyyMMddHHmmssfff"); meterMonitorWeightEventData1.weightNo = sPreNo; meterMonitorWeightEventData1.baseSpotNo = PbCache.sportInfo.baseSpotNo; meterMonitorWeightEventData1.baseSpotName = PbCache.sportInfo.baseSpotName; meterMonitorWeightEventData1.collectWeight = e.weight + ""; meterMonitorWeightEventData1.collectStartTime = PbCache.dtStartTime.Value; meterMonitorWeightEventData1.collectEndTime = DateTime.Now; meterMonitorWeightEventData1.spotTypeNo = "001002001"; meterMonitorWeightEventData1.spotTypeName = "汽车衡"; meterMonitorWeightEventData1.actualFirstNo = PbCache.actualFirstNo; monitorWeightService.doAddWf(meterMonitorWeightEventData1); } else { if (!string.IsNullOrEmpty(sPreNo)) { meterMonitorWeightEventData2.weightNo = sPreNo; meterMonitorWeightEventData2.collectEndTime = DateTime.Now; monitorWeightService.doUpdateWf(meterMonitorWeightEventData2); } } } catch { } #endregion #region 停留超时 iHodeTime++; mwUpdate.pointNo = PbCache.sportInfo.baseSpotNo; mwUpdate.editCar = editCarNo; if (PbCache.holdTime != null && PbCache.holdTime.Count > 0) { if (PbCache.holdTime[0].retentionTime != null) { if (PbCache.holdTime[0].retentionTime.Value < iHodeTime) { l.WriteLog(33, "iHodeTime:"+ iHodeTime + ",PbCache.holdTime[0].retentionTime.Value:"+ PbCache.holdTime[0].retentionTime.Value + ",mwUpdate.stopOverTime:"+ mwUpdate.stopOverTime); PbCache.isOvertimeAlarm = true; //是否超时报警 mwUpdate.stopOverTime = "1"; //写入一次停留超时 //mwUpdate.isHelp = "1";//派位 //mwUpdate.isTakeOver = "1"; iHodeTime = 99999;//不再增长避免超出 } } } #endregion #region RFID识别车号信息 mwUpdate.rfidCar = ""; mwUpdate.photoCar = e.videoCarNo1; mwUpdate.photoCar2 = e.videoCarNo2; mwUpdate.scanCar = ""; if (codeFlag) { mwUpdate.scanCar = PbCache.collect.carno; } //mwUpdate.photoCar = PbCache.collect.carno; if (!string.IsNullOrEmpty(e.RfidNos)) { string sqls = @"SELECT RFID_ID id,CAR_NO text FROM METER_BASE_RFID_INFO where RFID_CODE = '" + e.RfidNos + "'"; rmTRFIDEventData = pbpRFIDEventData.executeSqlDataWf(sqls); if (rmTRFIDEventData.Data == null || rmTRFIDEventData.Data.Count == 0) { } else { if (PbCache.carNoSource == 1) { PbCache.carNoSource = 2; } mwUpdate.rfidCar = rmTRFIDEventData.Data[0].text; sCarNo = rmTRFIDEventData.Data[0].text; RFIDCarNo = rmTRFIDEventData.Data[0].text; } } #endregion #region 计量员修改的车号信息 if (PbCache.monitor != null && !string.IsNullOrEmpty(PbCache.monitor.setCar)) { PbCache.carNoSource = 4; sCarNo = PbCache.monitor.setCar; bEditCar = true; flagCarMonit = true; codeFlag = false; sweepCodeClass.StrCode = ""; sweepCodeClass2.StrCode = ""; } #endregion #region 重量信息 if (!PbCache.isLockFrm) { mwUpdate.wgt = e.weight; } else { mwUpdate.wgt = Convert.ToInt32(PbCache.lockWgt); } #endregion #region 写入一次监控表,将重量/车号停留超时等信息写入 mwUpdate.msgInfo = PbCache.ResultMessage; mwUpdate.weightStatus = PbCache.collect.weightStatus; //另外初始化一次监控数据 rmsmwUpdateEventData = meterWorkMonitor.doUpdateWf(mwUpdate); if (!rmsmwUpdateEventData.Succeed) { l.WriteLog(0, "frmMain.EventData异常583:写入信息异常" + mwUpdate); } #endregion //验证对射 valid.ValidMethod(); if (!isOpenMeter) { //if (PbCache.range != null && PbCache.range.upperRange < e.weight) if (PbCache.range != null && PbCache.range.upperRange < e.weight) { //超量程 vicPlayClass.GetVoicePlay("已超量程", e.carno); //return; } else if (e.weightStatus == 0) { if (!PbCache.monitorResult.valid_park_status && validParkStatuConfig == "true") { iCountPark++; if (iCountPark > 9 && !string.IsNullOrEmpty(PbCache.collect.carno)) { PbCache.ResultMessage = "车辆超出秤台,请调整车位1"; //btnSave_Click //重量稳定,且对射验证不合格 vicPlayClass.GetVoicePlay("车辆超出秤台,请调整车位", e.carno); led_controler.setStaticLineMsg(PbCache.sportInfo.ledIp, "车辆超出秤台,请调整车位1"); //return; iCountPark = 0; //2021年7月27日5s播一次,然后重新在播 } } else { iCountPark = 0; } } } if (!lu[0].bcEnable) { foreach (ucBusinessType uc in lu) { uc.setControlEnable(true); } } if ((sweepCodeClass.StrCode == "" || sweepCodeClass2.StrCode == "") && !codeFlag) { PbCache.collect.carno = sCarNo; } if (codeFlag && !noteCode) { noteCode = true; meterWorkScheduledHelp1.baseSpotNo = PbCache.sportInfo.baseSpotNo; meterWorkScheduledHelp1.baseSpotName = PbCache.sportInfo.baseSpotName; meterWorkScheduledHelp1.carNo = string.IsNullOrEmpty(PbCache.collect.carno) ? PbCache.resultCarNo : PbCache.collect.carno; meterWorkScheduledHelp1.helpContent = "车号:" + sCarNo + "扫码过秤"; meterWorkScheduledHelp1.warmType = "2"; meterWorkScheduledHelp1.warmTypeName = "智能终端报警"; meterWorkScheduledHelpService.add(meterWorkScheduledHelp1); } } //写入LED信息 //if (PbCache.sportInfo != null && PbCache.ledInfo != PbCache.OldLedInfo) //{ // PbCache.OldLedInfo = PbCache.ledInfo; // if (PbCache.monitor != null && PbCache.monitor.ledKeep == "0") // { // //led_controler.setOneLineMsg(PbCache.sportInfo.ledIp, PbCache.ledInfo); // } //} } else { isOpened = false; //下次上秤直接打开主界面 if (e.weight > 10 && e.weight < 500) { //重量小于500,大于10 MeterWorkMonitor mwUpdate = new MeterWorkMonitor(); mwUpdate.pointNo = PbCache.sportInfo.baseSpotNo; mwUpdate.wgt = e.weight; rmsdoUpdateWfEventData = meterWorkMonitor.doUpdateWf(mwUpdate); } if (e.weight > 0 && e.weight < 200) { doOperateLive(); } if (e.weight == 0) { PbCache.isZeroAlarm = false; } editCarNo = ""; firstCode = ""; //历史的扫码枪的值 preCarNo = ""; sCarNo = ""; sPreNo = ""; preWgt = 0; //不等于空的时候说明写过一次日志了 if (isResFlag) { isResFlag = false; meterWorkScheduledHelp1.baseSpotNo = PbCache.sportInfo.baseSpotNo; meterWorkScheduledHelp1.baseSpotName = PbCache.sportInfo.baseSpotName; meterWorkScheduledHelp1.carNo = string.IsNullOrEmpty(PbCache.collect.carno) ? PbCache.resultCarNo : PbCache.collect.carno; meterWorkScheduledHelp1.helpContent = "车号:" + (string.IsNullOrEmpty(PbCache.collect.carno) ? (string.IsNullOrEmpty(PbCache.resultCarNo) ? "未识别" : PbCache.resultCarNo) : PbCache.collect.carno) + ";重量:" + (PbCache.lockWgt == 0 ? PbCache.resultWgt : PbCache.lockWgt + "") + ";提示信息:" + PbCache.resultMsgAll; meterWorkScheduledHelp1.warmType = "5"; meterWorkScheduledHelp1.warmTypeName = "计量提示跟踪"; meterWorkScheduledHelpService.add(meterWorkScheduledHelp1); //l.WriteLog(28, "车号:" + (string.IsNullOrEmpty(PbCache.collect.carno) ? (string.IsNullOrEmpty(PbCache.resultCarNo) ? "未识别" : PbCache.resultCarNo) : PbCache.collect.carno) + ";重量:" + (PbCache.lockWgt == 0 ? PbCache.resultWgt : PbCache.lockWgt + "") + ";提示信息:" + PbCache.resultMsgAll); } //不等于空的时候说明写过一次日志了 if (!string.IsNullOrEmpty(RFIDCarNo) && isWriteRFID == "1") { meterWorkScheduledHelp1.baseSpotNo = PbCache.sportInfo.baseSpotNo; meterWorkScheduledHelp1.baseSpotName = PbCache.sportInfo.baseSpotName; meterWorkScheduledHelp1.carNo = string.IsNullOrEmpty(PbCache.collect.carno) ? PbCache.resultCarNo : PbCache.collect.carno; meterWorkScheduledHelp1.helpContent = RFIDCarNo; meterWorkScheduledHelp1.warmType = "7"; meterWorkScheduledHelp1.warmTypeName = "RFID识别率"; meterWorkScheduledHelpService.add(meterWorkScheduledHelp1); RFIDCarNo = ""; } //车号来源记录 if (isCarSource) { meterWorkScheduledHelp1.baseSpotNo = PbCache.sportInfo.baseSpotNo; meterWorkScheduledHelp1.baseSpotName = PbCache.sportInfo.baseSpotName; meterWorkScheduledHelp1.carNo = string.IsNullOrEmpty(PbCache.collect.carno) ? PbCache.resultCarNo : PbCache.collect.carno; meterWorkScheduledHelp1.helpContent = PbCache.carNoSource.ToString(); meterWorkScheduledHelp1.warmType = "8"; meterWorkScheduledHelp1.warmTypeName = "车号来源记录"; meterWorkScheduledHelpService.add(meterWorkScheduledHelp1); isCarSource = false; PbCache.carNoSource = 0; } PbCache.isOvertimeAlarm = false; //是否超时报警 PbCache.strCode = ""; PbCache.strState = ""; PbCache.ResultMessage = ""; PbCache.resultMsgAll = ""; PbCache.resultCarNo = ""; PbCache.resultWgt = ""; bEditCar = false; isVoiceDownCar = false; flagCarMonit = false; iHodeTime = 0; isOpenMeter = false; PbCache.isLockFrm = false; PbCache.dtStartTime = null; PbCache.voiceOver = true; if (PbCache.collect != null && !string.IsNullOrEmpty(PbCache.collect.carno)) { PbCache.collect.carno = ""; } setWelecomeVis(true); if (lu[0].bcEnable) { foreach (ucBusinessType uc in lu) { uc.setControlEnable(false); } } noteCode = false; meterWorkMonitorEventDataI.pointNo = PbCache.sportInfo.baseSpotNo; meterWorkMonitorEventDataI.validWgt = "1"; meterWorkMonitorEventDataI.validCarno = "1"; meterWorkMonitorEventDataI.validTareTime = "1"; meterWorkMonitorEventDataI.validMatTime = "1"; meterWorkMonitorEventDataI.validTimeInterval = "1"; meterWorkMonitorEventDataI.validParkStatus = "1"; meterWorkMonitorEventDataI.validExceedWgt = "1"; meterWorkMonitorEventDataI.validPredictionDiff = "1"; meterWorkMonitorEventDataI.validLianda = "1"; meterWorkMonitorEventDataI.validMatClick = "1"; meterWorkMonitorEventDataI.setCar = ""; meterWorkMonitorEventDataI.isValidScan = "1"; meterWorkMonitorEventDataI.rfidCar = ""; meterWorkMonitorEventDataI.photoCar = ""; meterWorkMonitorEventDataI.scanCar = ""; meterWorkMonitorEventDataI.editCar = ""; meterWorkMonitorEventDataI.zeroState = "0"; meterWorkMonitorEventDataI.carErr = "0"; meterWorkMonitorEventDataI.ferroalloyResult = "0"; meterWorkMonitorEventDataI.wgtErr = "0"; meterWorkMonitorEventDataI.stopOverTime = "0"; meterWorkMonitorEventDataI.msgInfo = ""; meterWorkMonitorEventDataI.ledWriter = ""; meterWorkMonitorEventDataI.isOverWgt = ""; meterWorkMonitorEventDataI.isHelp = "0"; meterWorkMonitorEventDataI.wgt = e.weight; // DVR,MOXA,PLC状态监控 // 20220928 by BourneCao bool DVR_Online = PingIp(PbCache.sportInfo.videoIp); meterWorkMonitorEventDataI.dvrState = DVR_Online == true ? "0" : "1"; bool Power_Online = PingIp(PbCache.sportInfo.controlIp); meterWorkMonitorEventDataI.powerState = Power_Online == true ? "0" : "1"; bool MOXA_Online = PingIp(PbCache.sportInfo.moxaIp); meterWorkMonitorEventDataI.moxaState = MOXA_Online == true ? "0" : "1"; bool PLC_Online = PingIp(PbCache.sportInfo.plcIp); meterWorkMonitorEventDataI.plcState = PLC_Online == true ? "0" : "1"; //* //另外初始化一次监控数据 RESTfulResult rmssEventData = meterWorkMonitor.doUpdateWf(meterWorkMonitorEventDataI); if (!rmssEventData.Succeed) { l.WriteLog(0, "frmMain.EventData异常754:写入信息异常"); } //*/ //LED写入 if (isLedWrite) { isLedWrite = false; } } #endregion } catch (Exception ex) { l.WriteLog(0, "frmMain.EventData异常:" + ex.Message); } } private delegate void ShowBtnTare(bool flag);//定义委托 期限皮重按钮 List lldoOperateLive = new List(); /// /// 操作Live表的数据:零点报警 /// private void doOperateLive () { if (PbCache.collect_no==null) { return; } lldoOperateLive = MemoClass.getWarnInfo(PbCache.collect_no); if (lldoOperateLive != null) { foreach (LiveData lv in lldoOperateLive) { switch (lv.Tagname.Replace(PbCache.collect_no, "")) { case "StaticStatus"://车辆检测 "0、东西方向激光均无报警;否则报警 break; case "SwitchLight"://PLC红绿灯控制模式状态 "PLC有三种控制模式:1、自动、2、远控;3、检修 break; case "LightWest"://红绿灯:1、为绿灯;2、为红灯;" break; case "ZeroWeightStatus": //0、其它,1、零点报警,红绿灯变红, if (((lv.Value ?? "0") + "").Equals("1")) { doInsertZeroAlarm(); PbCache.isZeroAlarm = true; } else { PbCache.isZeroAlarm = false; } break; case "ZeroWeight": mwmdoLive.zeroWeight = lv.Value.ToString(); break; } } } } List lldoLive = new List(); RESTfulResult rmsdoLive = new RESTfulResult(); MeterWorkMonitor mwmdoLive = new MeterWorkMonitor(); /// /// 操作Live表的数据:零点报警 /// private void doLive() { if (PbCache.collect_no == null) { return; } lldoLive = MemoClass.getWarnInfo(PbCache.collect_no); mwmdoLive.pointNo = PbCache.sportInfo.baseSpotNo; mwmdoLive.redGreenLightState = "0"; if (lldoLive != null) { foreach (LiveData lv in lldoLive) { switch (lv.Tagname.Replace(PbCache.collect_no, "")) { case "PowerStatus": mwmdoLive.powerState = lv.Value.ToString(); break; case "PlcWatchDog": if (int.Parse(lv.Value.ToString()) >= 0 && int.Parse(lv.Value.ToString()) <= 0) { mwmdoLive.plcState = 0.ToString(); } break; case "InfraredWest": if (lv.Value.ToString() == "2") { mwmdoLive.leftInfraredRayState = "0"; } else { mwmdoLive.leftInfraredRayState = lv.Value.ToString(); } break; case "InfraredEast": if (lv.Value.ToString() == "2") { mwmdoLive.rightInfraredRayState = "0"; } else { mwmdoLive.rightInfraredRayState = lv.Value.ToString(); } break; case "AmplifierState": mwmdoLive.amplifierState = lv.Value.ToString(); break; case "Lamp": if (lv.Value.ToString() == "2") { mwmdoLive.lampState = "0"; } else { mwmdoLive.lampState = lv.Value.ToString(); } break; case "InfraredLeft": if (lv.Value.ToString() == "2") { mwmdoLive.frontInfraredRayState = "0"; PbCache.monitorResult.valid_frontInfraredRay_right_status = false; } else { mwmdoLive.frontInfraredRayState = lv.Value.ToString(); PbCache.monitorResult.valid_frontInfraredRay_right_status = true; } break; case "InfraredRight": if (lv.Value.ToString() == "2") { mwmdoLive.rearInfraredRayState = "0"; PbCache.monitorResult.valid_frontInfraredRay_left_status = false; } else { mwmdoLive.rearInfraredRayState = lv.Value.ToString(); PbCache.monitorResult.valid_frontInfraredRay_left_status = true; } break; case "RfidState": mwmdoLive.rfidState = lv.Value.ToString(); break; case "ZeroWeightStatus": mwmdoLive.zeroState = lv.Value.ToString(); if (((lv.Value ?? "0") + "").Equals("1")) { doInsertZeroAlarm(); PbCache.isZeroAlarm = true; } else { PbCache.isZeroAlarm = false; } break; case "ZeroWeight": mwmdoLive.zeroWeight = lv.Value.ToString(); break; } } } rmsdoLive = meterWorkMonitor.doUpdateWf(mwmdoLive); } MeterWorkZeroAlarm workZeroAlarmdoInsertZeroAlarm = new MeterWorkZeroAlarm(); RESTfulResult rmsworkZeroAlarmdoInsertZeroAlarm = new RESTfulResult(); /// /// 新增零点报警的数据 /// private void doInsertZeroAlarm() { if (!PbCache.isZeroAlarm) { PbCache.isZeroAlarm = true; workZeroAlarmdoInsertZeroAlarm.zeroWeight = PbCache.collect.weight; workZeroAlarmdoInsertZeroAlarm.spotTypeNo = PbCache.sportInfo.spotTypeNo; workZeroAlarmdoInsertZeroAlarm.spotTypeName = PbCache.sportInfo.spotTypeName; workZeroAlarmdoInsertZeroAlarm.baseSpotNo = PbCache.sportInfo.baseSpotNo; workZeroAlarmdoInsertZeroAlarm.baseSpotName = PbCache.sportInfo.baseSpotName; workZeroAlarmdoInsertZeroAlarm.scalePointNo = PbCache.collect_no; workZeroAlarmdoInsertZeroAlarm.createManNo = PbCache.sportInfo.baseSpotNo; workZeroAlarmdoInsertZeroAlarm.createManName = PbCache.sportInfo.baseSpotName; rmsworkZeroAlarmdoInsertZeroAlarm = zeroAlarmService.doInsertZeroAlarm(workZeroAlarmdoInsertZeroAlarm); if (rmsworkZeroAlarmdoInsertZeroAlarm.Succeed) { l.WriteLog(20, "新增成功:" + workZeroAlarmdoInsertZeroAlarm.baseSpotName +":"+ workZeroAlarmdoInsertZeroAlarm.zeroWeight); } else { l.WriteLog(20, "操作失败:" + workZeroAlarmdoInsertZeroAlarm.baseSpotName + ":" + workZeroAlarmdoInsertZeroAlarm.zeroWeight + rmsworkZeroAlarmdoInsertZeroAlarm.Data + rmsworkZeroAlarmdoInsertZeroAlarm.Message); } } } /// /// 关闭程序 /// /// /// private void frmMain_FormClosing(object sender, FormClosingEventArgs e) { StopWriteMonitor();//结束更新监控表线程 collection.Stop(); imageCurlControl.Stop(); sweepCodeClass.CloseThread(); sweepCodeClass2.CloseThread(); timer1.Stop(); timer1.Dispose(); } private bool SystemUpdate(bool isMessage) { ReleaseList releaseList = new ReleaseList(Application.StartupPath + @"\" + GlobalVariable.Instance.ReleaseFileName); DownloadTools dt = new DownloadTools(); try { bool isDownload = dt.IsDownloadFile(GlobalVariable.Instance.LocalPath, GlobalVariable.Instance.ReleaseURL, GlobalVariable.Instance.ReleaseFileName); if (!isDownload) { if (isMessage) MessageBox.Show("无法连接到远程主机!", Application.ProductName); return false; } } catch (Exception e) { MessageBox.Show(e.Message); } bool flag = this.CheckUpdate(releaseList); if (flag) { MessageBox.Show("有新版本,现在更新"); string t = dt.DownloadFile(Application.StartupPath, GlobalVariable.Instance.ReleaseURL, GlobalVariable.Instance.ApplicationUpdater); this.Close(); Application.Exit(); GC.Collect(); Process.Start(Application.StartupPath + @"\" + GlobalVariable.Instance.ApplicationUpdater); return true; } else { if (isMessage) MessageBox.Show("你的系统已经是最新版本,不需要更新!", Application.ProductName); return false; } } private bool CheckUpdate(ReleaseList localRelease) { try { string fileNameAll = Application.StartupPath + "\\" + GlobalVariable.Instance.LocalPath + "\\" + GlobalVariable.Instance.ReleaseFileName; ReleaseList remoteRelease = new ReleaseList(fileNameAll); return (((localRelease != null) && (remoteRelease != null)) && localRelease.ReleaseDate.CompareTo(remoteRelease.ReleaseDate) < 0); } catch (Exception exception) { MessageBox.Show(exception.Message); } return false; } private void DecodeQRCodeYMT(string strCode) { try { //进行扫码,判断 if (PbCache.carNoSource == 1 || PbCache.carNoSource == 2) { PbCache.carNoSource = 3; } codeFlag = true; string token = httpRequest.GetToken(); string carNo = httpRequest.getCarNo(strCode, token); PbCache.collect.carno = carNo; PbCache.strCode = carNo; } catch (Exception e) { } } private void DecodeQRCode(string strCode) { if (PbCache.carNoSource == 1 || PbCache.carNoSource == 2) { PbCache.carNoSource = 3; } codeFlag = true; //frmOneYardToEnd frmOneYardToEnd = new frmOneYardToEnd(); Hashtable hashTable = new Hashtable(); hashTable.Add("message", strCode); rmsSweepCodeClass = mwcfs.DecryptionForWfTest(hashTable); if (rmsSweepCodeClass.Code == "0") { PbCache.collect.carno = rmsSweepCodeClass.Data; PbCache.strCode = rmsSweepCodeClass.Data; } if (rmsSweepCodeClass.Code == "1") { vicPlayClass.GetVoicePlay("车号二维码已过期", PbCache.collect.carno); frmOneYardToEnd.setMsgInfo("车号二维码已过期"); } if (rmsSweepCodeClass.Code == "2") { vicPlayClass.GetVoicePlay("不是有效车号二维码", PbCache.collect.carno); frmOneYardToEnd.setMsgInfo("不是有效车号二维码"); } if (rmsSweepCodeClass.Code == "9") { vicPlayClass.GetVoicePlay("不是有效车号二维码", PbCache.collect.carno); frmOneYardToEnd.setMsgInfo("不是有效车号二维码"); } l.WriteLog(12, "测试扫码值" + rmsSweepCodeClass.Data); } #region 更新监控表线程 //rxh add private Thread thWriteMonitor;//更新监控表线程 private int writeMonitorInterval;//时间间隔 private void WriteMonitorInTime() { while (true) { try { doLive();//更新监控表!!!!!!!!!!! writeMonitorInterval = 1000; } catch (Exception ee) { //GlobalInstanceController.Instance.LastCallMessage = ee.Message; writeMonitorInterval = 5000; } Thread.Sleep(writeMonitorInterval); } } private void StopWriteMonitor() { if (thWriteMonitor != null) { thWriteMonitor.Abort(); thWriteMonitor = null; } } private void StartWriteMonitor(int interval) { writeMonitorInterval = (interval == 0 ? 1000 : interval); if (thWriteMonitor == null) { thWriteMonitor = new Thread(WriteMonitorInTime); } thWriteMonitor.Start(); } #endregion 更新监控表线程 #region PING IP /// /// ping ip,测试能否ping通 /// /// IP地址 /// private bool PingIp(string strIP) { bool bRet = false; try { Ping pingSend = new Ping(); PingReply reply = pingSend.Send(strIP, 1000); if (reply.Status == IPStatus.Success) bRet = true; } catch (Exception) { bRet = false; } return bRet; } #endregion } }