// Satisfaction.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "Satisfaction.h" #include "MyMdi.H" #include "SelBrunDevice.h" #include "SatisfactionSurvey.h" #include "SatisfactionCfg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif SatisfactionSurvey* g_Surveydlg = NULL; IMPLEMENT_DYNCREATE(Satisfaction, MyFormView) Satisfaction::Satisfaction() : MyFormView(Satisfaction::IDD) , m_nCurSelIdx(-1) , m_strStartTimer(_T("")) , m_strEndTimer(_T("")) , m_nShowType(0) { memset(m_szColName, 0, sizeof(TCHAR)*64); } Satisfaction::~Satisfaction() { if(g_Surveydlg) g_Surveydlg->SendMessage(WM_CLOSE); g_Surveydlg = NULL; } void Satisfaction::DoDataExchange(CDataExchange* pDX) { MyFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST2, m_List1); } BEGIN_MESSAGE_MAP(Satisfaction, MyFormView) ON_BN_CLICKED(IDC_BUTclose, OnBUTclose) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2) ON_BN_CLICKED(IDC_OpenSurvey_Btn, OnOpenSurveyBtn) ON_BN_CLICKED(IDC_OrderToday_Btn, OnOrderTodayBtn) ON_BN_CLICKED(IDC_Configuration_Btn, OnConfigurationBtn) ON_BN_CLICKED(IDC_TodayPhotograph_Btn, OnTodayPhotographBtn) ON_BN_CLICKED(IDC_ChoosePhotos_Btn, OnChoosePhotosBtn) ON_BN_CLICKED(IDC_LookSample_Btn, OnLookSampleBtn) ON_BN_CLICKED(IDC_CollectToday_Btn, OnCollectTodayBtn) ON_BN_CLICKED(IDC_WeddingToday_Btn, OnWeddingTodayBtn) ON_BN_CLICKED(IDC_SetSurveyItem_Btn, OnSetSurveyCfg) END_MESSAGE_MAP() #ifdef _DEBUG void Satisfaction::AssertValid() const { MyFormView::AssertValid(); } void Satisfaction::Dump(CDumpContext& dc) const { MyFormView::Dump(dc); } #endif void Satisfaction::OnInitialUpdate() { MyFormView::OnInitialUpdate(); CMyMdi Mdi; Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this); if(IsHasRights2new(19)==0) GetDlgItem(IDC_SetSurveyItem_Btn)->EnableWindow(0); CRect rc2; GetWindowRect(rc2); ::MoveWindow(m_hWnd, g_rc.left, g_rc.top, g_rc.Width(), g_rc.Height(), TRUE); EnumChildWindows(m_hWnd, (WNDENUMPROC)EnumChildProc, 0); #ifdef CHILD_VERSION // 16 column m_List1.SetHeadings("订单号,120;家长姓名,120;宝宝姓名,120;手机,120;固定电话,120;订单日期,120;门市,120;满意度,120;拨打情况,120;回访日期,120;通话时长,120;回访人员,120;备注,120"); #else // 16 column m_List1.SetHeadings("订单号,120;男宾姓名,120;女宾姓名,120;男宾电话,120;女宾电话,120;订单日期,120;门市,120;满意度,120;拨打情况,120;回访日期,120;通话时长,120;回访人员,120;备注,120"); #endif m_List1.LoadColumnInfo(250); ScreenToClient(rc2); rc2.bottom += 200; GetDlgItem(IDC_BUTclose)->GetWindowRect(rc2); GetData(); } //------------------------------------------------ /* 函数名: FillGrid 描述: 填表 参数: const int nTimeType 按时间类型显示数据 返回值: */ //------------------------------------------------ void Satisfaction::FillGrid(const int nTimeType) { //获取时间 CTime startTime, endTime; ((CDateTimeCtrl*)GetDlgItem(IDC_Date_Start))->GetTime(startTime); ((CDateTimeCtrl*)GetDlgItem(IDC_Date_End))->GetTime(endTime); m_List1.DeleteAllItems2(); int nCount = 0; int nSize = m_List1array.GetSize(); m_List1.m_arLabels.SetSize(nSize, 1); int i=0; for(i=0; i 12) || (nD > 31 || nD <=0)) continue; CString strDinDanTime = _T(""); CTime tm(nY, nM, nD, 0, 0, 0); /* if(tm >= startTime && tm <= endTime) { */ CString strOrderNum = m_List1array.ElementAt(i).ElementAt(0); m_List1.m_arLabels.ElementAt(nCount).Add(strOrderNum); //订单号 m_List1.m_arLabels.ElementAt(nCount).Add(m_List1array.ElementAt(i).ElementAt(1)); //家长姓名/男宾姓名 m_List1.m_arLabels.ElementAt(nCount).Add(m_List1array.ElementAt(i).ElementAt(2)); //宝宝姓名/女宾姓名 m_List1.m_arLabels.ElementAt(nCount).Add(m_List1array.ElementAt(i).ElementAt(3)); //手机/男宾电话 m_List1.m_arLabels.ElementAt(nCount).Add(m_List1array.ElementAt(i).ElementAt(4)); //固定电话/女宾电话 strtmp = m_List1array.ElementAt(nCount).ElementAt(0); nY = atoi(strtmp.Mid(0,4)); nM = atoi(strtmp.Mid(4,2)); nD = atoi(strtmp.Mid(6,2)); strDinDanTime.Format(_T("%04d-%02d-%02d"), nY, nM, nD); m_List1.m_arLabels.ElementAt(nCount).Add(strDinDanTime); //订单时间 CString strObjName = m_List1array.ElementAt(i).ElementAt(nObjIdx); m_List1.m_arLabels.ElementAt(nCount).Add(strObjName); //访问对象 //获取满意度 CString strScore = _T(""); GetScoreAndSurveyObj(strObjName, strOrderNum, strScore); m_List1.m_arLabels.ElementAt(nCount).Add(strScore); //满意度 m_List1.m_arLabels.ElementAt(nCount).Add(_T("")); //拨打情况 m_List1.m_arLabels.ElementAt(nCount).Add(_T("")); //回访日期 m_List1.m_arLabels.ElementAt(nCount).Add(_T("")); //通话时长 CString strCS = _T(""); for(int j=0; jSendMessage(WM_CLOSE); } BOOL Satisfaction::PreTranslateMessage(MSG* pMsg) { try { if (pMsg->message == WM_KEYDOWN) { switch (pMsg->wParam) { case VK_RETURN: OnButton1(); return 1; case 0x43: // copy if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_COPY); return TRUE; } break; case 0x56: //Ctrl + V: if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_PASTE); return TRUE; } break; case 0x58: // cut if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_CUT); return TRUE; } break; case 0x5A: //undo case 0x59: //redo if ((GetKeyState(VK_CONTROL) & 0x80)) { GetFocus()->SendMessage(WM_UNDO); return TRUE; } break; } } } catch (...) { } return MyFormView::PreTranslateMessage(pMsg); } void Satisfaction::OnButton1() // 查询按钮; { CTime startTime, endTime; ((CDateTimeCtrl*)GetDlgItem(IDC_Date_Start))->GetTime(startTime); ((CDateTimeCtrl*)GetDlgItem(IDC_Date_End))->GetTime(endTime); CString strStartCT(_T("")), strEndCT(_T("")); strStartCT = startTime.Format(_T("%Y%m%d")); strEndCT = endTime.Format(_T("%Y%m%d")); CString filter = _T(""); m_List1array.RemoveAll(); #ifdef LKAY_VERSION filter = _T("dindan@(dindantype<>'意向客户' or dindantype is null) and id between '") + strStartCT + _T("-000' and '") + strEndCT + _T("-999'"); #else filter = _T("dindan@id between '") + strStartCT + _T("-000' and '") + strEndCT + _T("-999'"); #endif g_sendhead.bsql = 0; g_sendhead.code[0] = 234; //获取dindan信息和对应的满意度记录 g_sendhead.tabcount = 1; g_pMainWnd->ProcessChatMessageRequest2(filter); if (g_bSendOK == 0) return; DataToArray(&m_List1array); m_AllSurveyLogArr.RemoveAll(); //获取所有记录 g_sendhead.bsql = 0; g_sendhead.code[0] = 234; g_sendhead.tabcount = 1; CString strfilter = _T("GetAllSurveyData@") + strStartCT + _T("@") + strEndCT; g_pMainWnd->ProcessChatMessageRequest2(strfilter); if(g_bSendOK == 0) return; DataToArray(&m_AllSurveyLogArr); OnOrderTodayBtn(); } void Satisfaction::GetData() { m_ScoreTypeArr.RemoveAll(); //获取分数类型 g_sendhead.bsql = 0; g_sendhead.code[0] = 234; g_sendhead.tabcount = 1; CString strfilter = _T("GetScoreType@"); g_pMainWnd->ProcessChatMessageRequest2(strfilter); if(g_bSendOK == 0) return; DataToArray(&m_ScoreTypeArr); m_kindArr.RemoveAll(); //获取服务类别 g_sendhead.bsql = 0; g_sendhead.code[0] = 234; g_sendhead.tabcount = 1; strfilter = _T("SvrKind@"); g_pMainWnd->ProcessChatMessageRequest2(strfilter); if(g_bSendOK == 0) return; DataToArray(&m_kindArr); m_cfgArr.RemoveAll(); //获取配置信息 g_sendhead.bsql = 0; g_sendhead.code[0] = 234; g_sendhead.tabcount = 1; strfilter = _T("SatisfactionCfg@"); g_pMainWnd->ProcessChatMessageRequest2(strfilter); if (g_bSendOK == 0) return; DataToArray(&m_cfgArr); FillGrid(0); } void Satisfaction::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); // TODO: 在此添加控件通知处理程序代码 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem != -1) { //单击行列pNMListView->iItem, pNMListView->iSubItem m_nCurSelIdx = pNMListView->iItem; } *pResult = 0; } //打开调查项 void Satisfaction::OnOpenSurveyBtn() { if(m_nCurSelIdx == -1) { MessageBox(_T("请选择订单!")); return; } CTime startTime, endTime; ((CDateTimeCtrl*)GetDlgItem(IDC_Date_Start))->GetTime(startTime); ((CDateTimeCtrl*)GetDlgItem(IDC_Date_End))->GetTime(endTime); CString strStartCT(_T("")), strEndCT(_T("")); strStartCT = startTime.Format(_T("%Y%m%d")); strEndCT = endTime.Format(_T("%Y%m%d")); int i = 0; CString strOrderNum = m_List1.GetItemText(m_nCurSelIdx, 0); CStringArray* pCurrDinDan = NULL; for(i=0; iSendMessage(WM_CLOSE); g_Surveydlg = NULL; } //进入调查界面 SatisfactionSurvey dlg; g_Surveydlg = &dlg; dlg.m_strOrderNum = strOrderNum; //订单号 dlg.m_pCurrDindan = pCurrDinDan; //当前选择的订单 dlg.m_pkindArr = &m_kindArr; //所有类型 dlg.m_pCfgArr = &m_cfgArr; //相对应的调查配置表 dlg.DoModal(); //调查结束后需更新所有记录 //获取所有记录 m_AllSurveyLogArr.RemoveAll(); g_sendhead.bsql = 0; g_sendhead.code[0] = 234; g_sendhead.tabcount = 1; CString strfilter = _T("GetAllSurveyData@") + strStartCT + _T("@") + strEndCT; g_pMainWnd->ProcessChatMessageRequest2(strfilter); if(g_bSendOK == 0) return; DataToArray(&m_AllSurveyLogArr); //更新显示数据 FillGrid(m_nShowType); m_nCurSelIdx = -1; g_Surveydlg = NULL; GetData(); OnButton1(); } //订单 void Satisfaction::OnOrderTodayBtn() { ChangeColName(_T("接单")); m_nShowType = 0; FillGrid(m_nShowType); } //形设 void Satisfaction::OnConfigurationBtn() { ChangeColName(_T("接单")); m_nShowType = 1; FillGrid(m_nShowType); } //拍照 void Satisfaction::OnTodayPhotographBtn() { ChangeColName(_T("摄影")); m_nShowType = 2; FillGrid(m_nShowType); } //选片 void Satisfaction::OnChoosePhotosBtn() { ChangeColName(_T("选片")); m_nShowType = 3; FillGrid(m_nShowType); } //看样 void Satisfaction::OnLookSampleBtn() { ChangeColName(_T("看样")); m_nShowType = 4; FillGrid(m_nShowType); } //化妆 void Satisfaction::OnCollectTodayBtn() { ChangeColName(_T("化妆")); m_nShowType = 5; FillGrid(m_nShowType); } //婚庆 void Satisfaction::OnWeddingTodayBtn() { ChangeColName(_T("接单")); m_nShowType = 6; FillGrid(m_nShowType); } void Satisfaction::ChangeColName(LPSTR lpName) { LVCOLUMN lov; lov.mask = LVCF_TEXT; //取字符掩码 lov.pszText = m_szColName; lov.cchTextMax = MAX_PATH; m_List1.GetColumn(6, &lov); memset(m_szColName, 0, sizeof(TCHAR)*64); #ifdef VC60 _tcscpy(m_szColName, lpName); #else _tcscpy_s(m_szColName, 64, lpName); #endif m_List1.SetColumn(6, &lov); } //------------------------------------------------------ /* 函数名: GetScore 描述: 获取评分 参数: CString& strScore 返回评分 返回值: */ //------------------------------------------------------ void Satisfaction::GetScoreAndSurveyObj(const CString& strObj, const CString& strOrderNum, CString& strScore) { int nSegment = 0; //一条记录的总分 int i(0), j(0); int nStatisticsNum = 0; //统计数量 int nScore = 0; for(j=0; j nAve && nScore <= nAve*2) strScore = _T("不满意"); else if(nScore > nAve*2 && nScore <= nAve*3) strScore = _T("一般"); else if(nScore > nAve*3 && nScore <= nAve*4) strScore = _T("满意"); else if(nScore > nAve*4 && nScore <= nAve*5) strScore = _T("非常满意"); } void Satisfaction::OnSetSurveyCfg() { SatisfactionCfg dlg; dlg.DoModal(); }