|
@@ -16,6 +16,7 @@ import kd.bos.util.StringUtils;
|
|
|
import kd.sdk.plugin.Plugin;
|
|
import kd.sdk.plugin.Plugin;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
import java.time.Instant;
|
|
import java.time.Instant;
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
import java.time.Period;
|
|
import java.time.Period;
|
|
@@ -254,35 +255,13 @@ public class DelayedRetirementDateCalcTask extends AbstractTask implements Plug
|
|
|
List<Long> employeeIDs = employeeFileMaps.keySet().stream().collect(Collectors.toList());
|
|
List<Long> employeeIDs = employeeFileMaps.keySet().stream().collect(Collectors.toList());
|
|
|
|
|
|
|
|
///查询 干部信息
|
|
///查询 干部信息
|
|
|
- QFilter filter7 = new QFilter("iscurrentdata", QCP.equals, true); // 启用
|
|
|
|
|
- //QFilter filter8 = new QFilter("datastatus", QCP.equals, "1"); // 启用
|
|
|
|
|
- QFilter filter9 = new QFilter("employee.id", QCP.in, employeeIDs);
|
|
|
|
|
|
|
+ Map<Long, DynamicObject> empposorgreMap = getEmpposorgrel(employeeIDs);
|
|
|
|
|
|
|
|
- String selectFields1 = "id,employee.id,employee.number,position.nckd_jobseq.number";
|
|
|
|
|
- DynamicObjectCollection empposorgreDyns = QueryServiceHelper.query("hrpi_empposorgrel", selectFields1, new QFilter[]{filter7 ,filter9});
|
|
|
|
|
-
|
|
|
|
|
- Map<Long, DynamicObject> empposorgreMap = (Map)empposorgreDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
|
|
- return obj.getLong("employee.id");
|
|
|
|
|
- }, (obj) -> {
|
|
|
|
|
- return obj;
|
|
|
|
|
- }, (k1, k2) -> {
|
|
|
|
|
- return k1;
|
|
|
|
|
- }));
|
|
|
|
|
-
|
|
|
|
|
- QFilter filter11 = new QFilter("iscurrentversion", QCP.equals, true); // 启用
|
|
|
|
|
- QFilter filter12 = new QFilter("datastatus", QCP.equals, "1"); // 启用
|
|
|
|
|
- QFilter filter13 = new QFilter("id", QCP.in, employeeIDs);
|
|
|
|
|
// 查人员基础信息中的性别
|
|
// 查人员基础信息中的性别
|
|
|
- String selectFields2="id,number,name,birthday,gender.masterid";
|
|
|
|
|
- DynamicObjectCollection personDyns = QueryServiceHelper.query("hrpi_employee", selectFields2,new QFilter[]{filter11, filter12, filter13});
|
|
|
|
|
|
|
+ Map<Long, DynamicObject> personMap = getEmployeeInfo(employeeIDs);
|
|
|
|
|
|
|
|
- Map<Long, DynamicObject> personMap = (Map)personDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
|
|
- return obj.getLong("id");
|
|
|
|
|
- }, (obj) -> {
|
|
|
|
|
- return obj;
|
|
|
|
|
- }, (k1, k2) -> {
|
|
|
|
|
- return k1;
|
|
|
|
|
- }));
|
|
|
|
|
|
|
+ //查询特殊工种的计算
|
|
|
|
|
+ Map<Long, DynamicObject> specialWorkersMap = getSpecialWorkers(employeeIDs);
|
|
|
|
|
|
|
|
ArrayList<DynamicObject> perList = new ArrayList<>();
|
|
ArrayList<DynamicObject> perList = new ArrayList<>();
|
|
|
for (DynamicObject data : datas) {
|
|
for (DynamicObject data : datas) {
|
|
@@ -319,12 +298,31 @@ public class DelayedRetirementDateCalcTask extends AbstractTask implements Plug
|
|
|
if(personBirthday != null && gender != 0 ){
|
|
if(personBirthday != null && gender != 0 ){
|
|
|
|
|
|
|
|
LocalDate originalRetirementDate = retirementCalculator(personBirthday,gender,jobType);
|
|
LocalDate originalRetirementDate = retirementCalculator(personBirthday,gender,jobType);
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 判断特殊工种的退休时间
|
|
|
|
|
+ */
|
|
|
|
|
+ DynamicObject specialWorkers = specialWorkersMap.get(personId);
|
|
|
|
|
+ boolean isSpecial = false;
|
|
|
|
|
+ if(specialWorkers != null) {
|
|
|
|
|
+ BigDecimal totalMon = specialWorkers.getBigDecimal("nckd_totalmon");
|
|
|
|
|
+ if (totalMon != null && totalMon.compareTo(BigDecimal.ONE) >= 0) {
|
|
|
|
|
+ isSpecial = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if(isSpecial){
|
|
|
|
|
+ // 计算提前5年的退休日期
|
|
|
|
|
+ originalRetirementDate = originalRetirementDate.minusYears(5);
|
|
|
|
|
+ }
|
|
|
Date originalRetirementDate1 = Date.from(originalRetirementDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
Date originalRetirementDate1 = Date.from(originalRetirementDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
if(originalRetirementDate1 != null) {
|
|
if(originalRetirementDate1 != null) {
|
|
|
data.set("nckd_legaldate", originalRetirementDate1);
|
|
data.set("nckd_legaldate", originalRetirementDate1);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
LocalDate delayedRetirementDate = delayedRetirementCalculator(personBirthday,gender,jobType);
|
|
LocalDate delayedRetirementDate = delayedRetirementCalculator(personBirthday,gender,jobType);
|
|
|
|
|
+ if(isSpecial){
|
|
|
|
|
+ // 计算提前5年的退休日期
|
|
|
|
|
+ delayedRetirementDate = delayedRetirementDate.minusYears(5);
|
|
|
|
|
+ }
|
|
|
if(delayedRetirementDate != null ) {
|
|
if(delayedRetirementDate != null ) {
|
|
|
Date delayedRetirementDate1 = Date.from(delayedRetirementDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
Date delayedRetirementDate1 = Date.from(delayedRetirementDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
|
|
|
data.set("nckd_newlegaldate", delayedRetirementDate1);
|
|
data.set("nckd_newlegaldate", delayedRetirementDate1);
|
|
@@ -469,7 +467,74 @@ public class DelayedRetirementDateCalcTask extends AbstractTask implements Plug
|
|
|
* 若员工在特殊工种累计任职时长超过该特殊工种规定的可提前退休标准,可在规定的退休年龄基础上提前5年退休。
|
|
* 若员工在特殊工种累计任职时长超过该特殊工种规定的可提前退休标准,可在规定的退休年龄基础上提前5年退休。
|
|
|
* 若涉及到多段特殊工种任职,须进行折算统计,举例如下:某员工涉及三段特殊工种任职,分别是3年,6年,1年,
|
|
* 若涉及到多段特殊工种任职,须进行折算统计,举例如下:某员工涉及三段特殊工种任职,分别是3年,6年,1年,
|
|
|
* 对应特殊工种可天退休标准为8、9、10,则3/8+6/9+1/10=1.141666667,结果大于1,符合条件,反之就不符合。
|
|
* 对应特殊工种可天退休标准为8、9、10,则3/8+6/9+1/10=1.141666667,结果大于1,符合条件,反之就不符合。
|
|
|
- * /
|
|
|
|
|
|
|
+ * nckd_totalmon字段 已处理以上计算,直接取字段结果
|
|
|
|
|
+ */
|
|
|
|
|
+ public Map<Long, DynamicObject> getSpecialWorkers(List<Long> employeeIDs){
|
|
|
|
|
+
|
|
|
|
|
+ QFilter filter11 = new QFilter("iscurrentdata", QCP.equals, "1"); // 启用
|
|
|
|
|
+ QFilter filter13 = new QFilter("employee.id", QCP.in, employeeIDs);
|
|
|
|
|
+ // 查人员基础信息中的性别
|
|
|
|
|
+ String selectFields2="id,employee.id,nckd_totalmon";
|
|
|
|
|
+ DynamicObjectCollection personDyns = QueryServiceHelper.query("nckd_hrpi_specwrklog", selectFields2,new QFilter[]{filter11, filter13});
|
|
|
|
|
+
|
|
|
|
|
+ Map<Long, DynamicObject> specialWorkersMap = (Map)personDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
|
|
+ return obj.getLong("employee.id");
|
|
|
|
|
+ }, (obj) -> {
|
|
|
|
|
+ return obj;
|
|
|
|
|
+ }, (k1, k2) -> {
|
|
|
|
|
+ return k1;
|
|
|
|
|
+ }));
|
|
|
|
|
+
|
|
|
|
|
+ return specialWorkersMap;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取干部信息
|
|
|
|
|
+ * @param employeeIDs
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public Map<Long, DynamicObject> getEmpposorgrel(List<Long> employeeIDs){
|
|
|
|
|
+
|
|
|
|
|
+ QFilter filter7 = new QFilter("iscurrentdata", QCP.equals, "1"); // 启用
|
|
|
|
|
+ QFilter filter9 = new QFilter("employee.id", QCP.in, employeeIDs);
|
|
|
|
|
+
|
|
|
|
|
+ String selectFields1 = "id,employee.id,employee.number,position.nckd_jobseq.number";
|
|
|
|
|
+ DynamicObjectCollection empposorgreDyns = QueryServiceHelper.query("hrpi_empposorgrel", selectFields1, new QFilter[]{filter7 ,filter9});
|
|
|
|
|
+
|
|
|
|
|
+ Map<Long, DynamicObject> empposorgreMap = (Map)empposorgreDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
|
|
+ return obj.getLong("employee.id");
|
|
|
|
|
+ }, (obj) -> {
|
|
|
|
|
+ return obj;
|
|
|
|
|
+ }, (k1, k2) -> {
|
|
|
|
|
+ return k1;
|
|
|
|
|
+ }));
|
|
|
|
|
+
|
|
|
|
|
+ return empposorgreMap;
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取员工性别
|
|
|
|
|
+ * @param employeeIDs
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public Map<Long, DynamicObject> getEmployeeInfo(List<Long> employeeIDs){
|
|
|
|
|
+ QFilter filter11 = new QFilter("iscurrentversion", QCP.equals, "1"); // 启用
|
|
|
|
|
+ QFilter filter12 = new QFilter("datastatus", QCP.equals, "1"); // 启用
|
|
|
|
|
+ QFilter filter13 = new QFilter("id", QCP.in, employeeIDs);
|
|
|
|
|
+ // 查人员基础信息中的性别
|
|
|
|
|
+ String selectFields2="id,number,name,birthday,gender.masterid";
|
|
|
|
|
+ DynamicObjectCollection personDyns = QueryServiceHelper.query("hrpi_employee", selectFields2,new QFilter[]{filter11, filter12, filter13});
|
|
|
|
|
+
|
|
|
|
|
+ Map<Long, DynamicObject> personMap = (Map)personDyns.stream().collect(Collectors.toMap((obj) -> {
|
|
|
|
|
+ return obj.getLong("id");
|
|
|
|
|
+ }, (obj) -> {
|
|
|
|
|
+ return obj;
|
|
|
|
|
+ }, (k1, k2) -> {
|
|
|
|
|
+ return k1;
|
|
|
|
|
+ }));
|
|
|
|
|
+
|
|
|
|
|
+ return personMap;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 计算年龄
|
|
* 计算年龄
|