⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udm.pas

📁 a voice guide client ,it is the second part of voice guide center
💻 PAS
📖 第 1 页 / 共 5 页
字号:
          gCurUsrInfo.UsrId := gCurUsrId;
          gCurUsrInfo.UsrName := Trim(cdsAuth.FieldByName('usrname').AsString);
          gCurUsrInfo.UsrPwd := Trim(cdsAuth.FieldByName('usrpwd').AsString);
          gCurUsrInfo.UsrPurview := gCurUsrType;
          gCurUsrInfo.WatchRangeId := cdsAuth.FieldByName('WatchRangeId').AsInteger;
          gCurUsrInfo.Ranger := Trim(cdsAuth.FieldByName('Ranger').AsString);
        end
        else begin
          Result:= ldsPwdErr;
          Exit;
        end;
        cdsAuth.Close;

        fDataCount := 0;
        cdsAuth.CommandText := 'SELECT SUM(a) AS RecordCount ' +
          'FROM ( SELECT COUNT(*) AS a FROM UsrInfo ' +
          'UNION SELECT COUNT(*) AS a FROM teamInfo UNION SELECT COUNT(*) AS a FROM carInfo) b';
        cdsAuth.Open;
        cdsAuth.First;
        if not cdsAuth.Eof then
        begin
          fDataCount := cdsAuth.FieldByName('RecordCount').AsInteger;
        end;

        Result:= ldsOk;

        //获取车辆数据
        InitInfoList;

        FlushCarInfoList(cdsAuth);
        FlushTeamInfoList(cdsAuth);
        FlushGroupInfoList(cdsAuth);
      except
        Result := ldsLinkErr;
      end;
    finally
      scAuth.Close;
    end;

//    //获取费用列表
//    FlushPriceInfoList;
//    //获取电子围栏列表
//    FlushEFenseList;
  end
  else begin
    //登陆服务器
    //LongOnEx(const UserName, PassWord: WideString; out UserId, UserType: Integer): WordBool;

    file_name := LogName + '_usrinfo.txt';

    if gIsCacheLogon and FileExists(dir_name + file_name) then
    begin
      if not Assigned(autClientDataSet) then
        autClientDataSet := TClientDataSet.Create(nil);
      autClientDataSet.LoadFromFile(dir_name + file_name);
      autClientDataSet.Open;
      autClientDataSet.First;
      if not autClientDataSet.Eof then
      begin
        if not Assigned(gCurUsrInfo)
        then gCurUsrInfo:= TUsrInfo.Create;

        gCurUsrId := autClientDataSet.FieldByName('UsrID').AsInteger;
        gCurUsrType := autClientDataSet.FieldByName('UsrPurview').AsInteger;

        gCurUsrInfo.UsrId := gCurUsrId;
        gCurUsrInfo.UsrName := Trim(autClientDataSet.FieldByName('usrname').AsString);
        gCurUsrInfo.UsrPwd := Trim(autClientDataSet.FieldByName('usrpwd').AsString);
        gCurUsrInfo.UsrPurview := gCurUsrType;
        gCurUsrInfo.WatchRangeId := autClientDataSet.FieldByName('WatchRangeId').AsInteger;
        gCurUsrInfo.Ranger := Trim(autClientDataSet.FieldByName('Ranger').AsString);

        frmMain.AddDebugInfo(Format('login--LogName, UsrName, Passwd, UsrPwd %s,%s,%s,%s', [
          LogName, gCurUsrInfo.UsrName, Passwd, gCurUsrInfo.UsrPwd]));
        if (LogName <> gCurUsrInfo.UsrName) or (Passwd <> gCurUsrInfo.UsrPwd) then
        begin
          Result := ldsPwdErr;
          Exit;
        end;
      end
      else begin
        Result:= ldsPwdErr;
        Exit;
      end;
      autClientDataSet.Close;
    end
    else begin
      OpenDB(gDataHost, gDataPort);

      if not scGpsDB.Connected then begin
        Result:= ldsLinkErr;
        Exit;
      end;

      bLogResult:= scGpsDB.AppServer.LogOnEx(LogName, Passwd, gCurUsrId, gCurUsrType);
      //获取当前用户权限
      GetCurUsrInfo;

      Application.ProcessMessages;

      if not bLogResult then begin
        Result:= ldsPwdErr;
        Exit;
      end;
    end;
    //出租车登陆
    if gTaxiOpened then begin
      Result:= TaxiLogon(gCurUsrId);
      if Result<> ldsOk then Exit;
    end else Result:= ldsOk;

    //添加日志,记录登陆时间, 全局变量gLogId,在注销时使用
    try
//      gCurLogID := scGpsDB.AppServer.AddUsrLogRec(LogName, now);
    except
    end;

    //获取车辆数据
    InitInfoList;

    if not gIsCacheLogon or not FileExists(
      ExtractFilePath(Application.ExeName) + 'LogonCache\' +
      LogName + '_CarInfo.txt') then
    begin
      fDataCount:= GetDataCount;
    end;

    frmMain.AddDebugInfo('login--Begin FlushCarInfoList');
    FlushCarInfoList(nil, LogName, Format(
          'select * from usrinfo where UPPER(usrname) = ''%s'' and UPPER(usrpwd) = ''%s''', [
          UpperCase(LogName), UpperCase(Passwd)
          ]), file_name);
    frmMain.AddDebugInfo('login--Finish FlushCarInfoList');

//    FlushTeamInfoList;
//    FlushGroupInfoList;
    //获取费用列表
//    FlushPriceInfoList;
    //获取电子围栏列表
//    FlushEFenseList;
  end;

//  sLogResult:= scGpsDB.AppServer.LogOn(LogName, Passwd);
//  Result:= sLogResult<>',';
//  if not Result then Exit;
//  i:= Pos(',', sLogResult);
//  sUsrId:= Copy(sLogResult, 1, i-1);
//  sUsrType:= Copy(sLogResult, i+1, MaxInt);
//  //添加日志,记录登陆时间, 全局变量gLogId,在注销时使用
//  gCurLogID := scGpsDB.AppServer.AddUsrLogRec(LogName, now);
//  gCurUsrId:= StrToInt(sUsrId);
//  gCurUsrPurview:= StrToInt(sUsrType);
//  //获取车辆数据
//  FlushCarInfoList;
//  //获取当前用户权限
//  GetCurUsrInfo;
  //获取航线信息
  //FlushWalkLineList;
end;

function TDataModule1.OpenDB(DataHost: string; DataPort: Integer): Boolean;
var
  BakCur: TCursor;
begin
  Result:= False;
  BakCur:= Screen.Cursor;
  Screen.Cursor:= crSQLWait;
  try
    try
      if scGpsDB.Connected then scGpsDB.Close;
      if IsIP(DataHost)
      then scGpsDB.Address:= DataHost
      else scGpsDB.Host:= DataHost;
      scGpsDB.Port:= DataPort;
      scGpsDB.Open;
      Result:= True;
    except
      On e: Exception do frmMain.AddLog(Format('连接数据服务(%s:%d)错误:%s', [
        DataHost, DataPort, E.Message]));
    end;
  finally
    Screen.Cursor:= BakCur;
  end;
end;

function TDataModule1.OpenAuthDB(DataHost: string; DataPort: Integer): Boolean;
var
  BakCur: TCursor;
begin
  Result:= False;
  BakCur:= Screen.Cursor;
  Screen.Cursor:= crSQLWait;
  try
    try
      if scAuth.Connected then scAuth.Close;
      if IsIP(DataHost)
      then scAuth.Address:= DataHost
      else scAuth.Host:= DataHost;
      scAuth.Port:= DataPort;
      scAuth.Open;
      Result:= True;
    except
      On e: Exception do frmMain.AddLog(Format('连接Auth数据服务(%s:%d)错误:%s', [
        DataHost, DataPort, E.Message]));
    end;
  finally
    Screen.Cursor:= BakCur;
  end;
end;

procedure TDataModule1.OpenTaxiDispath;
begin
  if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
  // 业务量,日期
  cds00.Close;
  cds00.CommandText:= 'SELECT COUNT(*) AS Flux, CAST(PhoneInTime AS int) AS Expr1 '+
    'FROM TaxiDispatch GROUP BY CAST(PhoneInTime AS int)';
  cds00.Open;
  //cds00.SaveToFile(AFn+ '00.xml', dfXML);
  //业务量,时间
  cds01.Close;
  cds01.CommandText:= 'SELECT COUNT(*) AS Flux, DATEPART(hour, PhoneInTime) AS Expr1 '+
    'FROM TaxiDispatch GROUP BY DATEPART(hour, PhoneInTime)';
  cds01.Open;
  //cdsLookup.SaveToFile(AFn+ '01.xml', dfXML);
  //业务量,处理时间
  cds02.Close;
  cds02.CommandText:= 'SELECT COUNT(*) AS Flux, DATEDIFF(s, PhoneInTime, DispatchTime) AS Expr1 '+
    'FROM TaxiDispatch '+
    'GROUP BY DATEDIFF(s, PhoneInTime, DispatchTime) '+
    'ORDER BY DATEDIFF(s, PhoneInTime, DispatchTime)';
  cds02.Open;
  //cdsLookup.SaveToFile(AFn+ '02.xml', dfXML);
  CloseDB;
end;

procedure TDataModule1.OpenTaxiDispathDetail;
begin
  if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
  // 业务量,日期
  cds03.Close;
  cds03.CommandText:= 'SELECT UsrId, CarId, PhoneInTime, DispatchTime FROM TaxiDispatch';
  cds03.Open;
  //CloseDB;
end;

function TDataModule1.QryCarByCode(ACarCode: string;
  ACarInfo: TCarInfo): Boolean;
//车牌查车
var
  i             : Integer;
  field_name    : string;
  p_field_value : PBaseDBFieldValue;
