南京邮电大学通达学院 许锦花 07003704
m_vTmpSdInsertCurrent.push_back(tmpPrepaypcs_bak); } }
else //存在纪录,对Update容器进行操作 {
//与对Insert容器操作类似,在此省略 } }
else //合到下个帐期 {
//与对Insert容器操作类似,在此省略 } }
4.3.2 向数据集合类里面插入数据 inline bool InsertPcsElement() {
if(!this->m_bCurrent) //判断是否入到下个帐期清单表 {
if(m_EventPcs.event_inst_id != 0) {
msTmpEventPcsNext.push_back(m_EventPcs); //合到下个帐期 } } else {
if(m_EventPcs.event_inst_id != 0) {
msTmpEventPcs.push_back(m_EventPcs); //合到当前帐期 } }
return true; }
inline bool InsertPcsFeeElement()
{
vector
for(ite_fee = ve_EventPcsFee.begin();ite_fee!= ve_EventPcsFee.end();ite_fee++) {
tmp_pcs_fee.acct_item_type_id = ite_fee->acct_item_type_id; tmp_pcs_fee.charge = ite_fee->charge;
Event_Pcs_Fee tmp_pcs_fee;
??? tmp_pcs_fee.tariff_id = ite_fee->tariff_id;
- 34 -
南京邮电大学通达学院 许锦花 07003704
if(!this->m_bCurrent) {
msTmpEventPcsFeeNext.push_back(tmp_pcs_fee); //合到下个帐期 } else {
msTmpEventPcsFee.push_back(tmp_pcs_fee); //合到当前帐期
}
} //注意对一条话单ve_EventPcsFee只有一个,所以每做一次操作都要将ve_EventPcsFee清空 ve_EventPcsFee.clear();
}
4.4完成一个文件的处理DoneOneFile()
4.4.1 DoneOneFile()
Bool Trans::DoneOneFile(TRateFileIOManager&clRateFileIOMan, TRateFileDBInterface &clRateFileDBIF, TEventSourceFileInfo *ptUnsettledFileInfo, TPcsTransExecInfo &tPcsTransExecInfo) {
try {
if(!this->m_EventPcsInfo->InsertOneFileResult())// 将临时数据插入容器 { return false; }
clRateFileIOMan.CloseAllFile();// 如果读到文件尾,关闭文件
strcpy(ptUnsettledFileInfo->sProcState, EVENT_SOURCE_FILE_STATE_SUCCESS); m_vFileProc.push_back(*ptUnsettledFileInfo); //以文件为单位入库
if( this->m_EventPcsInfo->GetBufferCount()> MAX_BUFFER_COUNT) {
if(!this->m_EventPcsInfo->PcsIntoDB(tPcsTransExecInfo)) //如果入库失败 {
this->gpDBBill->Rollback();//失败就要回滚
return true;
for(vector
{
strcpy(itor->sProcState, EVENT_SOURCE_FILE_STATE_FAIL); if (clRateFileDBIF.UpdateUnsettleRecInfo(&(*itor)) != CDR_RATE_SUCCESS)
{ return false; } }
m_vFileProc.clear(); } else
- 35 -
南京邮电大学通达学院 许锦花 07003704
{
for(vector
// 更新计费文件状态
if (clRateFileDBIF.UpdateUnsettleRecInfo(&(*itor)) != CDR_RATE_SUCCESS)
{ return false; } }
m_vFileProc.clear(); } }
}
catch (TDBException e) catch (TException e) catch (...) return true; }
4.4.1将临时数据插入容器InsertOneFileResult() bool TEventPcsInfo::InsertOneFileResult() {
for(vector
msEventPcs.push_back(*itor);
}
for(vector
msEventPcsNext.push_back(*itor);
}
for(vector
msEventPcsFee.push_back(*itor); iBufferCount++;
}
for(vector
msEventPcsFeeNext.push_back(*itor); iBufferCount++; }
- 36 -
南京邮电大学通达学院 许锦花 07003704
msTmpEventPcs.clear(); //将临时数据删除 ???
m_vTmpSdInsertCurrent.clear(); ???
return true; }
4.4.2入库处理PcsIntoDB()
bool TEventPcsInfo::PcsIntoDB(TPcsTransExecInfo &tPcsTransExecInfo) {
vector
{
//基表入库
if(p_dbquery) {
delete p_dbquery; p_dbquery = NULL;
}
p_dbquery = new TDBQuery(this->gpDBBill); if(!p_dbquery)
{ cout<<\ }
//当前帐期清单入库
if(msEventPcs.size() > 0) {
size_t batch_count = msEventPcs.size()/PCS_BATCH_SIZE; //计算批次 if(msEventPcs.size()%PCS_BATCH_SIZE != 0) {
++batch_count; }
sql_insert.reserve(4096); sql_insert = \
billing_cycle_id = tPcsTransExecInfo.lBillingCycleID; //根据帐期动态配置表名
sprintf(strTableName,\tPcsTransExecInfo.iCustCategory, billing_cycle_id);
AllTrim(strTableName);
strcpy(sql_insert_pcs_info,EVENT_PCS_INS_SQL); sql_insert.append(strTableName); sql_insert.append(\
sql_insert.append(sql_insert_pcs_info); //循环分配插入
- 37 -
AllTrim(sql_insert_pcs_info);
南京邮电大学通达学院 许锦花 07003704
for(size_t i=0;i this->p_dbquery->Close(); this->p_dbquery->SetSQL(sql_insert.c_str()); //绑定变量,子类具体实现 size_t insert_rows = min i*PCS_BATCH_SIZE; SetPcsInsertParamArray(i,this->msEventPcs); } } this->p_dbquery->Execute(insert_rows); //插入 //下个帐期清单入库与当前帐期清单入库类似,在此省略 //费用子表入库,与清单入库类似,在此省略 //sd表入库 //对数据库进行操作 //对当前帐期进行操作 memset(sql_insert_sd_info, 0x00, sizeof(sql_insert_sd_info)); memset(strTableName, 0x00, sizeof(strTableName)); billing_cycle_id = tPcsTransExecInfo.lBillingCycleID; //根据帐期动态配置表名 sprintf(strTableName,\//sd表insert操作 strcpy(sql_insert_sd_info,PCS_SD_INS_SQL); AllTrim(sql_insert_sd_info); if(m_lSizeSdInsertCurrent > 0) { size_t batch_count = m_lSizeSdInsertCurrent/PCS_BATCH_SIZE; //计算批次 if(m_lSizeSdInsertCurrent%PCS_BATCH_SIZE != 0) { } ++batch_count; sql_insert.clear(); sql_insert.reserve(4096); sql_insert = \ sql_insert.append(strTableName); sql_insert.append(\ sql_insert.append(sql_insert_sd_info); //循环分配插入 for(size_t i=0;i this->p_dbquery->Close(); this->p_dbquery->SetSQL(sql_insert.c_str()); //绑定变量,子类具体实现 - 38 -