📄 udm.pas
字号:
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 + -