#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 ) { IBookT * pBook = NULL; ISheetT * 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 = readXlsCell( pSheet, iRowIndex, 0 ); policy.strPolicySerial = readXlsCell( pSheet, iRowIndex, 1 ); policy.strPlateSerial = readXlsCell( pSheet, iRowIndex, 2 ); policy.strCustomerName = readXlsCell( pSheet, iRowIndex, 3 ); policy.strSalerCode = readXlsCell( pSheet, iRowIndex, 4 ); //policy.strAutoTraderName = readXlsCell( pSheet, iRowIndex, 5 ); policy.strAutoTraderCode = readXlsCell( 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( 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( szNum, "%d", iCell ); strReturn = szNum; break; default: strReturn = ""; } StringCodeConverter::unicode2mbs( strCell, strReturn ); return strReturn; } void readTelsaleXlsxFile(wchar_t * wszFilePath, 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(L"D:/1111.xlsx") == 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(); }