|
@@ -39,6 +39,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
import java.io.BufferedInputStream;
|
|
import java.io.BufferedInputStream;
|
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStream;
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.net.URLEncoder;
|
|
import java.net.URLEncoder;
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
@@ -478,11 +480,11 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
|
|
|
for (TechnicianHoursMonthlyVO vo : list) {
|
|
for (TechnicianHoursMonthlyVO vo : list) {
|
|
|
List<DailyHours> dailyHours = baseMapper.selectDailyHoursByUnicodeAndMonth(dto.getYearAndMonth(), vo.getUnicode());
|
|
List<DailyHours> dailyHours = baseMapper.selectDailyHoursByUnicodeAndMonth(dto.getYearAndMonth(), vo.getUnicode());
|
|
|
//总出勤小时
|
|
//总出勤小时
|
|
|
- double attendanceTotal = 0;
|
|
|
|
|
|
|
+ BigDecimal attendanceTotal = BigDecimal.ZERO;
|
|
|
//总研发工时
|
|
//总研发工时
|
|
|
- double workTotal = 0;
|
|
|
|
|
|
|
+ BigDecimal workTotal = BigDecimal.ZERO;
|
|
|
//总非研发工时
|
|
//总非研发工时
|
|
|
- double unworkTotal = 0;
|
|
|
|
|
|
|
+ BigDecimal unworkTotal = BigDecimal.ZERO;
|
|
|
//考勤数据
|
|
//考勤数据
|
|
|
List<DailyAttendance> attendanceList = attendanceMapper.selectDailyAttendanceByUnicodeAndMonth(vo.getUnicode(), dto.getYearAndMonth());
|
|
List<DailyAttendance> attendanceList = attendanceMapper.selectDailyAttendanceByUnicodeAndMonth(vo.getUnicode(), dto.getYearAndMonth());
|
|
|
for (int i = 0; i < daysInMonth; i++) {
|
|
for (int i = 0; i < daysInMonth; i++) {
|
|
@@ -497,38 +499,38 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
|
|
|
} else {
|
|
} else {
|
|
|
daily = new DailyHours();
|
|
daily = new DailyHours();
|
|
|
daily.setWorkDate(everyDay);
|
|
daily.setWorkDate(everyDay);
|
|
|
- daily.setWorkHours(0.0);
|
|
|
|
|
- daily.setUnworkHours(0.0);
|
|
|
|
|
|
|
+ daily.setWorkHours(new BigDecimal("0.00"));
|
|
|
|
|
+ daily.setUnworkHours(new BigDecimal("0.00"));
|
|
|
dailyHours.add(i, daily);
|
|
dailyHours.add(i, daily);
|
|
|
}
|
|
}
|
|
|
//设置考勤数据
|
|
//设置考勤数据
|
|
|
if (any.isPresent()) {
|
|
if (any.isPresent()) {
|
|
|
- daily.setAttendanceHours(any.get().getWorkHours());
|
|
|
|
|
|
|
+ daily.setAttendanceHours(BigDecimal.valueOf(any.get().getWorkHours()));
|
|
|
} else {
|
|
} else {
|
|
|
- daily.setAttendanceHours(0.0);
|
|
|
|
|
|
|
+ daily.setAttendanceHours(new BigDecimal("0.00"));
|
|
|
}
|
|
}
|
|
|
//设置一天的非研发工时=当天考勤-研发工时
|
|
//设置一天的非研发工时=当天考勤-研发工时
|
|
|
- daily.setUnworkHours(Math.max(daily.getAttendanceHours() - daily.getWorkHours(), 0));
|
|
|
|
|
|
|
+ daily.setUnworkHours(daily.getAttendanceHours().subtract(daily.getWorkHours()).max(BigDecimal.ZERO));
|
|
|
}
|
|
}
|
|
|
- attendanceTotal = dailyHours.stream().mapToDouble(DailyHours::getAttendanceHours).sum();
|
|
|
|
|
- workTotal = dailyHours.stream().mapToDouble(DailyHours::getWorkHours).sum();
|
|
|
|
|
- unworkTotal = dailyHours.stream().mapToDouble(DailyHours::getUnworkHours).sum();
|
|
|
|
|
|
|
+ attendanceTotal = dailyHours.stream().map(DailyHours::getAttendanceHours).reduce(BigDecimal.valueOf(0.00), BigDecimal::add);
|
|
|
|
|
+ workTotal = dailyHours.stream().map(DailyHours::getWorkHours).reduce(BigDecimal.valueOf(0.00), BigDecimal::add);
|
|
|
|
|
+ unworkTotal = dailyHours.stream().map(DailyHours::getUnworkHours).reduce(BigDecimal.valueOf(0.00), BigDecimal::add);
|
|
|
|
|
|
|
|
vo.setWorkHoursTotal(workTotal);
|
|
vo.setWorkHoursTotal(workTotal);
|
|
|
// 总非研发工时 = 总出勤 - 总研发
|
|
// 总非研发工时 = 总出勤 - 总研发
|
|
|
vo.setUnworkHoursTotal(unworkTotal);
|
|
vo.setUnworkHoursTotal(unworkTotal);
|
|
|
//研发工时分配率 = 总研发工时/总出勤小时
|
|
//研发工时分配率 = 总研发工时/总出勤小时
|
|
|
- if (workTotal == 0 || attendanceTotal == 0) {
|
|
|
|
|
- vo.setWorkHoursRate(0.0);
|
|
|
|
|
|
|
+ if (workTotal.doubleValue() == 0 || attendanceTotal.doubleValue() == 0) {
|
|
|
|
|
+ vo.setWorkHoursRate(new BigDecimal("0.00"));
|
|
|
} else {
|
|
} else {
|
|
|
- vo.setWorkHoursRate(workTotal / attendanceTotal);
|
|
|
|
|
|
|
+ vo.setWorkHoursRate(workTotal.divide(attendanceTotal, 2, RoundingMode.UP));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//非研发工时分配率 = 总非研发工时/总出勤小时
|
|
//非研发工时分配率 = 总非研发工时/总出勤小时
|
|
|
- if (vo.getUnworkHoursTotal() == 0 || attendanceTotal == 0) {
|
|
|
|
|
- vo.setUnworkHoursRate(0.0);
|
|
|
|
|
|
|
+ if (vo.getUnworkHoursTotal().doubleValue() == 0 || attendanceTotal.doubleValue() == 0) {
|
|
|
|
|
+ vo.setUnworkHoursRate(new BigDecimal("0.00"));
|
|
|
} else {
|
|
} else {
|
|
|
- vo.setUnworkHoursRate(vo.getUnworkHoursTotal() / attendanceTotal);
|
|
|
|
|
|
|
+ vo.setUnworkHoursRate(vo.getUnworkHoursTotal().divide(attendanceTotal,2, RoundingMode.UP));
|
|
|
}
|
|
}
|
|
|
vo.setDailyHoursList(dailyHours);
|
|
vo.setDailyHoursList(dailyHours);
|
|
|
}
|
|
}
|