upubfun.pas

来自「a voice guide client ,it is the second p」· PAS 代码 · 共 1,965 行 · 第 1/5 页

PAS
1,965
字号
  begin
    p_field_value := PBaseDBFieldValue(_car_info.CarinfoValueList.Items[i]);

    if p_field_value^.FieldInfo.FieldName = _field_name then
    begin
      if p_field_value^.Value <> Null then
        Result := p_field_value^.Value;
      Break;
    end;
  end;
end;

class function TCarInfo.GetFieldValueVarByName(_car_info: TCarInfo; _field_name: string): Variant;
var
  i: Integer;
  p_field_value   : PBaseDBFieldValue;
  field_index     : Integer;
begin
  result := Null;

  field_index := _car_info.FieldList.IndexOf(_field_name);

  if field_index < 0 then
    Exit;

  p_field_value := PBaseDBFieldValue(_car_info.CarinfoValueList.Items[field_index]);

  if p_field_value^.Value <> Null then
    Result := p_field_value^.Value;

//  for i := 0 to _car_info.CarinfoValueList.Count - 1 do
//  begin
//    p_field_value := PBaseDBFieldValue(_car_info.CarinfoValueList.Items[i]);
//
//    if p_field_value^.FieldInfo.FieldName = _field_name then
//    begin
//      if p_field_value^.Value <> Null then
//        Result := p_field_value^.Value;
//      Break;
//    end;
//  end;
end;

class function TCarInfo.GetFieldValueDateByName(_car_info: TCarInfo;
  _field_name: string): TDateTime;
var
  i: Integer;
  p_field_value   : PBaseDBFieldValue;
begin
  result := Now;

  for i := 0 to _car_info.CarinfoValueList.Count - 1 do
  begin
    p_field_value := PBaseDBFieldValue(_car_info.CarinfoValueList.Items[i]);

    if p_field_value^.FieldInfo.FieldName = _field_name then
    begin
      if p_field_value^.Value <> Null then
        Result := p_field_value^.Value;
      Break;
    end;
  end;
end;

class procedure TCarInfo.SetVarToFieldValue(_car_info: TCarInfo;
  _field_name: string; _value: Variant);
var
  i: Integer;
  p_field_value   : PBaseDBFieldValue;
begin
  for i := 0 to _car_info.CarinfoValueList.Count - 1 do
  begin
    p_field_value := PBaseDBFieldValue(_car_info.CarinfoValueList.Items[i]);

    if p_field_value^.FieldInfo.FieldName = _field_name then
    begin
      p_field_value^.Value := _value;
      Break;
    end;
  end;
end;

//procedure TCarInfo.TCarInfo.SetVarToFieldValue(Self, _field_name, _str: string);
//var
//  i: Integer;
//  p_field_value   : PBaseDBFieldValue;
//begin
//  for i := 0 to CarinfoValueList.Count - 1 do
//  begin
//    p_field_value := PBaseDBFieldValue(CarinfoValueList.Items[i]);
//
//    if p_field_value^.FieldInfo.FieldName = _field_name then
//    begin
//      p_field_value^.Value := _str;
//      Break;
//    end;
//  end;
//end;
//
//procedure TCarInfo.TCarInfo.SetVarToFieldValue(Self, _field_name: string; _int: Integer);
//var
//  i: Integer;
//  p_field_value   : PBaseDBFieldValue;
//begin
//  for i := 0 to CarinfoValueList.Count - 1 do
//  begin
//    p_field_value := PBaseDBFieldValue(CarinfoValueList.Items[i]);
//
//    if p_field_value^.FieldInfo.FieldName = _field_name then
//    begin
//      p_field_value^.Value := _int;
//      Break;
//    end;
//  end;
//end;
//
//procedure TCarInfo.SetValueToFieldValue(_field_name: string; _value: Variant);
//var
//  i: Integer;
//  p_field_value   : PBaseDBFieldValue;
//begin
//  for i := 0 to CarinfoValueList.Count - 1 do
//  begin
//    p_field_value := PBaseDBFieldValue(CarinfoValueList.Items[i]);
//
//    if p_field_value^.FieldInfo.FieldName = _field_name then
//    begin
//      p_field_value^.Value := _value;
//      Break;
//    end;
//  end;
//end;

destructor TCarInfo.Destroy;
begin
  InitEFenseList;
  FreeAndNil(EFenseList);
  FreeAndNil(GpsInfo);
  FreeAndNil(GpsInfoGenOper);
  FreeAndNil(FieldList);

  // 清空 并 释放 车辆信息列表
  TBaseDBUtility.DisposeList(CarinfoValueList);
  FreeAndNil(CarinfoValueList);
  //if Assigned(TaskInfo) then FreeAndNil(TaskInfo);
end;

procedure TCarInfo.InitEFenseList;
var
  EFense: ^TEfenceItem;
begin
  if not Assigned(EFenseList) then EFenseList:= TList.Create;
  while EFenseList.Count >0 do begin
    EFense:= EFenseList.Items[0];
    if Assigned(EFense) then Dispose(EFense);
    EFenseList.Delete(0);
  end;
end;

procedure TCarInfo.SetGpsInfo(RecvTime, GpsTime: TDateTime; Long,
  Lat: Double; Speed, Head: Single; GpsValid: Boolean; GpsState: string);
begin
  GpsInfo.RecvTime:= RecvTime;
  GpsInfo.GpsTime:= GpsTime;
  GpsInfo.Long:= Long;
  GpsInfo.Lat:= Lat;
  GpsInfo.Speed:= Speed;
  GpsInfo.Head:= Head;
  GpsInfo.GpsValid:= GpsValid;
  GpsInfo.GpsState:= GpsState;
end;

procedure TCarInfo.SetGpsOperate(RecvTime: TDateTime;
      OperateId, OperateContent, OperateScribe: String);
begin
  GpsInfo.OperateTime:= RecvTime;
  GpsInfo.OperateId:= OperateId;
  GpsInfo.OperateContent:= OperateContent;
  GpsInfo.OperateScribe:= OperateScribe;
end;

//------------------------------------------------------------------------------
//  车辆信息属性值访问方法
//------------------------------------------------------------------------------

{: 取通信号码短ID。
}
function TCarInfo.getVehicleCommIDCardinal: Cardinal;
var
  error_string      : string;
  comm_no_id        : Int64;
begin
  Result := ERROR_CAR_ID_CARDINAL;

  if ExtractCommNOIDFromCarInfo(Self, error_string, comm_no_id, True) then
    Result := comm_no_id
  else
    frmMain.AddDebugInfo(error_string);
end;

{: 取通信号码长ID。
}
function TCarInfo.getVehicleCommIDInt64: Int64;
var
  error_string      : string;
  comm_no_id        : Int64;
begin
  Result := ERROR_CAR_ID_INT64;

  if ExtractCommNOIDFromCarInfo(Self, error_string, comm_no_id, False) then
    Result := comm_no_id
  else
    frmMain.AddDebugInfo(error_string);
end;

{: 取通信号码长字符串。
}
function TCarInfo.getVehicleCommIDStringLong: string;
var
  error_string      : string;
  comm_no_str       : string;
begin
  if ExtractCommNOStrFromCarInfo(Self, error_string, comm_no_str, False) then
    Result := comm_no_str
  else
    frmMain.AddDebugInfo(error_string);
end;

{: 取通信号码短字符串。
}
function TCarInfo.getVehicleCommIDStringShort: string;
var
  error_string      : string;
  comm_no_str       : string;
begin
  if ExtractCommNOStrFromCarInfo(Self, error_string, comm_no_str, True) then
    Result := comm_no_str
  else begin
    Result := '';
    frmMain.AddDebugInfo(error_string);
  end;
end;

{: 取车牌号码。
}
function TCarInfo.getVehicleRegistrationNO: string;
begin
  // 是否 使用 新 或 旧 的数据库定义
  if IsOldDB then
    Result := GetFieldValueStrByName(Self, 'CarCode')
  else
    Result := GetFieldValueStrByName(Self, 'RegistrationNO');
end;

{: 取车载终端类型。
}
function TCarInfo.getVehicleTerminalType: TTargetType;
var
  terminal_type_id: Integer;
begin
  // 是否 使用 新 或 旧 的数据库定义
  if IsOldDB then
    terminal_type_id := GetFieldValueIntByName(Self, 'CarStyle')
  else
    terminal_type_id := GetFieldValueIntByName(Self, 'TerminalTypeID');

  Result := TTargetType(terminal_type_id);
