收藏 分享(赏)

Utlity公用函数说明.doc

上传人:weiwoduzun 文档编号:4874473 上传时间:2019-01-18 格式:DOC 页数:12 大小:59KB
下载 相关 举报
Utlity公用函数说明.doc_第1页
第1页 / 共12页
Utlity公用函数说明.doc_第2页
第2页 / 共12页
Utlity公用函数说明.doc_第3页
第3页 / 共12页
Utlity公用函数说明.doc_第4页
第4页 / 共12页
Utlity公用函数说明.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、Utlity.pc 公用函数说明1. ctrl_con2. get_infilename3. ctrl_month4. ctrl_table5. InitRate6. InitGsm7. TariffTimeSpan8. InitTimeSpan9. isoArea10.disGsm11. get_rate12. char get_free13.char dis_holiday14. void record_error 15. int ValidPhoneNumber 1) ctrl_con():得到相应业务的业务种类编号,原始数据输入路径和总帐数据输出文件.相关表: detail_condi

2、tion;用到变量: Pprocess_no(GV);影响变量: Pinput_path(GV), Poutput_path(GV), Pbusi_type(GV);功能: 得到一项业务( 根据 Pprocess_no 来确定)的原始数据文件输入路径, 和总帐数据文件输出路径,以及 业务种类; SELECT: NVL(RUN_FLAG,0),NVL(BUSI_TYPE,1) / 到 Pbusi_type;NVL(INPUT_PATH,./) / 到 Pinput_path;NVL(OUTPUT_PATH,./) / 到 Poutput_path;WHERE: PROCESS_NO = Ppro

3、cess_no; UPDATE: RUN_FLAG = 1;WHERE: PROCESS_NO = Pprocess_no;2) get_infilename(char *recfile):从指定路径下得到原始数据文件.相关表: 无;用到变量: recfile(arg) , Pinput_path(GV), Poutput_path(GV), Pbusi_type(GV) , fcxbureau(GV);影响变量: recfile(arg);功能: 使用文件管道技术 find path name “文件名通配符 ” print 循环得到 Pinput_path 下的所有文件; fp_pipe=

4、popen(管道,“r”); fgets(recfile,128,fp_pipe);3) int ctrl_mon(char * filename1):得到本次记帐月月份.相关表: month_control;用到变量: filename1(arg), Pprocess_no;影响变量: Pcur_mon(GV);功能: 从 filename1 中分离出包含的时间信息到 Pcur_date;select: MONTH / 到 Pcur_mon 中;where: PROCESS_NO = Pprocess_no;Pcur_date between START_TIME and END_TIME;

5、备注: 为了实现通用性和易维护性,程序根据大量的配置表中的环境变量而运行, 本函数中,通过配置表 month_control 中得到当前记帐月,从而确定处理的原始数据 insert 至哪个详帐表中-业务名称_%02d(02d 为月份);4) ctrl_table(filename2):得到本次记帐要处理的详帐表名.相关表: no_head;用到变量: filename2(arg),Pbusi_type(GV);影响变量: Pdetail_table(GV),Pbill_table(GV);Lno_head(GV);功能: 从 filename2 中分离出”局向”;select: NVL(DET

6、AIL_TABLE,No table name) / 到 Pdetail_table;NVL(BILL_TABLE,No table name) / 到 Pbill_table;WHERE: BUSI_TYPE=ltrim(rtrim(:Pbusi_type)BUREAU_CODE_C4=:Bureau_id_c4;Lno_head = filename25-filename11;备注: 取到的表名和 Pcur_mon 结合得到本次记帐要处理的详帐表名 ;5) int InitRate():初始化费率结构数组,将费率表中符合条件的费率记录读入内存.根据不同业务( 进程号不同)读取不同表中的费率

7、相关表: toll_tariff, basic_tariff,latn_call_tariff;使用变量: Pprocess_no(GV);影响变量: rateLEN_RATE_NUM(GV)(stru);功能: 根据进程号判断 :1,46 : toll_tariffSELECT: TARIFF_ID, / 到 rate.tariff_idCALLED_AREA_CODE, / 到 ratenum.rate_idTO_CHAR(NVL(EFF_DATE, TO_DATE(19960101,YYYYMMDD),YYYYMMDD), / 到 ratenum.effect_sdateTO_CHAR(

8、NVL(EXP_DATE,TO_DATE(20891231,YYYYMMDD),YYYYMMDD), / 到 ratenum.effect_edateNVL(TARIFF_TYPE,11), / 到 ratenum.tariff_typeNVL(RATE,0), / 到 ratenum.rateNVL(FIT_OBJECT,y) / 到 ratenum.fit_objectORDER BY: CALLED_AREA_CODE, EFF_DATE5,6,7,8,9,10,11: basic_tariffSELECT: TARIFF_ID,TO_CHAR(AREA_ID),SERV_TYPE_ID

9、,BILLING_TYPE_ID,TO_CHAR(NVL(EFF_DATE,TO_DATE(19960101,YYYYMMDD),YYYYMMDD),TO_CHAR(NVL(EXP_DATE,TO_DATE(20891231,YYYYMMDD),YYYYMMDD),TARIFF_TYPE,RATEORDER BY: AREA_ID,SERV_TYPE_ID,BILLING_TYPE_ID,TARIFF_TYPE,EFF_DATE;备注: 此处的 rate.rate_id = area_id(4 位) + serv_type_id(4 位) + billing_type_id(4 位) + ta

10、riff_type(4 位); 3,4: latn_call_tariffSELECT: TARIFF_ID,TO_CHAR(SERV_TYPE_ID),TO_CHAR(CALLING_AREA_ID),TO_CHAR(CALLED_AREA_ID),TO_CHAR(NVL(EFF_DATE,TO_DATE(19960101,YYYYMMDD),YYYYMMDD),TO_CHAR(NVL(EXP_DATE,TO_DATE(20891231,YYYYMMDD),YYYYMMDD),TARIFF_TYPE,NVL(RATE,0)ORDER BY SERV_TYPE_ID,CALLING_AREA_

11、ID,CALLED_AREA_ID,TARIFF_TYPE,EFF_DATE备注: 此处的 rate.rate_id =serv_type_id(4 位) + calling_area_id(4 位) +called_area_id(4 位) + tariff_type(4 位); 依托关系: 在 isoArea()和 get_free()前调用 .相关结构变量: bl_rate ratetypedef struct long tariff_id;char rate_idLEN_TEL_AREA;char effect_sdateLEN_DATETIME;char effect_edateLE

12、N_DATETIME;char tariff_typeLEN_TARIFF_TYPE;long rate;char fit_object; bl_rate;6) int InitGsm()初始化 gsmLEN_GSM_NUM(GV).相关表: gsm_area影响变量: gsmLEN_GSM_NUM(GV)功能: 初始化 gsmLEN_GSM_NUM;相关结构变量: gsmtypedef struct char gsm_headLEN_GSM_HEAD;char areaLEN_TEL_AREA; bl_gsm_area;7) int InitTariffTimeSpan()初始化费率优惠时间

13、段数据.相关表: tariff_time_span影响变量: TariffTimeSpanLEN_TARIFFTIMESPAN_NUM(GV)功能: 初始化 TariffTimeSpanLEN_TARIFFTIMESPAN_NUMSELECT: TIME_SPAN_ID, FIT_OBJECT, RATEORDER BY: FIT_OBJECT, TIME_SPAN_ID;TariffTimeSpan.time_span_id = time_span_id(4 位) + 000 + fit_object(1 位);相关结构变量: TariffTimeSpantypedef struct cha

14、r time_span_id8;char fit_object;int rate; S_TariffTimeSpan;8) int InitTariffTimeSpan_public()初始化公用电话费率优惠时间段数据.相关表: tariff_time_span_public影响变量: TariffTimeSpan_public(GV)功能: SELECT: TIME_SPAN_ID,FIT_OBJECT,RATEORDER BY: FIT_OBJECT,TIME_SPAN_ID;TariffTimeSpan_publicnum.time_span_id =time_span_id(4 位)

15、+ 000 + fit_object(1 位);相关结构变量: TariffTimeSpantypedef struct char time_span_id8;char fit_object;int rate; S_TariffTimeSpan;9) int InitTimeSpan()相关表: time_span;影响变量: TimeSpan(GV);功能:SELECT: TIME_SPAN_ID,BEGIN_TIME,END_TIME,SPAN_TIME_FLAG,NVL(FIT_OBJECT ,0),NVL(DISCOUNT,1)WHERE: STATE=B00 ;ORDER BY FI

16、T_OBJECT,DISCOUNT;10) int InitAcctItemType()根据进程号(Pprocess_no)得到相应业务控制信息.相关表: acct_item_type_ctrl;影响变量: AcctItemType(GV);功能:SELECT: PROCESS_NO,BUSINESS_ID,ACCT_ITEM_TYPE_ID,PARTNER_ID,TICKET_METER_TYPE,TARIFF_TYPE WHERE: PROCESS_NO = Pprocess_no ORDER BY: TARIFF_TYPE;相关结构:typedef struct long Process

17、No;long BusinessId;long AcctItemTypeId;long PartnerId;char TicketMeterType3;char TariffType3; S_AcctItemType;11) int InitAreaId()得到某一号码段的 营业区编号(Area_id), 计费类别(billing_type_id), 服务类型(serv_type_id), 用户电话号码(acc_nbr)相关表: serv,exchange使用变量:Lno_head ;影响变量: NbrAreaId操作:SELECT: b.area_id,a.billing_type_id,a

