using com.hnshituo.core.webapp.vo; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace RailLocalMeter { public class DbUpload { Log lg = Log.GetInstance(); private bool blThreadFlag = true; Thread DataCollectThread = null;//采集进程 MeterWorkRailwayActFirstService firstService = new MeterWorkRailwayActFirstService(); MeterWorkRailwayActualService netService = new MeterWorkRailwayActualService(); ImageOption imgControl = new ImageOption(); public DbUpload() { DataCollectThread = new Thread(new ThreadStart(DataCollect)); } public void start() { DataCollectThread.Start(); } public void stop() { blThreadFlag = false; } private void DataCollect() { if (!blThreadFlag) return; Dictionary dic = new Dictionary(); while (blThreadFlag) { try { //重量小于500且网络正常时触发 if (CacleCls.weight < 500 && CacleCls.serverFlag) { dic.Clear(); //若本地存在计量数据未进行上传的,则进行数据上传并得到返回的结果 //得到结果后构造成Dictionary然后进行图片操作,修改图片名称及位置 bool bReadFlag = false; string strRtMsgInfo = ""; try { List lm = FileOption.ReadDb(FileTypeEnum.一次数据, ref bReadFlag, ref strRtMsgInfo); if (bReadFlag) { //进行数据上传操作 RESTfulResult> rmRst = firstService.doDbUpload(lm); if (rmRst.Succeed) { if (rmRst.Data.Count == lm.Count) { //直接重写文件 FileOption.clearFile(); //然后对图片进行压缩及修改名称处理 foreach (DjPbModel dm in rmRst.Data) { dic.Add(dm.key, dm.value); } } else { //清理下文件 FileOption.clearFile(); //重写下未成功的数据 foreach (MeterWorkRailwayActFirst first in lm) { DjPbModel pm = rmRst.Data.Where(s => s.key == first.actualFirstNo).FirstOrDefault(); if (pm == null || string.IsNullOrEmpty(pm.key) || string.IsNullOrEmpty(pm.value)) { //Thread.Sleep(100); bool flag = FileOption.WriterDb(first, FileTypeEnum.一次数据, out string msgInfo); if (!flag) { lg.WriteLog(LogType.serverLog, $"重写失败:{msgInfo},数据:{JsonConvert.SerializeObject(first, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) }"); } } else { dic.Add(pm.key, pm.value); } } } if (dic.Count > 0) imgControl.ZipFiles(dic); } else { //计量失败,播报失败,然后写led屏幕及日志 lg.WriteLog(LogType.serverLog, rmRst.ResultMessage); } } } catch (Exception e) { lg.WriteLog(LogType.serverLog, "一次数据上传异常:" + e.Message); } bReadFlag = false; strRtMsgInfo = ""; try { List lmNet = FileOption.ReadDb(FileTypeEnum.结净数据, ref bReadFlag, ref strRtMsgInfo); if (bReadFlag) { //进行数据上传操作 RESTfulResult> rmRst = netService.doDbUpload(lmNet); if (rmRst.Succeed) { if (rmRst.Data.Count == lmNet.Count) { //直接重写文件 FileOption.clearFile(); //然后对图片进行压缩及修改名称处理 foreach (DjPbModel dm in rmRst.Data) { dic.Add(dm.key, dm.value); } } else { //清理下文件 FileOption.clearFile(); //重写下未成功的数据 foreach (MeterWorkRailwayActual net in lmNet) { DjPbModel pm = rmRst.Data.Where(s => s.key == net.actualNo).FirstOrDefault(); if (pm == null || string.IsNullOrEmpty(pm.key) || string.IsNullOrEmpty(pm.value)) { //Thread.Sleep(100); bool flag = FileOption.WriterDb(net, FileTypeEnum.结净数据, out string msgInfo); if (!flag) { lg.WriteLog(LogType.serverLog, $"重写失败:{msgInfo},数据:{JsonConvert.SerializeObject(net, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) }"); } } else { dic.Add(pm.key, pm.value); } } } if (dic.Count > 0) imgControl.ZipFiles(dic); } else { //计量失败,播报失败,然后写led屏幕及日志 lg.WriteLog(LogType.serverLog, rmRst.ResultMessage); } } } catch (Exception e) { lg.WriteLog(LogType.serverLog, "结净数据上传异常:" + e.Message); } } } catch (Exception ex) { lg.WriteLog(LogType.SystemLog, "数据上传异常:" + ex.Message); } Thread.Sleep(AppConfigCache.sleepUploadTime); } } } }