public static Model.NodeDataUpload.XML GetNextWaitUploadDatas(List <string> senderCodeList, ref List <M_TMSData> loginkData, out RelationModel relation) { Model.NodeDataUpload.XML result = null; relation = new RelationModel(); try { relation = GetNextWaitUploadDataOrderRelation(senderCodeList);//, ref _ignoreTempRelationList); if (relation != null) { NodeInfo nodeInfo = NodeUploadServer.GetNextUploadNodeInfo(relation.CurrentUploadDataNodeId, relation.Number); if (nodeInfo != null) { //从未上报过节点数据 if (string.IsNullOrEmpty(relation.CurrentUploadDataTime) || relation.CurrentUploadDataNodeId == null || relation.CurrentUploadDataNodeId == -1) { relation.CurrentUploadDataTime = nodeInfo.OperateAt; relation.CurrentUploadDataNodeId = nodeInfo.Id; //更新冷链数据上报进度 bool isUpdataRelation = UpdateCurrentRelationUploadDataNode(relation, false); string info = string.Format("R【{0}】 O【{1}】 N【{2}】 T【{3}】", relation.RelationId, relation.Number, relation.CurrentUploadDataNodeId, relation.CurrentUploadDataTime); throw new Exception(info + (isUpdataRelation ? "更新为首节点成功." : "更新为首节点失败.")); //throw new Exception("首个节点暂不上报数据 " ); } else { //获取待上报数据 DataTable dt = GetStorageData((int)relation.CurrentUploadDataNodeId, DateTime.Parse(relation.CurrentUploadDataTime), DateTime.Parse(nodeInfo.OperateAt).AddDays(1));//结束时间+30分钟改为24小时 if (dt == null) { string info = string.Format("R【{0}】 O【{1}】 N【{2}】 T【{3}】", relation.RelationId, relation.Number, relation.CurrentUploadDataNodeId, relation.CurrentUploadDataTime); if ((DateTime.Now - DateTime.Parse(relation.CurrentUploadDataTime)).TotalDays > int.Parse(Utility._StorageDataTimeOut)) { relation.CurrentUploadDataTime = nodeInfo.OperateAt; relation.CurrentUploadDataNodeId = nodeInfo.Id; bool isUpdataRelation = UpdateCurrentRelationUploadDataNode(relation, false); throw new Exception(info + "放弃等待当前载体温湿度,已过" + int.Parse(Utility._StorageDataTimeOut) + "*24小时 更新为下一节点" + (isUpdataRelation ? "成功." : "失败.")); } else { UpdateHandleTHTime(relation.Id, false); //_ignoreTempRelationList.Add(relation.Id); throw new Exception(info + "没有新的载体温湿度."); } } result = new Model.NodeDataUpload.XML(); result.CONTENTLIST = new List <CONTENT>(); result.CONTENTLIST.Add(new CONTENT()); result.CONTENTLIST[0].DETAILLIST = new List <DETAIL>(); DETAIL dModel = new DETAIL(); dModel.ECNO = NodeUploadServer.GetShipmentCodeByTMSOrder(relation.RelationId); dModel.LEGNO = relation.RelationId; Utility.AddLogText(string.Format("dModel:ECNO:{0},LEGNO:{1},RelationId:{2}", dModel.ECNO, dModel.LEGNO, relation.RelationId)); GetStorageByNodeId((int)relation.CurrentUploadDataNodeId, ref dModel); loginkData = new List <M_TMSData>(); foreach (DataRow row in dt.Rows) { string temp = row["t"] is DBNull ? string.Empty : row["t"].ToString(); string hump = string.Empty; try { hump = row["h"] is DBNull ? string.Empty : row["h"].ToString(); } catch { } if (temp == "System.Byte[]") { temp = System.Text.Encoding.Default.GetString(row["t"] as byte[]); } if (hump == "System.Byte[]") { hump = System.Text.Encoding.Default.GetString(row["h"] as byte[]); } DETAIL detail = new DETAIL(); detail.ECNO = dModel.ECNO; detail.LEGNO = dModel.LEGNO; detail.LICENSENO = dModel.LICENSENO; detail.WAREHOUSECODE = dModel.WAREHOUSECODE; detail.TRACKTIME = Convert.ToDateTime(row["datatime"]).ToString("yyyy-MM-dd HH:mm:ss"); detail.TEMPREATURE = temp.Replace("-300.0", "").Replace("-300", ""); detail.HUMIDITY = hump.Replace("-300.0", "").Replace("-300", ""); try { detail.LONGITUDE = row["lo"] is DBNull ? string.Empty : row["lo"].ToString(); } catch { } try { detail.LATITUDE = row["la"] is DBNull ? string.Empty : row["la"].ToString(); } catch { } Utility.AddLogText(string.Format("detail:ECNO:{0},LEGNO:{1}", detail.ECNO, detail.LEGNO)); result.CONTENTLIST[0].DETAILLIST.Add(detail); M_TMSData data = new M_TMSData(); data.Latitude = detail.LATITUDE == string.Empty ? null : detail.LATITUDE.ToString(); data.Longitude = detail.LONGITUDE == string.Empty ? null : detail.LONGITUDE.ToString(); data.RecordTime = Convert.ToDateTime(row["datatime"]); data.OrderNo = relation.RelationId; data.JcOrderNo = relation.Number; data.JcNodeId = (int)relation.CurrentUploadDataNodeId; Type t = data.GetType(); for (int i = 0; i < temp.Split('|').Count(); i++) { t.GetProperty("T" + (i + 1)).SetValue(data, temp.Split('|')[i].ToString(), null); } for (int i = 0; i < hump.Split('|').Count(); i++) { t.GetProperty("RH" + (i + 1)).SetValue(data, hump.Split('|')[i].ToString(), null); } loginkData.Add(data); relation.CurrentUploadDataTime = detail.TRACKTIME; if (DateTime.Parse(detail.TRACKTIME) >= DateTime.Parse(nodeInfo.OperateAt)) { break; } } } } else { UpdataUploadDataNode(relation);//, ref _ignoreTempRelationList); } } } catch (Exception ex) { //if (relation != null) // _ignoreTempRelationList.Add(relation.Id); throw new Exception(ex.Message); } return(result); }
public static Model.NodeDataUpload.XML GetNextWaitUploadDatasProgress(List <string> senderCodeList, ref List <M_TMSData> loginkData, out UploadDataProgress progress) { Model.NodeDataUpload.XML result = null; progress = null; try { progress = GetNextWaitUploadDataProgress(senderCodeList); if (progress != null) { DataTable dt = GetStorageData(0, progress.uploadProgress, progress.endNodeTime.AddDays(int.Parse(Utility._StorageDataTimeOut)), progress.storageId); if (dt == null) { string info = string.Format("PId【{0}】 RId【{1}】 Time【{2}】", progress.Id, progress.relationId, progress.uploadProgress.ToString("yyyy-MM-dd HH:mm:ss")); if ((DateTime.Now - progress.uploadProgress).TotalDays > int.Parse(Utility._StorageDataTimeOut)) { progress.uploadProgress = DateTime.Now; //progress.endNodeTime; UpdateUploadProgress(progress, false); throw new Exception(info + "放弃等待当前载体温湿度,已过" + int.Parse(Utility._StorageDataTimeOut) + "*24小时"); } else { UpdateUploadProgress(progress, false); throw new Exception(info + "没有新的载体温湿度."); } } result = new Model.NodeDataUpload.XML(); result.CONTENTLIST = new List <CONTENT>(); result.CONTENTLIST.Add(new CONTENT()); result.CONTENTLIST[0].DETAILLIST = new List <DETAIL>(); DETAIL dModel = new DETAIL(); dModel.ECNO = progress.shipmentCode; dModel.LEGNO = progress.relationId; Utility.AddLogText(string.Format("dModel:ECNO:{0},LEGNO:{1},RelationId:{2}", dModel.ECNO, dModel.LEGNO, progress.relationId)); if (progress.storageType == 1) { dModel.WAREHOUSECODE = progress.storageName; } else if (progress.storageType == 2) { dModel.LICENSENO = progress.storageName; } //GetStorageByNodeId((int)relation.CurrentUploadDataNodeId, ref dModel); loginkData = new List <M_TMSData>(); foreach (DataRow row in dt.Rows) { string temp = row["t"] is DBNull ? string.Empty : row["t"].ToString(); string hump = "-300.0"; try { hump = row["h"] is DBNull ? string.Empty : row["h"].ToString(); } catch { } if (temp == "System.Byte[]") { temp = System.Text.Encoding.Default.GetString(row["t"] as byte[]); } if (hump == "System.Byte[]") { hump = System.Text.Encoding.Default.GetString(row["h"] as byte[]); } DETAIL detail = new DETAIL(); detail.ECNO = dModel.ECNO; detail.LEGNO = dModel.LEGNO; detail.LICENSENO = dModel.LICENSENO; detail.WAREHOUSECODE = dModel.WAREHOUSECODE; detail.TRACKTIME = Convert.ToDateTime(row["datatime"]).ToString("yyyy-MM-dd HH:mm:ss"); detail.TEMPREATURE = temp; //.Replace("-300.0", "").Replace("-300", ""); detail.HUMIDITY = hump; //.Replace("-300.0", "").Replace("-300", ""); try { detail.LONGITUDE = row["lo"] is DBNull ? string.Empty : row["lo"].ToString(); } catch { } try { detail.LATITUDE = row["la"] is DBNull ? string.Empty : row["la"].ToString(); } catch { } Utility.AddLogText(string.Format("detail:ECNO:{0},LEGNO:{1}", detail.ECNO, detail.LEGNO)); //result.CONTENTLIST[0].DETAILLIST.Add(detail); M_TMSData data = new M_TMSData(); data.Latitude = detail.LATITUDE == string.Empty ? null : detail.LATITUDE.ToString(); data.Longitude = detail.LONGITUDE == string.Empty ? null : detail.LONGITUDE.ToString(); data.RecordTime = Convert.ToDateTime(row["datatime"]); data.OrderNo = progress.relationId; data.JcOrderNo = GetJcOrderNoForProgress(progress.relationId); data.JcNodeId = GetJcNodeIdForProgress(progress.relationId, progress.storageId, progress.nodeTime.ToString("yyyy-MM-dd HH:mm:ss")); Type t = data.GetType(); for (int i = 0; i < temp.Split('|').Count(); i++) { t.GetProperty("T" + (i + 1)).SetValue(data, temp.Split('|')[i].ToString(), null); } for (int i = 0; i < hump.Split('|').Count(); i++) { t.GetProperty("RH" + (i + 1)).SetValue(data, hump.Split('|')[i].ToString(), null); } //loginkData.Add(data); progress.uploadProgress = DateTime.Parse(detail.TRACKTIME); if (DateTime.Parse(detail.TRACKTIME) > progress.endNodeTime) { progress.uploadProgress = progress.endNodeTime; if (loginkData.Count == 0) { bool isUpdate = DataUploadServer.UpdateUploadProgress(progress); throw new Exception("仅一条末尾数据且大于节点结束时间,直接更新此进度:" + (isUpdate ? "成功" : "失败")); } break; } else { loginkData.Add(data); result.CONTENTLIST[0].DETAILLIST.Add(detail); } } } } catch (Exception ex) { throw new Exception("获取冷链数据失败:" + ex.Message); } return(result); }