18、.serv_type_id,a.acc_nbr FROM :serv a,exchange b WHERE:acc_nbr BETWEEN Lnohead+0000 AND Lno_head+9999,a.exchange_id=b.exchange_id a.state IN (F0A,F0J,F0K,F0L,F0C) ORDER BY a.acc_nbr相关结构: typedef struct int ServTypeId;int BillingTypeId;int area_id;char AccNbrLEN_TEL_NO; S_AreaId;12) binSearch()输入参数: c

19、onst char AccNbr16 (要查找的电话号码), int high (公用电话号码数组元素个数)相关参数: OutAccArray公用电话判断函数,判断一个号码是否为公用电话;在公用号码数组中搜索 AccNbr, 找到了则返回该号码在数组中的位置, 没找到则返回-1;13) get_rate()通过区号得到相应的费率,tariff_type 和 tariff_id;使用变量: rate (gv)影响变量: b_flag(tariff_type),r_rate(费率),Ltariff_id;通过折半查找法找出区号相对应的费率;如果没有找到,则:rate=default_rate;b_

20、flag=default_tariff_type;Ltariff_id=default_id;其中各种 default 变量根据处理业务的不同从不同的费率表中获得;14) get_rate_value()取得相应时间段的优费费率;使用变量:match_string (用来匹配的字符串) ;TariffTimeSpan.(gv)时段费率数组(by InitTariffTimeSpan();影响变量:rate使用 match_string 和 TariffTimeSpan.time_span_id 相比较,得到费率;15) get_rate_value_public()同 get_rate_val

21、ue, 但使用 TariffTimeSpanPublic.16) get_toll_tariff()获取长途费率;输入参数:start_time(起始时间);使用变量:TimeSpan.(gv), fit_object(gv)影响参数:rate, time_span_flag(确定此项业务的时间临界点是向前计费还是向后计费)if (该话单的 fit_object=timespan.fit_object) and(时间段起始时间start_time时间段中止时间)获取该时间段的 time_span_flag,和 time_span_id;使用 time_span_id 和 fit_object

22、组成 matching_string 格式: ”%04d000%c”call get_rate_value()得到费率;17) get_free()得到长途话单的费率和费用;输入参数:start_time (起始时间),real_timlen(通话时长);使用变量:fit_object(gv);影响参数:rate( 费率),cash_timlen( 费用), count(计费次数);此函数在处理长途话单中使用,对长途的三种情况 IP,无优惠长途,有优惠长途 进行了不同的处理(1)如果 fit_object in (4,A,C,D,E,F,G,H ) 为 IP 长途:count=(real_ti

23、mlen+59)/60;rate=get_toll_tariff(.);cash_timlen=countrate;(2)如果 fit_object = 3 为无时段优惠的国际长途及港澳台长途:count=(real_timlen+5)/6;rate=get_toll_tariff(.);cash_timlen=countrate; (3)如果 fit_object 不为以上情况,则为有优惠的国际国内长途:其中 fit_object 为 1:国内长途;2:14 个地区国际长途;5:港澳台地区长途;8: 暂无;count=(real_timlen+5)/6;采用按每一秒钟的时间求费率的方法确定费

24、率: 将 start_time 转化为 struct tm 结构( 由于 struct tm 中年份表示为 2 位,所以要 tm.tm_year=tm.tm_year-1900),cash_timlen 初值为 0; 将 tm 转化为 14 位时间字符串; call get_toll_tariff(.)得到前一费率和计费方向 1(由于第一次取费率是从start_time 这个时刻取的,所以该费率实际上表示前一秒的费率); timlen-; tm.tm_sec+=6 再 mktime( 根据 5 取出的时间 再 call get_toll_tariff(.)得到当前秒的当前费率和计费方向 2; 如果(前一费率 !=当前费率) 以及 (计费方向 1=2),表示该话单已跨了时段,同时该时段是按前一秒计费,cash_timlen+=前费率;否则表示该话单未跨时段,或者说该话单已跨时段,但是按当前秒计费,cash+=当前费率; 循环到,当(time=0)时结束; 循环结束后如果(timlen%6!=0),则再做一次,处理不足 6 秒补足 6 秒的部分;rate 为最后时段的费率;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 说明文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报