Example #1
0
        /// <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;
                }
            });
        }
Example #2
0
        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);
            }
        }