分享
 
 
 

电信计费帐务系统中-月租费计算程序分析

王朝other·作者佚名  2007-03-07
窄屏简体版  字體: |||超大  

以下内容为通过分析某省电信计费帐务系统中月租费计算程序的源码,来透析目前国内计算固定电话月租费的业务情况。

租费处理 rent.pc

1业务规则描述

以下伪代码描述中,出现的日期为数字的,均为目前程序写死的部分

变量名 及其 解释

Completed_Date 竣工日期

Cycle_Begin_Date 帐务周期开始时间

Cycle_End_Date 帐务周期结束时间

State_Date 状态日期

NSC_DATE 新装机时间

Stop_Date 停保日期

Reserve_Date 复机日期

Pay_Date 复机缴费日期

1 取新装机用户租费 GetNewServCharge

a 计算租费统计类型

i. if( Completed_Date的年月 等于 Cycle_Begin_Date的年月)

and ( Completed_Date的天数>=21号 )

Stat_Type_ID = 2;

ii .if( Completed_Date的年月 等于 Cycle_End_Date的年月)

and ( Completed_Date的天数>15号 )

Stat_Type_ID = 4;

iii.其他情况Stat_Type_ID = 3

b 计算租费

i. 取用户租费计算规则RentCalcRuleID(SERV_RENT_CALC_RULE )

ii. 取Completed_Date的天数DayOffset

iii. 根据上述规则标识RentCalcRuleID和日期偏移DayOffset来取规则描述表

(rent_calc_rule_detail )中的租费比率iRate

if(iRate!=-2) and (iRate!=-1)

lCharge * iRate/100;

iiii. if(iRate==-2) , 则按天计算租费

iiiii. if(iRate==-1) , 则按RentCalcRuleID分7种情况来处理

switch(iRentCalcRuleID)

{

case 1 : lCharge = lCharge

case 2 : lCharge = lCharge + lCharge/2 租费加半个月

case 3 : if( Completed_Date的年月 等于 Cycle_End_Date的年月)

and ( Completed_Date的天数>15号 )

lCharge = lCharge + lCharge/2

else

lCharge = lCharge * 2

case 4 : if( Completed_Date的年月 等于 Cycle_End_Date的年月)

and ( Completed_Date的天数>15号 )

lCharge = lCharge/2;

else

lCharge = lCharge;

case 5 : if( Completed_Date的年月 等于 Cycle_Begin_Date的年月)

and ( Completed_Date的天数>=21号 )

lCharge = lCharge*3/2;

if( Completed_Date的年月 等于 Cycle_End_Date年月)

and ( Completed_Date的天数>15号 )

lCharge = lCharge/2;

case 6 : if( Completed_Date的年月 等于 Cycle_Begin_Date的年月)

and ( Completed_Date的天数>=21号 )

lCharge = lCharge + lCharge*3/2;

if( Completed_Date的年月 等于 Cycle_End_Date的年月)

and ( Completed_Date的天数>15号 )

lCharge = lCharge + lCharge/2;

else

lCharge = lCharge * 2;

case 7 : lCharge = 0;

default: lCharge = lCharge;

}

2 取拆机用户或取消服务用户的租费 GetDestroyCharge

a 如果不是真正的拆机用户不计算租费

b 如果为同一帐期装机拆机或者同一帐期装机暂停用户,计算方式如下

i. 应收0.5个月月租的情况:

Completed_Date 在21 ~ 32之间 并且 State_Date 在21 ~ 32之间

或者 Completed_Date 在01 ~ 16之间 并且 State_Date 在01 ~ 16之间

或者 Completed_Date 在16 ~ 21之间 并且 State_Date 在16 ~ 21之间

ii. 应收1个月月租的情况:

Completed_Date 在21 ~ 32之间 并且 State_Date 在01 ~ 16之间

或者 Completed_Date 在01 ~ 16之间 并且 State_Date 在16 ~ 21之间

iii. 应收1.5个月月租的情况:

Completed_Date 在21 ~ 32之间 并且 State_Date 在16 ~ 21之间

c 如果为正常拆机或者正常暂停,计算方式如下

i. 取本周期拆机用户租费计算规则RentID(表destroy_rent_calc_rule )

ii. 取State_Date的天数DayOffset

