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

📄 employeemanageunit.cpp

📁 指纹门禁机管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "EmployeeManageUnit.h"
#include "EmployeeInputUnit.h"
#include "EmployeeFlagUnit.h"
#include "DeviceManageUnit.h"
#include "DeviceInfoInputUnit.h"
#include "DeptManageUnit.h"
#include "SetRoleUnit.h"
#include <ComObj.hpp> //EXCEL导出
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "EmployeeViewUnit"
#pragma resource "*.dfm"
TEmployeeManageFrm *EmployeeManageFrm;
//---------------------------------------------------------------------------
__fastcall TEmployeeManageFrm::TEmployeeManageFrm(TComponent* Owner)
    : TEmployeeViewFrm(Owner)
{
}
//---------------------------------------------------------------------------

void TEmployeeManageFrm::ViewEmployeeInfo()
{
   TListItem *pItem = lvRecordInfo->Selected;
   if(!pItem)
   {
     pItem = lvDeviceUser->Selected;
     if(!pItem)
        return;
   }

   //:查看员工信息
   if(pItem->Caption.IsEmpty())
     return;
   int lEmpID = pItem->Caption.ToInt();
   ViewEmpInfo(lEmpID);
}
//---------------------------------------------------------------------------

void __fastcall TEmployeeManageFrm::lvRecordInfoDblClick(TObject *Sender)
{
   ViewEmployeeInfo();
}
//---------------------------------------------------------------------------


void __fastcall TEmployeeManageFrm::cbAllSelectClick(TObject *Sender)
{
  if(cbAllSelect->Checked)
   {
      for(int i=0;i<lvRecordInfo->Items->Count;i++)
      {
         lvRecordInfo->Items->Item[i]->Checked = true;
      }
   }
   else
   {
      for(int i=0;i<lvRecordInfo->Items->Count;i++)
      {
         lvRecordInfo->Items->Item[i]->Checked = false;
      }
   }
}
//---------------------------------------------------------------------------

