瀏覽代碼

考勤统计调整

dzx 7 月之前
父節點
當前提交
dbf0180847

+ 42 - 24
src/main/java/com/xjrsoft/module/attendance/service/impl/AttendanceStatisticsServiceImpl.java

@@ -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;
         }
     }
 

+ 1 - 1
src/main/resources/sqlScript/20250421_sql.sql

@@ -18,5 +18,5 @@ ALTER TABLE base_student_school_roll
 UPDATE base_student_school_roll SET internship_state = 'IT_0001' WHERE archives_status = 'FB2901';
 # 上面已经在正式服运行-------------------------------------------------------------
 
-ALTER TABLE tl.attendance_statistics
+ALTER TABLE attendance_statistics
   ADD COLUMN remarks VARCHAR (500) NULL COMMENT '备注' AFTER attendance_days;