|
|
@@ -321,35 +321,40 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
|
|
|
|
|
|
@Override
|
|
|
public IPage<TechnicianHoursMonthlyVO> meiyueyanfagongshifenpeibiao(IPage<TechnicianHoursMonthlyVO> page, TechnicianDTO dto) {
|
|
|
- if(StringUtil.isBlank(dto.getYearAndMonth())){
|
|
|
+ if (StringUtil.isBlank(dto.getYearAndMonth())) {
|
|
|
throw new ServiceException("参数yearAndMonth不能为空");
|
|
|
}
|
|
|
List<TechnicianHoursMonthlyVO> list = baseMapper.meiyueyanfagongshifenpeibiao(page, dto);
|
|
|
for (TechnicianHoursMonthlyVO vo : list) {
|
|
|
List<DailyHours> dailyHours = baseMapper.selectDailyHoursByUnicodeAndMonth(dto.getYearAndMonth(), vo.getUnicode());
|
|
|
- if(CollectionUtil.isEmpty(dailyHours)){
|
|
|
- continue;
|
|
|
- }
|
|
|
- for (DailyHours dailyHour : dailyHours) {
|
|
|
- //设置一天的非研发工时=当天考勤-研发工时
|
|
|
- dailyHour.setUnworkHours(dailyHour.getAttendanceHours() - dailyHour.getWorkHours());
|
|
|
- }
|
|
|
//总出勤小时
|
|
|
- double attendanceTotal = dailyHours.stream().mapToDouble(DailyHours::getAttendanceHours).sum();
|
|
|
-
|
|
|
+ double attendanceTotal = 0;
|
|
|
//总研发工时
|
|
|
- double workTotal = dailyHours.stream().mapToDouble(DailyHours::getWorkHours).sum();
|
|
|
+ double workTotal = 0;
|
|
|
+ if (CollectionUtil.isNotEmpty(dailyHours)) {
|
|
|
+ for (DailyHours dailyHour : dailyHours) {
|
|
|
+ //设置一天的非研发工时=当天考勤-研发工时
|
|
|
+ dailyHour.setUnworkHours(Math.max(dailyHour.getAttendanceHours() - dailyHour.getWorkHours(), 0));
|
|
|
+ }
|
|
|
+ attendanceTotal = dailyHours.stream().mapToDouble(DailyHours::getAttendanceHours).sum();
|
|
|
+ workTotal = dailyHours.stream().mapToDouble(DailyHours::getWorkHours).sum();
|
|
|
+ }
|
|
|
vo.setWorkHoursTotal(workTotal);
|
|
|
-
|
|
|
//总非研发工时 = 总出勤 - 总研发
|
|
|
- vo.setUnworkHoursTotal(attendanceTotal - workTotal);
|
|
|
-
|
|
|
+ vo.setUnworkHoursTotal(Math.max(attendanceTotal - workTotal, 0));
|
|
|
//研发工时分配率 = 总研发工时/总出勤小时
|
|
|
- vo.setWorkHoursRate(workTotal / attendanceTotal);
|
|
|
+ if (workTotal == 0 || attendanceTotal == 0) {
|
|
|
+ vo.setWorkHoursRate(0.0);
|
|
|
+ } else {
|
|
|
+ vo.setWorkHoursRate(workTotal / attendanceTotal);
|
|
|
+ }
|
|
|
|
|
|
//非研发工时分配率 = 总非研发工时/总出勤小时
|
|
|
- vo.setUnworkHoursRate(vo.getUnworkHoursTotal() / attendanceTotal);
|
|
|
-
|
|
|
+ if (vo.getUnworkHoursTotal() == 0 || attendanceTotal == 0) {
|
|
|
+ vo.setUnworkHoursRate(0.0);
|
|
|
+ } else {
|
|
|
+ vo.setUnworkHoursRate(vo.getUnworkHoursTotal() / attendanceTotal);
|
|
|
+ }
|
|
|
vo.setDailyHoursList(dailyHours);
|
|
|
}
|
|
|
return page.setRecords(list);
|