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

📄 baselogunit.cpp

📁 指纹门禁机管理系统
💻 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 + -