📄 baselogunit.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "BaseLogUnit.h"
#include "DMDataAccess.h"
#include "DBAccessUnit.h"
#include "DeviceInfoInputUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TBaseLogFrm *BaseLogFrm;
//---------------------------------------------------------------------------
__fastcall TBaseLogFrm::TBaseLogFrm(TComponent* Owner)
: TBaseViewFrm(Owner)
{
}
//---------------------------------------------------------------------------
bool TBaseLogFrm::InitDeviceList()
{
TDBAccess aDBAccess;
TTreeNode* pRootNode = trDevice->TopItem;
aDBAccess.GetDeviceList(aDeviceInfoList);
IterDeviceInfo_T IterDevice;
DeviceInfo_T aDeviceInfo;
for(IterDevice = aDeviceInfoList.begin();IterDevice != aDeviceInfoList.end();++IterDevice)
{
aDeviceInfo = *IterDevice;
TTreeNode* lNewNode = trDevice->Items->AddChild(pRootNode,aDeviceInfo.DeviceName);
lNewNode->StateIndex = aDeviceInfo.DeviceID;
lNewNode->ImageIndex = 2;
lNewNode->SelectedIndex = 3;
}
trDevice->FullExpand();
return true;
}
//---------------------------------------------------------------------------
bool TBaseLogFrm::GetSelectedDeviceID(int & oSelectedDeviceID)
{
TTreeNode* pSelectedNode = trDevice->Selected;
if (pSelectedNode == trDevice->TopItem)
{
oSelectedDeviceID = 0;
}
else if (pSelectedNode)
{
oSelectedDeviceID = pSelectedNode->StateIndex;
}
else
return false;
return true;
}
//---------------------------------------------------------------------------
bool TBaseLogFrm::GetSelectedTime(TDateTime& oBeginTime,TDateTime& oEndTime)
{
if (cbPeriod->Checked)
{
SYSTEMTIME SetTime;
dtpStartDate->Date.DecodeDate(&SetTime.wYear,&SetTime.wMonth,&SetTime.wDay);
dtpStartTime->Time.DecodeTime(&SetTime.wHour,&SetTime.wMinute,&SetTime.wSecond,&SetTime.wMilliseconds);
TDateTime lBeginTime = SystemTimeToDateTime(SetTime);
dtpEndDate->Date.DecodeDate(&SetTime.wYear,&SetTime.wMonth,&SetTime.wDay);
dtpEndTime->Time.DecodeTime(&SetTime.wHour,&SetTime.wMinute,&SetTime.wSecond,&SetTime.wMilliseconds);
TDateTime lEndTime = SystemTimeToDateTime(SetTime);
if (lBeginTime >= lEndTime)
{
Application->MessageBoxA("请重新设置时间段,开始时间不能晚于截止时间!","提示信息",MB_OK + MB_ICONWARNING);
return false;
}
oBeginTime = lBeginTime;
oEndTime = lEndTime;
return true;
}
return false;
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::FormCreate(TObject *Sender)
{
dtpStartDate->DateTime = Now() -20;
dtpStartTime->Time = StrToTime("00:00:00");
dtpEndDate->DateTime = Now();
dtpEndTime->Time = StrToTime("00:00:00");
ClearSpeedButtonCaption();
sbInfo->Panels->Items[0]->Text = " 共查询到记录总数:";
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::trDeviceClick(TObject *Sender)
{
edtCurDeviceName->Text = trDevice->Selected->Text;
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::FormShow(TObject *Sender)
{
InitDeviceList();
trDevice->SetFocus();
trDevice->Selected = trDevice->TopItem;
trDeviceClick(Sender);
sbCancel->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::UpLogTimerTimer(TObject *Sender)
{
int lRet;
LogInfoBase_T lLogInfo;
if(nNum >= nLogMax)
{
UpLogTimer->Enabled = false;
sbCancel->Enabled = false;
sbInfo->Panels->Items[1]->Text = "上传设备日志完成! 进度: 100%";
AnsiString lMsg = "上传 " + edtCurDeviceName->Text + " 设备的日志记录成功!";
Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONINFORMATION);
sbInfo->Panels->Items[1]->Text = "";
pEventEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
return;
}
//先判断数据库里是否存在这条日志,如果存在则不上传
if(aDBAccess.IsExistLog(nDeviceID,nNum))
{
nNum++;
AnsiString lProgress = "正在上传日志并写入电脑,请稍候...... 进度: ";
lProgress = lProgress + AnsiString(nNum*(1000000/nLogMax)/10000) + "%";
sbInfo->Panels->Items[1]->Text = lProgress;
return;
}
lRet = pDiviceAccess->GetLogInfo(nHandle,nNum,lLogInfo);
if(lRet != 0)
{
sbInfo->Panels->Items[1]->Text = "上传设备日志失败!";
//ShowMessage(lRet);
UpLogTimer->Enabled = false;
sbCancel->Enabled = false;
pEventEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
return;
}
lLogInfo.DeviceID = nDeviceID;
aDBAccess.InsertLog(lLogInfo);
nNum++;
AnsiString lProgress = "正在上传日志并写入电脑,请稍候...... 进度: ";
lProgress = lProgress + AnsiString(nNum*(1000000/nLogMax)/10000) + "%";
sbInfo->Panels->Items[1]->Text = lProgress;
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::aUpCurrentLogExecute(TObject *Sender)
{
//上传最新设备门禁日志
if(!GetSelectedDeviceID(nDeviceID))
{
Application->MessageBoxA("得到当前设备失败!","提示信息",MB_OK + MB_ICONWARNING);
return;
}
AnsiString lMsg;
if(nDeviceID == 0)
{
Application->MessageBoxA("请选择一个具体设备上传日志!","提示信息",MB_OK + MB_ICONWARNING);
return;
}
int lRV;
DeviceInfo_T aDeviceInfo;
pDiviceAccess = GetDeviceAccessInstance();
pEventEngine = GetEventEngineInstance();
if(pEventEngine->GetDeviceInfo(nDeviceID,&aDeviceInfo))
{
nHandle = pEventEngine->GetDeviceHandle(nDeviceID);
if(nHandle == 0)
{
lMsg = "打开 " + edtCurDeviceName->Text + " 设备失败,请检查设备是否安装好或设备记录参数是否正确...";
Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONERROR);
return;
}
}
pDiviceAccess->GetLogCount(nHandle,nLogMax);
if(nLogMax < 1)
{
Application->MessageBoxA("设备里不存在日志记录!","提示信息",MB_OK + MB_ICONINFORMATION);
pEventEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
return;
}
UpLogTimer->Enabled = true;
sbCancel->Enabled = true;
AnsiString lProgress = "正在上传日志并写入电脑,请稍候...... 进度: 0%";
sbInfo->Panels->Items[1]->Text = lProgress;
nNum = 0;
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::aClearDeviceLogExecute(TObject *Sender)
{
//清除设备日志
int lDeviceID;
if (GetSelectedDeviceID(lDeviceID))
{
AnsiString lMsg;
if (lDeviceID == 0)
{
Application->MessageBoxA("请选择一个具体设备清除日志!","提示信息",MB_OK + MB_ICONWARNING);
return;
}
lMsg = "您确认要清除 " + edtCurDeviceName->Text + " 设备内的所有日志吗?";
if (Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONWARNING) == ID_NO)
return;
DeviceInfo_T aDeviceInfo;
int lHandle;
pDiviceAccess = GetDeviceAccessInstance();
pEventEngine = GetEventEngineInstance();
if (pEventEngine->GetDeviceInfo(lDeviceID,&aDeviceInfo))
{
lHandle = pEventEngine->GetDeviceHandle(lDeviceID);
if (lHandle == 0)
{
lMsg = "打开 " + edtCurDeviceName->Text + " 设备失败,请检查设备是否安装好或设备记录参数是否正确...";
Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONERROR);
return;
}
//先在引擎里停止该设备
int lRV = pDiviceAccess->ClearLogInfo(lHandle);
pEventEngine->ReleaseDeviceHandle(lDeviceID,lHandle);
if (lRV == OK)
{
lMsg = "清除 " + edtCurDeviceName->Text + " 设备的日志记录成功!";
Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONINFORMATION);
}
else
{
lMsg = "清除 " + edtCurDeviceName->Text + " 设备的日志记录失败!";
Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONERROR);
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::aUpAllLogExecute(TObject *Sender)
{
//上传所有日志
if(!GetSelectedDeviceID(nDeviceID))
{
Application->MessageBoxA("得到当前设备失败!","提示信息",MB_OK + MB_ICONWARNING);
return;
}
AnsiString lMsg;
if(nDeviceID == 0)
{
Application->MessageBoxA("请选择一个具体设备上传日志!","提示信息",MB_OK + MB_ICONWARNING);
return;
}
DeviceInfo_T aDeviceInfo;
pDiviceAccess = GetDeviceAccessInstance();
pEventEngine = GetEventEngineInstance();
if(pEventEngine->GetDeviceInfo(nDeviceID,&aDeviceInfo))
{
nHandle = pEventEngine->GetDeviceHandle(nDeviceID);
if(nHandle == 0)
{
lMsg = "打开 " + edtCurDeviceName->Text + " 设备失败,请检查设备是否安装好或设备记录参数是否正确...";
Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONERROR);
return;
}
}
pDiviceAccess->GetLogCount(nHandle,nLogMax);
if(nLogMax < 1)
{
Application->MessageBoxA("设备里不存在日志记录!","提示信息",MB_OK + MB_ICONINFORMATION);
pEventEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
return;
}
UpAllLogTimer->Enabled = true;
sbCancel->Enabled = true;
AnsiString lProgress = "正在上传日志并写入电脑,请稍候...... 进度: 0%";
sbInfo->Panels->Items[1]->Text = lProgress;
nNum = 0;
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::aViewDeviceExecute(TObject *Sender)
{
//查看设备
int lDeviceID;
if (GetSelectedDeviceID(lDeviceID))
{
DeviceInfo_T aDeviceInfo;
if (aDBAccess.GetDeviceInfo(lDeviceID,aDeviceInfo) == OK)
{
TDeviceInfoInputFrm* pDeviceInfoInputFrm = new TDeviceInfoInputFrm(this);
pDeviceInfoInputFrm->SetOperateMode(omView);
pDeviceInfoInputFrm->SetCaption("日志管理->","查看设备信息");
pDeviceInfoInputFrm->SetDeviceInfo(aDeviceInfo);
pDeviceInfoInputFrm->ShowModal();
delete pDeviceInfoInputFrm;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::aLogQueryExecute(TObject *Sender)
{
QueryLogData();
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::spbnCloseClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::UpAllLogTimerTimer(TObject *Sender)
{
//上传所有设备日志
int lRet;
LogInfoBase_T lLogInfo;
if(nNum >= nLogMax)
{
UpAllLogTimer->Enabled = false;
sbCancel->Enabled = false;
sbInfo->Panels->Items[1]->Text = "上传设备日志完成! 进度: 100%";
AnsiString lMsg = "上传 " + edtCurDeviceName->Text + " 设备的日志记录成功!";
Application->MessageBoxA(lMsg.c_str(),"提示信息",MB_OK + MB_ICONINFORMATION);
sbInfo->Panels->Items[1]->Text = "";
pEventEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
return;
}
lRet = pDiviceAccess->GetLogInfo(nHandle,nNum,lLogInfo);
if(lRet != 0)
{
sbInfo->Panels->Items[1]->Text = "上传设备日志失败!";
UpAllLogTimer->Enabled = false;
sbCancel->Enabled = false;
pEventEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
return;
}
lLogInfo.DeviceID = nDeviceID;
aDBAccess.InsertLog(lLogInfo);
nNum++;
AnsiString lProgress = "正在上传日志并写入电脑,请稍候...... 进度: ";
lProgress = lProgress + AnsiString(nNum*(1000000/nLogMax)/10000) + "%";
sbInfo->Panels->Items[1]->Text = lProgress;
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::sbCancelClick(TObject *Sender)
{
UpLogTimer->Enabled = false;
UpAllLogTimer->Enabled = false;
sbCancel->Enabled = false;
pEventEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
sbInfo->Panels->Items[1]->Text = "";
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::aClearDBLogExecute(TObject *Sender)
{
ClearLogData();
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::N3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TBaseLogFrm::cbPeriodClick(TObject *Sender)
{
dtpStartDate->Enabled = cbPeriod->Checked;
dtpStartTime->Enabled = cbPeriod->Checked;
dtpEndDate->Enabled = cbPeriod->Checked;
dtpEndTime->Enabled = cbPeriod->Checked;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -