#include #include #include #include #include #include #include "DataManipulation.h" #include "SystemDataQuery.h" #include "StringCodeConverter.h" //#pragma comment( lib, "user32.lib") //#pragma comment( lib, "version.lib") //#pragma comment( lib, "oleaut32.lib") //#pragma comment( lib, "ole32.lib") //#pragma comment( lib, "libxl.lib") // #ifdef _DEBUG // #pragma comment( lib, "sqlapisd.lib") // #else // #pragma comment( lib, "sqlapis.lib") // #endif const char g_cszConnectStringIDS6[] = "DRIVER={};" "PROTOCOL=onsoctcp;" "SERVICE=16191;" "SERVER=xmcx1;" "HOST=10.39.0.91;" "DATABASE=ids6;" "DB_LOCALE=en_US.819;"; const static char g_szUserNameIDS6[] = "ccx99"; const static char g_szPasswordIDS6[] = "c91IT09"; const static char g_cszConnstringYwgl[] = "DRIVER={};" "PROTOCOL=onsoctcp;" "SERVICE=16192;" "SERVER=xmcx2;" "HOST=10.39.0.92;" "DATABASE=ywgl_xm;" "DB_LOCALE=en_US.819;"; const static char g_cszUserNameYwgl[] = "ccx99"; const static char g_cszPasswordYwgl[] = "c92IT09"; void queryTelsalePolicyGifts(vector& giftList) { SAConnection connection; SACommand command; string strSQL = "select id, trim(name), default_price from w_dx_gifts"; command.setConnection(&connection); command.setCommandText(strSQL.c_str()); try { connection.Connect(g_cszConnstringYwgl, g_cszUserNameYwgl, g_cszPasswordYwgl, SA_Informix_Client); command.Execute(); } catch (SAException& error) { throw runtime_error(error.ErrText()); } while (command.FetchNext()) { TelSalePolicyGift gift; gift.Id(command.Field(1).asLong()); gift.GiftName((const char *)(command.Field(2).asString())); gift.GiftDefaultPrice((const char *)(command.Field(3).asString())); giftList.push_back(gift); } connection.Disconnect(); } void SaveTelSalePolicyInfo(const SPolicyRecord& policy, const vector& giftList) { if (policy.strPolicySerial.empty() == true) { throw invalid_argument("保单号为空!"); } if (policy.strSalerCode.empty() == true) { throw invalid_argument("保单号为空!"); } ostringstream ostrCommand; string strAutotraderCall; //车店联呼 if (policy.bIsAutotraderCall == true) { strAutotraderCall = "1"; } else { strAutotraderCall = "0"; } ostrCommand << "insert into w_dxbd_i ( jjbj, khjl, khjllx, bdh, zhjywy, zhjywymc, zhjywybm, zhjywybmm, kshdm, kshmc, czydm, czrq , chdlh, chshdm, chshmc, khmc, chph, chjh, fdjh ) " "values( 1, 0, 0, " << "trim('" << policy.strPolicySerial << "'), " << "trim('" << policy.strSalerCode << "'), " << "trim('" << policy.strSalerName << "'), " << "trim('" << policy.strSalerDeptCode << "'), " << "trim('" << policy.strSalerDeptName << "'), " << "trim('" << policy.strSalerOfficeCode << "'), " << "trim('" << policy.strSalerOfficeName << "'), " << "trim('" << policy.strOperatorCode << "'), " << "today, " << "'" << strAutotraderCall << "'"; if (policy.strAutoTraderCode.empty() == false) { ostrCommand << ", '" << policy.strAutoTraderCode << "'"; ostrCommand << ", '" << policy.strAutoTraderName << "'"; } else { ostrCommand << ", NULL, NULL"; } if (policy.strCustomerName.empty() == false) { ostrCommand << ", '" << policy.strCustomerName << "'"; } else { ostrCommand << ", NULL"; } if (policy.strPlateSerial.empty() == false) { ostrCommand << ", '" << policy.strPlateSerial << "'"; } else { ostrCommand << ", NULL"; } if (policy.strFrameSerial.empty() == false) { ostrCommand << ", '" << policy.strFrameSerial << "'"; } else { ostrCommand << ", NULL"; } if (policy.strEngineSerial.empty() == false) { ostrCommand << ", '" << policy.strEngineSerial << "'"; } else { ostrCommand << ", NULL"; } ostrCommand << " )"; string strCommand = ostrCommand.str(); SAConnection conn; SACommand command; command.setConnection(&conn); command.setCommandText(strCommand.c_str()); try { conn.Connect( g_cszConnstringYwgl, g_cszUserNameYwgl, g_cszPasswordYwgl, SA_Informix_Client); //conn.setAutoCommit( SA_AutoCommitOff ); //导致锁表 //保存保单 command.Execute(); //保存礼品列表,先删除旧数据 command.setCommandText("delete w_dxbd_gift_i where bdh = :1 "); command.Param(1).setAsString() = policy.strPolicySerial.c_str(); command.Execute(); command.setCommandText("insert into w_dxbd_gift_i ( bdh, gift_name, gift_price ) values ( :1, :2, :3 )"); for (vector::const_iterator iter = giftList.begin(); iter != giftList.end(); ++iter) { command.Param(1).setAsString() = policy.strPolicySerial.c_str(); command.Param(2).setAsString() = iter->GiftName().c_str(); command.Param(3).setAsString() = iter->GiftDefaultPrice().c_str(); command.Execute(); } conn.Commit(); } catch (SAException& error) { conn.Rollback(); conn.Disconnect(); throw runtime_error(error.ErrText()); } conn.Disconnect(); } void QueryTelSalePolicyInfo(const string& strPolicyNo, const string& strOperatorCode, const string& strStartDate, const string& strEndDate, vector& vPolicyInfo) { SACommand command; SAConnection connection; SPolicyQuery policy; string strSQL = "select trim(bdh) bdh, trim(zhjywy) zhjywy, to_char(czrq, '%Y年%m月%d日') czrq, trim(czydm) czydm, chdlh, zhjywybmm, kshmc, chshdm, chshmc " " from w_dxbd_i " " where 1=1 "; if (!strPolicyNo.empty()) { strSQL.append("and bdh = '"); strSQL.append(strPolicyNo); strSQL.append("' "); } if (!strOperatorCode.empty()) { strSQL.append("and czydm = '"); strSQL.append(strOperatorCode); strSQL.append("' "); } if (!strStartDate.empty()) { strSQL.append("and czrq >= '"); strSQL.append(strStartDate); strSQL.append("' "); } if (!strEndDate.empty()) { strSQL.append("and czrq <= '"); strSQL.append(strEndDate); strSQL.append("' "); } try { command.setCommandText(strSQL.c_str()); command.setConnection(&connection); connection.Connect( g_cszConnstringYwgl, g_cszUserNameYwgl, g_cszPasswordYwgl, SA_Informix_Client); command.Execute(); while (command.FetchNext()) { policy.strPolicySerial = command.Field("bdh").asString(); policy.strSalerCode = command.Field("zhjywy").asString(); policy.strDeptName = command.Field("zhjywybmm").asString(); policy.strOfficeName = command.Field("kshmc").asString(); policy.strAutoTraderCode = command.Field("chshdm").asString(); policy.strAutoTraderName = command.Field("chshmc").asString(); policy.strInputDate = command.Field("czrq").asString(); policy.strCDLH = command.Field("chdlh").asString(); QueryPolicyGifts(policy.strPolicySerial, policy.strGifts, policy.dGiftPriceSum); vPolicyInfo.push_back(policy); } connection.Disconnect(); } catch (SAException& error) { throw runtime_error(error.ErrText()); } } void QueryPolicyGifts(const string& strPolicyNo, string& strGifts, double dGiftPriceSum) { SAConnection connection; SACommand command; string strSQL = "select gift_name, gift_price " " from w_dxbd_gift_i " " where bdh = '" + strPolicyNo + "'"; string strSQLSum = "select sum( gift_price ) " " from w_dxbd_gift_i " " where bdh = '" + strPolicyNo + "'"; try { command.setConnection(&connection); command.setCommandText(strSQL.c_str()); connection.Connect(g_cszConnstringYwgl, g_cszUserNameYwgl, g_cszPasswordYwgl, SA_Informix_Client); command.Execute(); strGifts.clear(); dGiftPriceSum = 0.0; while (command.FetchNext()) { if (!strGifts.empty()) { strGifts.append("; "); } strGifts.append(command.Field("gift_name").asString()); strGifts.append(" "); strGifts.append(command.Field("gift_price").asString()); strGifts.append("元"); dGiftPriceSum += command.Field("gift_price").asDouble(); } /*command.setCommandText( strSQLSum.c_str() ); command.Execute(); if ( command.FetchNext() ) { strGiftPriceSum = command.Field( 0 ).asString(); }*/ connection.Disconnect(); } catch (SAException& error) { throw runtime_error(error.ErrText()); } } /*void readTelsaleXlsFile(const string strFilePath, vector & listPolicy, bool hasTitle, bool isXML ) { Book * pBook = NULL; Sheet * pSheet = NULL; int iRowCount = 0; int iRowIndex = 0; if ( isXML == true ) { pBook = xlCreateXMLBook(); } else { pBook = xlCreateBook(); } if ( pBook == NULL ) { throw string(""); } if ( pBook->load(strFilePath.c_str()) == NULL ) { string strMessage = pBook->errorMessage(); throw string( strMessage ); } pSheet = pBook->getSheet( 0 ); if ( pSheet == NULL ) { throw string( "读取sheet失败!" ); } iRowCount = pSheet->lastRow(); if ( hasTitle == true ) { iRowIndex = 1; } //读取数据 while ( iRowIndex < iRowCount ) { SPolicyRecord policy; CellType type = pSheet->cellType( iRowIndex, 4 ); policy.strSignDate = readXlsxCell( pSheet, iRowIndex, 0 ); policy.strPolicySerial = readXlsxCell( pSheet, iRowIndex, 1 ); policy.strPlateSerial = readXlsxCell( pSheet, iRowIndex, 2 ); policy.strCustomerName = readXlsxCell( pSheet, iRowIndex, 3 ); policy.strSalerCode = readXlsxCell( pSheet, iRowIndex, 4 ); //policy.strAutoTraderName = readXlsCell( pSheet, iRowIndex, 5 ); policy.strAutoTraderCode = readXlsxCell( pSheet, iRowIndex, 6 ); //补齐工号 if ( policy.strSalerCode.length() == 1 ) { policy.strSalerCode = string("00") + policy.strSalerCode; } if ( policy.strSalerCode.length() == 2 ) { policy.strSalerCode = string("0") + policy.strSalerCode; } policy.strOperatorCode = getUserCode(); queryAutoTraderInfo( policy.strAutoTraderCode, policy.strAutoTraderName ); queryStaffInfo( policy.strSalerCode, policy.strSalerName, policy.strSalerDeptCode, policy.strSalerDeptName, policy.strSalerOfficeCode, policy.strSalerOfficeName ); listPolicy.push_back( policy ); iRowIndex++; } pBook->release(); }*/ string readXlsCell(ISheetT* pSheet, int iRowIndex, int iColIndex) { string strCell; char szNum[40]; int iCell; if (pSheet == NULL) { throw string(""); } CellType cellType = pSheet->cellType(iRowIndex, iColIndex); switch (cellType) { case libxl::CELLTYPE_STRING: strCell = pSheet->readStr(iRowIndex, iColIndex); break; case libxl::CELLTYPE_NUMBER: memset(szNum, NULL, 40); iCell = pSheet->readNum(iRowIndex, iColIndex); sprintf_s(szNum, "%d", iCell); strCell = szNum; break; default: strCell = ""; } return strCell; } string readXlsxCell(ISheetT* pSheet, int iRowIndex, int iColIndex) { wstring strCell; string strReturn; char szNum[40]; int iCell; if (pSheet == NULL) { throw string(""); } CellType cellType = pSheet->cellType(iRowIndex, iColIndex); switch (cellType) { case libxl::CELLTYPE_STRING: strCell = pSheet->readStr(iRowIndex, iColIndex); break; case libxl::CELLTYPE_NUMBER: memset(szNum, NULL, 40); iCell = pSheet->readNum(iRowIndex, iColIndex); sprintf_s(szNum, "%d", iCell); strReturn = szNum; break; default: strReturn = ""; } StringCodeConverter::unicode2mbs(strCell, strReturn); return strReturn; } void readTelsaleXlsxFile(const wstring& filePath, vector& listPolicy, bool hasTitle) { IBookT* pBook = NULL; ISheetT* pSheet = NULL; int iRowCount = 0; int iRowIndex = 0; pBook = xlCreateXMLBookW(); if (pBook == NULL) { throw string(""); } if (pBook->load(filePath.data()) == false) { throw string("打开文件失败!"); } pSheet = pBook->getSheet(0); if (pSheet == NULL) { throw string("读取sheet失败!"); } iRowCount = pSheet->lastRow(); if (hasTitle == true) { iRowIndex = 1; } //读取数据 while (iRowIndex < iRowCount) { SPolicyRecord policy; CellType type = pSheet->cellType(iRowIndex, 4); policy.strSignDate = readXlsxCell(pSheet, iRowIndex, 0); policy.strPolicySerial = readXlsxCell(pSheet, iRowIndex, 1); policy.strPlateSerial = readXlsxCell(pSheet, iRowIndex, 2); policy.strCustomerName = readXlsxCell(pSheet, iRowIndex, 3); policy.strSalerCode = readXlsxCell(pSheet, iRowIndex, 4); policy.strAutoTraderName = readXlsxCell(pSheet, iRowIndex, 6); //补齐工号 if (policy.strSalerCode.length() == 1) { policy.strSalerCode = string("00") + policy.strSalerCode; } if (policy.strSalerCode.length() == 2) { policy.strSalerCode = string("0") + policy.strSalerCode; } policy.strOperatorCode = getUserCode(); queryStaffInfo( policy.strSalerCode, policy.strSalerName, policy.strSalerDeptCode, policy.strSalerDeptName, policy.strSalerOfficeCode, policy.strSalerOfficeName); listPolicy.push_back(policy); iRowIndex++; } pBook->release(); }