begin
  if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
  cdsLookup.Close;
  cdsLookup.CommandText:=
    Format('SELECT TOP 1 * FROM CarInfo WHERE (CarCode Like %s)',
      [QuotedStr(ACarCode+ '%')]);
  cdsLookup.Open;
  Result:= not cdsLookup.IsEmpty;
  if Result and Assigned(ACarInfo) then begin
    with ACarInfo, cdsLookup do begin
      for i := 0 to CarinfoValueList.Count - 1 do
      begin
        p_field_value := PBaseDBFieldValue(CarinfoValueList.Items[i]);
        field_name    := p_field_value.FieldInfo.FieldName;
        TCarInfo.SetVarToFieldValue(ACarInfo, field_name, cdsLookup.FieldByName(field_Name).Value);
      end;
    end;
  end;
  CloseDB;
end;

function TDataModule1.QryCarByPhoneNo(APhoneNo: string;
  ACarInfo: TCarInfo): Boolean;
//通讯号查车
var
  i             : Integer;
  field_name    : string;
  p_field_value : PBaseDBFieldValue;
begin
  if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
  cdsLookup.Close;
  cdsLookup.CommandText:=
    Format('SELECT TOP 1 * FROM CarInfo WHERE (CarCommunicateCode LIKE %s)',
      [QuotedStr(APhoneNo+ '%')]);
  cdsLookup.Open;
  Result:= not cdsLookup.IsEmpty;
  if Result and Assigned(ACarInfo) then begin
      for i := 0 to ACarInfo.CarinfoValueList.Count - 1 do
      begin
        p_field_value := PBaseDBFieldValue(ACarInfo.CarinfoValueList.Items[i]);
        field_name    := p_field_value.FieldInfo.FieldName;
        TCarInfo.SetVarToFieldValue(ACarInfo, field_name, cdsLookup.FieldByName(field_Name).Value);
      end;
  end;
  CloseDB;
end;

procedure TDataModule1.SaveEFense(CarIdList: TList; EFenseList: TList);
var
  i, j, iCarId      : Integer;
  sCarId            : string;
  GpsRect           : ^TGpsRect;
  p_node_data       : PGPSClientVTVActiveVehicleNodeData;
begin
  if (not Assigned(CarIdList))and (CarIdList.Count<=0) then Exit;
  if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
  //删除以前的数据
  sCarId:= '';
  for i:= 0 to CarIdList.Count -1 do begin
    p_node_data := PGPSClientVTVActiveVehicleNodeData(CarIdList.Items[i]);
    iCarID := Integer(p_node_data^.VehicleCommID);
    if sCarId= '' then sCarId:= IntToStr(iCarId)
    else sCarId:= sCarId+ ','+ IntToStr(iCarId);
  end;
  cdsLookup.Close;
  cdsLookup.CommandText:= Format('DELETE FROM tabEFenceItem WHERE (CarId in (%s))', [sCarId]);
  cdsLookup.Execute;
  //添加
  for i:=0 to CarIdList.Count -1 do begin
    iCarId:= Integer(CarIdList.Items[i]);
    for j:=0 to EFenseList.Count -1 do begin
      GpsRect:= EFenseList.Items[j];
      cdsLookup.Close;
      cdsLookup.CommandText:= Format('INSERT INTO tabEFenceItem '+
        '(CarId, EFenseNo, IsEFence, LongMin, LatMin, LongMax, LatMax) '+
        'VALUES (%d,%d,1,%3.6f,%3.6f,%3.6f,%3.6f)', [iCarId, j,
          GpsRect.LongMin, GpsRect.LatMin, GpsRect.LongMax, GpsRect.LatMax]);
      cdsLookup.Execute;
    end;
  end;
  CloseDB;
end;

procedure TDataModule1.SaveEFenseList;
//保存迟到报警,修改后的时间,和是否是迟到报警
var
  i, j: Integer;
  CarInfo: TCarInfo;
  EFense: PEfenceItem;
begin
  if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
  for i:= 0 to gCarInfoList.Count-1 do begin
    CarInfo:= TCarInfo(gCarInfoList.Objects[i]);
    if not Assigned(CarInfo) then Continue;
    for j:= 0 to CarInfo.EFenseList.Count -1 do begin
      EFense:= CarInfo.EFenseList.Items[j];
      if (not Assigned(EFense)) or (not EFense.Edited) then Continue;
      cdsLookup.Close;
      cdsLookup.CommandText:= Format('UPDATE tabEFenceItem '+
        ' SET IsEFence = %d, EnterTime = CONVERT(DATETIME, %s, 102), '+
        ' ExitTime = CONVERT(DATETIME, %s, 102) '+
        'WHERE (EFenseId = %d)', [Ord(EFense.IsEFence),
        QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', EFense.EnterTime)),
        QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', EFense.ExitTime)),
        EFense.id]);
      cdsLookup.Execute;
      EFense.Edited:= False;
    end;
  end;
  CloseDB;
end;

procedure TDataModule1.SaveLastAreaEmInfo(LastEmCarId: integer;
  LastEmTime: TDateTime; LastAreaId: String);

⌨️ 快捷键说明

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