/// <summary> /// 更新车辆信息 /// </summary> void UpdateGridInfo() { if (_car?.LastGpsData == null) { return; } Dispatcher.BeginInvoke(() => { if (_car?.LastGpsData == null) { return; } _lblCarName.Content = _car.LICENSE; if (_mapCarInfo == null || _mapCarInfo.Visibility == Visibility.Collapsed) { return; } if (_gwcMode) { carInfoItems["车牌号"].Text = $"{_car.LICENSE} {_car.CAR_TYPE_STR}"; carInfoItems["任务状态"].Text = _car.STATE == 1 ? "任务中" : "可调派"; carInfoItems["乘 客"].Text = $"{_car.PASSENGER} {_car.PASSENGER_PHONE}"; carInfoItems["起始地点"].Text = _car.BEGIN_ADDRESS; carInfoItems["起始时间"].Text = _car.BEGIN_TIME.ToFormatDateTimeStr(); carInfoItems["结束地点"].Text = _car.END_ADDRESS; carInfoItems["结束时间"].Text = _car.END_TIME.ToFormatDateTimeStr(); carInfoItems["驾驶员"].Text = $"{_car.DRIVER_NAME} {_car.DRIVER_PHONE}"; } else { string carLisStr = _car.LICENSE; if (!string.IsNullOrWhiteSpace(_car.Unit?.UNITNAME)) { carLisStr += $"({_car.Unit.UNITNAME})"; } carInfoItems["车牌号"].Text = carLisStr; carInfoItems["时 间"].Text = _car.LastGpsData.GNSSTIME.ToFormatDateTimeStr(); carInfoItems["速 度"].Text = $"{_car.LastGpsData.SPEED} Km/h 方向: {_car.LastGpsData.HEADING_STR} 里程: {(_car.LastGpsData.OBD_MILEAGE == 0 ? _car.LastGpsData.MILEAGE_K : _car.LastGpsData.OBD_MILEAGE)}"; carInfoItems["地 点"].Text = _car.LastGpsData.POSITION?.TrimStart() ?? ""; carInfoItems["定 位"].Text = "[" + _car.LastGpsData.LOCATE_STR + "] 模式: " + _car.LastGpsData.LOCATEMODE_STR + " " + _car.LastGpsData.ASSIST_LOCATEMODE_STR; carInfoItems["状 态"].Text = "[" + DescriptionAttribute.GetText(_car.CarState) + "] " + _car.CarStatus; } }); }
public DataTable QueryPageData(GetDataParams param) { if (param == null) { return(null); } if (string.IsNullOrWhiteSpace(param.Table)) { return(null); } string columnsStr; //列筛选条件处理 if (param.Columns == null || param.Columns.Length == 0) { columnsStr = "*"; } else { columnsStr = string.Join(",", param.Columns); } StringBuilder sbJoin = new StringBuilder(); if (!string.IsNullOrWhiteSpace(param.TableAsName)) { sbJoin.AppendFormat(" {0}", param.TableAsName); } //join条件处理 if (param.JoinConditions_Json != null && param.JoinConditions_Json.Any()) { param.JoinConditions.AddRange(param.JoinConditions_Json); } if (param.JoinConditions.Any()) { foreach (var jc in param.JoinConditions) { if (string.IsNullOrWhiteSpace(jc.Table) || string.IsNullOrWhiteSpace(jc.OnCol)) { continue; //忽略无效的连接条件 } if (string.IsNullOrWhiteSpace(jc.MainTable)) { if (!string.IsNullOrWhiteSpace(param.TableAsName)) { jc.MainTable = param.TableAsName; } else { jc.MainTable = param.Table; } } if (string.IsNullOrWhiteSpace(jc.MainCol)) { jc.MainCol = jc.OnCol; } sbJoin.AppendFormat(" {0}", DescriptionAttribute.GetText(jc.JoinType)); if (string.IsNullOrWhiteSpace(jc.TableAsName)) { sbJoin.AppendFormat(" {0} on {0}.{1}={2}.{3}", jc.Table, jc.OnCol, jc.MainTable, jc.MainCol); } else { sbJoin.AppendFormat(" {0} {4} on {4}.{1}={2}.{3}", jc.Table, jc.OnCol, jc.MainTable, jc.MainCol, jc.TableAsName); } if (!string.IsNullOrEmpty(jc.AndCondition)) { jc.AndCondition = jc.AndCondition.TrimStart(); if (jc.AndCondition.StartsWith("and", StringComparison.OrdinalIgnoreCase)) { sbJoin.AppendFormat(" {0}", jc.AndCondition); } else { sbJoin.AppendFormat(" and {0}", jc.AndCondition); } } } } param.Table += sbJoin.ToString(); //Where特殊情况处理 if (param.Where.ToString().TrimEnd().EndsWith("and", StringComparison.CurrentCultureIgnoreCase)) //包含and字符 { param.Where.Append(" 1=1 "); } if (!string.IsNullOrWhiteSpace(param.WhereStr)) { if (param.WhereStr.TrimEnd().EndsWith("and", StringComparison.CurrentCultureIgnoreCase)) { param.WhereStr += " 2=2 "; } if (param.WhereStr.TrimStart().StartsWith("and", StringComparison.CurrentCultureIgnoreCase)) { param.Where.AppendFormat(" {0} ", param.WhereStr); } else { param.Where.AppendFormat(" and {0} ", param.WhereStr); } } //DicWhere条件处理 if (param.DicWhere_Json != null && param.DicWhere_Json.Any()) { foreach (var keyValuePair in param.DicWhere_Json) { param.DicWhere.Add(keyValuePair.Key, keyValuePair.Value); } } if (param.DicWhere.Any()) { foreach (var item in param.DicWhere) { string col = item.Key; string val = item.Value; if (string.IsNullOrWhiteSpace(col) || string.IsNullOrWhiteSpace(val)) { continue; //筛选无效值 } val = val.StartsWith(",") ? string.Format("{0} {1}", col, val.TrimStart(',')) : string.Format("{0}='{1}'", col, val); param.Where.AppendFormat(" and {0} ", val); } } //主键条件附加 if (!string.IsNullOrWhiteSpace(param.PrimaryKey) && !string.IsNullOrWhiteSpace(param.PrimaryKeyValue)) { param.Where.AppendFormat(" and {0}='{1}'", param.PrimaryKey, param.PrimaryKeyValue); } StringBuilder sbSql = new StringBuilder(); StringBuilder sbSqlCount = new StringBuilder(); sbSql.AppendFormat("select {0} from {1}", columnsStr, param.Table); sbSqlCount.AppendFormat("select count(*) from {0}", param.Table); if (param.Where.Length > 0) { sbSql.AppendFormat(" where {0}", param.Where); sbSqlCount.AppendFormat(" where {0}", param.Where); } //GroupBy列字段 if (param.GroupByColumns != null && param.GroupByColumns.Length > 0) { sbSql.AppendFormat(" group by {0}", string.Join(",", param.GroupByColumns)); sbSqlCount.AppendFormat(" group by {0}", string.Join(",", param.GroupByColumns)); sbSqlCount.Insert(0, "select count(*) from ("); sbSqlCount.Append(")"); } //排序条件附加 if (param.OrderByConditons != null && param.OrderByConditons.Length > 0) { string orderCols = null; foreach (OrderByCondition o in param.OrderByConditons) { if (string.IsNullOrWhiteSpace(o.Col)) { continue; } orderCols += string.Format(" {0} {1},", o.Col, o.IsDesc ? "desc" : "asc"); } if (!string.IsNullOrWhiteSpace(orderCols)) { sbSql.AppendFormat(" order by {0}", orderCols.TrimEnd(',')); } } if (param.PageSize != -1 || param.PageIndex != -1) { //分页模式 if (param.PageSize < 1) { param.PageSize = 100; //错误页码过滤 } if (param.PageIndex < 1) { param.PageIndex = 1; } int count = 0; //if (param.Columns.Any(col => new Regex(@"count\s*\(",RegexOptions.IgnoreCase).IsMatch(col))) //{ // sbSqlCount.Insert(0, "select count(*) from ("); // sbSqlCount.Append(")"); //} object objCount = QueryScalar(sbSqlCount.ToString()); if (objCount != null) { count = Convert.ToInt32(objCount); } param.RowCount = count; param.PageCount = (int)Math.Ceiling((double)count / param.PageSize); if (param.PageIndex > param.PageCount) { param.PageIndex = param.PageCount; } if (count != 0) { int startRow = (param.PageIndex - 1) * param.PageSize; int endRow = param.PageIndex * param.PageSize; string sql = GetPageRowNumSql(sbSql.ToString(), startRow, endRow); DataTable dt = QueryTable(sql); return(dt); } else { return(null); } } else { //无需分页 DataTable dt = QueryTable(sbSql.ToString()); return(dt); } }