|
|
@@ -8,6 +8,7 @@ import cn.com.oa.model.DTO.AttendanceRecordDTO;
|
|
|
import cn.com.oa.model.Group;
|
|
|
import cn.com.oa.model.User;
|
|
|
import cn.com.oa.model.vo.AttendanceRecordResultVo;
|
|
|
+import cn.com.oa.model.vo.DeptAttendanceRecordVo;
|
|
|
import cn.com.oa.service.AttendanceRecordService;
|
|
|
import cn.com.oa.service.IAttendanceRecordResultService;
|
|
|
import cn.com.oa.service.UserService;
|
|
|
@@ -15,10 +16,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
import java.time.LocalTime;
|
|
|
import java.time.ZoneId;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
|
@@ -32,6 +36,8 @@ public class AttendanceRecordResultServiceImpl extends ServiceImpl<AttendanceRec
|
|
|
private UserService userService;
|
|
|
@Autowired
|
|
|
private AttendanceRecordService attendanceRecordService;
|
|
|
+ @Resource
|
|
|
+ private AttendanceRecordResultMapper attendanceRecordResultMapper;
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> getResultMonth() {
|
|
|
@@ -102,4 +108,78 @@ public class AttendanceRecordResultServiceImpl extends ServiceImpl<AttendanceRec
|
|
|
attendanceRecordResultVo.setAbsenceCount(absenceCount);
|
|
|
return attendanceRecordResultVo;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DeptAttendanceRecordVo> getResultDayGroupByDept() {
|
|
|
+ Map constantData = DataService.getConstantData();
|
|
|
+ Group group = (Group)constantData.get("defaultGroup");
|
|
|
+ User user = new User();
|
|
|
+ user.setUnitid(group.getUNIVERSALID());
|
|
|
+ user.setUserState(1);
|
|
|
+ // 各部门应到人数
|
|
|
+ List<Map<String, Object>> deptCountList = userService.getDeptCount(user);
|
|
|
+ AttendanceRecord attendanceRecord = new AttendanceRecord();
|
|
|
+ attendanceRecord.setUnitId(group.getUNIVERSALID());
|
|
|
+ // 当日打卡数据
|
|
|
+ List<AttendanceRecordDTO> recordList = attendanceRecordService.getResultListDay(attendanceRecord);
|
|
|
+ LocalTime lateThreshold = LocalTime.of(9, 0, 0);
|
|
|
+ LocalTime leaveEarlyThreshold = LocalTime.of(17, 30, 0);
|
|
|
+ List<DeptAttendanceRecordVo> deptAttendanceRecordVos = new ArrayList<>();
|
|
|
+ //遍历deptCount
|
|
|
+ for (Map<String, Object> dept : deptCountList) {
|
|
|
+ //当前部门应道人数
|
|
|
+ int deptCountNum = ((Long) dept.get("deptCount")).intValue();
|
|
|
+ //打卡人数
|
|
|
+ int recordCount = 0;
|
|
|
+ //当前部门实际到人数
|
|
|
+ int actualCount = 0;
|
|
|
+ //当前部门迟到人数
|
|
|
+ int lateCount = 0;
|
|
|
+ //当前部门早退人数
|
|
|
+ int leaveEarlyCount = 0;
|
|
|
+ //当前部门缺勤人数
|
|
|
+ int absenceCount = 0;
|
|
|
+ //从recordList遍历出deptName为当前部门的数据
|
|
|
+ for (AttendanceRecordDTO record : recordList) {
|
|
|
+ if (record.getDeptName().equals(dept.get("deptName"))) {
|
|
|
+ actualCount++;
|
|
|
+ recordCount++;
|
|
|
+ // 将 Date 转换为 LocalTime
|
|
|
+ LocalTime firstTime = record.getFirstAttTime().toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
|
|
|
+ LocalTime lastTime = record.getLastAttTime().toInstant().atZone(ZoneId.systemDefault()).toLocalTime();
|
|
|
+ // 标记是否已经减少 actualCount
|
|
|
+ boolean flag = false;
|
|
|
+ // 迟到处理
|
|
|
+ if (firstTime.isAfter(lateThreshold)) {
|
|
|
+ lateCount++;
|
|
|
+ if (!flag) {
|
|
|
+ actualCount--;
|
|
|
+ flag = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 只打卡一次的跳过
|
|
|
+ if (firstTime.equals(lastTime)) continue;
|
|
|
+ // 早退处理
|
|
|
+ if (lastTime.isBefore(leaveEarlyThreshold)) {
|
|
|
+ leaveEarlyCount++;
|
|
|
+ if (!flag) {
|
|
|
+ actualCount--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //计算缺勤人数
|
|
|
+ absenceCount=deptCountNum-recordCount;
|
|
|
+ DeptAttendanceRecordVo deptAttendanceRecordVo=new DeptAttendanceRecordVo();
|
|
|
+ deptAttendanceRecordVo.setDeptName((String) dept.get("deptName"));
|
|
|
+ deptAttendanceRecordVo.setActualCount(actualCount);
|
|
|
+ deptAttendanceRecordVo.setLateCount(lateCount);
|
|
|
+ deptAttendanceRecordVo.setLeaveEarlyCount(leaveEarlyCount);
|
|
|
+ deptAttendanceRecordVo.setAbsenceCount(absenceCount);
|
|
|
+ deptAttendanceRecordVo.setRecordCount(recordCount);
|
|
|
+ deptAttendanceRecordVos.add(deptAttendanceRecordVo);
|
|
|
+ }
|
|
|
+ return deptAttendanceRecordVos;
|
|
|
+ }
|
|
|
+
|
|
|
}
|