|
@@ -1,6 +1,8 @@
|
|
package nckd.jimin.jyyy.hr.wtc.wtam.explugin;
|
|
package nckd.jimin.jyyy.hr.wtc.wtam.explugin;
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
|
|
+
|
|
|
|
+import java.lang.reflect.Field;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.time.chrono.ChronoLocalDate;
|
|
import java.time.chrono.ChronoLocalDate;
|
|
@@ -15,6 +17,7 @@ import kd.sdk.wtc.wtes.business.tie.model.roster.RosterExt;
|
|
import kd.sdk.wtc.wtes.business.tie.model.roster.ShiftSpecExt;
|
|
import kd.sdk.wtc.wtes.business.tie.model.roster.ShiftSpecExt;
|
|
import kd.sdk.wtc.wtes.business.tie.model.roster.ShiftTableSingleExt;
|
|
import kd.sdk.wtc.wtes.business.tie.model.roster.ShiftTableSingleExt;
|
|
import kd.sdk.wtc.wtes.business.tie.model.timebucket.AttBillTimeBucketExt;
|
|
import kd.sdk.wtc.wtes.business.tie.model.timebucket.AttBillTimeBucketExt;
|
|
|
|
+import kd.wtc.wtes.business.ext.model.roster.RosterExtImpl;
|
|
import org.apache.curator.shaded.com.google.common.collect.Sets;
|
|
import org.apache.curator.shaded.com.google.common.collect.Sets;
|
|
/**
|
|
/**
|
|
* Description :出差核算时长计算扩展,处理跨天逻辑,去除休息时长
|
|
* Description :出差核算时长计算扩展,处理跨天逻辑,去除休息时长
|
|
@@ -45,14 +48,18 @@ public class TvlBillTimeBucketSplitExtPluginEx implements TvlBillTimeBucketSplit
|
|
LocalDate date = LocalDate.of(2025,6, 1);
|
|
LocalDate date = LocalDate.of(2025,6, 1);
|
|
while (shiftstartDate.compareTo((ChronoLocalDate)shiftendDate) <= 0) {
|
|
while (shiftstartDate.compareTo((ChronoLocalDate)shiftendDate) <= 0) {
|
|
//正式环境 加个判断 需要大于6-1
|
|
//正式环境 加个判断 需要大于6-1
|
|
- if(shiftstartDate.compareTo(date) < 0) {
|
|
|
|
- log.info("shiftstartDate : " + shiftstartDate);
|
|
|
|
- shiftstartDate = shiftstartDate.plusDays(1L);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
|
|
+// if(shiftstartDate.compareTo(date) < 0) {
|
|
|
|
+// log.info("shiftstartDate : " + shiftstartDate);
|
|
|
|
+// shiftstartDate = shiftstartDate.plusDays(1L);
|
|
|
|
+// continue;
|
|
|
|
+// }
|
|
LocalDateTime shiftStart = this.getshiftStartDateTime(shiftstartDate, shiftTableSingleExt);
|
|
LocalDateTime shiftStart = this.getshiftStartDateTime(shiftstartDate, shiftTableSingleExt);
|
|
LocalDateTime shiftEnd = this.getshiftEndDateTime(shiftstartDate, shiftTableSingleExt);
|
|
LocalDateTime shiftEnd = this.getshiftEndDateTime(shiftstartDate, shiftTableSingleExt);
|
|
LocalDateTime shiftStartNext = this.getshiftStartDateTime(shiftstartDate.plusDays(1L), shiftTableSingleExt);
|
|
LocalDateTime shiftStartNext = this.getshiftStartDateTime(shiftstartDate.plusDays(1L), shiftTableSingleExt);
|
|
|
|
+ if(shiftStart == null || shiftEnd == null || shiftStartNext == null) {
|
|
|
|
+ shiftstartDate = shiftstartDate.plusDays(1L);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
LocalDateTime start = (startDate.compareTo((ChronoLocalDateTime<?>)shiftStart) > 0) ? startDate : shiftStart;
|
|
LocalDateTime start = (startDate.compareTo((ChronoLocalDateTime<?>)shiftStart) > 0) ? startDate : shiftStart;
|
|
LocalDateTime end = (endDate.compareTo((ChronoLocalDateTime<?>)shiftStartNext) < 0) ? endDate : shiftEnd;
|
|
LocalDateTime end = (endDate.compareTo((ChronoLocalDateTime<?>)shiftStartNext) < 0) ? endDate : shiftEnd;
|
|
if (start.compareTo((ChronoLocalDateTime<?>)end) < 0) {
|
|
if (start.compareTo((ChronoLocalDateTime<?>)end) < 0) {
|
|
@@ -71,6 +78,9 @@ public class TvlBillTimeBucketSplitExtPluginEx implements TvlBillTimeBucketSplit
|
|
|
|
|
|
private LocalDateTime getshiftStartDateTime(final LocalDate localDate, final ShiftTableSingleExt shiftTableSingleExt) {
|
|
private LocalDateTime getshiftStartDateTime(final LocalDate localDate, final ShiftTableSingleExt shiftTableSingleExt) {
|
|
final RosterExt rosterExt = shiftTableSingleExt.getRoster(localDate);
|
|
final RosterExt rosterExt = shiftTableSingleExt.getRoster(localDate);
|
|
|
|
+ if(isRosterNull(rosterExt)){
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
final ShiftSpecExt shiftSpecExt = rosterExt.getShiftSpec();
|
|
final ShiftSpecExt shiftSpecExt = rosterExt.getShiftSpec();
|
|
if (shiftSpecExt.isOffNonPlan()) {
|
|
if (shiftSpecExt.isOffNonPlan()) {
|
|
return this.getshiftStartDateTimeNoPlan(localDate, shiftTableSingleExt);
|
|
return this.getshiftStartDateTimeNoPlan(localDate, shiftTableSingleExt);
|
|
@@ -93,6 +103,20 @@ public class TvlBillTimeBucketSplitExtPluginEx implements TvlBillTimeBucketSplit
|
|
return shiftStart;
|
|
return shiftStart;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static boolean isRosterNull(RosterExt rosterExt) {
|
|
|
|
+ try {
|
|
|
|
+ // 获取私有字段
|
|
|
|
+ Field rosterField = rosterExt.getClass().getDeclaredField("roster");
|
|
|
|
+ // 设置可访问性(突破private限制)
|
|
|
|
+ rosterField.setAccessible(true);
|
|
|
|
+ // 获取字段值并判断
|
|
|
|
+ return rosterField.get(rosterExt) == null;
|
|
|
|
+ } catch (NoSuchFieldException | IllegalAccessException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
private LocalDateTime getshiftStartDateTimeHasPlan(final LocalDate localDate, final ShiftTableSingleExt shiftTableSingleExt) {
|
|
private LocalDateTime getshiftStartDateTimeHasPlan(final LocalDate localDate, final ShiftTableSingleExt shiftTableSingleExt) {
|
|
final RosterExt rosterExt = shiftTableSingleExt.getRoster(localDate);
|
|
final RosterExt rosterExt = shiftTableSingleExt.getRoster(localDate);
|
|
final ShiftSpecExt shiftSpecExt = rosterExt.getShiftSpec();
|
|
final ShiftSpecExt shiftSpecExt = rosterExt.getShiftSpec();
|
|
@@ -114,6 +138,9 @@ public class TvlBillTimeBucketSplitExtPluginEx implements TvlBillTimeBucketSplit
|
|
|
|
|
|
private LocalDateTime getshiftEndDateTime(final LocalDate localDate, final ShiftTableSingleExt shiftTableSingleExt) {
|
|
private LocalDateTime getshiftEndDateTime(final LocalDate localDate, final ShiftTableSingleExt shiftTableSingleExt) {
|
|
final RosterExt rosterExt = shiftTableSingleExt.getRoster(localDate);
|
|
final RosterExt rosterExt = shiftTableSingleExt.getRoster(localDate);
|
|
|
|
+ if(isRosterNull(rosterExt)){
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
final ShiftSpecExt shiftSpecExt = rosterExt.getShiftSpec();
|
|
final ShiftSpecExt shiftSpecExt = rosterExt.getShiftSpec();
|
|
LocalDateTime shiftEnd = localDate.plusDays(1L).atStartOfDay();
|
|
LocalDateTime shiftEnd = localDate.plusDays(1L).atStartOfDay();
|
|
if (shiftSpecExt.isOffNonPlan()) {
|
|
if (shiftSpecExt.isOffNonPlan()) {
|