end;

{: 取车载终端类型名称。
}
function TCarInfo.getVehicleTerminalTypeName: string;
var
  terminal_type: TTargetType;
begin
  terminal_type := VehicleTerminalType;

  Result := GetTerminalTypName(Integer(terminal_type));
end;

{: 取车辆类型。
}
function TCarInfo.getVehicleTypeName: string;
begin
  // 是否 使用 新 或 旧 的数据库定义
  if IsOldDB then
    Result := GetFieldValueStrByName(Self, 'CarType')
  else
    Result := GetFieldValueStrByName(Self, 'VehicleTypeName');
end;

{: 取车辆车主姓名。
}
function TCarInfo.getVehicleOwnerName: string;
begin
  // 是否 使用 新 或 旧 的数据库定义
  if IsOldDB then
    Result := GetFieldValueStrByName(Self, 'CarOwnerName')
  else
    Result := GetFieldValueStrByName(Self, 'OwnerName');
end;

{: 取车辆分组编号。
}
function TCarInfo.getVehicleGroupID: Integer;
begin
  // 是否 使用 新 或 旧 的数据库定义
  if IsOldDB then
    Result := GetFieldValueIntByName(Self, 'TeamID')
  else
    Result := GetFieldValueIntByName(Self, 'GroupID');
end;

//------------------------------------------------------------------------------
// 车辆信息字段列表操作
//------------------------------------------------------------------------------

{: 初始化 车辆信息对象 的 信息字段列表。
  @param _car_info    车辆信息对象
}
class procedure TCarInfo.InitialCarInfoFieldValueList(_car_info: TCarInfo);
var
  i                     : Integer;
  p_field_value         : PBaseDBFieldValue;
  p_vehicle_info_column : PGPSClientVehicleInfoColumn;
begin
  // 释放原有的 车辆信息字段列表
  if Assigned(_car_info.CarinfoValueList) then
  begin
    // 清空 并 释放 车辆信息列表
    TBaseDBUtility.DisposeList(_car_info.CarinfoValueList);
    FreeAndNil(_car_info.CarinfoValueList);
  end;

  // 建立车辆信息列表
  _car_info.CarinfoValueList := TList.Create;

  _car_info.FieldList.Clear;

  // 初始化车辆信息列表的信息项目
  for i := 0 to GPSClientCarInfoColumnList.Count - 1 do
  begin
    p_vehicle_info_column := PGPSClientVehicleInfoColumn(GPSClientCarInfoColumnList.Objects[i]);

    // 使用 新 或 旧 的数据库定义,跳过未定义的字段
    if not _car_info.IsOldDB then
    begin
//      if p_vehicle_info_column^.FieldNameNew = '' then
//        Continue;
    end
    else begin
//      if p_vehicle_info_column^.FieldNameOld = '' then
//        Continue;
    end;

    New(p_field_value);

    p_field_value^.Value := Null;
    p_field_value^.FieldInfo := p_vehicle_info_column^.FieldInfo;

    // 如果是新库 则 更改数据库中的字段名
    if not _car_info.IsOldDB then
    begin
      p_field_value^.FieldInfo^.FieldName    := p_vehicle_info_column^.FieldNameNew;
      p_field_value^.FieldInfo^.FieldCaption := p_vehicle_info_column^.FieldCaptionNew;
    end;

    // 加入车辆信息列表
    _car_info.CarinfoValueList.Add(p_field_value);

    // 更新索引
    _car_info.FieldList.AddObject(
      p_field_value^.FieldInfo^.FieldName, TObject(Pointer(_car_info.FieldList.Count - 1))
      );
  end;
end;

//------------------------------------------------------------------------------
//  车辆信息 通信属性 处理
//------------------------------------------------------------------------------

class function TCarInfo.ExtractCommNOIDFromCarInfo(_car_info: TCarInfo;
  var _error_str: string; var _comm_no_id: Int64;
  _is_short: Boolean): Boolean;
var
  car_id            : Integer;
  car_id_comm       : Int64;
  car_id_comm_short : Int64;
  comm_no_str       : string;
  comm_no_str_db    : string;
begin
  // 初始化返回值
  Result := False;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?