📄 udm.pas
字号:
unit uDm;
interface
uses
SysUtils, Classes, DB, DBClient, MConnect, SConnect, uPubFun, uFrmAreaSelCar,
uTaxiPub, uBaseDBDataModule, Variants, uBaseDBForm, uBaseDBLogonCache,
ufrmBaseDBLogonCache, Dialogs, uBaseDBDefs, uGPSClientVirtualTreeView,
Windows, Messages, uBaseNetTCPSendClient, ufrmBaseDBDoll;
//Const
// APP_BASEDB_AUTH_NAME = 'CQGPSDB';
// APP_AUTH_NAME = 'ETGPSDB';
type
TGetDataProgress = procedure(Sender: TObject; Worked, Total: Integer)of object;
TEditState = (esAdd, esEdit, esDel);
EGpsDBError = class(EDatabaseError);
TDataModule1 = class(TDataModule)
scGpsDB: TSocketConnection;
cdsCarInfo: TClientDataSet;
cdsLookup: TClientDataSet;
cdsTemp: TClientDataSet;
cdsGroup: TClientDataSet;
cdsTeam: TClientDataSet;
dsTaxiStat: TDataSource;
cds01: TClientDataSet;
cds02: TClientDataSet;
cds03: TClientDataSet;
cds00: TClientDataSet;
dsAlarmQry: TDataSource;
cdsAlarmQry: TClientDataSet;
cdsPrice: TClientDataSet;
cdsCustomer: TClientDataSet;
dsCustomer: TDataSource;
cds04: TClientDataSet;
dsGoods: TDataSource;
cds05: TClientDataSet;
dsOrderStatus: TDataSource;
scPetroQF: TSocketConnection;
cdsPetroQF: TClientDataSet;
scPetroZP: TSocketConnection;
cdsPetroZP: TClientDataSet;
scAuth: TSocketConnection;
cdsAuth: TClientDataSet;
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
{ Private declarations }
{: 消息句柄。}
isCloseDB : Boolean;
messageHandle : HWND;
fProgress: TGetDataProgress;
procedure GetCurUsrInfo;
procedure FlushCarInfoList(_cds: TClientDataSet = nil; _log_name: string = '';
_user_sql_str: string = ''; _user_file_name: string = '');
procedure FlushTeamInfoList(_cds: TClientDataSet = nil);
procedure FlushGroupInfoList(_cds: TClientDataSet = nil);
// procedure FlushBaseDBGroupInfoList(_cds: TClientDataSet);
// procedure FlushBaseDBTeamInfoList(_cds: TClientDataSet);
procedure UserAdd(UserInfo: TUsrInfo);
procedure UserDel(UserInfo: TUsrInfo);
procedure UserEdit(UserInfo: TUsrInfo);
procedure WndProc(var _msg: TMessage);
procedure cacheVehicleGroupListFromStream(_data_stream: TMemoryStream);
procedure clearVehicleGroupList;
public
{ Public declarations }
baseDBLogon : TfrmBaseDBLogonCache;
isEndThread : Boolean;
fDataCount: Integer; //需要下载“数据”条数
autClientDataSet: TClientDataSet;
function ExtractCarInfoSQL(_car_info: TCarInfo; _is_new: Boolean): string;
function ExtractUserSelectSQL: string;
function ExtractCacheFileName(_login_user_name: string): string;
procedure FlushBaseDBCarInfoList(_cds: TClientDataSet; _log_name,
_user_sql_str, _user_file_name: string);
function OpenDB(DataHost: string; DataPort: Integer): Boolean;
function OpenAuthDB(DataHost: string; DataPort: Integer): Boolean;
procedure CloseDB;
function TabExits(TabName: string): Boolean;
function GetDataCount: Integer;
function LogOn(const LogName: string;const Passwd: string): TLnkDataState;
procedure Logoff;
procedure FlushPriceInfoList;
procedure SavePriceInfoList;
procedure FlushEFenseList;
procedure SaveEFenseList;
//出租业务
function GetTaxiSheetID(AOperId: Integer; var ASheetId, ASheetNo: Integer):Boolean;
procedure EditTaxiSheetId(ATaxiSheet: TTaxiSheetInfo; AAddBespeak: Boolean;
ATaxiBespeak: TTaxiBespeakInfo);
function GetTaxiLawsuitId(AOperId: Integer; var ALawsuitId, ALawsuitNo: Integer):Boolean;
procedure EditTaxiLawsuitId(ATaxiLawsuit: TTaxiLawsuitInfo);
procedure AddTaxiLostRec(ATaxiLost: TTaxiLostGoodsInfo);
//车牌、通讯号查车
function QryCarByCode(ACarCode: string; ACarInfo: TCarInfo): Boolean;
function QryCarByPhoneNo(APhoneNo: string; ACarInfo: TCarInfo): Boolean;
//区域查车
procedure AreaQryCar(CarIds: string; LongMin, LatMin, LongMax, LatMax: Double);
procedure AddTaxiDispatch(TaxiDispatch: TTaxiDispatchItem);
procedure SaveTaxiDispatch(AFn: string);
procedure OpenTaxiDispath;
procedure OpenTaxiDispathDetail;
//轨迹查询
function TrackQry(CarIds: string; StartTime, EndTime: TDateTime;
var RecCount: Integer): TClientDataSet;
function TrackStat(CarIds: string; StartTime, EndTime: TDateTime): TClientDataSet;
//修改车辆信息
procedure EditCarInfo(CarId: Integer; CarInfo: TCarInfo);
//增加车辆信息
function AddCarInfo(CarID:Integer;CarInfo:TCarInfo):Boolean;
//保存电子围栏信息
procedure SaveEFense(CarIdList: TList; EFenseList: TList);
//多级用户管理;
procedure UsrInfoEdit(UsrInfo: TUsrInfo; EditState: TEditState);
// procedure FlushUsrInfoList(ParatUsrName: string);
// procedure FlushWalkLineList;
//航线管理
// procedure SaveWalkLine(WalkLineList: TList; WalkLineName: string;
// OwnerId: Cardinal; WalkLineId: Int64;
// ForceOverride: Boolean);
function WalkLineExists(WalkLineName: string): Int64;
procedure SaveLastAreaEmInfo(LastEmCarId:integer;LastEmTime:TDateTime;LastAreaId:String);
//Task任务管理
// procedure TaskClear(CarIds: string);
// procedure TaskSet(CarIds, TaskName: string; WalkLineId: Cardinal);
// procedure FlushTaskInfoList(CarIds: string);
// procedure UpdateTaskTime(sTask: string; TaskId: Cardinal);
/////////////////////////////////////////////////////////////////////////////
//2004-10-27 for zhong shan xiao lan , wulianghong
//start
procedure SaveCustomerSendCmd(TargetID:String;CmdType:Integer;CmdDescribe,CmdOtherInfo:String);
procedure GetCustomerSendInfo(const sSQL:String);
property GetDataProgress: TGetDataProgress
read fProgress
write fProgress;
end;
var
DataModule1: TDataModule1;
implementation
uses Forms, Controls, GpsNetCommCtrl, Math, uFrmMain, IniFiles;
{$R *.dfm}
{ TDataModule1 }
procedure TDataModule1.AddTaxiDispatch(TaxiDispatch: TTaxiDispatchItem);
begin
if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
cdsLookup.Close;
cdsLookup.CommandText:=
Format('INSERT INTO TaxiDispatch(UsrId, Phone, PhoneInTime, Address, IsDispatch, DispatchTime, CarId, CarRespond) '+
'VALUES(%d, %s, %s, %s, %d, %s, %d, %s)',
[TaxiDispatch.UsrId, QuotedStr(TaxiDispatch.Phone),
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', TaxiDispatch.PhoneInTime)),
QuotedStr(TaxiDispatch.Address), Ord(TaxiDispatch.IDispatch),
QuotedStr(FormatDateTime('yyyy-mm-dd hh:nn:ss', TaxiDispatch.DispatchTime)),
TaxiDispatch.CarId, QuotedStr(TaxiDispatch.CarRespond)
]);
cdsLookup.Execute;
CloseDB;
end;
procedure TDataModule1.AreaQryCar(CarIds: string; LongMin, LatMin, LongMax,
LatMax: Double);
begin
if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
cdsLookup.Close;
cdsLookup.CommandText:=
Format('DECLARE @CarIds varchar(5000) '+
'set @CarIds = %s '+
'EXEC GetAreaSelCar @CarIds, ''%3.6f'', ''%3.6f'', ''%3.6f'', ''%3.6f''',
[QuotedStr(CarIDs), LongMin, LatMin, LongMax, LatMax]);
cdsLookup.Open;
CloseDB;
end;
procedure TDataModule1.CloseDB;
begin
scGpsDB.Close;
scPetroZP.Close;
end;
procedure TDataModule1.EditCarInfo(CarId: Integer; CarInfo: TCarInfo);
//修改车辆信息
var
i: Integer;
sCmd:String;
begin
// 暂时禁用车辆信息编辑功能
Exit;
if not scGpsDB.Connected then OpenDB(gDataHost, gDataPort);
cdsLookup.Close;
//ruihanxl
// if TCarInfo.GetFieldValueBoolByName(CarInfo, 'CanCall') then
// iCanCall := 1
// else
// iCanCall := 0;
try
for i := 0 to CarInfo.CarinfoValueList.Count - 1 do
begin
end;
cdsLookup.CommandText:= sCmd;
frmMain.AddDebugDBInfo(sCmd);
cdsLookup.Execute;
CloseDB;
except
On E:Exception Do
begin
MessageBox(Application.Handle,PChar('数据输入有误,请核对后再输入.'),PChar('保存'),MB_OK+MB_ICONEXCLAMATION);
end;
end;
end;
procedure TDataModule1.FlushBaseDBCarInfoList(_cds: TClientDataSet;
_log_name, _user_sql_str, _user_file_name: string);
var
sCarId, CarIds: string;
CarInfo: TCarInfo;
comm_no_str: string;
comm_no_str_short: string;
vehicle_id: Cardinal;
sql_str : string;
check_sql_str : string;
dir_name : string;
file_name : string;
app_name : string;
i : Integer;
field_name : string;
db_name : string;
p_field_value : PBaseDBFieldValue;
sql_list : TStringList;
p_sql_data : PSelectSql;
doll_basedb : TfrmBaseDBDoll;
begin
// 设置缓存目录名称
dir_name := ExtractFilePath(Application.ExeName) + 'LogonCache\';
// 是否使用新数据库,新/旧 库 的 缓存文件,SQL语句 不一样
if gUseNewDBServer then
begin
file_name := _log_name + '_msc_vehicle.txt';
app_name := getDBName;
sql_str := Format('select * from V_MSC_Vehicle where ID in (select * from F_GetVehicleTableByUserID(%d)) ', [
gCurUsrInfo.UsrId]);
end
else begin
file_name := _log_name + '_CarInfo.txt';
app_name := getDBName;
if gCurUsrInfo.WatchRangeId = 0 then
sql_str :=
'select * from TeamInfo,CarInfo where TeamInfo.TeamId=CarInfo.TeamId and TeamInfo.GroupId' +
' in(' + gCurUsrInfo.Ranger + ')'
else if gCurUsrInfo.WatchRangeId = 1 then
sql_str :=
'select * from TeamInfo,CarInfo where TeamInfo.TeamId=CarInfo.TeamId and TeamInfo.TeamId' +
' in(' + gCurUsrInfo.Ranger + ')'
else if gCurUsrInfo.WatchRangeId = 2 then
sql_str :=
'select * from CarInfo where CarID' + ' in(' + gCurUsrInfo.Ranger + ')';
end;
// 如果是缓存登录,直接载入缓存文件
if gIsCacheLogon and FileExists(dir_name + file_name) then
begin
_cds.LoadFromFile(dir_name + file_name);
_cds.Open;
end
// 非缓存登录,使用数据库查询
else begin
// 如果是新库,需要缓存车辆组列表以支持树形显示
if gUseNewDBServer then
begin
doll_basedb := TfrmBaseDBDoll.Create(nil);
sql_list := TStringList.Create;
try
sql_list.Add( Format(
'select V_MSC_GroupLevelInfo.ID,Name,LevelID,LevelNO,LevelName,MSC_GroupRelationShip.ParentGroupID ' +
'from V_MSC_GroupLevelInfo LEFT OUTER JOIN MSC_GroupRelationShip ON ' +
'V_MSC_GroupLevelInfo.ID = MSC_GroupRelationShip.GroupID ' +
'where LevelNO >= ( ' +
'select LevelNO from V_MSC_GroupLevelInfo where ID=( ' +
'select GroupID from MSC_User where id=%d) ' +
')', [gCurUsrInfo.UsrId])
);
sql_list.Add(sql_str);
// // 增加车辆组查询任务
// New(p_sql_data);
// p_sql_data^.ID := 1;
// p_sql_data^.Stream := nil;
// p_sql_data^.SqlStr := Format(
// 'select V_MSC_GroupLevelInfo.ID,Name,LevelID,LevelNO,LevelName,MSC_GroupRelationShip.ParentGroupID ' +
// 'from V_MSC_GroupLevelInfo LEFT OUTER JOIN MSC_GroupRelationShip ON ' +
// 'V_MSC_GroupLevelInfo.ID = MSC_GroupRelationShip.GroupID ' +
// 'where LevelNO >= ( ' +
// 'select LevelNO from V_MSC_GroupLevelInfo where ID=( ' +
// 'select GroupID from MSC_User where id=%d) ' +
// ')', [gCurUsrInfo.UsrId]);
// sql_list.AddObject(IntToStr(p_sql_data^.ID), TObject(p_sql_data));
//
// // 增加车辆列表查询任务
// New(p_sql_data);
// p_sql_data^.ID := 2;
// p_sql_data^.Stream := nil;
// p_sql_data^.SqlStr := sql_str;
// sql_list.AddObject(IntToStr(p_sql_data^.ID), TObject(p_sql_data));
doll_basedb.AddSQLTaskList(sql_list);
doll_basedb.AppName := getDBName;
doll_basedb.OpenSelectDatasetSqlList(doll_basedb.selectSqlList);
// 载入车辆列表数据集
p_sql_data := PSelectSql(doll_basedb.selectSqlList.Objects[1]);
if Assigned(p_sql_data^.Stream) then
_cds.LoadFromStream(p_sql_data^.Stream)
else
_cds := TBaseDBForm.OpenSelectFromDataset(app_name, sql_str);
// 载入车辆组列表数据集
p_sql_data := PSelectSql(doll_basedb.selectSqlList.Objects[0]);
if Assigned(p_sql_data^.Stream) then
cacheVehicleGroupListFromStream(p_sql_data^.Stream);
finally
doll_basedb.Free;
// // 释放 SQL 语句列表
// for i := sql_list.Count - 1 downto 0 do
// begin
// p_sql_data := PSelectSql(sql_list.Objects[i]);
//
// if Assigned(p_sql_data^.Stream) then
// p_sql_data^.Stream.Free;
//
// Dispose(p_sql_data);
// end;
//
sql_list.Free;
end;
end
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -