|
|
@@ -17,7 +17,11 @@ import com.xjrsoft.common.utils.VoToColumnUtil;
|
|
|
import com.xjrsoft.module.attendance.dto.AddAttendanceStatisticsDto;
|
|
|
import com.xjrsoft.module.attendance.dto.AttendanceStatisticsPageDto;
|
|
|
import com.xjrsoft.module.attendance.dto.AttendanceStatisticsRecordDto;
|
|
|
-import com.xjrsoft.module.attendance.entity.*;
|
|
|
+import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
|
|
|
+import com.xjrsoft.module.attendance.entity.AttendanceStatistics;
|
|
|
+import com.xjrsoft.module.attendance.entity.AttendanceStatisticsRecord;
|
|
|
+import com.xjrsoft.module.attendance.entity.AttendanceUserRelation;
|
|
|
+import com.xjrsoft.module.attendance.entity.TeacherAttendanceRecord;
|
|
|
import com.xjrsoft.module.attendance.mapper.AttendanceStatisticsMapper;
|
|
|
import com.xjrsoft.module.attendance.service.IAttendanceRuleCategoryService;
|
|
|
import com.xjrsoft.module.attendance.service.IAttendanceStatisticsRecordService;
|
|
|
@@ -40,7 +44,15 @@ import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
|
|
|
import com.xjrsoft.module.teacher.service.IWfTeacherleaveService;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import me.zhyd.oauth.log.Log;
|
|
|
-import org.apache.poi.ss.usermodel.*;
|
|
|
+import org.apache.poi.ss.usermodel.Cell;
|
|
|
+import org.apache.poi.ss.usermodel.CellStyle;
|
|
|
+import org.apache.poi.ss.usermodel.Font;
|
|
|
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
|
|
+import org.apache.poi.ss.usermodel.IndexedColors;
|
|
|
+import org.apache.poi.ss.usermodel.Row;
|
|
|
+import org.apache.poi.ss.usermodel.Sheet;
|
|
|
+import org.apache.poi.ss.usermodel.VerticalAlignment;
|
|
|
+import org.apache.poi.ss.usermodel.Workbook;
|
|
|
import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -53,7 +65,13 @@ import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -164,6 +182,9 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Boolean refreshRecord(Long id) {
|
|
|
+ String remarks = null;
|
|
|
+ int personCount = 0;
|
|
|
+ int attendanceDays = 0;
|
|
|
try {
|
|
|
//1、修改状态为统计中
|
|
|
AttendanceStatistics statistics = this.getById(id);
|
|
|
@@ -171,8 +192,6 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
|
|
|
statistics.setModifyDate(new Date());
|
|
|
this.updateById(statistics);
|
|
|
|
|
|
- String remarks = null;
|
|
|
-
|
|
|
List<LocalDate> dateList2 = getDatesBetween(statistics.getStartDate(), statistics.getEndDate());
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
if (dateList2.contains(now.toLocalDate())) {
|
|
|
@@ -187,15 +206,10 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
|
|
|
|
|
|
Map<Long, AttendanceRuleDetailsUserVo> teacherRules = ruleCategoryService.getAllTeacherTodyRule(now.getDayOfWeek().name());
|
|
|
|
|
|
- try {
|
|
|
- //教师
|
|
|
- outInRecordUtil.getTeacherRecords(faceImportMapper, startDateTime, endDateTime, teacherRules);
|
|
|
- //拉取车辆数据
|
|
|
- outInRecordUtil.GetVehicleRecord(faceImportMapper, startDateTime, endDateTime);
|
|
|
- } catch (ParseException e) {
|
|
|
- Log.error(e.getMessage(), e);
|
|
|
- remarks = "未能拉取海康数据,统计可能不准确";
|
|
|
- }
|
|
|
+ //教师
|
|
|
+ outInRecordUtil.getTeacherRecords(faceImportMapper, startDateTime, endDateTime, teacherRules);
|
|
|
+ //拉取车辆数据
|
|
|
+ outInRecordUtil.GetVehicleRecord(faceImportMapper, startDateTime, endDateTime);
|
|
|
|
|
|
AttendanceRecordTask recordTask = new AttendanceRecordTask();
|
|
|
recordTask.teacherAttendanceRecord(startDateTime, statistics.getTimePeriod(),
|
|
|
@@ -209,7 +223,6 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
|
|
|
);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//2、删除以前的数据
|
|
|
statisticsRecordService.remove(
|
|
|
new QueryWrapper<AttendanceStatisticsRecord>().lambda()
|
|
|
@@ -257,6 +270,7 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
|
|
|
|
|
|
//3.4、计算出所有的天数
|
|
|
List<LocalDate> dateList = getDatesBetween(statistics.getStartDate(), statistics.getEndDate(), ruleMap, weekEnMap);
|
|
|
+ attendanceDays = dateList.size();
|
|
|
|
|
|
//3.5、循环计算,并存入insertList,方便后续批量入库
|
|
|
List<AttendanceStatisticsRecord> insertList = new ArrayList<>();
|
|
|
@@ -327,25 +341,29 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
|
|
|
//3.6、插入数据
|
|
|
if (!insertList.isEmpty()) {
|
|
|
statisticsRecordService.saveBatch(insertList);
|
|
|
+ personCount = insertList.size();
|
|
|
}
|
|
|
|
|
|
- //4、将状态改为统计完成
|
|
|
- statistics = this.getById(id);
|
|
|
- statistics.setStatus(1);
|
|
|
- statistics.setModifyDate(new Date());
|
|
|
- statistics.setPersonCount(insertList.size());
|
|
|
- statistics.setAttendanceDays(dateList.size());
|
|
|
- statistics.setRemarks(remarks);
|
|
|
- this.updateById(statistics);
|
|
|
-
|
|
|
return true;
|
|
|
} catch (Exception e) {
|
|
|
Log.error(e.getMessage(), e);
|
|
|
if (e.getClass().equals(MyException.class)) {
|
|
|
throw new MyException(e.getMessage());
|
|
|
+ }else if(e.getClass().equals(ParseException.class) || e.getClass().equals(ClassCastException.class)){
|
|
|
+ remarks = "未能拉取海康数据,统计可能不准确";
|
|
|
} else {
|
|
|
throw new MyException("刷新出错,请联系管理员");
|
|
|
}
|
|
|
+ }finally {
|
|
|
+ //4、将状态改为统计完成
|
|
|
+ AttendanceStatistics statistics = this.getById(id);
|
|
|
+ statistics.setStatus(1);
|
|
|
+ statistics.setModifyDate(new Date());
|
|
|
+ statistics.setPersonCount(personCount);
|
|
|
+ statistics.setAttendanceDays(attendanceDays);
|
|
|
+ statistics.setRemarks(remarks);
|
|
|
+ this.updateById(statistics);
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|
|
|
|