telsale-management/代码/telsale_aux_kit/source/DataManipulation.cpp

603 lines
13 KiB
C++

#include <SQLAPI.h>
#include <string>
#include <sstream>
#include <exception>
#include <stdlib.h>
#include <libxl.h>
#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<TelSalePolicyGift> &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<TelSalePolicyGift> & 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<TelSalePolicyGift>::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<SPolicyQuery> & 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<SPolicyRecord> & listPolicy, bool hasTitle, bool isXML )
{
IBookT<char> * pBook = NULL;
ISheetT<char> * 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<char> * 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<wchar_t> * 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<SPolicyRecord> & listPolicy, bool hasTitle)
{
IBookT<wchar_t> * pBook = NULL;
ISheetT<wchar_t> * 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();
}