📄 readservicefeeinfo.cpp
字号:
#include "stdafx.h"
#include "SmGateway.h"
TServiceFeeTable g_rServiceFeeTable[MAX_SERVICE_ID];
static long int g_lMaintenanceModifyTime=0; //last modified time
static char *LTrim(char * spSour)
{
char * p;
if (spSour == NULL) return NULL;
p = spSour;
while( *p==' ' || *p =='\t' ) p++;
strcpy(spSour, p);
return spSour;
}
static char *RTrim(char * spSour)
{
char * p;
if (spSour == NULL) return NULL;
if( strlen(spSour) > 0 )
{
p = spSour + strlen(spSour) - 1;
while( *p==' ' || *p =='\t')
{
* p = '\0';
if(p==spSour) break;
else p--;
}
}
return spSour;
}
static char *Trim(char * spSour)
{
if(spSour == NULL) return NULL;
return LTrim(RTrim(spSour));
}
static int nReadParam(char *spParams, char *spParam, int nIndex, char cSpaceChar, int nLen)
{
char *spStart, *spEnd;
int i;
if( spParams == NULL || spParam == NULL)
return -1;
spStart=spParams;
for( i=0; i<nIndex; i++ )
{
spStart = strchr(spStart, cSpaceChar);
if( spStart == NULL )
{
spParam = NULL;
return -1;
}
else spStart ++;
}
spEnd =strchr(spStart,cSpaceChar);
memset(spParam,'\0',nLen);
if(spEnd == NULL)
strncpy(spParam,spStart,nLen);
else
strncpy(spParam,spStart,((spEnd-spStart) > nLen ? nLen : spEnd-spStart));
if (spParam==NULL) return -1;
Trim(spParam);
return 0;
}
static void InitServiceFeeInfoTable()
{
int i,k;
for(i=0; i<MAX_SERVICE_ID; i++)
{
g_rServiceFeeTable[i].nIsUsed = 0;
memset(g_rServiceFeeTable[i].sServiceId, 0x00, MAX_SERVICEID_LEN);
memset(g_rServiceFeeTable[i].sServiceType, 0x00, MAX_SERVICETYPE_LEN);
for(k=0; k<MAX_PROVINCE_NUM; k++)
{
g_rServiceFeeTable[i].rProviceFeeInfo[k].nIsUsed = 0;
memset(g_rServiceFeeTable[i].rProviceFeeInfo[k].rFeeInfo.sFeeCode, 0x00, MAX_FEECODE_LEN);
memset(g_rServiceFeeTable[i].rProviceFeeInfo[k].rFeeInfo.sFeeType, 0x00, MAX_FEETYPE_LEN);
}
}
}
int ReadServiceFeeInfoToMem(char *sFeeInfoFile)
{
FILE *fp;
char sTxtLine[128] = {0x00};
char sFeeType[MAX_FEETYPE_LEN] = {0x00};
char sFeeCode[MAX_FEECODE_LEN] = {0x00};
char sServiceId[MAX_SERVICEID_LEN] = {0x00};
char sServiceType[MAX_SERVICETYPE_LEN] = {0x00};
char sProvince[8] = {0x0};
int nProvince = 0;
struct stat rStat;
int i,j;
SmgTrace(0, (char *)"Begin to read service fee infomation");
InitServiceFeeInfoTable();
if((fp = fopen(sFeeInfoFile, "r")) == NULL)
return -1;
j=0;
while(fgets(sTxtLine, 127, fp))
{
if(sTxtLine[0] == '#')
continue;
i=0;
nReadParam(sTxtLine, sServiceId, i++, ';', MAX_SERVICEID_LEN);
nReadParam(sTxtLine, sServiceType, i++, ';', MAX_SERVICETYPE_LEN);
nReadParam(sTxtLine, sProvince, i++, ';', 8);
nProvince = atoi(sProvince);
if(nProvince <0 || nProvince >MAX_PROVINCE_NUM)
{
SmgTrace(2, (char *)"Error: read service fee infomation error, Province=%d", nProvince);
continue;
}
nReadParam(sTxtLine, sFeeType, i++, ';', MAX_FEETYPE_LEN);
nReadParam(sTxtLine, sFeeCode, i++, ';', MAX_FEECODE_LEN);
if(sFeeCode[strlen(sFeeCode)-1] == '\n')
sFeeCode[strlen(sFeeCode)-1] = '\0';
if(sFeeCode[strlen(sFeeCode)-1] == '\r')
sFeeCode[strlen(sFeeCode)-1] = '\0';
for(j=0; j<MAX_SERVICE_ID; j++)
{
if(g_rServiceFeeTable[j].nIsUsed == 1 && strcmp(g_rServiceFeeTable[j].sServiceId, sServiceId) == 0)
{
g_rServiceFeeTable[j].nIsUsed = 1;
g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].nIsUsed = 1;
strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeCode, sFeeCode);
strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeType, sFeeType);
break;
}
}
for(j=0; j<MAX_SERVICE_ID; j++)
{
if(g_rServiceFeeTable[j].nIsUsed == 0)
{
g_rServiceFeeTable[j].nIsUsed = 1;
strcpy(g_rServiceFeeTable[j].sServiceId, sServiceId);
strcpy(g_rServiceFeeTable[j].sServiceType, sServiceType);
//g_rServiceFeeTable[j].nIsUsed = 1;
g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].nIsUsed = 1;
strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeCode, sFeeCode);
strcpy(g_rServiceFeeTable[j].rProviceFeeInfo[nProvince].rFeeInfo.sFeeType, sFeeType);
break;
}
}
}
fclose(fp);
SmgTrace(0, (char *)"End to read service fee infomation");
if(stat(sFeeInfoFile,&rStat)==0)
{
g_lMaintenanceModifyTime=rStat.st_mtime;
}
return 0;
}
extern char g_sFeeInfoFile[];
void ReloadServiceFeeInfo()
{
static time_t lOldTime=0;
time_t lNewTime;
struct stat rStat;
time(&lNewTime);
if((lNewTime-lOldTime)>=CHECK_CONFIGINFO_TIMEVAL)
{
lOldTime=lNewTime;
if(stat(g_sFeeInfoFile,&rStat)==0)
{
if(rStat.st_mtime!=g_lMaintenanceModifyTime)
ReadServiceFeeInfoToMem(g_sFeeInfoFile);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -