686 lines
22 KiB
C++
686 lines
22 KiB
C++
// Dial2DTaskList.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "GeoMative.h"
|
||
#include "DialTaskTree.h"
|
||
#include "TaskDataOper.h"
|
||
#include "DialTaskManager.h"
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CDialTaskTree dialog
|
||
extern int g_UIOffset;
|
||
extern int g_iUILanguage;
|
||
extern CGeoMativeApp theApp;
|
||
extern time_t Str2GmtTm(CString szTime);
|
||
extern CString Tm2LocalStr(time_t t);
|
||
extern time_t g_i64SaveQueryTaskStartTime;
|
||
extern time_t g_i64SaveQueryTaskEndTime;
|
||
CDialTaskTree::CDialTaskTree(CWnd* pParent /*=NULL*/)
|
||
: CNetRequestDialog(CDialTaskTree::IDD, pParent)
|
||
{
|
||
//{{AFX_DATA_INIT(CDialTaskTree)
|
||
//}}AFX_DATA_INIT
|
||
m_iSptType = 0;
|
||
m_pParentWnd = NULL;
|
||
m_dwTaskID = 0;
|
||
m_tQueryStartTime = 0;
|
||
m_tQueryEndTime = 0;
|
||
m_tSaveQueryStartTime = 0;
|
||
m_tSaveQueryEndTime = 0;
|
||
//m_bAppendData = FALSE;
|
||
m_uSelTaskCount = 0;
|
||
}
|
||
|
||
|
||
void CDialTaskTree::DoDataExchange(CDataExchange* pDX)
|
||
{
|
||
CNetRequestDialog::DoDataExchange(pDX);
|
||
//{{AFX_DATA_MAP(CDialTaskTree)
|
||
DDX_Control(pDX, IDC_TREE_TASK_LIST, m_treeTask);
|
||
//}}AFX_DATA_MAP
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(CDialTaskTree, CNetRequestDialog)
|
||
//{{AFX_MSG_MAP(CDialTaskTree)
|
||
ON_WM_SHOWWINDOW()
|
||
ON_NOTIFY(NM_CLICK, IDC_TREE_TASK_LIST, OnClickTreeTaskList)
|
||
//ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_TASK_LIST, OnSelchangedTreeTaskList)
|
||
//}}AFX_MSG_MAP
|
||
ON_NOTIFY(NM_RCLICK, IDC_TREE_TASK_LIST, OnNMRClickTreeTaskList)
|
||
ON_COMMAND(IDM_TASKMANAGER_CREATETASK, OnTaskmanagerCreateTask)
|
||
ON_COMMAND(IDM_TASKMANAGER_DELETETASK, OnTaskmanagerDeleteTask)
|
||
//ON_COMMAND(IDM_TASKMANAGER_TASKINFORMATIONSYN, OnTaskmanagerTaskInfoSyn)
|
||
ON_COMMAND(IDM_TASKMANAGER_CANCELTEST, OnTaskmanagerCancelTest)
|
||
ON_COMMAND(IDM_TASKMANAGER_REFRESHLIST, OnTaskmanagerRefreshList)
|
||
ON_WM_DELETEITEM()
|
||
ON_NOTIFY(TVN_DELETEITEM, IDC_TREE_TASK_LIST, &CDialTaskTree::OnDeleteitemTreeTaskList)
|
||
ON_NOTIFY(NM_CUSTOMDRAW, IDC_TREE_TASK_LIST, &CDialTaskTree::OnNMCustomdrawTreeTaskList)
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// CDialTaskTree message handlers
|
||
|
||
BOOL CDialTaskTree::OnInitDialog()
|
||
{
|
||
CNetRequestDialog::OnInitDialog();
|
||
|
||
// TODO: Add extra initialization here
|
||
|
||
ShowTaskTree(m_iSptType);
|
||
|
||
//去掉根节点复选框
|
||
m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
|
||
m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
|
||
//HTREEITEM rootItem = m_treeTask.GetRootItem();
|
||
//m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
|
||
return TRUE; // return TRUE unless you set the focus to a control
|
||
// EXCEPTION: OCX Property Pages should return FALSE
|
||
}
|
||
// void CDialTaskTree::AppendTaskTree(int iSptType, time_t tStartTime/* = 0*/, time_t tEndTime/* = 0*/)
|
||
// {
|
||
// m_bAppendData = TRUE;
|
||
// m_iSptType = iSptType;
|
||
// int iMaxRecvLen = sizeof(UINT32) + 300 * sizeof(STRemTaskTable);
|
||
//
|
||
// time_t tm;
|
||
// //GetSystemTime(&sysTm);
|
||
//
|
||
// theApp.m_NetWorkOper.SetSuspendForThread(true);
|
||
//
|
||
// time_t uiCurTime = 0;
|
||
// time_t uiStartTime = 0;
|
||
// /*if (m_tQureyStartTime == 0 && m_tQueryEndTime == 0)
|
||
// {
|
||
// uiCurTime = (time_t)time(&tm);
|
||
// uiCurTime += 3600 * 8;
|
||
// //默认显示最近一周的,后期增加选框,显示最近的
|
||
// m_tQureyStartTime = uiCurTime - LOAD_DATA_BY_DATE_CELL * 24 * 3600;
|
||
// m_tQueryEndTime = uiCurTime;
|
||
// }
|
||
// else
|
||
// {
|
||
// m_tQureyStartTime = tStartTime;
|
||
// m_tQueryEndTime = tEndTime;
|
||
// }*/
|
||
// //时间往前挪一天
|
||
// m_tQueryEndTime = m_tQureyStartTime;
|
||
// m_tQureyStartTime = m_tQureyStartTime - LOAD_DATA_BY_DATE_CELL * 24 * 3600;
|
||
//
|
||
// uiCurTime = htonl(m_tQueryEndTime);
|
||
// uiStartTime = htonl(m_tQureyStartTime);
|
||
// char chSendStr[20] = { 0 };
|
||
// UINT32 uiDevID = htonl(m_uiGD10DevID);
|
||
// memcpy(chSendStr, &uiDevID, sizeof(UINT32));
|
||
// memcpy(&chSendStr[sizeof(UINT32)], &uiStartTime, sizeof(UINT32));
|
||
// memcpy(&chSendStr[2 * sizeof(UINT32)], &uiCurTime, sizeof(UINT32));
|
||
// chSendStr[3 * sizeof(UINT32)] = (char)(iSptType & 0xFF);
|
||
// PostNetRequest(EN_REQ_DOWNLOAD_TASK_TABLE, this->m_hWnd, chSendStr, 3 * sizeof(UINT32) + sizeof(char), 100 * 1024);
|
||
// }
|
||
|
||
void CDialTaskTree::ShowTaskTree(int iSptType, time_t tStartTime/* = 0*/, time_t tEndTime/* = 0*/)
|
||
{
|
||
//清空勾选个数
|
||
m_uSelTaskCount = 0;
|
||
//清空列表数据
|
||
m_treeTask.DeleteAllItems();
|
||
OnClearTaskList();
|
||
//m_bAppendData = FALSE;
|
||
m_iSptType = iSptType;
|
||
|
||
|
||
//GetSystemTime(&sysTm);
|
||
|
||
theApp.m_NetWorkOper.SetSuspendForThread(true);
|
||
|
||
CString strLog;
|
||
time_t uiCurTime = 0;
|
||
time_t uiStartTime = 0;
|
||
if (tStartTime == 0 && tEndTime == 0)
|
||
{
|
||
if (g_i64SaveQueryTaskStartTime == 0 && g_i64SaveQueryTaskEndTime == 0)
|
||
{
|
||
time_t tm;
|
||
uiCurTime = (time_t)time(&tm);
|
||
//uiCurTime += 3600 * 8;
|
||
|
||
//默认显示最近一周的任务
|
||
m_tSaveQueryStartTime = uiCurTime - 7 * 24 * 3600;
|
||
m_tSaveQueryEndTime = uiCurTime;
|
||
|
||
m_tQueryStartTime = m_tSaveQueryStartTime;
|
||
m_tQueryEndTime = m_tSaveQueryStartTime + 1 * 24 * 3600;
|
||
|
||
g_i64SaveQueryTaskStartTime = m_tSaveQueryStartTime;
|
||
g_i64SaveQueryTaskEndTime = m_tSaveQueryEndTime;
|
||
}
|
||
else
|
||
{
|
||
m_tSaveQueryStartTime = g_i64SaveQueryTaskStartTime;
|
||
m_tSaveQueryEndTime = g_i64SaveQueryTaskEndTime;
|
||
|
||
m_tQueryStartTime = m_tSaveQueryStartTime;
|
||
m_tQueryEndTime = m_tSaveQueryStartTime + 1 * 24 * 3600;
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
m_tSaveQueryStartTime = tStartTime;
|
||
m_tSaveQueryEndTime = tEndTime + 3600 * 8;
|
||
|
||
m_tQueryStartTime = tStartTime;
|
||
m_tQueryEndTime = tStartTime + 1 * 24 * 3600;
|
||
|
||
g_i64SaveQueryTaskStartTime = m_tSaveQueryStartTime;
|
||
g_i64SaveQueryTaskEndTime = m_tSaveQueryEndTime;
|
||
}
|
||
strLog.Format(_T("zm:CDialTaskTree::ShowTaskTree query time range:m_tSaveQueryStartTime=%s - m_tSaveQueryEndTime=%s--------\n"), Tm2LocalStr(m_tSaveQueryStartTime), Tm2LocalStr(m_tSaveQueryEndTime));
|
||
//OutputDebugString(strLog);
|
||
CFileOperTools::GetInstance()->WriteComLog(strLog);
|
||
strLog.Format(_T("zm:CDialTaskTree::ShowTaskTree request time:m_tQueryStartTime=%s - m_tQueryEndTime=%s\n"), Tm2LocalStr(m_tQueryStartTime), Tm2LocalStr(m_tQueryEndTime));
|
||
//OutputDebugString(strLog);
|
||
CFileOperTools::GetInstance()->WriteComLog(strLog);
|
||
strLog.Format(_T("zm:CDialTaskTree::ShowTaskTree request time:g_i64SaveQueryTaskStartTime=%s - g_i64SaveQueryTaskEndTime=%s\n"), Tm2LocalStr(g_i64SaveQueryTaskStartTime), Tm2LocalStr(g_i64SaveQueryTaskEndTime));
|
||
//OutputDebugString(strLog);
|
||
CFileOperTools::GetInstance()->WriteComLog(strLog);
|
||
//m_tSaveQureyEndTime = m_tQueryEndTime;
|
||
//tm* tmStart = localtime(&m_tQureyStartTime);
|
||
//tm* tmEnd = localtime(&m_tQueryEndTime);
|
||
|
||
//CTime clsStart(tmStart->tm_year, tmStart->tm_mon, tmStart->tm_mday, tmStart->tm_hour, tmStart->tm_min, tmStart->tm_sec);
|
||
//CTime clsStop(tmEnd->tm_year, tmEnd->tm_mon, tmEnd->tm_mday, tmEnd->tm_hour, tmEnd->tm_min, tmEnd->tm_sec);
|
||
uiCurTime = htonl(m_tQueryEndTime);
|
||
uiStartTime = htonl(m_tQueryStartTime);
|
||
char chSendStr[20] = { 0 };
|
||
UINT32 uiDevID = htonl(m_uiGD10DevID);
|
||
memcpy(chSendStr, &uiDevID, sizeof(UINT32));
|
||
memcpy(&chSendStr[sizeof(UINT32)], &uiStartTime, sizeof(UINT32));
|
||
memcpy(&chSendStr[2 * sizeof(UINT32)], &uiCurTime, sizeof(UINT32));
|
||
chSendStr[3 * sizeof(UINT32)] = (char)(iSptType & 0xFF);
|
||
|
||
|
||
////////1、比如是请求2018-12-29 到 2019-01-02的数据,这里初始的请求范围为uiStartTime="2018-12-29 00:00:00" tEndTime="2019-12-29 23:59:59"
|
||
PostNetRequest(EN_REQ_DOWNLOAD_TASK_TABLE, this->m_hWnd, chSendStr, 3 * sizeof(UINT32) + sizeof(char), 100 * 1024, WM_NET_RESPONSE, 0xFFFFFFFF, EN_DEV_CLOUND, 60000);
|
||
}
|
||
|
||
void CDialTaskTree::OnShowWindow(BOOL bShow, UINT nStatus)
|
||
{
|
||
CNetRequestDialog::OnShowWindow(bShow, nStatus);
|
||
if (TRUE == bShow )
|
||
{
|
||
CRect rect;
|
||
GetClientRect(&rect);
|
||
m_treeTask.MoveWindow(&rect);
|
||
m_treeTask.ShowWindow(SW_SHOW);
|
||
}
|
||
|
||
// TODO: Add your message handler code here
|
||
|
||
}
|
||
|
||
void CDialTaskTree::SetChildCheck(HTREEITEM hCurItem, BOOL bCheck)
|
||
{
|
||
HTREEITEM hChildItem = m_treeTask.GetChildItem(hCurItem);
|
||
if (hChildItem == NULL)
|
||
{
|
||
return;
|
||
}
|
||
|
||
m_uSelTaskCount = 0;
|
||
while (hChildItem)
|
||
{
|
||
if (bCheck)
|
||
{
|
||
m_uSelTaskCount++;
|
||
}
|
||
m_treeTask.SetCheck(hChildItem, bCheck);
|
||
hChildItem = m_treeTask.GetNextSiblingItem(hChildItem);
|
||
}
|
||
}
|
||
|
||
void CDialTaskTree::OnClickTreeTaskList(NMHDR* pNMHDR, LRESULT* pResult)
|
||
{
|
||
// TODO: Add your control notification handler code here
|
||
POINT point;
|
||
if (!GetCursorPos(&point))
|
||
{
|
||
return;
|
||
}
|
||
m_treeTask.ScreenToClient(&point);
|
||
|
||
UINT uFlags;
|
||
HTREEITEM hItem = m_treeTask.HitTest(point, &uFlags);
|
||
if (hItem == NULL)
|
||
return;
|
||
|
||
//点中复选框
|
||
if (hItem != NULL && TVHT_ONITEMSTATEICON&uFlags)
|
||
{
|
||
//点击勾选按钮不选中
|
||
m_treeTask.Select(hItem, TVGN_CARET);
|
||
//获取当前复选状态
|
||
BOOL bParentCheck = m_treeTask.GetCheck(hItem);
|
||
if (bParentCheck)
|
||
{
|
||
m_uSelTaskCount--;
|
||
}
|
||
else
|
||
{
|
||
m_uSelTaskCount++;
|
||
}
|
||
//设置子节点复选状态
|
||
SetChildCheck(hItem, !bParentCheck);
|
||
|
||
//设置父节点文本
|
||
HTREEITEM hRoot = m_treeTask.GetRootItem();
|
||
CString strItem;
|
||
strItem.LoadString(IDS_TASK_TREE_ROOT + g_UIOffset);
|
||
strItem.Format(_T("%s (%d)"), strItem, m_uSelTaskCount);
|
||
m_treeTask.SetItemText(hRoot, strItem);
|
||
return;
|
||
//m_treeTask.Select(hItem, TVGN_CARET);
|
||
}
|
||
|
||
DWORD dwTaskID = m_treeTask.GetItemData(hItem);
|
||
if (dwTaskID == m_dwTaskID)
|
||
{
|
||
return;
|
||
}
|
||
m_dwTaskID = dwTaskID;
|
||
if (m_pParentWnd)
|
||
{
|
||
m_pParentWnd->SendMessage(WM_CLICK_TASK_TREE, (WPARAM)m_dwTaskID, 0);
|
||
}
|
||
*pResult = 0;
|
||
}
|
||
|
||
void CDialTaskTree::OnNMRClickTreeTaskList(NMHDR *pNMHDR, LRESULT *pResult)
|
||
{
|
||
POINT point;
|
||
if (!GetCursorPos(&point))
|
||
{
|
||
return;
|
||
}
|
||
m_treeTask.ScreenToClient(&point);
|
||
|
||
UINT uFlags;
|
||
HTREEITEM hItem = m_treeTask.HitTest(point, &uFlags);
|
||
/*if (hItem != NULL && TVHT_ONITEM&uFlags)
|
||
{
|
||
m_treeTask.Select(hItem, TVGN_CARET);
|
||
}*/
|
||
|
||
if (!m_treeTask.ItemHasChildren(hItem))
|
||
{
|
||
m_treeTask.ClientToScreen(&point);
|
||
CMenu menu;
|
||
menu.LoadMenu(IDR_MENU_TASK_MANAGER); //加载现有的菜单资源
|
||
CMenu *pPopupMenu = menu.GetSubMenu(0); //获取以创建好的弹出式菜单
|
||
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
{
|
||
pPopupMenu->ModifyMenu(0, MF_BYPOSITION, IDM_TASKMANAGER_CREATETASK, _T("创建任务"));
|
||
pPopupMenu->ModifyMenu(1, MF_BYPOSITION, IDM_TASKMANAGER_DELETETASK, _T("删除任务"));
|
||
//pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_TASKINFORMATIONSYN, _T("任务信息同步"));
|
||
pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_CANCELTEST, _T("取消测试"));
|
||
pPopupMenu->ModifyMenu(3, MF_BYPOSITION, IDM_TASKMANAGER_REFRESHLIST, _T("刷新列表"));
|
||
}
|
||
else
|
||
{
|
||
pPopupMenu->ModifyMenu(0, MF_BYPOSITION, IDM_TASKMANAGER_CREATETASK, "create task");
|
||
pPopupMenu->ModifyMenu(1, MF_BYPOSITION, IDM_TASKMANAGER_DELETETASK, "delete task");
|
||
//pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_TASKINFORMATIONSYN, _T("task info syn"));
|
||
pPopupMenu->ModifyMenu(2, MF_BYPOSITION, IDM_TASKMANAGER_CANCELTEST, _T("cancel test"));
|
||
pPopupMenu->ModifyMenu(3, MF_BYPOSITION, IDM_TASKMANAGER_REFRESHLIST, _T("Refresh list"));
|
||
}
|
||
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
|
||
}
|
||
|
||
*pResult = 0;
|
||
}
|
||
|
||
void CDialTaskTree::OnTaskmanagerCreateTask()
|
||
{
|
||
// TODO: 在此添加命令处理程序代码
|
||
if (NULL != m_pParentWnd)
|
||
{
|
||
((CDialTaskManager*)m_pParentWnd)->OnButtonCreateTask();
|
||
}
|
||
}
|
||
|
||
void CDialTaskTree::OnTaskmanagerDeleteTask()
|
||
{
|
||
if (NULL != m_pParentWnd)
|
||
{
|
||
((CDialTaskManager*)m_pParentWnd)->OnButtonDelTask();
|
||
}
|
||
}
|
||
|
||
// void CDialTaskTree::OnTaskmanagerTaskInfoSyn()
|
||
// {
|
||
// if (NULL != m_pParentWnd)
|
||
// {
|
||
// ((CDialTaskManager*)m_pParentWnd)->OnCmdTaskInfoSyn();
|
||
// }
|
||
// }
|
||
|
||
void CDialTaskTree::OnTaskmanagerCancelTest()
|
||
{
|
||
if (NULL != m_pParentWnd)
|
||
{
|
||
((CDialTaskManager*)m_pParentWnd)->OnCmdTaskCancelTest();
|
||
}
|
||
}
|
||
|
||
void CDialTaskTree::OnTaskmanagerRefreshList()
|
||
{
|
||
if (NULL != m_pParentWnd)
|
||
{
|
||
::SendMessage(m_pParentWnd->GetSafeHwnd(), WM_MSG_UPDATE_TASK_LIST, 0, 0);
|
||
}
|
||
}
|
||
|
||
void CDialTaskTree::OnDeleteItem(int nIDCtl, LPDELETEITEMSTRUCT lpDeleteItemStruct)
|
||
{
|
||
// TODO: 在此添加消息处理程序代码和/或调用默认值
|
||
|
||
CNetRequestDialog::OnDeleteItem(nIDCtl, lpDeleteItemStruct);
|
||
}
|
||
|
||
void CDialTaskTree::OnDeleteitemTreeTaskList(NMHDR *pNMHDR, LRESULT *pResult)
|
||
{
|
||
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
|
||
// TODO: 在此添加控件通知处理程序代码
|
||
TVITEM& item = ((LPNMTREEVIEW)pNMHDR)->itemOld;
|
||
// free item data, ignore invalid shell items
|
||
if (item.lParam != 0)
|
||
{
|
||
delete (STTaskListItem*)item.lParam;//这里就会把你的内存释放掉
|
||
}
|
||
*pResult = 0;
|
||
}
|
||
|
||
void CDialTaskTree::PreNetResponse(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
|
||
if (pResponsePacket == NULL)
|
||
{
|
||
return;
|
||
}
|
||
switch (pResponsePacket->clsPacketBase.ucCmd)
|
||
{
|
||
case EN_REQ_DOWNLOAD_TASK_TABLE://获取任务列表
|
||
{
|
||
/*if (!m_bAppendData)
|
||
{
|
||
OnGetTaskListResponse(wParam, lParam);
|
||
}
|
||
else
|
||
{
|
||
OnAppendTaskListResponse(wParam, lParam);
|
||
}*/
|
||
OnAddNewItemToTaskList(wParam, lParam);
|
||
|
||
CString strLog;
|
||
CTime clsStart(m_tSaveQueryStartTime);
|
||
CTime clsStop(m_tSaveQueryEndTime);
|
||
//strLog.Format(_T("zm:CDialTaskTree::PreNetResponse query time range:starttime=%s,endTime=%s\n"), Tm2LocalStr(m_tSaveQueryStartTime), Tm2LocalStr(m_tSaveQueryEndTime));
|
||
//OutputDebugString(strLog);
|
||
CTimeSpan timeSpan1 = clsStop - clsStart;
|
||
int iDay = timeSpan1.GetDays();
|
||
if (iDay > 1)
|
||
{
|
||
//m_bAppendData = TRUE;
|
||
|
||
CTimeSpan ts(1, 0, 0, 0); // 加1天
|
||
clsStart = clsStart + ts;
|
||
CString date = clsStart.Format("%Y-%m-%d %H:%M:%S ");
|
||
m_tSaveQueryStartTime = Str2GmtTm(date);
|
||
|
||
//clsStop = clsStop + ts;
|
||
//m_tSaveQureyEndTime = Str2GmtTm(clsStop.Format("%Y-%m-%d %H:%M:%S "));
|
||
|
||
time_t uiCurTime = 0;
|
||
time_t uiStartTime = 0;
|
||
//uiCurTime = (time_t)time(&m_tSaveQureyEndTime);
|
||
//uiCurTime += 3600 * 8;
|
||
//默认显示最近一周的,后期增加选框,显示最近的
|
||
//m_tQureyStartTime = uiCurTime - LOAD_DATA_BY_DATE_CELL * 24 * 3600;
|
||
//m_tQueryEndTime = uiCurTime;
|
||
//uiCurTime = htonl(m_tSaveQureyEndTime);
|
||
|
||
m_tQueryStartTime = m_tSaveQueryStartTime;
|
||
m_tQueryEndTime = m_tSaveQueryStartTime + LOAD_DATA_BY_DATE_CELL * 24 * 3600+3600;//3600预留一小时,客户端与服务器偏差时间
|
||
uiStartTime = htonl(m_tQueryStartTime);
|
||
strLog.Format(_T("zm:CDialTaskTree::PreNetResponse request start time:%s,end time=%s\n"), Tm2LocalStr(m_tQueryStartTime), Tm2LocalStr(m_tQueryEndTime));
|
||
CFileOperTools::GetInstance()->WriteComLog(strLog);
|
||
//OutputDebugString(strLog);
|
||
uiCurTime = htonl(m_tQueryEndTime);
|
||
char chSendStr[20] = { 0 };
|
||
UINT32 uiDevID = htonl(m_uiGD10DevID);
|
||
memcpy(chSendStr, &uiDevID, sizeof(UINT32));
|
||
memcpy(&chSendStr[sizeof(UINT32)], &uiStartTime, sizeof(UINT32));
|
||
memcpy(&chSendStr[2 * sizeof(UINT32)], &uiCurTime, sizeof(UINT32));
|
||
chSendStr[3 * sizeof(UINT32)] = (char)(m_iSptType & 0xFF);
|
||
PostNetRequest(EN_REQ_DOWNLOAD_TASK_TABLE, this->m_hWnd, chSendStr, 3 * sizeof(UINT32) + sizeof(char), 100 * 1024, WM_NET_RESPONSE, 0xFFFFFFFF, EN_DEV_CLOUND, 60000);
|
||
}
|
||
else
|
||
{
|
||
OutputDebugString(_T("zm:已经加载到最后一天\n"));
|
||
//树控件显示列表
|
||
CTaskDataOper taskOper;
|
||
taskOper.m_uiDevID = m_uiGD10DevID;
|
||
//总查询时间范围
|
||
taskOper.SetCurrentTimeRange(g_i64SaveQueryTaskStartTime, g_i64SaveQueryTaskEndTime + 3600);
|
||
taskOper.InitOnLineTaskTreeCtrl(m_treeTask, m_iSptType, m_mapTaskList, m_pParentWnd->GetSafeHwnd());
|
||
//去掉根节点复选框
|
||
//m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
|
||
//m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
|
||
//HTREEITEM rootItem = m_treeTask.GetRootItem();
|
||
//m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
|
||
m_treeTask.Expand(m_treeTask.GetRootItem(), TVE_EXPAND);
|
||
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
//从服务器一批一批获取任务列表
|
||
BOOL CDialTaskTree::OnAddNewItemToTaskList(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
|
||
if (pResponsePacket == NULL || pResponsePacket->clsPacketBase.ucCmd != EN_REQ_DOWNLOAD_TASK_TABLE || pResponsePacket->pData == NULL)
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
char *chMsgSyn = (char *)malloc(pResponsePacket->wDataLen);
|
||
memcpy(chMsgSyn, pResponsePacket->pData, pResponsePacket->wDataLen);
|
||
UINT32 *uiRevData = (UINT32*)(chMsgSyn);
|
||
UINT32 uiTaskNum = 0;
|
||
uiTaskNum = ntohl(uiRevData[0]);
|
||
|
||
STRemTaskTable *ptTaskTable = NULL;
|
||
if ((uiRevData[0] < 1) || (pResponsePacket->wDataLen < (sizeof(UINT32) + uiTaskNum * sizeof(STRemTaskTable))))
|
||
{
|
||
theApp.m_NetWorkOper.SetSuspendForThread(false);
|
||
if (uiRevData[0] > 0)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("获取任务列表失败,数据长度错误"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Synchronization task table recv failed. recv length is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
//return;
|
||
}
|
||
ptTaskTable = (STRemTaskTable *)(&chMsgSyn[sizeof(UINT32)]);
|
||
for (int i = 0; i < uiTaskNum; i++)
|
||
{
|
||
m_mapTaskList[ptTaskTable[i].ucTaskID] = ptTaskTable[i];
|
||
}
|
||
|
||
if (chMsgSyn != NULL)
|
||
{
|
||
free(chMsgSyn);
|
||
chMsgSyn = NULL;
|
||
}
|
||
CString strLog;
|
||
strLog.Format(_T("添加新的Item后,m_mapTaskList的大小%d\n"),m_mapTaskList.size());
|
||
OutputDebugString(strLog);
|
||
}
|
||
|
||
//清空列表
|
||
void CDialTaskTree::OnClearTaskList()
|
||
{
|
||
m_mapTaskList.clear();
|
||
CString strLog;
|
||
strLog.Format(_T("清空服务器列表m_mapTaskList大小%d\n"), m_mapTaskList.size());
|
||
OutputDebugString(strLog);
|
||
}
|
||
|
||
/*BOOL CDialTaskTree::OnGetTaskListResponse(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
|
||
if (pResponsePacket == NULL || pResponsePacket->clsPacketBase.ucCmd != EN_REQ_DOWNLOAD_TASK_TABLE)
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
char *chMsgSyn = (char *)malloc(pResponsePacket->wDataLen);
|
||
memcpy(chMsgSyn, pResponsePacket->pData, pResponsePacket->wDataLen);
|
||
UINT32 *uiRevData = (UINT32*)(chMsgSyn);
|
||
UINT32 uiTaskNum = 0;
|
||
uiTaskNum = ntohl(uiRevData[0]);
|
||
|
||
STRemTaskTable *ptTaskTable = NULL;
|
||
if ((uiRevData[0] < 1) || (pResponsePacket->wDataLen < (sizeof(UINT32) + uiTaskNum * sizeof(STRemTaskTable))))
|
||
{
|
||
theApp.m_NetWorkOper.SetSuspendForThread(false);
|
||
if (uiRevData[0] > 0)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("获取任务列表失败,数据长度错误"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Synchronization task table recv failed. recv length is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
//return;
|
||
}
|
||
ptTaskTable = (STRemTaskTable *)(&chMsgSyn[sizeof(UINT32)]);
|
||
|
||
CTaskDataOper taskOper;
|
||
taskOper.m_uiDevID = m_uiGD10DevID;
|
||
taskOper.SetCurrentTimeRange(m_tQueryStartTime, m_tQueryEndTime);
|
||
taskOper.InitialOnLineTaskTreeCtrl(m_treeTask, m_iSptType, uiTaskNum, ptTaskTable, m_pParentWnd->GetSafeHwnd());
|
||
if (chMsgSyn != NULL)
|
||
{
|
||
free(chMsgSyn);
|
||
chMsgSyn = NULL;
|
||
}
|
||
//去掉根节点复选框
|
||
//m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
|
||
//m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
|
||
//HTREEITEM rootItem = m_treeTask.GetRootItem();
|
||
//m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
|
||
|
||
m_treeTask.Expand(m_treeTask.GetRootItem(), TVE_EXPAND);
|
||
return TRUE;
|
||
}*/
|
||
|
||
/*BOOL CDialTaskTree::OnAppendTaskListResponse(WPARAM wParam, LPARAM lParam)
|
||
{
|
||
LPRESPONSEPACKET pResponsePacket = (LPRESPONSEPACKET)lParam;
|
||
if (pResponsePacket == NULL || pResponsePacket->clsPacketBase.ucCmd != EN_REQ_DOWNLOAD_TASK_TABLE)
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
char *chMsgSyn = (char *)malloc(pResponsePacket->wDataLen);
|
||
memcpy(chMsgSyn, pResponsePacket->pData, pResponsePacket->wDataLen);
|
||
UINT32 *uiRevData = (UINT32*)(chMsgSyn);
|
||
UINT32 uiTaskNum = 0;
|
||
uiTaskNum = ntohl(uiRevData[0]);
|
||
|
||
STRemTaskTable *ptTaskTable = NULL;
|
||
if ((uiRevData[0] < 1) || (pResponsePacket->wDataLen < (sizeof(UINT32) + uiTaskNum * sizeof(STRemTaskTable))))
|
||
{
|
||
theApp.m_NetWorkOper.SetSuspendForThread(false);
|
||
if (uiRevData[0] > 0)
|
||
{
|
||
if (LANG_ZHCN == g_iUILanguage)
|
||
AfxMessageBox(_T("同步任务表接受失败,长度是错误!"));
|
||
else
|
||
MessageBoxEx(NULL, _T("Synchronization task table recv failed. recv length is error!"), STRING_MESSAGEBOXEX_TITLE, MB_OK, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
|
||
}
|
||
//return;
|
||
}
|
||
ptTaskTable = (STRemTaskTable *)(&chMsgSyn[sizeof(UINT32)]);
|
||
|
||
CTaskDataOper taskOper;
|
||
taskOper.m_uiDevID = m_uiGD10DevID;
|
||
taskOper.SetCurrentTimeRange(m_tQueryStartTime, m_tQueryEndTime);
|
||
taskOper.AppendOnLineTaskTreeCtrl(m_treeTask, m_iSptType, uiTaskNum, ptTaskTable, m_pParentWnd->GetSafeHwnd());
|
||
if (chMsgSyn != NULL)
|
||
{
|
||
free(chMsgSyn);
|
||
chMsgSyn = NULL;
|
||
}
|
||
//去掉根节点复选框
|
||
// m_treeTask.ModifyStyle(TVS_CHECKBOXES, 0);
|
||
// m_treeTask.ModifyStyle(0, TVS_CHECKBOXES);
|
||
// HTREEITEM rootItem = m_treeTask.GetRootItem();
|
||
// m_treeTask.SetItemState(rootItem, INDEXTOSTATEIMAGEMASK(0), TVIS_STATEIMAGEMASK);
|
||
|
||
m_treeTask.Expand(m_treeTask.GetRootItem(), TVE_EXPAND);
|
||
return TRUE;
|
||
}*/
|
||
|
||
void CDialTaskTree::OnNMCustomdrawTreeTaskList(NMHDR *pNMHDR, LRESULT *pResult)
|
||
{
|
||
//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
|
||
LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);
|
||
|
||
// TODO: 在此添加控件通知处理程序代码
|
||
switch (pNMCD->nmcd.dwDrawStage)
|
||
{
|
||
case CDDS_PREPAINT:
|
||
*pResult = CDRF_NOTIFYITEMDRAW;
|
||
return;
|
||
case CDDS_ITEMPREPAINT:
|
||
{
|
||
// 这里做判断
|
||
CString s = m_treeTask.GetItemText((HTREEITEM)pNMCD->nmcd.dwItemSpec);
|
||
STTaskListItem* pTaskItem = NULL;
|
||
pTaskItem = (STTaskListItem*)m_treeTask.GetItemData((HTREEITEM)pNMCD->nmcd.dwItemSpec);
|
||
if (pTaskItem == NULL)
|
||
return;
|
||
|
||
//测试中
|
||
if (10 <= pTaskItem->byTestStatus && pTaskItem->byTestStatus < 20)
|
||
{
|
||
pNMCD->clrText = RGB(0, 0, 255); // 这样设置文字颜色
|
||
}
|
||
//测试失败
|
||
else if (30 <= pTaskItem->byTestStatus && pTaskItem->byTestStatus < 40)
|
||
{
|
||
pNMCD->clrText = RGB(255, 0, 0); // 这样设置文字颜色
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
*pResult = 0;
|
||
} |