void __fastcall TEmployeeManageFrm::DownTimerTimer(TObject *Sender)
{
   int lSelectCount = GetSelectedCount();
   if(nNum >= lvRecordInfo->Items->Count)
   {
      DownTimer->Enabled = false;
      spbnCancel->Enabled = true;
      bDownTemplate = false;
      pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
      return;
   }
   if(!lvRecordInfo->Items->Item[nNum]->Checked)
   {
      nNum++;
      return;
   }

   int lRet,lHandle,lUserID;
   UserInfoEx_T lUserInfoEx;
   lUserID = Trim(lvRecordInfo->Items->Item[nNum]->Caption).ToInt();
   if(!bDownTemplate)//员工下载完后再下载员工指纹数据
   {
      pDBAccess->GetUserInfo(lUserID,lUserInfoEx);
      if(lUserInfoEx.BaseUserInfo.IsUsePwd != upUse)//不启用密码所以不下载密码
         strcpy(lUserInfoEx.BaseUserInfo.EmpPwd,"-1");
      lRet = pTDeviceAccess->SetUserInfo(nHandle,lUserInfoEx.BaseUserInfo);
      if(lRet == 12)
      {
         sbInfo->Panels->Items[3]->Text = "设备存储空间已经满了!";
         DownTimer->Enabled = false;
         spbnCancel->Enabled = true;
         bDownTemplate = false;
         //if(nOpenFlag != dsRightStatus)
         //   pTDeviceAccess->CloseDevice(nHandle);
         pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
         return;
      }
      if(lRet == 11)//这个员工已经存在
      {
         //AnsiString lEmp = "您确定要覆盖编号是";//定时器不能询问,会跳出很多框
         //lEmp = lEmp + AnsiString(lUserID);
         //lEmp = lEmp + "的员工信息吗?";
         //if(Application->MessageBoxA(lEmp.c_str(),"提示信息",MB_YESNO + MB_ICONQUESTION) == ID_YES)
         //{
            lRet = pTDeviceAccess->DeleteUser(nHandle,lUserInfoEx.BaseUserInfo.UserID);
            if(lRet == 0)
               lRet = pTDeviceAccess->SetUserInfo(nHandle,lUserInfoEx.BaseUserInfo);
         //}
      }
      if(lRet != 0 && lRet != 11)
      {
         sbInfo->Panels->Items[3]->Text = "下载员工信息失败!";
         //ShowMessage(lRet);
         //if(nOpenFlag != dsRightStatus)
         //   pTDeviceAccess->CloseDevice(nHandle);
         DownTimer->Enabled = false;
         spbnCancel->Enabled = true;
         bDownTemplate = false;
         pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
         return;
      }
   }

   if(bDownTemplate)
   {
      //下载员工指纹数据
      TemplateInfoArray_T lTemplateInfoList;
      IterTemplateInfo_T IterTemplate;
      pDBAccess->GetTemplateInfoList(lUserID,lTemplateInfoList);
      for(IterTemplate = lTemplateInfoList.begin();IterTemplate!=lTemplateInfoList.end();++IterTemplate)
      {
         TemplateInfo_T aTemplateInfo = *IterTemplate;
         lRet = pTDeviceAccess->DownTemplate(nHandle,lUserID,aTemplateInfo.FingerTemplate,256);
         if(lRet != 0)
         {
            sbInfo->Panels->Items[3]->Text = "下载员工指纹数据失败!";
            //ShowMessage(lRet);
            bDownTemplate = false;
            DownTimer->Enabled = false;
            spbnCancel->Enabled = true;
            pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
            return;
         }
      }
      lTemplateInfoList.clear();
   }

   nNum++;
   nSelNum++;

   AnsiString lProgress;
   if(!bDownTemplate)
      lProgress = "正在下载员工信息,请稍候...... 进度: ";
   else
      lProgress = "正在下载员工指纹数据,请稍候...... 进度: ";
   lProgress = lProgress + AnsiString(nSelNum*(10000/lSelectCount)/100) + "%";
   sbInfo->Panels->Items[3]->Text = lProgress;

   if(!bDownTemplate && nSelNum == lSelectCount)
   {
      nNum = 0;
      nSelNum = 0;
      bDownTemplate = true;
   }

   if(bDownTemplate && nSelNum == lSelectCount)
   {
      pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);

      DownTimer->Enabled = false;
      spbnCancel->Enabled = true;
      bDownTemplate = false;
      sbInfo->Panels->Items[3]->Text = "下载员工信息完成!  进度: 100%";
      Application->MessageBoxA("下载员工信息完成!","提示信息",MB_OK + MB_ICONINFORMATION);
      sbInfo->Panels->Items[3]->Text = "";
      return;
   }
}
//---------------------------------------------------------------------------

