1.准备待处理数据
记录月应出勤天数(更新或添加公司人力月统计记录)
天数* 100
工资结算规则
结算方案<br>
Map<HrSalaryPlanType, Map<String, HrSalaryPlan>> salaryPlanMap
Map<方案类型, Map<职级, 结算方案对象>><br>
获取所有职级薪资配置对象
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 遍历所有员工<br>
统计推荐人,育成人
现只统计当月在职人员<br>
结算月员工数据
Map<Long, HrStaffMonthly> staffMonthlyMap<br>
Map<员工id, HrStaffMonthly> (考勤天数,是否保险,公积金,网盘合格率等等) <br>
<font color="#5c5c5c">签约月在本月</font>(结算月)<font color="#5c5c5c">的实收统计</font>
Map<Long, Map<Date, ReceivedStat>> staffReceivedStatMap
Map<staffId, Map<签约月, 本月的实收统计对象(签约合同月,结算月实收金额,新房、二手房、租房交易实收金额)>> <br>
<font color="#5c5c5c">其他合同月实收统计</font><br>
主管合同月实收统计
分店经理合同月实收统计
区域经理合同月实收统计
大区经理合同月实收统计
Map<Long, Map<Date, ReceivedStat>> pmReceivedStatMap
结算月合同统计
Map<Long, OrderCountStat> orderCountStatMap
Map<员工id, 合同数量统计(员工id,新房交易数量,二手房交易数量,租房交易数量)><br>
C 统计实收(当月的所有实收)
新房
<ul><li>1 根据收款时间查询<font color="#16884a">结算月</font>新房实收单(审核通过的)</li></ul>
2 遍历实收单,获取对应的新房交易单
单独员工方法复用,用来获取员工订单数量统计项,传入map,staffId,返回一个object,方法内处理为空的情况,优秀。getOrderCountStat
3 获取合同数量统计对象,value值 +1<br>
4 根据新房交易单获取业绩分成对象,遍历
A 将有实收的员工加到要统计工资单的员工map中(payingStaffs)<br>
B 计算分成人的分成业绩,通过staffId和签约时间(签约月)获取本月(结算月)的实收统计对象(ReceivedStat),累加新房分成业绩、总分成业绩<br>
C 判读当前分成人有无主管、店长、区经、大区,如果有则一并将业绩累加上去
<font color="#c41230">D 未统计实付!!!</font>
2.第一次循环
遍历所有payingStaffs<br>
<font color="#c41230">判断职级是否为空??为了删选什么??测试人员??</font><br>
a.构建初始数据,响应数据
构建初始数据
设置当前staffId,起始时间,当月考勤天数,工资结算规则<br>
传入之前所有的实收统计结果(一个总的【staffReceivedStatMap】,其余是当前用户相关的实收统计)<br>
结算方案,职级薪资配置对象,部门,所有员工<br>
当前员工的异动记录,当前员工的结算月员工统计数据(考勤天数,开端口数)
员工所有的育成人,店长,区经等关联关系map<br>
响应数据
初始化工资单对象(HrPayroll),设置基本参数<br>
工资单分项map
Map<Date, HrPayrollItem> payrollItemMap
Map<签约月, 工资单分项> 比工资单多【签约月、结算月、结算月贡献给推荐人的金额】
b.将数据加入到基础责任链中循环