|
@@ -18,8 +18,11 @@ import org.sky.core.tool.utils.StringUtil;
|
|
|
import org.sky.scientific.excel.XmTechnicianHoursExcel;
|
|
import org.sky.scientific.excel.XmTechnicianHoursExcel;
|
|
|
import org.sky.scientific.excel.XmTechnicianHoursListener;
|
|
import org.sky.scientific.excel.XmTechnicianHoursListener;
|
|
|
import org.sky.scientific.mapper.*;
|
|
import org.sky.scientific.mapper.*;
|
|
|
|
|
+import org.sky.scientific.pojo.dto.TechnicianDTO;
|
|
|
import org.sky.scientific.pojo.entity.XmTechnicianHours;
|
|
import org.sky.scientific.pojo.entity.XmTechnicianHours;
|
|
|
import org.sky.scientific.pojo.vo.DailyAttendance;
|
|
import org.sky.scientific.pojo.vo.DailyAttendance;
|
|
|
|
|
+import org.sky.scientific.pojo.vo.DailyHours;
|
|
|
|
|
+import org.sky.scientific.pojo.vo.TechnicianHoursMonthlyVO;
|
|
|
import org.sky.scientific.pojo.vo.XmTechnicianHoursVO;
|
|
import org.sky.scientific.pojo.vo.XmTechnicianHoursVO;
|
|
|
import org.sky.scientific.service.IXmTechnicianHoursService;
|
|
import org.sky.scientific.service.IXmTechnicianHoursService;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -147,7 +150,7 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
|
|
|
|
|
|
|
|
if (hoursTotal - usedHours < dailyAttendance.getWorkHours()) {
|
|
if (hoursTotal - usedHours < dailyAttendance.getWorkHours()) {
|
|
|
//当 考勤时长 - 当天以用工时 < 新的工时 ,则提示“考勤时长不足”
|
|
//当 考勤时长 - 当天以用工时 < 新的工时 ,则提示“考勤时长不足”
|
|
|
- throw new ServiceException("[序号"+record.getSerialNumber()+",日期"+dailyAttendance.getWorkDate()+"工时"+dailyAttendance.getWorkHours()+"]的考勤时长不足,出勤总时长" + hoursTotal + ",已用" + usedHours + ",可用"+(hoursTotal-usedHours)+",请核对数据");
|
|
|
|
|
|
|
+ throw new ServiceException("[序号" + record.getSerialNumber() + ",日期" + dailyAttendance.getWorkDate() + "工时" + dailyAttendance.getWorkHours() + "]的考勤时长不足,出勤总时长" + hoursTotal + ",已用" + usedHours + ",可用" + (hoursTotal - usedHours) + ",请核对数据");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
double doubleValue = usedHoursByUnicodeAndDate.getDoubleValue(key) + dailyAttendance.getWorkHours();
|
|
double doubleValue = usedHoursByUnicodeAndDate.getDoubleValue(key) + dailyAttendance.getWorkHours();
|
|
@@ -315,4 +318,40 @@ public class XmTechnicianHoursServiceImpl extends BaseServiceImpl<XmTechnicianHo
|
|
|
public List<JSONObject> selectListForPrint(XmTechnicianHoursVO dto) {
|
|
public List<JSONObject> selectListForPrint(XmTechnicianHoursVO dto) {
|
|
|
return baseMapper.selectListForPrint(dto);
|
|
return baseMapper.selectListForPrint(dto);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public IPage<TechnicianHoursMonthlyVO> meiyueyanfagongshifenpeibiao(IPage<TechnicianHoursMonthlyVO> page, TechnicianDTO dto) {
|
|
|
|
|
+ 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 workTotal = dailyHours.stream().mapToDouble(DailyHours::getWorkHours).sum();
|
|
|
|
|
+ vo.setWorkHoursTotal(workTotal);
|
|
|
|
|
+
|
|
|
|
|
+ //总非研发工时 = 总出勤 - 总研发
|
|
|
|
|
+ vo.setUnworkHoursTotal(attendanceTotal - workTotal);
|
|
|
|
|
+
|
|
|
|
|
+ //研发工时分配率 = 总研发工时/总出勤小时
|
|
|
|
|
+ vo.setWorkHoursRate(workTotal / attendanceTotal);
|
|
|
|
|
+
|
|
|
|
|
+ //非研发工时分配率 = 总非研发工时/总出勤小时
|
|
|
|
|
+ vo.setUnworkHoursRate(vo.getUnworkHoursTotal() / attendanceTotal);
|
|
|
|
|
+
|
|
|
|
|
+ vo.setDailyHoursList(dailyHours);
|
|
|
|
|
+ }
|
|
|
|
|
+ return page.setRecords(list);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|