90662047
张志伟
feature(*): 薪资计算
|
1
2
|
package cn.fw.morax.service.biz.calculator.salary;
|
ac814d59
姜超
feature(bug): 搜索...
|
3
|
import cn.fw.morax.common.utils.DateUtil;
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
4
5
|
import cn.fw.morax.domain.db.salary.*;
import cn.fw.morax.domain.enums.ExtraSalaryTypeEnum;
|
90662047
张志伟
feature(*): 薪资计算
|
6
|
import cn.fw.morax.domain.enums.SalaryCalMethodEnum;
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
7
|
import cn.fw.morax.domain.enums.SalaryTypeEnum;
|
e5ed7b64
张志伟
feature(*): 薪资计算(...
|
8
|
import cn.fw.morax.service.data.salary.SalaryExtraProjectService;
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
9
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
90662047
张志伟
feature(*): 薪资计算
|
10
|
import lombok.extern.slf4j.Slf4j;
|
e5ed7b64
张志伟
feature(*): 薪资计算(...
|
11
|
import org.springframework.beans.factory.annotation.Autowired;
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
12
|
import org.springframework.lang.NonNull;
|
90662047
张志伟
feature(*): 薪资计算
|
13
14
15
|
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
16
17
18
19
|
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.util.ArrayList;
|
ac814d59
姜超
feature(bug): 搜索...
|
20
|
import java.util.HashSet;
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
21
22
|
import java.util.List;
import java.util.Optional;
|
ac814d59
姜超
feature(bug): 搜索...
|
23
|
import java.util.stream.Collectors;
|
90662047
张志伟
feature(*): 薪资计算
|
24
25
26
27
28
29
30
31
32
33
34
|
/**
* @author : kurisu
* @version : 1.0
* @className : DynamicSalaryCalculator
* @description : 动态薪资计算器
* @date : 2022-04-27 10:37
*/
@Component
@Slf4j
public class DynamicSalaryCalculator extends SalaryBaseCalculator {
|
e5ed7b64
张志伟
feature(*): 薪资计算(...
|
35
36
37
38
39
40
41
42
|
private final SalaryExtraProjectService salaryExtraProjectService;
@Autowired
public DynamicSalaryCalculator(final SalaryExtraProjectService salaryExtraProjectService) {
this.salaryExtraProjectService = salaryExtraProjectService;
}
|
90662047
张志伟
feature(*): 薪资计算
|
43
44
|
@Override
public BigDecimal calculate(SalaryGroupProject param1, SalaryGroupUser param2) {
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
45
46
|
// 用不到这个计算器
// 动态金额类不在此计算
|
90662047
张志伟
feature(*): 薪资计算
|
47
48
49
|
return null;
}
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
50
51
52
53
|
@Override
public SalaryPoolDetail calcDynamicMoney(@NonNull SalaryPool pool, @NonNull LocalDate date, @NonNull ExtraSalaryTypeEnum extraSalaryTypeEnum) {
SalaryPoolDetail poolDetail = createDetail(pool, date, extraSalaryTypeEnum);
|
6a050328
张志伟
feature(*): 完善薪酬绩...
|
54
|
List<SalaryExtraProject> projectList = queryProjectList(pool, date, extraSalaryTypeEnum);
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
55
56
57
58
|
calculate(poolDetail, projectList);
return poolDetail;
}
|
90662047
张志伟
feature(*): 薪资计算
|
59
60
61
62
|
@Override
public SalaryCalMethodEnum getCalMethod() {
return SalaryCalMethodEnum.DYNAMIC;
}
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
63
64
|
private void calculate(SalaryPoolDetail poolDetail, List<SalaryExtraProject> projectList) {
|
2a2c111e
张志伟
|
65
|
BigDecimal actualSalaryAmount = projectList.stream()
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
66
67
68
|
.filter(r -> !Boolean.TRUE.equals(r.getTimely()))
.map(SalaryExtraProject::getMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
2a2c111e
张志伟
|
69
|
BigDecimal processedAmount = projectList.stream()
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
70
71
72
73
74
75
76
77
78
79
80
81
82
|
.filter(r -> Boolean.TRUE.equals(r.getTimely()))
.map(SalaryExtraProject::getMoney)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal expectedAmount = actualSalaryAmount.add(processedAmount);
poolDetail.setSalaryAmount(expectedAmount);
poolDetail.setProcessedAmount(processedAmount);
poolDetail.setActualSalaryAmount(actualSalaryAmount);
}
/**
* 查询额外薪资记录
*
|
6a050328
张志伟
feature(*): 完善薪酬绩...
|
83
|
* @param pool
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
84
85
86
87
|
* @param date
* @param extraSalaryTypeEnum
* @return
*/
|
6a050328
张志伟
feature(*): 完善薪酬绩...
|
88
|
private List<SalaryExtraProject> queryProjectList(SalaryPool pool, LocalDate date, ExtraSalaryTypeEnum extraSalaryTypeEnum) {
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
89
90
|
LocalDate startTime = YearMonth.from(date).minusMonths(1L).atEndOfMonth();
LocalDateTime endTime = date.plusDays(1L).atStartOfDay();
|
ac814d59
姜超
feature(bug): 搜索...
|
91
92
93
94
95
96
97
98
|
//调岗前后还是同一个薪酬组,不算调岗。搜索调岗之前的门店,获取薪酬额外数据
List<SalaryGroupUser> groupUsers = salaryGroupUserService.list(Wrappers.<SalaryGroupUser>lambdaQuery()
.eq(SalaryGroupUser::getSalaryGroupId, pool.getSalaryGroupId())
.eq(SalaryGroupUser::getPostId, pool.getPostId())
.eq(SalaryGroupUser::getUserId, pool.getUserId())
.ge(SalaryGroupUser::getDataDate, startTime)
.le(SalaryGroupUser::getDataDate, date)
|
9018197b
姜超
feature(bug): 搜索...
|
99
|
.eq(SalaryGroupUser::getYn, Boolean.TRUE)
|
ac814d59
姜超
feature(bug): 搜索...
|
100
101
102
|
);
List<Long> shopIds = groupUsers.stream().map(SalaryGroupUser::getShopId).distinct().collect(Collectors.toList());
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
103
|
List<SalaryExtraProject> list = salaryExtraProjectService.list(Wrappers.<SalaryExtraProject>lambdaQuery()
|
6a050328
张志伟
feature(*): 完善薪酬绩...
|
104
|
.eq(SalaryExtraProject::getPostId, pool.getPostId())
|
ac814d59
姜超
feature(bug): 搜索...
|
105
|
.in(SalaryExtraProject::getShopId, shopIds)
|
8515e19e
姜超
feature(salary): ...
|
106
|
.eq(SalaryExtraProject::getUserId, pool.getUserId())
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
107
108
109
|
.eq(SalaryExtraProject::getSalaryType, extraSalaryTypeEnum)
.gt(SalaryExtraProject::getDataDate, startTime)
.lt(SalaryExtraProject::getDataDate, endTime)
|
a44a8569
姜超
feature(morax): 薪...
|
110
|
.eq(SalaryExtraProject::getYn, Boolean.TRUE)
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
);
return Optional.ofNullable(list).orElse(new ArrayList<>());
}
/**
* 创建实体
*
* @param pool
* @param date
* @param extraSalaryTypeEnum
* @return
*/
private SalaryPoolDetail createDetail(SalaryPool pool, LocalDate date, ExtraSalaryTypeEnum extraSalaryTypeEnum) {
SalaryPoolDetail poolDetail = new SalaryPoolDetail();
SalaryTypeEnum salaryTypeEnum = extraSalaryTypeTransform(extraSalaryTypeEnum);
poolDetail.setSalaryPoolId(pool.getId());
poolDetail.setType(salaryTypeEnum);
poolDetail.setSalaryAmount(BigDecimal.ZERO);
poolDetail.setProcessedAmount(BigDecimal.ZERO);
poolDetail.setActualSalaryAmount(BigDecimal.ZERO);
poolDetail.setSalaryDate(date);
poolDetail.setGroupId(pool.getGroupId());
poolDetail.setYn(Boolean.TRUE);
return poolDetail;
}
/**
* 枚举类型转换
*
* @param extraSalaryTypeEnum
* @return
*/
private SalaryTypeEnum extraSalaryTypeTransform(ExtraSalaryTypeEnum extraSalaryTypeEnum) {
SalaryTypeEnum salaryTypeEnum = SalaryTypeEnum.AWARD;
switch (extraSalaryTypeEnum) {
case PENALTY:
salaryTypeEnum = SalaryTypeEnum.PENALTY;
break;
case NECESSARY:
salaryTypeEnum = SalaryTypeEnum.NECESSARY;
break;
case SUBSIDY:
salaryTypeEnum = SalaryTypeEnum.SUBSIDY;
break;
|
bebd53c0
姜超
feature(*): 动态计算 ...
|
155
156
157
|
case PERSON_TAX:
salaryTypeEnum = SalaryTypeEnum.PERSON_TAX;
break;
|
19bd7f47
张志伟
feature(*): 薪资计算(...
|
158
159
160
161
162
|
default:
break;
}
return salaryTypeEnum;
}
|
90662047
张志伟
feature(*): 薪资计算
|
163
|
}
|