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

603 lines
13 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 )
{
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<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( const wstring & filePath, 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( 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();
}