iii. 根据上述规则标识RentID和日期偏移DayOffset来取规则描述表

(rent_calc_rule_detail )中的租费比率Rate

iiii.如果取出来的Rate=-2,则按天计算租费

3 租费处理

a 根据计费性质判断是否进行免费处理(表free_billing_type)

b 取欠费租费比率

(注 : 某分局规定欠费(归为停机)3个月以上做呆帐处理,但不拆机,

帐务系统在第四个月后计费不产生月租)

c 取实际使用天数

d 取障碍折扣比率

e 装机时间在周期之前,正常资费,分别计算serv和产品租费

if( Method == 'F' )

{

if( 是否为拆机用户,或者有记录在停机保号档案表)

and ( 不是拆机状态F1X)

{

判断是否在停机保号档案表中有记录

if( 不是停机保号用户 )

{

if(Completed_Date >= Cycle_Begin_Date )

and(Completed_Date < Cycle_End_Date )

{

lCharge = GetNewServCharge

}

if(NSC_DATE >= Cycle_End_Date )

and(Completed_Date >= Cycle_End_Date )

{

lCharge = 0;

}

}

else(是停机保号用户)

{

if( 判断是否为拆机状态,如果是,则更新其状态为拆机 )

{

UPDATE SERV_STOP_RESERVE

SET STATE_BAK=STATE,STATE='F1X',

BILL_TASK_ID=:BillTaskID

WHERE AREA_CODE=:sAreaCode

AND ACC_NBR=:sAccNbr ;

}

if ( 判断是否为停机保号状态 )

{

判断是否为本月停机保号

if ( Stop_Date>= Cycle_Begin_Date )

and(Stop_Date < Cycle_End_Date )

{

暂保收月租,不收保号费,

原文:是本月停机保号用户要收本月月租和停机保号费用

State_Date = Stop_Date;

lCharge = GetDestroyCharge;

}

以前帐期暂保

else if( Stop_Date < Cycle_Begin_Date )

{

if(本帐期拆机,不退不收)

lCharge = 0;

else 历史停机保号用户收保号费

没有配置该业务的停机保号费计算规则,默认按15元每3月收取

}

}

else 是已复机状态

{

判断是否为本月复机用户

if(Reserve_Date>= Cycle_Begin_Date )

and(Reserve_Date < Cycle_End_Date )

{

if( 本帐期复机之后拆机的租费收取 )

{

Completed_Date = Reserve_Date

lCharge = GetDestroyCharge;

}

else

{

if ( ( Cycle_End_Date - Pay_Date) >= (3*28) )

{

if ( Reserve_Date-Stop_Date > 1 ) &&

( Stop_Date的天数 在 21~31之间 ) && ( Reserve_Date的天数 在1~20之间 )

{

if(没有配置该业务的停机保号费计算规则)

计算暂保费15元

else

找到该业务的停机保号费计算规则(表stop_reserve_calc_rule)

}

}

else if ( ( Cycle_End_Date - Pay_Date) < (3*28) )

{

if ( Reserve_Date-Stop_Date = 0 ) && ( Stop_Date的天数 在 1~20之间 )

{

if(没有配置该业务的停机保号费计算规则)

退暂保费15元

else

找到该业务的停机保号费计算规则(表stop_reserve_calc_rule)

}

}

停机保号申请复机:

1 假设有一个号码:0351-6263678,

在1月17号由正常状态转为停保状态,

在1月21号月租费计费时,应该不收不退月租

(停保费在申请停保的下个月收取)

2 假设在1月23号又申请复机,

在2月21号计算月租费时,会按照新装处理,

收1月23-31号之间的半个月月租,

收取2月一个月 月租,收取3月一个月月租。

此时多收了一月半个月的月租。

3 所以应该加一个判断,如果停机与复机

在一个自然月的下半个月,则竣工时间可考虑

用下个月的1号,

即strgCurRentInfo.sCompletedDate=2月1号

if(Reserve_Date,Stop_Date是不是在同一个自然月的下半月)

Completed_Date = 这个自然月的下个月的1号

停机保号用户复机(如2003/01/25)后,

后来又增加了新的来显((如2003/02/08)),

则应该按增加的时间(2003/02/08)来计算

月租否则多计算了半个月的费用

if(CompletedDate < Reserve_Date)

CompletedDate = Reserve_Date

lCharge = GetNewServCharge

if (iState == 1 || iState == 2)

lCharge = 0;

}

}

}

}

}

else

{

lCharge = GetDestroyCharge;

Stat_Type_ID = 7;

}

}

