2018-06-01 09:36:01 +00:00
|
|
|
#include "TelSalePolicyManager.h"
|
|
|
|
#include <string>
|
|
|
|
#include <sstream>
|
|
|
|
#include <exception>
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
|
2018-06-02 09:47:28 +00:00
|
|
|
using namespace std;
|
2018-06-01 09:36:01 +00:00
|
|
|
using namespace StringCodeConverter;
|
|
|
|
|
|
|
|
#ifndef _UNICODE
|
|
|
|
#define _UNICODE
|
|
|
|
#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";
|
|
|
|
|
|
|
|
CTelSalePolicyManager::CTelSalePolicyManager(void)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CTelSalePolicyManager::~CTelSalePolicyManager(void)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void CTelSalePolicyManager::Query( SPolicyQuery &policy, std::vector<SPolicyRecord> &vPolicy )
|
|
|
|
{
|
|
|
|
SAConnection conn;
|
|
|
|
SACommand command;
|
|
|
|
|
|
|
|
|
2018-06-02 09:47:28 +00:00
|
|
|
//生成查询字符串
|
2018-06-01 09:36:01 +00:00
|
|
|
string strCommand;
|
|
|
|
|
|
|
|
strCommand.reserve( 1024 );
|
2018-06-02 09:47:28 +00:00
|
|
|
strCommand.append( "select bdh, zhjywy, to_char(czrq, '%Y年%m月%d日') from w_dxbd_i where 1=1 and czrq >='" );
|
2018-06-01 09:36:01 +00:00
|
|
|
|
|
|
|
strCommand += policy.strStartDate;
|
|
|
|
strCommand += "' and czrq <= '";
|
|
|
|
strCommand += policy.strEndDate;
|
|
|
|
strCommand += "'";
|
|
|
|
|
|
|
|
if ( policy.strPolicySerial.empty() == false )
|
|
|
|
{
|
|
|
|
strCommand += " and bdh = '";
|
|
|
|
strCommand += policy.strPolicySerial;
|
|
|
|
strCommand += "'";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( policy.strSalerCode.empty() == false )
|
|
|
|
{
|
|
|
|
strCommand += " and zhjywy = '";
|
|
|
|
strCommand += policy.strSalerCode;
|
|
|
|
strCommand += "'";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( policy.strPlateSerial.empty() == false )
|
|
|
|
{
|
|
|
|
strCommand += " and chph = '";
|
|
|
|
strCommand += policy.strPlateSerial;
|
|
|
|
strCommand += "'";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( policy.strFrameSerial.empty() == false )
|
|
|
|
{
|
|
|
|
strCommand += " and chjh = '";
|
|
|
|
strCommand += policy.strFrameSerial;
|
|
|
|
strCommand += "'";
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( policy.strEngineSerial.empty() == false )
|
|
|
|
{
|
|
|
|
strCommand += " and fdjh = '";
|
|
|
|
strCommand += policy.strEngineSerial;
|
|
|
|
strCommand += "'";
|
|
|
|
}
|
|
|
|
|
|
|
|
command.setConnection( &conn );
|
|
|
|
command.setCommandText( strCommand.c_str() );
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
conn.Connect(
|
|
|
|
g_cszConnstringYwgl,
|
|
|
|
g_cszUserNameYwgl,
|
|
|
|
g_cszPasswordYwgl,
|
|
|
|
SA_Informix_Client );
|
|
|
|
|
|
|
|
command.Execute();
|
|
|
|
}
|
|
|
|
catch ( SAException &error )
|
|
|
|
{
|
|
|
|
string strError = error.ErrText();
|
|
|
|
|
|
|
|
throw strError;
|
|
|
|
}
|
|
|
|
|
|
|
|
while ( command.FetchNext() == true )
|
|
|
|
{
|
|
|
|
SPolicyRecord policyQuery;
|
|
|
|
|
|
|
|
SAString strCol = command.Field( 1 ).asString();
|
|
|
|
strCol.TrimRight();
|
|
|
|
|
|
|
|
policyQuery.strPolicySerial = strCol;
|
|
|
|
|
|
|
|
strCol = command.Field( 2 ).asString();
|
|
|
|
strCol.TrimRight();
|
|
|
|
policyQuery.strSalerCode = strCol;
|
|
|
|
|
|
|
|
strCol = (SAString)command.Field( 3 ).asString();
|
|
|
|
strCol.TrimRight();
|
|
|
|
policyQuery.strOperatorDate = strCol;
|
|
|
|
|
|
|
|
vPolicy.push_back( policyQuery );
|
|
|
|
}
|
|
|
|
|
|
|
|
conn.Disconnect();
|
|
|
|
}
|
|
|
|
|
|
|
|
string QueryOperatorName( string strOperatorCode )
|
|
|
|
{
|
|
|
|
SAConnection conn;
|
|
|
|
SACommand command;
|
|
|
|
|
|
|
|
string strCommand( "select rymc from rydm where rydm='" );
|
|
|
|
string strResult;
|
|
|
|
|
|
|
|
strCommand += strOperatorCode;
|
|
|
|
strCommand += "'";
|
|
|
|
|
|
|
|
command.setConnection( &conn );
|
|
|
|
command.setCommandText( strCommand.c_str() );
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
conn.Connect(
|
|
|
|
"DRIVER={};"
|
|
|
|
"PROTOCOL=onsoctcp;" // protocol in lower case
|
|
|
|
"SERVICE=7777;"
|
|
|
|
"SERVER=xmtb1;"
|
|
|
|
"HOST=10.39.0.80;"
|
|
|
|
"DATABASE=datacenter;",
|
|
|
|
"ccxuser",
|
|
|
|
"ccx99",
|
|
|
|
SA_Informix_Client );
|
|
|
|
|
|
|
|
command.Execute();
|
|
|
|
}
|
|
|
|
catch ( SAException &error )
|
|
|
|
{
|
|
|
|
SAString strError = error.ErrText();
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( command.FetchNext() == true )
|
|
|
|
{
|
|
|
|
SAString sastrResult = command.Field("rymc").asString();
|
|
|
|
sastrResult.TrimRight();
|
|
|
|
|
|
|
|
strResult = (const char *)sastrResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
conn.Disconnect();
|
|
|
|
|
|
|
|
return strResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QueryOperatorInfo( const string & cstrOperatorCode,
|
|
|
|
string & strOperatorName,
|
|
|
|
string & strDeptCode,
|
|
|
|
string & strDeptName )
|
|
|
|
{
|
|
|
|
SAConnection connection;
|
|
|
|
SACommand command;
|
|
|
|
|
|
|
|
string strCommand = "select a.staff_name, "
|
|
|
|
" a.department_code,"
|
|
|
|
" b.department_name "
|
|
|
|
"from rydm_t a, bm_t b "
|
|
|
|
"where a.department_code = b.department_code "
|
|
|
|
"and a.staff_code = '";
|
|
|
|
|
|
|
|
strCommand.append( cstrOperatorCode );
|
|
|
|
strCommand.append( "'" );
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
connection.Connect( g_cszConnectStringIDS6,
|
|
|
|
g_szUserNameIDS6,
|
|
|
|
g_szPasswordIDS6,
|
|
|
|
SA_Informix_Client );
|
|
|
|
|
|
|
|
command.setConnection( &connection );
|
|
|
|
command.setCommandText( strCommand.c_str() );
|
|
|
|
|
|
|
|
command.Execute();
|
|
|
|
|
|
|
|
if ( command.FetchNext() == true )
|
|
|
|
{
|
|
|
|
strOperatorName = (const char *)( command.Field( "staff_name").asString() );
|
|
|
|
strDeptCode = (const char *)( command.Field( "department_code").asString() );
|
|
|
|
strDeptName = (const char *)( command.Field( "department_name").asString() );
|
|
|
|
}
|
|
|
|
|
|
|
|
connection.Disconnect();
|
|
|
|
}
|
|
|
|
catch ( SAException & sqlError )
|
|
|
|
{
|
|
|
|
runtime_error error( sqlError.ErrText() );
|
|
|
|
|
|
|
|
throw error;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void CTelSalePolicyManager::SavePolicy( const SPolicyRecord & policy,
|
|
|
|
const vector<TelSalePolicyGift> giftList )
|
|
|
|
{
|
|
|
|
if ( policy.strPolicySerial.empty() == true )
|
|
|
|
{
|
2018-06-02 09:47:28 +00:00
|
|
|
throw invalid_argument( "保单号为空!" );
|
2018-06-01 09:36:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( policy.strSalerCode.empty() == true )
|
|
|
|
{
|
2018-06-02 09:47:28 +00:00
|
|
|
throw invalid_argument( "保单号为空!" );
|
2018-06-01 09:36:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ostringstream ostrCommand;
|
|
|
|
string strAutotraderCall;
|
|
|
|
|
2018-06-02 09:47:28 +00:00
|
|
|
//车店联呼
|
2018-06-01 09:36:01 +00:00
|
|
|
if ( policy.bIsAutotraderCall == true )
|
|
|
|
{
|
|
|
|
strAutotraderCall = "1";
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
strAutotraderCall = "0";
|
|
|
|
}
|
|
|
|
|
|
|
|
ostrCommand << "insert into w_dxbd_i ( khjl, khjllx, bdh, zhjywy, zhjywymc, zhjywybm, zhjywybmm, czydm, czrq , chdlh, khmc, chph, chjh, fdjh ) "
|
|
|
|
"values( 0, 0, "
|
|
|
|
<< "'" << policy.strPolicySerial << "', "
|
|
|
|
<< "'" << policy.strSalerCode << "', "
|
|
|
|
<< "'" << policy.strSalerName << "', "
|
|
|
|
<< "'" << policy.strSalerDeptCode << "', "
|
|
|
|
<< "'" << policy.strSalerDeptName << "', "
|
|
|
|
<< "'" << policy.strOperatorCode << "', "
|
|
|
|
<< "'" << policy.strOperatorDate << "', "
|
|
|
|
<< "'" << strAutotraderCall << "'";
|
|
|
|
|
|
|
|
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 );
|
2018-06-02 09:47:28 +00:00
|
|
|
//conn.setAutoCommit( SA_AutoCommitOff ); //导致锁表
|
2018-06-01 09:36:01 +00:00
|
|
|
|
2018-06-02 09:47:28 +00:00
|
|
|
//保存保单
|
2018-06-01 09:36:01 +00:00
|
|
|
command.Execute();
|
|
|
|
|
2018-06-02 09:47:28 +00:00
|
|
|
//保存礼品列表,先删除旧数据
|
2018-06-01 09:36:01 +00:00
|
|
|
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 CTelSalePolicyManager::LoadFromExcelFile( const char *pcszFilePath, vector< SPolicyRecord > *pvPolicy )
|
|
|
|
{
|
|
|
|
if ( pvPolicy == NULL )
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
wchar_t pwszFilePath[1024];
|
|
|
|
|
|
|
|
mbs2unicode( pcszFilePath, pwszFilePath );
|
|
|
|
|
|
|
|
IBookT<wchar_t> *pBookPolicy = xlCreateXMLBookW();
|
|
|
|
|
|
|
|
if ( pBookPolicy == NULL )
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !(pBookPolicy->load( pwszFilePath )) )
|
|
|
|
{
|
|
|
|
const char *pcszError = pBookPolicy->errorMessage();
|
|
|
|
|
|
|
|
pBookPolicy->release();
|
|
|
|
}
|
|
|
|
|
|
|
|
ISheetT<wchar_t> *pSheet = pBookPolicy->getSheet( 0 );
|
|
|
|
|
|
|
|
if ( pSheet == NULL )
|
|
|
|
{
|
|
|
|
pBookPolicy->release();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
int iStartRow = pSheet->firstRow();
|
|
|
|
int iEndROw = pSheet->lastRow();
|
|
|
|
|
|
|
|
for ( iStartRow++; iStartRow <= iEndROw; iStartRow++ )
|
|
|
|
{
|
|
|
|
SPolicyRecord policy;
|
|
|
|
|
|
|
|
policy.strPolicySerial = getCellString( pSheet, iStartRow, 0 );
|
|
|
|
|
|
|
|
if ( policy.strPolicySerial.empty() == true )
|
|
|
|
{
|
|
|
|
iStartRow++;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
policy.strSalerCode = getCellString( pSheet, iStartRow, 1 );
|
|
|
|
policy.strCustomerName = getCellString( pSheet, iStartRow, 2 );
|
|
|
|
policy.strPlateSerial = getCellString( pSheet, iStartRow, 3 );
|
|
|
|
policy.strFrameSerial = getCellString( pSheet, iStartRow, 4 );
|
|
|
|
policy.strEngineSerial = getCellString( pSheet, iStartRow, 5 );
|
|
|
|
|
|
|
|
pvPolicy->push_back( policy );
|
|
|
|
}
|
|
|
|
|
|
|
|
pBookPolicy->release();
|
|
|
|
}
|
|
|
|
|
|
|
|
void CTelSalePolicyManager::SavePolicyGift( const string & strPolicyNo, const vector<TelSalePolicyGift> & giftsList )
|
|
|
|
{
|
|
|
|
if ( strPolicyNo.empty() )
|
|
|
|
{
|
|
|
|
throw invalid_argument( "strPolicyNo" );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( giftsList.empty() )
|
|
|
|
{
|
2018-06-02 09:47:28 +00:00
|
|
|
throw invalid_argument( "礼品列表为空!" );
|
2018-06-01 09:36:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SAConnection conn;
|
|
|
|
SACommand command;
|
|
|
|
|
|
|
|
command.setConnection( &conn );
|
|
|
|
command.setCommandText( "insert into w_dxbd_gift_i ( bdh, gift_name, gift_price ) values ( :1, :2, :3 )" );
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
conn.Connect( g_cszConnstringYwgl,
|
|
|
|
g_cszUserNameYwgl,
|
|
|
|
g_cszPasswordYwgl,
|
|
|
|
SA_Informix_Client );
|
|
|
|
|
|
|
|
for ( vector<TelSalePolicyGift>::const_iterator iter = giftsList.begin(); iter != giftsList.end(); ++iter )
|
|
|
|
{
|
|
|
|
command.Param( 1 ).setAsString() = strPolicyNo.c_str();
|
|
|
|
command.Param( 2 ).setAsString() = iter->GiftName().c_str();
|
|
|
|
command.Param( 3 ).setAsString() = iter->GiftDefaultPrice().c_str();
|
|
|
|
|
|
|
|
command.Execute();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch ( SAException &error )
|
|
|
|
{
|
|
|
|
throw runtime_error( error.ErrText() );
|
|
|
|
}
|
|
|
|
|
|
|
|
conn.Disconnect();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
string getCellString( ISheetT<wchar_t> *pSheet, int iRowIndex, int iColIndex )
|
|
|
|
{
|
|
|
|
if ( pSheet == NULL )
|
|
|
|
{
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
string strCell;
|
|
|
|
int iCellValue;
|
|
|
|
const char *pcszBuffer = NULL;
|
|
|
|
char pszNumber[100];
|
|
|
|
|
|
|
|
CellType celltype = pSheet->cellType( iRowIndex, iColIndex );
|
|
|
|
|
|
|
|
switch ( celltype )
|
|
|
|
{
|
|
|
|
case CELLTYPE_STRING:
|
2018-06-02 09:47:28 +00:00
|
|
|
//字符串
|
2018-06-01 09:36:01 +00:00
|
|
|
strCell = unicode2mbs( pSheet->readStr( iRowIndex, iColIndex ) );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case CELLTYPE_NUMBER:
|
2018-06-02 09:47:28 +00:00
|
|
|
//数字
|
2018-06-01 09:36:01 +00:00
|
|
|
iCellValue = pSheet->readNum( iRowIndex, iColIndex );
|
|
|
|
|
|
|
|
sprintf( pszNumber,"%d", iCellValue );
|
|
|
|
strCell = pszNumber;
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return strCell;
|
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
|
|
}
|