public void Import(CBatchStruct batch, DateTime DStartTime, DateTime DEndTime, bool isUpdate = false) { DateTime? lastTime = null; ERTDDataState tmpRTDWaterDataState = ERTDDataState.ENormal; ////gm 1024 $60091K02031610220800084505230800084505 //string rawString = rawData; //string startTime = rawString.Substring(11, 10); //string endTime = rawString.Substring(27, 6); //string strYear = 20 + startTime.Substring(0, 2); //string strMonth = startTime.Substring(2, 2); //string strStartDay = startTime.Substring(4, 2); //string strStartHour = startTime.Substring(6, 2); //string strStartMinute = startTime.Substring(8, 2); //string strEndDay = endTime.Substring(0, 2); //string strEndHour = endTime.Substring(2, 2); //string strEndMinute = endTime.Substring(4, 2); ////DateTime DStartTime = new DateTime(int.Parse(strYear), int.Parse(strMonth), int.Parse(strStartDay), int.Parse(strStartHour), int.Parse(strStartMinute), 0); ////DateTime DEndTime = new DateTime(int.Parse(strYear), int.Parse(strMonth), int.Parse(strEndDay), int.Parse(strEndHour), int.Parse(strEndMinute), 0); List <CTimeAndData> datas = batch.Datas; string stationid = batch.StationID; EStationType type = batch.StationType; CEntityStation station = m_proxyStation.QueryById(stationid); // if (type == EStationType.ERainFall) if (type == EStationType.ERiverWater) // if (true) { for (int i = 0; i < datas.Count; i++) { if (lastTime == datas[i].Time) { lastTime = datas[i].Time; continue; } lastTime = datas[i].Time; int status = 1; DateTime dt = datas[i].Time; string data = datas[i].Data.ToString(); int RawtotalRain = int.Parse(data.Substring(0, 4)); Nullable <Decimal> RawrainAccuracy = decimal.Parse((data.Substring(4, 2))); Nullable <Decimal> rainAccuracy = RawrainAccuracy / 10; Nullable <Decimal> totalRain = RawtotalRain * rainAccuracy; CEntityRain LastSharpMes = new CEntityRain(); CEntityRain LastDayMes = new CEntityRain(); //如果是第一条数据,则通过数据库获取上一条数据 if (i == 0) { Nullable <Decimal> lastTotalRain = null, lastDayTotalRain = null, lastSharpClockTotalRain = null; Nullable <DateTime> lastDayTime = null; Nullable <DateTime> lastClockSharpTime = null; Nullable <DateTime> lastDataTime = null; Nullable <Decimal> lastPeriodRain = null; Nullable <EChannelType> lastChannelType = null; Nullable <EMessageType> lastMessageType = null; LastSharpMes = m_proxyRain.GetLastSharpRain(stationid, dt); LastDayMes = m_proxyRain.GetLastDayRain(stationid, dt); lastTotalRain = m_proxyRain.GetLastRain(stationid, dt).TotalRain; lastSharpClockTotalRain = LastSharpMes.TotalRain; lastDayTotalRain = LastDayMes.TotalRain; lastClockSharpTime = LastSharpMes.TimeCollect; lastDayTime = LastDayMes.TimeCollect; //改动 // 查询成功 station.LastTotalRain = lastTotalRain; station.LastDayTotalRain = lastDayTotalRain; station.LastPeriodRain = lastPeriodRain; if (lastDataTime != null && lastDataTime.HasValue) { station.LastDataTime = lastDataTime; } if (lastClockSharpTime != null && lastClockSharpTime.HasValue) { station.LastClockSharpTime = lastClockSharpTime; } if (lastDayTime != null && lastDayTime.HasValue) { station.LastDayTime = lastDayTime; } if (lastChannelType != null && lastChannelType.HasValue) { station.LastChannelType = lastChannelType; } if (lastMessageType != null && lastMessageType.HasValue) { station.LastMessageType = lastMessageType; } //int year = dt.Year; //int month = dt.Month; //int day = dt.Day; //DateTime tmp1 = new DateTime(year, month, day, 8, 0, 0); //DateTime tmp2 = tmp1.Subtract(new TimeSpan(24, 0, 0)); //station.LastDayTime = tmp2; //lastSharpClockTotalRain = m_proxyRain.GetLastClockSharpTotalRain(stationid, dt); //lastDayTotalRain = m_proxyRain.GetLastDayTotalRain(stationid, tmp2); station.LastTotalRain = lastTotalRain; station.LastClockSharpTotalRain = lastSharpClockTotalRain; station.LastClockSharpTime = lastClockSharpTime; station.LastDayTotalRain = lastDayTotalRain; station.LastDayTime = lastDayTime; } CEntityRain rain = new CEntityRain(); rain.StationID = stationid; rain.TimeCollect = dt; rain.TotalRain = totalRain; // rain.DifferneceRain = CalDifferenceRain(rainAccuracy, RawtotalRain, station.LastTotalRain, station.DRainChange, ref status); if ((dt.Minute + dt.Second) == 0) { //rain.PeriodRain = CalPeriodRain(rainAccuracy, RawtotalRain, dt, station.LastClockSharpTotalRain); rain.PeriodRain = CalPeriodRain_2(rainAccuracy, RawtotalRain, dt, station.LastClockSharpTotalRain, station.LastClockSharpTime, station.LastTotalRain); station.LastClockSharpTotalRain = totalRain; station.LastClockSharpTime = dt; } if (dt.Hour == 8) { //rain.DayRain = CalDayRain(rainAccuracy, RawtotalRain, dt, station.LastDayTime, station.LastDayTotalRain); rain.DayRain = CalDayRain_2(rainAccuracy, RawtotalRain, dt, station.LastDayTotalRain, station.LastDayTime); station.LastDayTotalRain = totalRain; station.LastDayTime = dt; } rain.DifferneceRain = CalDifferenceRain_1(rainAccuracy, RawtotalRain, station.LastTotalRain, station.DRainChange, ref status); station.LastTotalRain = totalRain; // 待检测 rain.ChannelType = EChannelType.GPRS; rain.MessageType = EMessageType.Batch; rain.TimeRecieved = DateTime.Now; if (status == 1) { rain.BState = 1; } else { rain.BState = 0; } rainResults.Add(rain); } List <CEntityRain> listInsert = new List <CEntityRain>(); List <CEntityRain> listUpdate = new List <CEntityRain>(); List <DateTime> listDateTime = m_proxyRain.getExistsTime(stationid, DStartTime, DEndTime); for (int i = 0; i < rainResults.Count; i++) { if (listDateTime.Contains(rainResults[i].TimeCollect)) { listUpdate.Add(rainResults[i]); } else { listInsert.Add(rainResults[i]); } } m_proxyRain.AddNewRows(listInsert); //写入数据库 m_proxyRain.UpdateRows(listUpdate); //更新 //m_proxyRain.AddOrUpdate(rainResults); } //操作water表 // if (type == EStationType.ERiverWater) if (type == EStationType.ERainFall) { for (int i = 0; i < datas.Count; i++) { decimal data = 0; DateTime dt = datas[i].Time; try { string strData = datas[i].Data.Trim(); //decimal data = int.Parse(datas[i].Data) / 100; data = decimal.Parse(strData) / 100; } catch (Exception e) { break; } //操作water表 CEntityWater water = new CEntityWater(); water.StationID = station.StationID; water.TimeCollect = dt; water.TimeRecieved = DateTime.Now; if (station.DWaterBase.HasValue) { // 减去水位基值 water.WaterStage = data + station.DWaterBase.Value; } else { water.WaterStage = data; } water.WaterFlow = CDBDataMgr.GetInstance().GetWaterFlowByWaterStageAndStation(stationid, data); //此处 waterflow需要计算的 water.ChannelType = EChannelType.GPRS; water.MessageType = EMessageType.Batch; AssertWaterData(water, ref tmpRTDWaterDataState); //if (tmpRTDWaterDataState == ERTDDataState.ENormal) //{ // water.state = 1; //} //if (tmpRTDWaterDataState == ERTDDataState.EError) //{ // water.state = 0; //} //if (tmpRTDWaterDataState == ERTDDataState.EWarning) //{ // water.state = 2; //} waterResults.Add(water); } List <CEntityWater> listInsert = new List <CEntityWater>(); List <CEntityWater> listUpdate = new List <CEntityWater>(); List <DateTime> listDateTime = m_proxyWater.getExistsTime(stationid, DStartTime, DEndTime); for (int i = 0; i < waterResults.Count; i++) { if (listDateTime.Contains(waterResults[i].TimeCollect)) { listUpdate.Add(waterResults[i]); } else { listInsert.Add(waterResults[i]); } } // m_proxyWater.AddNewRows(listInsert); //写入数据库 m_proxyWater.UpdateRows(listUpdate); //更新数据库 //m_proxyWater.AddOrUpdate(waterResults); } }
// 保存数据 public override bool DoSave() { try { //int iPreValue = this.FirstDisplayedScrollingRowIndex; MessageBoxButtons messButton = MessageBoxButtons.OKCancel; DialogResult dr = MessageBox.Show("当前雨量表数据有修改,是否保存?", "保存", messButton); if (dr == DialogResult.OK) { if (this.IsCurrentCellInEditMode) { //MessageBox.Show("请完成当前的编辑"); this.EndEdit(); //return false; } //base.DoSave(); // 更新 GetUpdatedData(); if (m_listAdded.Count > 0 || m_listUpdated.Count > 0 || m_listDeleteRains_StationId.Count > 0) { // 更新 bool result = true; if (m_listAdded.Count > 0) { // 异步添加,需要考虑整点问题 //m_proxyRain.AddNewRows(m_listAdded); m_proxyRain.AddNewRows_DataModify(m_listAdded); m_proxyRain.UpdateRows_DataModify(m_listAdded); m_proxyRain.UpdateOtherRows_DataModify(m_listAdded); m_listAdded.Clear(); //添加雨量数据,统一更新 } if (m_listUpdated.Count > 0) { //result = result && m_proxyRain.UpdateRows(m_listUpdated); result = result && m_proxyRain.UpdateRows_DataModify(m_listUpdated); //修改雨量数据,统一更新 m_proxyRain.UpdateOtherRows_DataModify(m_listUpdated); m_listUpdated.Clear(); } // 删除 if (m_listDeleteRains_StationId.Count > 0) { DialogResult dr_delete = MessageBox.Show("当前雨量表数据被标记为删除,是否删除所选数据?", "删除", messButton); if (dr_delete == DialogResult.OK) { result = result && m_proxyRain.DeleteRows(m_listDeleteRains_StationId, m_listDeleteRains_StationDate); List <CEntityRain> tmpStationList = new List <CEntityRain>(); CEntityRain tmpStation = new CEntityRain(); for (int j = 0; j < m_listDeleteRains_StationId.Count; j++) { tmpStation.StationID = m_listDeleteRains_StationId[j]; tmpStation.TimeCollect = DateTime.Parse(m_listDeleteRains_StationDate[j]); tmpStationList.Add(tmpStation); } m_proxyRain.UpdateOtherRows_DataModify_1(tmpStationList); } //删除雨量数据,统一更新 m_listDeleteRains.Clear(); m_listDeleteRains_StationDate.Clear(); m_listDeleteRains_StationId.Clear(); } if (result) { //MessageBox.Show("保存成功,新增记录稍有延迟"); } else { // 保存失败 //MessageBox.Show("保存失败"); return(false); } SetRain(m_proxyRain.GetPageData(base.m_iCurrentPage)); } else { //MessageBox.Show("没有任何修改,无需保存"); } //FocusOnRow(iPreValue, false); return(true); } else { //FocusOnRow(iPreValue, false); return(false); } } catch (Exception ex) { return(false); } }
// 生成更新过的数据列表 private void GetUpdatedData() { // 如果标记为删除的就不需要再更新了 List <int> listUpdatedRows = new List <int>(); for (int i = 0; i < m_listEditedRows.Count; ++i) { if (!m_listMaskedDeletedRows.Contains(m_listEditedRows[i])) { // 如果不在删除列中,则需要更新 listUpdatedRows.Add(m_listEditedRows[i]); } } // 获取更新过的数据 for (int i = 0; i < listUpdatedRows.Count; ++i) { CEntityRain rain = new CEntityRain(); rain.StationID = m_strStaionId; rain.TimeCollect = DateTime.Parse(base.Rows[listUpdatedRows[i]].Cells[CS_TimeCollected].Value.ToString()); rain.TimeRecieved = DateTime.Parse(base.Rows[listUpdatedRows[i]].Cells[CS_TimeReceived].Value.ToString()); if (!base.Rows[listUpdatedRows[i]].Cells[CS_DayRain].Value.ToString().Equals("")) { rain.DayRain = Decimal.Parse(base.Rows[listUpdatedRows[i]].Cells[CS_DayRain].Value.ToString()); } else { rain.DayRain = null; } if (!base.Rows[listUpdatedRows[i]].Cells[CS_PeriodRain].Value.ToString().Equals("")) { rain.PeriodRain = Decimal.Parse(base.Rows[listUpdatedRows[i]].Cells[CS_PeriodRain].Value.ToString()); } else { rain.PeriodRain = null; } rain.TotalRain = Decimal.Parse(base.Rows[listUpdatedRows[i]].Cells[CS_TotalRain].Value.ToString()); rain.MessageType = CEnumHelper.UIStrToMesssageType(base.Rows[listUpdatedRows[i]].Cells[CS_MsgType].Value.ToString()); rain.ChannelType = CEnumHelper.UIStrToChannelType(base.Rows[listUpdatedRows[i]].Cells[CS_ChannelType].Value.ToString()); // 数据状态 string tmpDataState = base.Rows[listUpdatedRows[i]].Cells[CS_DataState].Value.ToString(); if (tmpDataState.Equals(CS_DataState_Normal)) { rain.BState = 1; } else if (tmpDataState.Equals(CS_DataState_AbNormal)) { rain.BState = 0; } else if (tmpDataState.Equals(CS_DataState_Warning)) { rain.BState = 2; } // rain.RainID = long.Parse(base.Rows[listUpdatedRows[i]].Cells[CS_RainID].Value.ToString()); m_listUpdated.Add(rain); } // 获取删除过的数据 for (int i = 0; i < base.m_listMaskedDeletedRows.Count; ++i) { //m_listDeleteRains.Add(long.Parse(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_RainID].Value.ToString())); m_listDeleteRains_StationId.Add(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_StationID].Value.ToString()); m_listDeleteRains_StationDate.Add(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_TimeCollected].Value.ToString()); } // 清空编辑过的数据 m_listEditedRows.Clear(); m_listMaskedDeletedRows.Clear(); //清空此次记录 }
// 添加雨量记录 public void AddRain(CEntityRain entity) { m_listAdded.Add(entity); }