工资单工资结算
2020-09-07 23:45:58 10 举报
AI智能生成
工资单
作者其他创作
大纲/内容
工资结算设置
职级薪资管理
职级
置业顾问
业务主管
分店经理
区域经理
大区总监
薪资类型
底薪
首月底薪
没有用到,计算首月底薪时是查询工资结算规则中的数据的
业绩提成
单列收入
租房实收??
社会保险,住房公积金
最后扣钱
新人推荐奖
新人卓越奖(未使用到)
管理津贴
分店,区域,大区
直接,间接
职务津贴(未用到)
职务不是和权限挂钩的吗??怎么还有津贴??
话费补助
结算方式
业绩提成,规定金额
若为业绩提成,则提成规则,根据工资结算方案来获取具体的值
固定金额,最低金额
附加费用,折扣比例
顺序计算??先算附加费用再算折扣比例??
工资结算方案
方案类型
底薪提成
业绩提成
单端口,多端口津贴
话费补助、推荐提成
管理津贴总业绩、人均业绩
管理津贴活动率
职级
自己选择进行配置
方案明细
范围区间,范围值确定配置值,有些为百分比
数据库用json形式进行存储(值*100)
工资结算规则
首页端口补贴天数
开端口首月底薪
育成系数
职务津贴
主管,分店,区域,大区
代分店,代大区总提
单列提成
本人、推荐人
主管、分店、区经、大区
工资结算
公司人力月统计
统计该公司每月的出勤天数
员工加款(未计算)
员工扣款(未计算)
员工月统计
类型
月份
姓名,职级,部门
考勤天数
是否社保、公积金
主推盘网放合格率(未使用到)
什么东西??只有0和1??
端口类型,端口津贴系数值
考勤天数之后可通过钉钉进行自动同步(未实现)
支持数据导入,根据手机号码自动关联(未实现)
工资单
工资单分项
签约月份(合同月)
结算月份
被推荐奖励推荐人
合同月实收分给推荐人的钱
bean对象
SalaryResponse(响应结果对象)
payrollItemMap Map<Date, HrPayrollItem>
合同月在本月的实收以及底薪提成
payrollItemMap Map<签约月, 工资单分项>
结算基本逻辑
1.准备待处理数据
记录月应出勤天数(更新或添加公司人力月统计记录)
天数* 100
工资结算规则
结算方案
Map<HrSalaryPlanType, Map<String, HrSalaryPlan>> salaryPlanMap
Map<方案类型, Map<职级, 结算方案对象>>
获取所有职级薪资配置对象
Map<String, Map<HrSalaryType, HrRankSalary>> rankSalaryMap
Map<职级, Map<薪资类型, 职级薪资配置对象>>
职务异动记录,用来追溯员工职级和部门
Map<Long, List<StaffTransfer>> transfersMap
Map<员工id, 异动记录列表>
部门,员工
Map<Long, Department> departmentMap
Map<Long, Staff> allStaffMap
推荐人、育成人
Map<Long, Set<Staff>> referrerMap
Map<Long, Set<Staff>> supBreederMap
Map<Long, Set<Staff>> shopBreederMap
Map<Long, Set<Staff>> regionBreederMap
Map<Long, Set<Staff>> perganaBreederMap
Map<(推荐人、育成人、店长等id), 手下的员工集合> perganaBreederMap
A 需要计算工资的员工列表
Map<Long, Staff> payingStaffs
要计算工资的人
在职人员
当月有实收的(离职人员也要)
B 遍历所有员工
统计推荐人,育成人
现只统计当月在职人员
结算月员工数据
Map<Long, HrStaffMonthly> staffMonthlyMap
Map<员工id, HrStaffMonthly> (考勤天数,是否保险,公积金,网盘合格率等等)
签约月在本月(结算月)的实收统计
Map<Long, Map<Date, ReceivedStat>> staffReceivedStatMap
Map<staffId, Map<签约月, 本月的实收统计对象(签约合同月,结算月实收金额,新房、二手房、租房交易实收金额)>>
其他合同月实收统计
主管合同月实收统计
分店经理合同月实收统计
区域经理合同月实收统计
大区经理合同月实收统计
Map<Long, Map<Date, ReceivedStat>> pmReceivedStatMap
结算月合同统计
Map<Long, OrderCountStat> orderCountStatMap
Map<员工id, 合同数量统计(员工id,新房交易数量,二手房交易数量,租房交易数量)>
C 统计实收(当月的所有实收)
新房
- 1 根据收款时间查询结算月新房实收单(审核通过的)
2 遍历实收单,获取对应的新房交易单
单独员工方法复用,用来获取员工订单数量统计项,传入map,staffId,返回一个object,方法内处理为空的情况,优秀。getOrderCountStat
3 获取合同数量统计对象,value值 +1
4 根据新房交易单获取业绩分成对象,遍历
A 将有实收的员工加到要统计工资单的员工map中(payingStaffs)
B 计算分成人的分成业绩,通过staffId和签约时间(签约月)获取本月(结算月)的实收统计对象(ReceivedStat),累加新房分成业绩、总分成业绩
C 判读当前分成人有无主管、店长、区经、大区,如果有则一并将业绩累加上去
二手房
与新房一致
租房
与新房一致
D 未统计实付!!!
2.第一次循环
遍历所有payingStaffs
判断职级是否为空??为了删选什么??测试人员??
a.构建初始数据,响应数据
构建初始数据
设置当前staffId,起始时间,当月考勤天数,工资结算规则
传入之前所有的实收统计结果(一个总的【staffReceivedStatMap】,其余是当前用户相关的实收统计)
结算方案,职级薪资配置对象,部门,所有员工
当前员工的异动记录,当前员工的结算月员工统计数据(考勤天数,开端口数)
员工所有的育成人,店长,区经等关联关系map
响应数据
初始化工资单对象(HrPayroll),设置基本参数
工资单分项map
Map<Date, HrPayrollItem> payrollItemMap
Map<签约月, 工资单分项> 比工资单多【签约月、结算月、结算月贡献给推荐人的金额】
b.将数据加入到基础责任链中循环
3.第二次循环
将第一次循环的结果加入到高级责任链中循环
链条处理器
基本
预处理-处理器(PrepareHandlerImpl)
1 初始化工资单,设置员工考勤天数
2 根据员工、时间(结算前一个月)、异动记录;推测出当前员工职级,,并设置到工资单上面
A 判断员工是否已入职、是否有异动记录
B 利用stream管道流计过滤出和职务异动有关的数据(过滤条件)
异动员工不是当前计算工资员
不属于职务异动
异动记录在结算月的下一个月之前都排除!!
C stream 排序,取出时间最小的异动记录,返回异动前职级,若没有返回当前员工的职级
3 遍历员工合同月实收统计Map<Date, ReceivedStat>
根据签约月,设置工资单分项的新房、租房、二手房的实收
推测员工职级,时间(签约月),参数与上面一致,设置上去
统计员工所有二手房、新房、租房的实收
4 设置工资单中,员工所有二手房、新房、租房的实收;若本月无实收,工资单分项只添加本月的职级
底薪-处理器(BasicSalaryHandlerImpl)
1 遍历员工合同月实收统计
A 通过实收统计的签约月获取工资单分项,进而根据职级和薪资类型(底薪)获取职级薪资对象
未根据签约月进行回溯???
B 结算月 == 签约月
1 判断薪资类型中的结算方式
固定金额:直接获取
业绩提成:根据本月实收获取底薪
根据结案方案类型、职级获取结算方案对象
根据结算方案对象中配置的区域范围获取值
2 处理附加款、折扣和最低金额
3 根据出勤率计算实际底薪
实际出勤天数/应出勤天数 四舍五入,保留4位小数
4 总底薪累加月底薪,工资单分项设置月底薪
C 结算月 != 签约月
结算方式 == 固定金额,直接跳过(已发放过)
结算方式 == 业绩提成
1 根据合同月份获取指定员工在结算月之前的工资单分项列表
2 遍历统计结算月之前所有的总实收(新房实收 + 二手房实收)、已拿的底薪
3 再次累加本月实收,计算实收获取底薪,处理附加款、折扣和最低金额
4 出勤率计算 : 签约月的实际出勤天数/签约月应出勤天数;再算出当前应获取的底薪
当月应发底薪 = 当前应获取的底薪 - 已拿底薪
5 工资单分项设置月底薪
D 本月无实收
与 B 相同只是不需要统计实收
2 设置工资单底薪值
首月底薪 - 处理器(FirstMonthFeeHandlerImpl)
1 判断员工是否要发首月底薪
无 :不处理
有 :计算员工历史出勤天数
历史出勤天数>首月端口补贴的天数;不处理
else
本月出勤天数>剩余首月端口补贴天数,剩下补贴全发
else;只发本月出勤天数的补贴
端口津贴 - 处理器(PortFeeHandlerImpl)
1 遍历员工合同月在本月(结算月)的实收统计
1 判断该合同月是否开端口;查询该职级是否有职级配置对象
2 判断出合同月员工的开端口情况
3 获取结算月之前合同月实收和发放记录,需要查看代码确认!!!
结算月 == 签约月
根据本月实收计算发放津贴
结算月 != 签约月
1 根据合同月份获取员工的累计实收、累计端口津贴
74行 totalReceived += receivedStat.getAmount(); ???
2 计算出本月应发津贴
公式 : 签约月实收 * 签约月的端口津贴系数值
话费补助 - 处理器(TelephoneFeeHandlerImpl)
1 判断职级是否配置话费补助,员工有无手机,有无话费补助
2 结算类型
固定金额:直接设置
问题: 不用处理附加款、折扣和最低金额吗???
业绩提成:
1 根据结算月开单数算提成
问题:数据统计的是当月有实收的成交单的数量???
2 根据薪资结算方案,获取话费补贴
3 处理附加款、折扣和最低金额
业绩提成 - 处理器(PerformanceFeeHandlerImpl)
1 遍历员工合同月实收统计
结算月 == 签约月
根据本月实收获取结算方案,进而算出业绩提成
结算月 != 签约月
根据合同月份获取员工的累计实收、累计底薪、累计提成
计算出本月应发提成
主管(组)直接管理津贴 - 处理器(SupervisorFeeHandlerImpl)
1 遍历员工签约月在本月的实收统计
1 回溯员工合同月所在组
A 判断员工是否已入职、是否有异动记录
B 利用stream管道流计过滤出和职务异动有关的数据(过滤条件)
异动员工不是当前计算工资员
部门异动、离职
异动记录在结算月的下一个月之前都排除!!
C stream 排序,取出时间最小的异动记录,返回异动前部门,若没有返回当前员工的部门
2 统计当前分组签约月到下一个月所有订单的,开单人、实收人
Set<Long> signerReceivedSet
Set<Long> signerSet
Set<签约人Id>
3 获取结算月之前最近一次的管理津贴发放记录
4 计算管理津贴
结算月 == 签约月
A 计算合同月(签约月)人力
遍历所有员工
1 判断计算在职员工,及签约月时属于当前统计部门
2 计算签约月人力
公式:签约人算一人;签约月在职人员算一人;中途有入离职,当月在职天数/当月总天数
B new一个管理津贴对象,设置相关参数
结算月 != 签约月
获取原来管理津贴对象,累加统计所有的实收,重新赋值给新的津贴管理对象
5 组人均业绩
公式: 签约月总应收/签约月人力
根据薪资结算方案中的范围获取人均业绩系数
6 组活动率
公式:合同月该部门累计开单(签约人)且有实收的人数/签约月人力
根据薪资结算方案中的范围获取活动率系数
7 主管团队直接育成关系系数
查询工资结算规则
8 累计管理津贴
公式:总实收 * 人均业绩系数 * 活动率系数 * 主管直接育成系数 乘的时候有顺序吗??
9 设置管理津贴,返回对象添加管理津贴列表,设置工资单分项的直接管理津贴(本月发放的,总的减已经发的),累加总津贴
2 计算单列提成
问题:分店经理不发单列提成??
获取结算月所有的租房实收,根据工资结算规则计算出应发津贴进行累加,设置到工资单直接管理津贴中
分店直接管理津贴 - 处理器(ShopFeeHandlerImpl)
与 主管(组)直接管理津贴 一致
新增:总业绩系数值的获取
问题:区经和大区都发分店管理津贴???
问题:67,68行 提示要改一下
大区直接管理津贴 - 处理器(PerganaFeeHandlerImpl)
与 分店一致
社会保险 - 处理器(InsuranceFundHandlerImpl)
直接根据职级薪资管理查询到固定值,设置到工资单对象中
住房公积金 - 处理器(AccumulationFundHandlerImpl)
与社会保险一致
后处理 - 处理器(FinallyHandlerImpl)
删除已存在的工资单和明细记录
持久化工资单
持久化各合同月明细记录
管理津贴累计发放记录
高级
新人推荐奖励处理 - 处理器(NewbReferralBonusHandlerImpl)
1 获取当前员工推荐的所有新人,遍历
A 获取员工签约月在本月的实收统计,遍历
筛选出入职三个月以内的实收
处理单列推荐奖励
在工资结算规则中获取单列推荐人提成比例,计算单列推荐奖励
处理A类推荐奖励
根据被推荐人和合同月份获取结算月之前的工资单分项
结算月 == 签约月
获取推荐提成比例,计算奖励金额
结算月 != 签约月
1 遍历工资单分项,统计之前已经发的奖励金额、和员工之前实收的金额
2 计算出总共的奖励金额,减去已给的,算出当月要发的奖励金额
3 记录到被推荐人当月的工资单明细中,累加奖励金额
2 将新人推荐奖设置到工资单中(单列推荐奖励+A类推荐奖励)
主管(组)间接管理津贴 - 处理器(SupervisorIndirectFeeHandlerImpl)
1 判断员工有无主管间接管理津贴(职级查询)
2 获取员工手下的育成人,遍历查询出员工的直接津贴,进行累加
3 获取工资结算规则中单列育成主管提成 * 直接管理津贴 ???
问题1 :统计的直接津贴是包含单列津贴的!!
问题2:在工资结算规则中,有主管间接育成系数、单列推荐人提成两种
问题3:间接管理津贴是在直接管理津贴的基础上再去出乘的吗??
分店间接管理津贴- 处理器(ShopIndirectFeeHandlerImpl)
与主管一致
区域间接管理津贴 - 处理器(RegionIndirectFeeHandlerImpl)
大区间接管理津贴 - 处理器(PerganaIndirectFeeHandlerImpl)
高级处理器后处理 - 处理器(SeniorFinallyHandlerImpl)
更新工资单数据
系统中所有设置的参数(职级薪资管理、工资结算方案、工资结算规则)都没有回溯,都是直接取当前的配置信息
0 条评论
下一页