薪资系统里,因为有很多项目是经常变动的,所以不可能在程序中写死。我看过一个东软开发的系统,里面可以让用户自己定义薪资的项目和计算方法。
    比如,我可以定义一个“奖金1”,定义一个“考核指标1”,“考核指标1”可以通过界面输入或者批量导入。在程序的界面,用户可以自己定义“奖金1”的计算方法,定义如下:if 考核指标1<1 then
   奖金1 = 1000 *0.5
else if 考核指标1>2 then
   奖金1 = 1000 *2
else
   奖金1 = 1000 *考核指标1
end if
    用户定义完成后,程序可以根据用户的定义自动计算出每个员工“奖金1”的金额,请问这个在程序里该怎么设计,求思路。这里的各项指标仅仅是举例,可以有很多,计算方法的定义也是举例,可以包含各种逻辑关系和运算,格式就是这样样子,程序要能满足各种定义的计算..................

解决方案 »

  1.   

    以前也给自己公司搞过一人事系统,其中涉及了到相对简单的财务模块1。你的薪资项(比如奖金,加班费、补助、基本工资......)要是可以配置的(增、删、改)  这样可以定义一个表T_ITEM
    2。就是员工我薪资表:  主要:员工id,薪资项ID,时间信息(年月),金额
    3。关于你说的考核项(比如出勤天数,销售额.....),你可以定义一张表,
                   id  name  comment
    4。员工的考核值
                  id    考核项id  value(建议定义多列,根据逻辑,有为int值,或者为varchar值的,根据实际需要)
    然后,你的考核规则去程序中完成。。或者用存储过程来完成先可以根据考核项,及你的业务逻辑,算出各个薪资项,插入员工的薪资项中,最后才计算员工工资。
    这样工资也可以算出来,也可以列出薪资项
    像这种行政、财务项目,真的是可大可小。要简单也行,要复杂就有很复杂的做法。
      

  2.   

    类似报表统计。我们是定义了几大类规则。  1。 区间规则 ,比如在 1 —— 100 值 为 1000 *0.5  100 —— 200 值 为 1000 *0.3 。  2。表达式规则:avg(max($D,1000*03),min($D,63),$D<90?90:$D) ......  3.排名规则 : 1 80 ,2  70,3 60....
      ...
    然后用jep 进行运算的。这样就是对用户要求要高点。
      

  3.   

      可不可以像discus论坛积分系统一样  
        设置一个动态表格,可以动态新增和删除 修改  这样就可以满足不断变化的需求
       
      

  4.   

    也不是不可以做,你的需求。。你可以根据需要,给他一个界面,让他配置考核规则,以及工资的算法。最后,你在后台,根据他配置的规则,生成一个sql语句,存储到数据库中。在算工资的时候,调用就可以了。
      

  5.   

     职责链(Chain of Responsibility)模式
      

  6.   

    我们这里每个月的工资项目经常变更的,非常频繁,我们的薪资系统可以经常调整的(这个系统是东软用java做的,看不了代码),我现在做的是个考核系统,和这个差不多,.....
      

  7.   


    关键是如何根据规则生成sql,一个一个规则去解析,然后拼sql?!太麻烦吧.......
      

  8.   

    不清楚具体的业务系统要求,单从这一个需求上看,给出如下建议:首先定义两个实体:考核指标和奖金,简单的可以是ID+Value属性。然后定义考核标准,具体的考核标准不论怎么变化,最终体现出来的一定是这样一句话:
    如果某个考核指标达到某个标准,发放某个类型的奖金,发多少。举个例子来说是这样:
    如果任务完成度大于80%,则任务奖金发放100%。
    如果任务完成度大于70%,则任务奖金发放50%。
    如果任务完成度小于70%,则任务奖金不发放。根据上面的分析,定义奖金计算规则实体:考核指标+指标最低值+奖金类型+发放比例要求考核指标相同的规则是互斥的,即相同考核指标只能满足一条规则,不能同时满足多个规则。程序处理时可以根据考核指标依次处理,UI界面可以使用表格的形式展现,这样如果考核标准变动时可以不需要修改程序,让系统使用者自行设置就可以了。上面只是个参考思路,考核指标的条件可以扩充,奖金发放的形式可能是百分比,也可能是定额等等,根据你的实际业务需求修改吧。