public IPageList<EMileageReportDay> SearchMileageReportDays(int deviceId, DateTime st, DateTime et, string orderName, string orderType, int pageIndex, int pageSize) { if (et > DateTime.Now) { et = DateTime.Now; } //生成查询时间段 var day = (et - st).TotalDays; var dts = new List<DateTime>(); for (var i = 0; i <= day; i++) { dts.Add(st.AddDays(i).GetDayStartTime()); } var sp = new Spec<EMileageReportDay>(); sp.And(p => p.DeviceId == deviceId && p.ReportDay >= st.GetDayStartTime() && p.ReportDay <= et.GetDayStartTime()); //获取已经生成的数据 var haveddks = _rep.GetList<EMileageReportDay>(0, sp, p => new Columns(p.ReportDay)).Select(p => p.ReportDay.GetDayStartTime()).ToList(); foreach (var ddk in dts) { if (!haveddks.Contains(ddk)) { //发现当前日期的数据没有生成 那么开始生成 CreateMileageReportDayByReportDay(deviceId, ddk); } } var cp = new CSpec<EMileageReportDay>(); if (orderType.HasValue()) { cp.And(orderName, orderType); } return _rep.GetPageList<EMileageReportDay>(pageIndex, pageSize, sp, cp); }
/// <summary> /// 获取历史轨迹 /// </summary> /// <returns></returns> public List<EDeviceHistoryData> GetDeviceHistoryDatas(int deviceId, DateTime dt) { var device = _rep.Get<EDevice>(p => p.Id == deviceId); if (device == null) { throw new NullReferenceException("不存在设备!"); } var node = _nodeService.GetNodeByIdFromCache(device.NodeId); if (node == null) { throw new NullReferenceException("不存在节点!"); } return _rep.GetTSqlCommand( "SELECT * FROM {0} WHERE A=?A AND I>=?ST AND I<=?ET ORDER BY I ASC".GetFormat(node.NodeDeviceHistoryTableName)) .AddParameter("A", deviceId) .AddParameter("ST", dt.GetDayStartTime()) .AddParameter("ET", dt.GetDayEndTime()) .SetConnectionString(node.NodeDeviceHistoryConnectionString) .ToList<EDeviceHistoryData>(); }
/// <summary> /// 获取设备(目前只有车辆)里程数据 指定日期 /// </summary> /// <param name="vehicleCode">车辆编码</param> /// <returns></returns> public VReportMileage GetDeviceMileageByDate(string vehicleCode, DateTime dt) { var rep = DMRepository.Get<EVehicle>(); var vehicle = rep.Get(p => p.VehicleCode.ToString() == vehicleCode); if (vehicle == null) throw new NullReferenceException("没有找到车辆" + vehicleCode); var result = ModelFacade.Report.ReportSummaryModel.GetMileageReportList(vehicle.TenantCode, vehicle.VehicleCode.ToString(), vehicle.LicenceNumber, dt.GetDayStartTime(), dt.GetDayEndTime()).FirstOrDefault(); result.ReportDate = dt.ToShortDateString(); return result; }
public void ReCalcMileageReportDays(int deviceId, DateTime reportDay) { var mrd = _rep.Get<EMileageReportDay>(p => p.DeviceId == deviceId && p.ReportDay == reportDay.GetDayStartTime()); if (mrd == null) { CreateMileageReportDayByReportDay(deviceId, reportDay); } else { mrd.UpdateTime = DateTime.Now; var list = _positionService.GetDeviceHistoryDatas(deviceId, reportDay); if (list.Count > 1) { mrd.DayMileage = _mileageService.CalcMileage(list); var spt = new EMapPoint(list[0].E, list[0].F); mrd.StartTime = list[0].I; mrd.StartLatLng = spt.ToString(); mrd.StartAddress = _mapService.GetLocation(spt).Address; var ept = new EMapPoint(list[list.Count - 1].E, list[list.Count - 1].F); mrd.EndTime = list[list.Count - 1].I; mrd.EndLatLng = ept.ToString(); mrd.EndAddress = _mapService.GetLocation(ept).Address; } _rep.Save(mrd, p => p.DeviceId == deviceId && p.ReportDay == reportDay.GetDayStartTime()); } }