else

{

按天计算 租费

}

2

租费主要是从serv表取客户资料信息,根据客户装机的竣工时间,还有拆机的状态时间来计算客户的基本租费

根据serv_product表来取客户的附加产品资料信息,来计算客户的附加产品租费

例如,来电显示,呼叫转移就属于附加产品,也要收取一定的租费

计算租费比较复杂的情况在新装机,和拆机,停机保号这几种情况

上面的流程就是描述了这几种情况

否则按正常租费收取(即按租费配置表中配置的费率来收)

3租费相关表

select * from product_rent_tariff --产品租费费率

select * from product_rent_calc_rule --新增产品租费规则关系表

select * from serv_type_rent_tariff --服务类型租费费率

select * from serv_rent_calc_rule --新装机用户租费计算规则表

select * from destroy_rent_calc_rule --拆机用户租费计算规则表

select * from destroy_product_calc_rule --拆机附属产品租费计算规则表

select * from rent_calc_rule --租费规则

select * from rent_calc_rule_detail --租费规则详情

select * from free_billing_type --部分免费对照表

select * from serv_stop_reserve --停机保号

select * from stop_reserve_calc_rule --停机保号计算规则表

select * from product_reserve_calc_rule --产品复机计算规则表

select * from fault_record --故障记录

select * from fault_type --故障类型

select * from owe_rent_calc_rule --欠费租费计算规则

select * from rent_circuit

select * from rent_circuit_bill

select * from serv_type_product

select * from acct_item_total_rt_103

select * from report_rent

select * from redo_log

select * from serv_product

select * from domain where domain in ('F0J','F0X','F1X','F0H','H0A','H0X','F0K','F0M')

select * from acct_item a,acct_item_type b where a.acct_item_type_id=b.acct_item_type_id

select * from acct_item_type

select * from product where product_name

4

1 对于新装机的用户

对于过渡期7月21日 ~ 7月31日的用户,都需要加上年月的判断

可以考虑在取DayOffset的时候加上以下判断,这样地市可以配置

7月21日 ~ 7月31日新装用户的DayOffset为33~43,这样也可以取到费率

if( Completed_Date的年月 等于 Cycle_Begin_Date的年月)

and ( Completed_Date的天数>=21号 )

{

DayOffset = Completed_Date的天数

}

if( Completed_Date的年月 等于 Cycle_End_Date的年月)

//这个Cycle_End_Date应该是21号,如果是31号的话,还需要考虑如何判断,

//7月21日 ~ 7月31日,是否要写死在程序中,作为过渡

and ( Completed_Date的天数>15号 )

and ( Completed_Date的天数<21号 )

{

DayOffset = Completed_Date的天数

}

if( Completed_Date的年月 等于 Cycle_End_Date的年月)

and ( Completed_Date的天数>=21号 )

and ( Completed_Date的天数<=31号 )

{

DayOffset = Completed_Date的天数 + 12

}

2 对于拆机用户或取消服务用户的租费

a 对于正常拆机的用户,通过State_Date的天数取DayOffset也可以

参考上述新装用户的处理办法

b 如果为同一帐期装机拆机或者同一帐期装机暂停用户

i. 应收0.5个月月租的情况:

Completed_Date 在21 ~ 32之间 并且 State_Date 在21 ~ 32之间

或者 Completed_Date 在01 ~ 16之间 并且 State_Date 在01 ~ 16之间

或者 Completed_Date 在16 ~ 21之间 并且 State_Date 在16 ~ 21之间

ii. 应收1个月月租的情况:

Completed_Date 在21 ~ 32之间 并且 State_Date 在01 ~ 16之间

或者 Completed_Date 在01 ~ 16之间 并且 State_Date 在16 ~ 21之间

iii. 应收1.5个月月租的情况:

Completed_Date 在21 ~ 32之间 并且 State_Date 在16 ~ 21之间

在这个基础上应该加上对Completed_Date,State_Date年月的判断,

这个需要讨论后决定具体算法

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有