16,548
社区成员




afx_msg void OnLvnGetdispinfoCheckreclist(NMHDR *pNMHDR, LRESULT *pResult);
ON_NOTIFY(LVN_GETDISPINFO, IDC_CHECKRECLIST, &CCheckRecDlg::OnLvnGetdispinfoCheckreclist)
void CPersonnelDlg::OnLvnGetdispinfoPersonnellist(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
LV_ITEM* pItem = &(pDispInfo)->item;
INT_PTR iItem = pItem->iItem;
if (pItem->mask & LVIF_TEXT)
{
CString straccid, strpname, strsex, strppwd, strcardno, strdeptname, strstationname, straccstatelegal, straccstate, strcrtime, strmotime, strnote, strpertype, strduty, stridentityno, strnname;
::memset(&m_Personnel, NULL, sizeof(m_Personnel));
INT_PTR iCount = m_PersonnelArray.GetCount();
if(iItem > iCount)
{
CString strMsg;
strMsg = _T("列表控件超过结构体范围");
BCGP_MSGBOXPARAMS params;
params.lpszCaption = g_strCap;
params.lpszText = strMsg;
params.dwStyle = MB_OK | MB_ICONERROR;
params.bUseNativeControls = FALSE;
params.bUseNativeCaption = params.bUseNativeControls;
int result = BCGPMessageBoxIndirect(¶ms);
//AfxMessageBox(_T("\n超过结构体范围!"));
g_TraceDbgMsg(CAT_SYS, KQMJSYS_STATUS_ERROR, g_Login.oprid, g_Login.oprname, _T("账户管理-刷新界面失败,超过结构体范围"));
return;
}
m_Personnel = m_PersonnelArray.GetAt(iItem);
switch(pItem->iSubItem)
{
case 0://账号
{
straccid.Format(_T("%ld"), m_Personnel.accid);
_tcscpy_s(pItem->pszText, pItem->cchTextMax, straccid);
}
break;
case 1://姓名
{
strpname = m_Personnel.pname;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strpname);
}
break;
case 2://性别
{
if(m_Personnel.sex == 0)
strsex = _T("男");
else
strsex = _T("女");
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strsex);
}
break;
case 3://密码
{
strppwd = m_Personnel.ppwd;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strppwd);
}
break;
case 4://卡号
{
strcardno.Format(_T("%08X"), m_Personnel.cardno);
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strcardno);
}
break;
case 5://身份
{
strstationname = m_Personnel.stationname;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strstationname);
}
break;
case 6://部门
{
strdeptname = m_Personnel.deptname;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strdeptname);
}
break;
case 7://工号
{
stridentityno = m_Personnel.identityno;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, stridentityno);
}
break;
case 8://有效标志
{
if(m_Personnel.accstatelegal == 0)
straccstatelegal = _T("无效");
else
straccstatelegal = _T("有效");
_tcscpy_s(pItem->pszText, pItem->cchTextMax, straccstatelegal);
}
break;
case 9://账户状态
{
switch(m_Personnel.accstate)
{
case 0:
straccstate = _T("正常");
break;
case 1:
straccstate = _T("挂失");
break;
case 2:
straccstate = _T("停用");
break;
case 3:
straccstate = _T("撤户");
break;
default:
straccstate = _T("不详");
break;
}
_tcscpy_s(pItem->pszText, pItem->cchTextMax, straccstate);
}
break;
case 10://人员类型
{
switch(m_Personnel.pertype)
{
case 0:
strpertype = _T("人事");
break;
case 1:
strpertype = _T("教务");
break;
case 2:
strpertype = _T("人事教务");
break;
case 3:
strpertype = _T("不考勤");
break;
default:
strpertype = _T("不详");
break;
}
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strpertype);
}
break;
case 11://担任职务
{
strduty = m_Personnel.duty;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strduty);
}
break;
case 12://建立时间
{
strcrtime = m_Personnel.crtime.Format(_T("%Y-%m-%d %H:%M:%S"));
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strcrtime);
}
break;
case 13://更新时间
{
strmotime = m_Personnel.motime.Format(_T("%Y-%m-%d %H:%M:%S"));
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strmotime);
}
break;
case 14://民族
{
strnname = m_Personnel.nname;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strnname);
}
break;
case 15://备注
{
strnote = m_Personnel.note;
_tcscpy_s(pItem->pszText, pItem->cchTextMax, strnote);
}
break;
}
}
//if (pItem->mask & LVIF_IMAGE) //valid image?
//{
// pItem->iImage = m_Items[iItem].m_iImage;
//}
*pResult = 0;
}
struct tagPERSONNEL_FIND
{
long accid;
TCHAR pname[32];
int sex;
TCHAR ppwd[32];
unsigned long cardno;
int cardtype;
int stationid;
TCHAR stationname[32];
int bldept;
TCHAR deptname[32];
TCHAR identityno[32];
int accstatelegal;
int accstate;
int pertype;
TCHAR duty[256];
COleDateTime crtime;
COleDateTime motime;
COleDateTime leavetime;
TCHAR note[256];
int nid;
int epnid;
TCHAR nname[32];
};
CArray<struct tagPERSONNEL_FIND, struct tagPERSONNEL_FIND> m_PersonnelArray;
void CPersonnelDlg::GetSQLToVirtualList()
{
c_Progress.SetPos(0);
if(c_PersonnelList.GetItemCount() > 0)
{
c_PersonnelList.DeleteAllItems();
this->UpdateWindow();
}
c_PersonnelSum.SetWindowText(_T("请稍候,正在统计系统账户记录数量..."));
long lRecordCount = 0;
if(g_ADO.ExecRs(strSQLCount))
{
if(!g_ADO.m_pRecordSet->adoBOF && !g_ADO.m_pRecordSet->adoEOF)
{
lRecordCount = g_ADO.VarToLong(g_ADO.m_pRecordSet->GetCollect("RecordCount"));
}
if(g_ADO.m_pRecordSet != NULL)
{
g_ADO.m_pRecordSet->Close();
g_ADO.m_pRecordSet.Detach();
}
}
if (lRecordCount == 0)
{
c_PersonnelSum.SetWindowText(_T("查询完成,没有任何记录..."));
CString strMsg;
strMsg = _T("您的查询请求成功地完成,但没有任何记录返回!");
BCGP_MSGBOXPARAMS params;
params.lpszCaption = g_strCap;
params.lpszText = strMsg;
params.dwStyle = MB_OK | MB_ICONINFORMATION;
params.bUseNativeControls = FALSE;
params.bUseNativeCaption = params.bUseNativeControls;
int result = BCGPMessageBoxIndirect(¶ms);
//AfxMessageBox(strMsg);
c_Personnel_Refresh.EnableWindow(TRUE);
c_Cancel.EnableWindow(TRUE);
return;
}
c_PersonnelSum.FlashWindow(TRUE);
c_PersonnelSum.SetWindowText(_T("请稍候,您的查询请求已经开始处理,可能时间较长(取决于您的查询记录数量),请耐心等候..."));
// 取得当前 CPU frequency
LARGE_INTEGER m_liPerfFreq = {0};
QueryPerformanceFrequency(&m_liPerfFreq);
// 取得执行前的时间
LARGE_INTEGER m_liPerfStart = {0};
QueryPerformanceCounter(&m_liPerfStart);
g_TraceDbgMsg(CAT_SYS, KQMJSYS_STATUS_WARNING, g_Login.oprid, g_Login.oprname, _T("账户管理-界面更新 UpdatePersonnelUIThread 线程启动"));
DWORD lpThreadId = 0;
pUpdatePersonnelUIThread = CreateThread(NULL, 0, &UpdatePersonnelUIThread, this, 0, &lpThreadId);
ProcessSQLToArray(lRecordCount);
c_PersonnelSum.FlashWindow(FALSE);
c_PersonnelSum.SetWindowText(_T("请稍候,将数据库正常刷卡流水信息转储至结构体完成,正在刷新列表控件并显示结果..."));
int iPersonnelArrayCount = m_PersonnelArray.GetCount();
c_PersonnelList.SetItemCountEx(iPersonnelArrayCount);
c_PersonnelList.Invalidate();
c_Personnel_Refresh.EnableWindow(TRUE);
c_Personnel_Add.EnableWindow(TRUE);
c_Personnel_Del.EnableWindow(TRUE);
c_Personnel_Modi.EnableWindow(TRUE);
c_Personnel_Print.EnableWindow(TRUE);
c_Personnel_Export.EnableWindow(TRUE);
c_OK.EnableWindow(TRUE);
c_Cancel.EnableWindow(TRUE);
// 取得执行后的时间
LARGE_INTEGER liPerfNow = {0};
QueryPerformanceCounter(&liPerfNow);
// 计算出花费的时间 (millisecond)
long decodeDulation = (((liPerfNow.QuadPart - m_liPerfStart.QuadPart) * 1000)/m_liPerfFreq.QuadPart);
CString strPersonnelArrayCount, strcounttime;
strPersonnelArrayCount.Format(_T("%d"), iPersonnelArrayCount);
strcounttime.Format(_T("%.1f 秒"), (float)decodeDulation/1000.0);
g_TraceDbgMsg(CAT_OPERATOR, KQMJSYS_STATUS_INFORMATION, g_Login.oprid, g_Login.oprname, _T("账户管理-查询账户信息完成"));
g_TraceOprLog(g_Login.oprid, 1, g_Login.nowloginipaddr, 46, _T("查询账户信息"));
c_PersonnelSum.SetWindowText(_T("查询完成,累计记录:") + strPersonnelArrayCount + _T(",查询耗时:") + strcounttime);
}
void CPersonnelDlg::ProcessSQLToArray(long lRecordCount)
{
c_PersonnelSum.SetWindowText(_T("请稍候,正在将数据库账户信息转储至结构体..."));
if(g_ADO.ExecRs(strSQL))
{
m_PersonnelArray.RemoveAll();
m_PersonnelArray.FreeExtra();
CString strAccid, strPName;
long lStep = 0;
m_iCurProcessStep = 0;
MSG message;
BeginWaitCursor();
while(!g_ADO.m_pRecordSet->adoBOF && !g_ADO.m_pRecordSet->adoEOF)
{
::memset(&m_Personnel, NULL, sizeof(m_Personnel));
m_Personnel.accid = g_ADO.VarToLong(g_ADO.m_pRecordSet->GetCollect("ACCID"));
_tcscpy_s(m_Personnel.pname, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("PNAME")));
m_Personnel.sex = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("SEX"));
_tcscpy_s(m_Personnel.ppwd, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("PPWD")));
m_Personnel.cardno = g_ADO.VarToLong(g_ADO.m_pRecordSet->GetCollect("CARDNO"));
m_Personnel.cardtype = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("CARDTYPE"));
m_Personnel.stationid = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("STATIONID"));
_tcscpy_s(m_Personnel.stationname, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("STATIONNAME")));
m_Personnel.bldept = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("BLDEPT"));
_tcscpy_s(m_Personnel.deptname, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("DEPTNAME")));
_tcscpy_s(m_Personnel.identityno, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("IDENTITYNO")));
m_Personnel.accstatelegal = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("ACCSTATELEGAL"));
m_Personnel.accstate = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("ACCSTATE"));
m_Personnel.pertype = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("PERTYPE"));
_tcscpy_s(m_Personnel.duty, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("DUTY")));
m_Personnel.crtime = g_ADO.VarToDate(g_ADO.m_pRecordSet->GetCollect("CRTIME"));
m_Personnel.motime = g_ADO.VarToDate(g_ADO.m_pRecordSet->GetCollect("MOTIME"));
m_Personnel.leavetime = g_ADO.VarToDate(g_ADO.m_pRecordSet->GetCollect("LEAVETIME"));
_tcscpy_s(m_Personnel.note, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("NOTE")));
m_Personnel.nid = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("NID"));
m_Personnel.epnid = g_ADO.VarToShortInt(g_ADO.m_pRecordSet->GetCollect("EPNID"));
_tcscpy_s(m_Personnel.nname, g_ADO.VarToCString(g_ADO.m_pRecordSet->GetCollect("NNAME")));
m_PersonnelArray.Add(m_Personnel);
m_iCurProcessStep = (int)((++lStep*100)/lRecordCount);
// 直接更新太费时,转用线程更新
//c_Progress.SetPos(g_lCurProcessStep);
// 转发消息,立即同步更新进度条
if(::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
BeginWaitCursor();
g_ADO.m_pRecordSet->MoveNext();
}
EndWaitCursor();
if(g_ADO.m_pRecordSet != NULL)
{
g_ADO.m_pRecordSet->Close();
g_ADO.m_pRecordSet.Detach();
}
}
}