人员发生了异动,年终奖分段计薪业务系统实施落地方案
业务场景:年终奖分段计薪,比如年终奖和职务有关系,如果一个人在年中调整了职务,那调整前月份按照调整前的标准算 调整后的月份再按照新的职务来标准算。NC系列软件该如何落地?
解决思路:年终奖一般要么上年的数据、要么当年的数据。为了保险,就获取前后一年的数据,加上当年一共3年的数据。具体步骤先获取数据库当前时间,然后得到前一年第一天、后一年第一天,一共就是36个月的数据了,36行。再拼装为具体每个月的月末日期;人员表作为左表,做链接刚刚36个月的数据,得到每个人36个月的月份;再用每个人36个月的月份左链接工作记录表,注意用时间来关联了,就得到这个人36个月,每个月的职位;再左链接薪资标准,即可。
落地步骤:
(1)创建视图,得到每个人36个月的月末日期。如下:
select
tableaa.pk_psndoc,
tablebb.monthsList
from(
select
DISTINCT
case when 1=1 then 'hr.youthark.com' else '' end mark,
pk_psndoc
from bd_psndoc
)tableaa
LEFT OUTER JOIN(
select
DISTINCT
case when 1=1 then 'hr.youthark.com' else '' end mark,
to_char(last_day(to_date(tablea.daylist,'yyyy-mm-dd')),'yyyy-mm-dd') as monthsList
from(
select
TO_CHAR(TO_DATE(to_char(add_months(to_date(concat(substr(to_char(sysdate,'yyyy-mm-dd'),0,4),'-01-01'),'yyyy-mm-dd'),-12),'yyyy-mm-dd'), 'yyyy-MM-dd') + ROWNUM - 1,'yyyy-MM-dd') as daylist
FROM DUAL
CONNECT BY ROWNUM <=to_date(to_char(add_months(to_date(concat(substr(to_char(sysdate,'yyyy-mm-dd'),0,4),'-12-31'),'yyyy-mm-dd'),12),'yyyy-mm-dd'), 'yyyy-MM-dd') -to_date(to_char(add_months(to_date(concat(substr(to_char(sysdate,'yyyy-mm-dd'),0,4),'-01-01'),'yyyy-mm-dd'),-12),'yyyy-mm-dd'), 'yyyy-MM-dd') + 1
)tablea
where substr(tablea.daylist,9,2)='01'
)tablebb on tableaa.mark=tablebb.mark
ORDER BY tableaa.pk_psndoc,tablebb.monthsList
(2)再联查工作记录表hi_psnjob,得到每个月的职务
(3)再联查薪资标准或者薪资规则得到每个人、每个月对应的金额,形成视图。
(4)添加外部数据源,查询视图。