5d98df1c
张志伟
feature(*): 开始计算薪资
|
1
2
|
package cn.fw.morax.service.biz.salary;
|
25a37717
张志伟
feature(*): 完成星级变...
|
3
|
import cn.fw.morax.common.utils.StringUtils;
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
4
|
import cn.fw.morax.common.utils.ThreadPoolUtil;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
5
|
import cn.fw.morax.domain.bo.salary.SalaryGroupCalculableBO;
|
2d8a2633
张志伟
feature(*): 薪酬池查询...
|
6
|
import cn.fw.morax.domain.db.kpi.KpiPool;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
7
8
9
10
|
import cn.fw.morax.domain.db.salary.*;
import cn.fw.morax.domain.enums.ExtraSalaryTypeEnum;
import cn.fw.morax.domain.enums.SalaryCalMethodEnum;
import cn.fw.morax.domain.enums.SalaryTypeEnum;
|
90662047
张志伟
feature(*): 薪资计算
|
11
|
import cn.fw.morax.rpc.ehr.EhrRpcService;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
12
|
import cn.fw.morax.service.biz.calculator.salary.SalaryBaseCalculator;
|
742b79d4
姜超
feature(calculato...
|
13
|
import cn.fw.morax.service.biz.kpi.KpiPoolCommonService;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
14
15
|
import cn.fw.morax.service.data.salary.*;
import cn.hutool.core.collection.ListUtil;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
16
17
|
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
18
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
19
|
import lombok.Getter;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
20
|
import lombok.extern.slf4j.Slf4j;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
21
|
import org.springframework.beans.factory.annotation.Autowired;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
22
|
import org.springframework.beans.factory.annotation.Value;
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
23
|
import org.springframework.data.redis.core.BoundSetOperations;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
24
25
|
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
|
90662047
张志伟
feature(*): 薪资计算
|
26
|
import org.springframework.transaction.annotation.Transactional;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
27
|
|
90662047
张志伟
feature(*): 薪资计算
|
28
29
|
import java.math.BigDecimal;
import java.math.RoundingMode;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
30
|
import java.time.LocalDate;
|
90662047
张志伟
feature(*): 薪资计算
|
31
|
import java.time.YearMonth;
|
2806f8ef
姜超
feature(bug): 计算...
|
32
33
|
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
34
|
import java.util.*;
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
35
36
|
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
37
|
import java.util.stream.Collectors;
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
38
39
|
import static cn.fw.common.businessvalidator.Validator.BV;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
40
41
42
43
44
45
46
47
48
|
/**
* @author : kurisu
* @version : 1.0
* @className : SalaryCalcService
* @description : 薪资计算类
* @date : 2022-04-25 16:24
*/
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
49
50
51
|
@Slf4j
@Service
public class SalaryCalcService {
|
af367da5
张志伟
|
52
|
private final SalaryGeneralSettinService salaryGeneralSettinService;
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
53
54
55
|
private final SalaryGroupService salaryGroupService;
private final SalaryGroupUserService salaryGroupUserService;
private final SalaryPoolService salaryPoolService;
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
56
|
private final SalaryGroupProjectService salaryGroupProjectService;
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
57
|
private final StringRedisTemplate stringRedisTemplate;
|
90662047
张志伟
feature(*): 薪资计算
|
58
|
private final EhrRpcService ehrRpcService;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
59
|
private final SalaryPoolDetailService salaryPoolDetailService;
|
742b79d4
姜超
feature(calculato...
|
60
61
|
private final SalaryPoolCommonService salaryPoolCommonService;
private final KpiPoolCommonService kpiPoolCommonService;
|
af367da5
张志伟
|
62
|
private final SalaryConfirmBizService salaryConfirmBizService;
|
4020c162
张志伟
feature(*): 对接财务 ...
|
63
|
private static final List<ExtraSalaryTypeEnum> EXTRA_SALARY_TYPE_ENUM_LIST = ListUtil.toList(ExtraSalaryTypeEnum.AWARD, ExtraSalaryTypeEnum.PENALTY,
|
bebd53c0
姜超
feature(*): 动态计算 ...
|
64
|
ExtraSalaryTypeEnum.NECESSARY, ExtraSalaryTypeEnum.SUBSIDY, ExtraSalaryTypeEnum.PERSON_TAX);
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
65
66
67
|
@Value("${spring.cache.custom.global-prefix}:calculable:salary-group")
@Getter
private String calculableSalaryKey;
|
25a37717
张志伟
feature(*): 完成星级变...
|
68
69
70
71
72
73
|
/**
* 绩效变动导致重新计算工资的缓存key
*/
@Value("${spring.cache.custom.global-prefix}:salary-change:salary-recalculate")
@Getter
private String retrySalaryCalcKey;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
74
75
76
|
private final Map<SalaryCalMethodEnum, SalaryBaseCalculator> calculatorMap;
@Autowired
|
af367da5
张志伟
|
77
78
|
public SalaryCalcService(final SalaryGeneralSettinService salaryGeneralSettinService,
final SalaryGroupService salaryGroupService,
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
79
80
81
82
|
final SalaryGroupUserService salaryGroupUserService,
final SalaryPoolService salaryPoolService,
final SalaryPoolDetailService salaryPoolDetailService,
final SalaryGroupProjectService salaryGroupProjectService,
|
742b79d4
姜超
feature(calculato...
|
83
84
|
final SalaryPoolCommonService salaryPoolCommonService,
final KpiPoolCommonService kpiPoolCommonService,
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
85
|
final StringRedisTemplate stringRedisTemplate, EhrRpcService ehrRpcService,
|
af367da5
张志伟
|
86
|
final SalaryConfirmBizService salaryConfirmBizService,
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
87
|
final List<SalaryBaseCalculator> salaryCalculatorList) {
|
af367da5
张志伟
|
88
|
this.salaryGeneralSettinService = salaryGeneralSettinService;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
89
90
91
92
93
|
this.salaryGroupService = salaryGroupService;
this.salaryGroupUserService = salaryGroupUserService;
this.salaryPoolService = salaryPoolService;
this.salaryPoolDetailService = salaryPoolDetailService;
this.salaryGroupProjectService = salaryGroupProjectService;
|
742b79d4
姜超
feature(calculato...
|
94
95
|
this.salaryPoolCommonService = salaryPoolCommonService;
this.kpiPoolCommonService = kpiPoolCommonService;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
96
97
|
this.stringRedisTemplate = stringRedisTemplate;
this.ehrRpcService = ehrRpcService;
|
af367da5
张志伟
|
98
|
this.salaryConfirmBizService = salaryConfirmBizService;
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
99
100
|
this.calculatorMap = salaryCalculatorList.stream().collect(Collectors.toMap(SalaryBaseCalculator::getCalMethod, v -> v));
}
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
101
102
103
104
105
106
107
|
/**
* 准备计算薪酬
*
* @param localDate
*/
public void prepareCalcSalary(final LocalDate localDate) {
|
6a050328
张志伟
feature(*): 完善薪酬绩...
|
108
|
Set<Long> ids = salaryGroupService.querySalaryGroupIdByDay(localDate);
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
109
110
111
|
if (CollectionUtils.isEmpty(ids)) {
return;
}
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
112
|
String[] array = ids.stream()
|
bebd53c0
姜超
feature(*): 动态计算 ...
|
113
114
115
116
117
118
|
.map(salaryGroupId -> new SalaryGroupCalculableBO(salaryGroupId, localDate, Boolean.TRUE))
.map(JSONObject::toJSONString)
.toArray(String[]::new);
stringRedisTemplate.opsForSet().add(getCalculableSalaryKey(), array);
}
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
119
|
|
bebd53c0
姜超
feature(*): 动态计算 ...
|
120
|
/**
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
121
122
123
|
* 计算薪资
*/
public void calculateSalary() {
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
124
125
126
127
128
129
130
131
132
133
|
BoundSetOperations<String, String> setOps = stringRedisTemplate.boundSetOps(getCalculableSalaryKey());
ThreadPoolExecutor threadPool = ThreadPoolUtil.getInstance().getThreadPool();
List<String> overflowsList = new ArrayList<>();
String str;
while ((str = setOps.pop()) != null) {
final SalaryGroupCalculableBO bo = JSONObject.parseObject(str, SalaryGroupCalculableBO.class);
if (Objects.isNull(bo)) {
continue;
}
try {
|
a8289dd2
姜超
feature(*): 绩效详情接口修改
|
134
135
136
137
138
139
140
141
142
|
String finalStr = str;
threadPool.execute(() -> {
try {
calculateSalary(bo);
} catch (Exception e) {
log.error("计算薪资数据失败:{}", bo, e);
setOps.add(finalStr);
}
});
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
143
144
|
} catch (RejectedExecutionException re) {
overflowsList.add(str);
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
145
|
}
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
}
if (!CollectionUtils.isEmpty(overflowsList)) {
for (String s : overflowsList) {
setOps.add(s);
}
}
}
/**
* 计算薪资数据
*
* @param bo
*/
public void calculateSalary(SalaryGroupCalculableBO bo) {
final Long salaryGroupId = bo.getSalaryGroupId();
final LocalDate localDate = bo.getLocalDate();
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
162
|
final boolean calcTotal = Boolean.TRUE.equals(bo.getCalcTotal());
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
163
|
SalaryGroup salaryGroup = salaryGroupService.getById(salaryGroupId);
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
164
165
166
167
|
if (Objects.isNull(salaryGroup)) {
log.error("薪酬组[{}]不存在", salaryGroupId);
return;
}
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
168
|
if (!Boolean.TRUE.equals(salaryGroup.getYn())) {
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
169
|
log.error("无法计算被删除的薪酬组数据: [{}]", salaryGroup.getId());
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
170
171
|
return;
}
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
172
|
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
173
174
175
176
177
178
|
List<SalaryGroupUser> userList = salaryGroupUserService.list(Wrappers.<SalaryGroupUser>lambdaQuery()
.eq(SalaryGroupUser::getSalaryGroupId, salaryGroupId)
.eq(SalaryGroupUser::getDataDate, localDate)
.eq(SalaryGroupUser::getYn, Boolean.TRUE)
);
if (CollectionUtils.isEmpty(userList)) {
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
179
|
log.error("薪酬组[{}]不包含任何员工", salaryGroupId);
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
180
181
182
|
return;
}
for (SalaryGroupUser salaryUser : userList) {
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
183
|
calcUserSalary(salaryUser, calcTotal);
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
184
185
186
187
|
}
}
/**
|
25a37717
张志伟
feature(*): 完成星级变...
|
188
189
190
191
192
193
194
195
196
197
|
* 绩效变动导致的用户薪酬重新计算准备
*/
public void retryCalcSalary() {
final String salaryCalcKey = getRetrySalaryCalcKey();
BoundSetOperations<String, String> setOps = stringRedisTemplate.boundSetOps(salaryCalcKey);
List<String> failList = new ArrayList<>();
String str;
while ((str = setOps.pop()) != null) {
try {
if (StringUtils.isNumber(str)) {
|
af367da5
张志伟
|
198
|
retryCalcUserSalary(Long.valueOf(str));
|
25a37717
张志伟
feature(*): 完成星级变...
|
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
}
} catch (Exception ex) {
log.error("重新计算薪资数据失败:[{}]", str, ex);
failList.add(str);
}
}
if (!CollectionUtils.isEmpty(failList)) {
for (String s : failList) {
setOps.add(s);
}
}
}
/**
|
af367da5
张志伟
|
213
|
* 手动 计算人员薪资
|
25a37717
张志伟
feature(*): 完成星级变...
|
214
215
216
217
218
219
220
221
222
223
224
225
226
|
*
* @param salaryGroupUserId
* @param calcTotal
*/
public void calcUserSalary(Long salaryGroupUserId, boolean calcTotal) {
SalaryGroupUser user = salaryGroupUserService.getById(salaryGroupUserId);
if (Objects.isNull(user) || !Boolean.TRUE.equals(user.getYn())) {
return;
}
calcUserSalary(user, calcTotal);
}
/**
|
af367da5
张志伟
|
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
|
* 申述后重新计算人员薪资
*
* @param salaryGroupUserId
*/
public void retryCalcUserSalary(Long salaryGroupUserId) {
SalaryGroupUser user = salaryGroupUserService.getById(salaryGroupUserId);
if (Objects.isNull(user) || !Boolean.TRUE.equals(user.getYn())) {
return;
}
final Long groupId = user.getGroupId();
SalaryGeneralSettin settin = salaryGeneralSettinService.getOne(Wrappers.<SalaryGeneralSettin>lambdaQuery()
.eq(SalaryGeneralSettin::getYn, Boolean.TRUE)
.eq(SalaryGeneralSettin::getGroupId, groupId)
, Boolean.FALSE);
if (Objects.isNull(settin)) {
settin = salaryGeneralSettinService.initData(groupId);
}
String datesOfAppeal = Optional.ofNullable(settin.getDatesOfAppeal()).orElse("3,5");
int payoffDay = Optional.ofNullable(settin.getPayoffDate()).orElse(15);
int dayOfMonth = LocalDate.now().getDayOfMonth();
if (dayOfMonth >= payoffDay) {
log.error("绩效组人员[{}]_已经超过工资发放时间,无法重新计算", user.getId());
return;
}
String[] daysArr = datesOfAppeal.split(",");
int startDay = Integer.parseInt(daysArr[0]);
int endDay = Integer.parseInt(daysArr[1]);
if (dayOfMonth < startDay || dayOfMonth > endDay) {
log.error("绩效组人员[{}]_已经超过申述时间,无法重新计算", user.getId());
return;
}
SalaryPool pool = salaryPoolCommonService.inspectionPool(user);
|
d6c6c804
张志伟
|
259
260
|
if (Boolean.TRUE.equals(pool.getPaid())) {
log.error("绩效组人员[{}] 工资已经发放,无法计算", user.getId());
|
af367da5
张志伟
|
261
262
263
|
return;
}
calcUserSalary(pool, user, true);
|
d6c6c804
张志伟
|
264
|
salaryConfirmBizService.retryCreateSalaryConfirmTodo(pool, user, payoffDay);
|
af367da5
张志伟
|
265
266
267
|
}
/**
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
268
269
270
|
* 计算用户薪资
*
* @param user
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
271
|
*/
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
272
|
public void calcUserSalary(SalaryGroupUser user, boolean calcTotal) {
|
742b79d4
姜超
feature(calculato...
|
273
|
SalaryPool pool = salaryPoolCommonService.inspectionPool(user);
|
25a37717
张志伟
feature(*): 完成星级变...
|
274
|
if (Boolean.TRUE.equals(pool.getRegular()) || Boolean.TRUE.equals(pool.getPaid())) {
|
af367da5
张志伟
|
275
|
log.error("绩效组人员[{}] 已确认工资明细或工资已经发放,无法计算", user.getId());
|
25a37717
张志伟
feature(*): 完成星级变...
|
276
277
|
return;
}
|
af367da5
张志伟
|
278
279
280
281
282
283
284
285
286
287
|
calcUserSalary(pool, user, calcTotal);
}
/**
* 计算用户薪资
*
* @param user
*/
@Transactional(rollbackFor = Exception.class)
public void calcUserSalary(SalaryPool pool, SalaryGroupUser user, boolean calcTotal) {
|
90662047
张志伟
feature(*): 薪资计算
|
288
|
final Long salaryGroupId = user.getSalaryGroupId();
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
289
|
final LocalDate dataDate = user.getDataDate();
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
290
|
List<SalaryGroupProject> salaryProjectList = salaryGroupProjectService.list(Wrappers.<SalaryGroupProject>lambdaQuery()
|
90662047
张志伟
feature(*): 薪资计算
|
291
|
.eq(SalaryGroupProject::getSalaryGroupId, salaryGroupId)
|
bb9bf27c
张志伟
feature(*): 修复启动报错
|
292
293
|
.eq(SalaryGroupProject::getYn, Boolean.TRUE)
);
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
294
295
296
297
|
if (CollectionUtils.isEmpty(salaryProjectList)) {
log.error("薪酬组[{}]薪酬项未配置", salaryGroupId);
return;
}
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
298
|
List<SalaryPoolDetail> detailList = new ArrayList<>();
|
2cfad1cf
姜超
fix(*): 试用期员工不参与薪酬计算
|
299
300
301
302
|
if (user.getProbationer()) {
calcProbationSalary(pool, detailList, user);
} else {
calcPushMoney(salaryProjectList, user, pool, detailList);
|
2cfad1cf
姜超
fix(*): 试用期员工不参与薪酬计算
|
303
|
}
|
e5013ab1
姜超
fix(*): 保存薪酬扣款修改
|
304
|
calcExtraMoney(pool, dataDate, detailList);
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
305
306
|
saveSalaryPoolDetails(detailList, pool.getId(), dataDate);
if (calcTotal) {
|
d5758476
姜超
feature(indicator...
|
307
|
calcTotal(pool, detailList, user);
|
90662047
张志伟
feature(*): 薪资计算
|
308
|
}
|
90662047
张志伟
feature(*): 薪资计算
|
309
310
311
|
}
/**
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
312
313
314
315
316
|
* 计算总金额
*
* @param pool
* @param detailList
*/
|
d5758476
姜超
feature(indicator...
|
317
|
private void calcTotal(SalaryPool pool, List<SalaryPoolDetail> detailList, SalaryGroupUser user) {
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
318
319
320
|
if (CollectionUtils.isEmpty(detailList)) {
return;
}
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
321
|
if (!user.getProbationer()) {
|
d518bacc
姜超
fix(salary): 计算薪资修改
|
322
323
|
KpiPool kpiPool = kpiPoolCommonService.queryPool(pool);
if (Objects.nonNull(kpiPool)) {
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
324
|
pool.setStarLevel(kpiPool.getActualStar());
|
d518bacc
姜超
fix(salary): 计算薪资修改
|
325
|
}
|
2d8a2633
张志伟
feature(*): 薪酬池查询...
|
326
|
}
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
327
328
329
|
BigDecimal total = BigDecimal.ZERO;
for (SalaryPoolDetail detail : detailList) {
BigDecimal actualSalaryAmount = detail.getActualSalaryAmount();
|
022c7dcd
张志伟
feature(*): 薪资数据上...
|
330
331
|
SalaryTypeEnum salaryType = detail.getType();
total = salaryType.isPlus() ? total.add(actualSalaryAmount) : total.subtract(actualSalaryAmount);
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
332
333
|
}
pool.setReward(total);
|
d5758476
姜超
feature(indicator...
|
334
|
pool.setDataDate(user.getDataDate());
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
335
336
337
338
339
340
341
342
|
salaryPoolService.updateById(pool);
}
/**
* 保存薪资明细
*
* @param detailList
*/
|
25a37717
张志伟
feature(*): 完成星级变...
|
343
|
private void saveSalaryPoolDetails(List<SalaryPoolDetail> detailList, Long poolId, LocalDate date) {
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
344
345
346
347
348
349
350
351
352
|
if (CollectionUtils.isEmpty(detailList)) {
return;
}
salaryPoolDetailService.remove(Wrappers.<SalaryPoolDetail>lambdaQuery()
.eq(SalaryPoolDetail::getSalaryPoolId, poolId)
.eq(SalaryPoolDetail::getSalaryDate, date)
);
salaryPoolDetailService.saveBatch(detailList);
}
|
90662047
张志伟
feature(*): 薪资计算
|
353
354
|
/**
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
355
|
* 计算绩效金额
|
90662047
张志伟
feature(*): 薪资计算
|
356
|
*
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
357
|
* @param salaryProjectList
|
90662047
张志伟
feature(*): 薪资计算
|
358
|
* @param user
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
359
360
|
* @param pool
* @param detailList
|
90662047
张志伟
feature(*): 薪资计算
|
361
|
*/
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
362
|
private void calcPushMoney(List<SalaryGroupProject> salaryProjectList, SalaryGroupUser user, SalaryPool pool, List<SalaryPoolDetail> detailList) {
|
9c8be510
张志伟
|
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
|
for (SalaryGroupProject salaryGroupProject : salaryProjectList) {
final String salaryProjectName = salaryGroupProject.getName();
SalaryBaseCalculator calculator = calculatorMap.get(salaryGroupProject.getCalMethod());
if (Objects.isNull(calculator)) {
log.error("[{}_{}]计算器不存在", salaryGroupProject.getId(), salaryProjectName);
return;
}
final BigDecimal salaryMoney = calculator.calculate(salaryGroupProject, user);
if (Objects.nonNull(salaryMoney)) {
SalaryPoolDetail detail = createDetail(pool, user.getDataDate());
detail.setSalaryGroupProjectId(salaryGroupProject.getId());
detail.setSalaryGroupProjectName(salaryProjectName);
detail.setSalaryAmount(salaryMoney);
detail.setActualSalaryAmount(salaryMoney);
detailList.add(detail);
}
}
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
380
|
}
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
381
|
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
382
383
384
385
386
387
388
389
390
391
392
393
394
395
|
/**
* 计算额外金额
*
* @param pool
* @param date
* @param detailList
*/
private void calcExtraMoney(SalaryPool pool, LocalDate date, List<SalaryPoolDetail> detailList) {
SalaryBaseCalculator calculator = calculatorMap.get(SalaryCalMethodEnum.DYNAMIC);
BV.notNull(calculator, () -> "动态金额计算器不存在");
for (ExtraSalaryTypeEnum extraSalaryTypeEnum : EXTRA_SALARY_TYPE_ENUM_LIST) {
SalaryPoolDetail salaryPoolDetail = calculator.calcDynamicMoney(pool, date, extraSalaryTypeEnum);
detailList.add(salaryPoolDetail);
}
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
396
397
|
}
|
90662047
张志伟
feature(*): 薪资计算
|
398
399
400
|
/**
* 计算试用期工资
*
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
401
402
|
* @param pool
* @param detailList
|
90662047
张志伟
feature(*): 薪资计算
|
403
404
|
* @param user
*/
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
405
|
private void calcProbationSalary(SalaryPool pool, List<SalaryPoolDetail> detailList, SalaryGroupUser user) {
|
90662047
张志伟
feature(*): 薪资计算
|
406
407
|
int count = salaryGroupUserService.count(Wrappers.<SalaryGroupUser>lambdaQuery()
.eq(SalaryGroupUser::getUserId, user.getUserId())
|
6a050328
张志伟
feature(*): 完善薪酬绩...
|
408
409
|
.eq(SalaryGroupUser::getPostId, user.getPostId())
.eq(SalaryGroupUser::getShopId, user.getShopId())
|
90662047
张志伟
feature(*): 薪资计算
|
410
|
.eq(SalaryGroupUser::getProbationer, Boolean.TRUE)
|
e5ed7b64
张志伟
feature(*): 薪资计算(...
|
411
|
.eq(SalaryGroupUser::getFrozen, Boolean.FALSE)
|
90662047
张志伟
feature(*): 薪资计算
|
412
|
.eq(SalaryGroupUser::getYn, Boolean.TRUE)
|
2806f8ef
姜超
feature(bug): 计算...
|
413
|
.ge(SalaryGroupUser::getDataDate, user.getDataDate().with(TemporalAdjusters.firstDayOfMonth()))
|
90662047
张志伟
feature(*): 薪资计算
|
414
415
416
|
.le(SalaryGroupUser::getDataDate, user.getDataDate())
);
if (count <= 0) {
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
417
|
return;
|
90662047
张志伟
feature(*): 薪资计算
|
418
|
}
|
90662047
张志伟
feature(*): 薪资计算
|
419
|
int lengthOfMonth = YearMonth.from(user.getDataDate()).lengthOfMonth();
|
e9fe2ca9
姜超
fix(salarycalcser...
|
420
|
BigDecimal dayP = new BigDecimal(count).divide(new BigDecimal(lengthOfMonth), 2, RoundingMode.HALF_UP);
|
90662047
张志伟
feature(*): 薪资计算
|
421
422
|
BigDecimal baseValue = ehrRpcService.queryProbationerSalary(user.getUserId(), user.getDataDate());
BV.notNull(baseValue, () -> "试用期工资查询失败");
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
423
424
425
426
427
428
|
BigDecimal probationSalary = baseValue.multiply(dayP).divide(BigDecimal.ONE, 2, RoundingMode.HALF_UP);
SalaryPoolDetail detail = createDetail(pool, user.getDataDate());
detail.setType(SalaryTypeEnum.PROBATION);
detail.setSalaryAmount(probationSalary);
detail.setActualSalaryAmount(probationSalary);
detailList.add(detail);
|
90662047
张志伟
feature(*): 薪资计算
|
429
|
}
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
430
|
|
d4c9039b
张志伟
feature(*): 薪资计算(...
|
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
|
/**
* 创建实体
*
* @param pool
* @param date
* @return
*/
private SalaryPoolDetail createDetail(SalaryPool pool, LocalDate date) {
SalaryPoolDetail poolDetail = new SalaryPoolDetail();
poolDetail.setSalaryPoolId(pool.getId());
poolDetail.setType(SalaryTypeEnum.ROYALTIES);
poolDetail.setProcessedAmount(BigDecimal.ZERO);
poolDetail.setSalaryAmount(BigDecimal.ZERO);
poolDetail.setActualSalaryAmount(BigDecimal.ZERO);
poolDetail.setSalaryDate(date);
poolDetail.setGroupId(pool.getGroupId());
poolDetail.setYn(Boolean.TRUE);
return poolDetail;
}
|
2f26f193
姜超
feature(*): 个税导入、...
|
450
|
|
5d98df1c
张志伟
feature(*): 开始计算薪资
|
451
|
}
|