void __fastcall TEmployeeManageFrm::UpTimerTimer(TObject *Sender)
{
   int lRet;
   UserInfo_T lUserInfo;
   if(nNum < nUserMax)//员工上传完后再上传员工指纹数据
   {
      lRet = pTDeviceAccess->GetUserInfo(nHandle,nNum,lUserInfo);
      if(lRet != 0)
      {
         sbInfo->Panels->Items[3]->Text = "上传员工信息失败!";
         UpTimer->Enabled = false;
         spbnCancel->Enabled = false;
         pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
         return;
      }

      pDBAccess->InsertUserInfo_T(lUserInfo);

      TListItem *pItem;
      pItem = lvDeviceUser->Items->Add();
      pItem->Caption = lUserInfo.UserID;
      pItem->SubItems->Add(lUserInfo.EmpName);
      AnsiString lDeptName = pDBAccess->GetDeptName(lUserInfo.DeptID);
      if(!pDBAccess->IsDeptIDExist(lUserInfo.DeptID))
      {
         DeptInfo_T lFixedDeptInfo;
         pDBAccess->GetFixedDeptID(&lFixedDeptInfo);
         lDeptName = lFixedDeptInfo.DeptName; //"未分配部门";
      }
      pItem->SubItems->Add(lDeptName);
      if(lUserInfo.ManageClass == utUser)
         pItem->SubItems->Add("普通员工");
      else if(lUserInfo.ManageClass == utManage)
         pItem->SubItems->Add("管理员");
      else
         pItem->SubItems->Add("未知");
      pItem->SubItems->Add(aCnv.GetRoleString(lUserInfo.AttendPlan));
      if(lUserInfo.VerifyMode == vmPassword)
         pItem->SubItems->Add("密码验证");
      else if(lUserInfo.VerifyMode == vmFinger)
         pItem->SubItems->Add("指纹验证");
      else
         pItem->SubItems->Add("未知");
      pItem->SubItems->Add("");
      AnsiString lEmpPwd = lUserInfo.EmpPwd;
      if(lEmpPwd == "-1")
         pItem->SubItems->Add("否");
      else
         pItem->SubItems->Add("是");
      pItem->SubItems->Add("在职");
   }

   if(nNum >= nUserMax && nNum < nUserMax+nTemplateMax)
   {
      int lTemplateLen;
      TemplateInfo_T lTemplateInfo;
      lRet = pTDeviceAccess->UpTemplate(nHandle,nNum - nUserMax,lTemplateInfo.EmpID,lTemplateInfo.FingerTemplate,lTemplateLen);
      if(lRet != 0)
      {
         sbInfo->Panels->Items[3]->Text = "上传员工指纹数据失败!";
         UpTimer->Enabled = false;
         spbnCancel->Enabled = false;
         pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
         return;
      }
      pDBAccess->InsertTemplateInfo_T(lTemplateInfo);
   }

   nNum++;

   AnsiString lProgress;
   if(nNum <= nUserMax)
   {
      lProgress = "正在上传员工信息,请稍候...... 进度: ";
      lProgress = lProgress + AnsiString(nNum*(10000/nUserMax)/100) + "%";
   }
   else
   {
      lProgress = "正在上传员工指纹数据,请稍候...... 进度: ";
      lProgress = lProgress + AnsiString((nNum-nUserMax)*(10000/nTemplateMax)/100) + "%";
   }
   sbInfo->Panels->Items[3]->Text = lProgress;

   if(nNum >= nUserMax + nTemplateMax)
   {
      UpTimer->Enabled = false;
      spbnCancel->Enabled = false;

      //修改指纹数
      int lUserID,lCount;
      for(int i=0;i<lvDeviceUser->Items->Count;i++)
      {
         lUserID = lvDeviceUser->Items->Item[i]->Caption.ToInt();
         lCount = pDBAccess->GetTemplateCount_T(lUserID);
         lvDeviceUser->Items->Item[i]->SubItems->Strings[5] = AnsiString(lCount);
         pDBAccess->UpdateTemplateCount_T(lUserID,lCount);
      }

      sbInfo->Panels->Items[3]->Text = "上传员工信息完成!  进度: 100%";
      Application->MessageBoxA("上传员工信息完成!","提示信息",MB_OK + MB_ICONINFORMATION);
      sbInfo->Panels->Items[3]->Text = "";

      AnsiString lText = "设备员工信息记录条数:";
      sbInfo->Panels->Items[2]->Text = lText + AnsiString(lvDeviceUser->Items->Count) + "条";

      pEngine->ReleaseDeviceHandle(nDeviceID,nHandle);
      return;
   }
}
//---------------------------------------------------------------------------

void __fastcall TEmployeeManageFrm::FormShow(TObject *Sender)
{
   TEmployeeViewFrm::FormShow(Sender);

   trDevice->FullExpand();//树展开
   spbnCancel->Enabled = false;
}
//---------------------------------------------------------------------------
int TEmployeeManageFrm::GetSelectedCount()
{
   int lCount = 0;
   for(int i=0;i<lvRecordInfo->Items->Count;i++)
   {
      if(lvRecordInfo->Items->Item[i]->Checked)
        lCount++;
   }
   return lCount;
}
//---------------------------------------------------------------------------

int TEmployeeManageFrm::GetSaveSelectedCount()
{
   int lCount = 0;
   for(int i=0;i<lvDeviceUser->Items->Count;i++)
   {
      if(lvDeviceUser->Items->Item[i]->Checked)
        lCount++;
   }
   return lCount;
}
//---------------------------------------------------------------------------

void __fastcall TEmployeeManageFrm::FormCreate(TObject *Sender)
{
   TEmployeeViewFrm::FormCreate(Sender);//重载后继承父类事件功能

   lvRecordInfo->OnColumnClick = OnRecordInfoColumnClick;
   lvRecordInfo->OnCompare = OnRecordInfoCompare;

   lvDeviceUser->OnColumnClick = OnRecordInfoColumnClick;
   lvDeviceUser->OnCompare = OnRecordInfoCompare;

   ClearSpeedButtonCaption();
   
   pTDeviceAccess = GetDeviceAccessInstance();

   //初始化设备树列表
   TTreeNode* pRootNode = trDevice->TopItem;

⌨️ 快捷键说明

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