Forráskód Böngészése

Merge branch 'pre'

dzx 1 éve
szülő
commit
ae314e9418

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

@@ -12,6 +12,7 @@ import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.attendance.dto.AddAttendanceStatisticsDto;
 import com.xjrsoft.module.attendance.dto.AttendanceStatisticsPageDto;
@@ -71,7 +72,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 /**
@@ -114,45 +114,15 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
             statistics.setStatus(0);
             statisticsMapper.insert(statistics);
 
-            CompletableFuture.runAsync(() -> {
-                List<LocalDate> dateList = getDatesBetween(dto.getStartDate(), dto.getEndDate());
-                LocalDateTime now = LocalDateTime.now();
-                if(dateList.contains(now.toLocalDate())){
-                    OutInRecordUtil outInRecordUtil = new OutInRecordUtil();
-                    LocalDateTime startDateTime = now.withHour(0).withMinute(0).withSecond(0).withNano(0);
-                    LocalDateTime endDateTime = startDateTime.plusDays(1).plusSeconds(-1);
-
-                    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);
-                    }
-
-                    AttendanceRecordTask recordTask = new AttendanceRecordTask();
-                    recordTask.teacherAttendanceRecord(startDateTime, statistics.getTimePeriod(),
-                            userService,
-                            ruleCategoryService,
-                            holidayDateService,
-                            wfTeacherleaveService,
-                            outInRecordService,
-                            carOutInRecordService,
-                            recordService
-                    );
-                }
-                //1、同步出入记录的数据
-                //2、固化考勤数据
-                refreshRecord(statistics.getId());
-            });
-
+            //1、同步出入记录的数据
+            //2、固化考勤数据
+            refreshRecord(statistics.getId());
             return true;
         } catch (Exception e) {
             Log.error(e.getMessage(), e);
             throw new MyException("添加报错,请联系管理员");
+        }finally{
+
         }
     }
 
@@ -227,6 +197,42 @@ public class AttendanceStatisticsServiceImpl extends MPJBaseServiceImpl<Attendan
             statistics.setModifyDate(new Date());
             this.updateById(statistics);
 
+            List<LocalDate> dateList2 = getDatesBetween(statistics.getStartDate(), statistics.getEndDate());
+            LocalDateTime now = LocalDateTime.now();
+            if(dateList2.contains(now.toLocalDate())){
+                DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                String sql = "DELETE FROM teacher_attendance_record WHERE attendance_date = '" + now.toLocalDate().format(dtf) + "'" +
+                        " AND time_interval = " + statistics.getTimePeriod();
+                SqlRunnerAdapter.db().delete(sql);
+
+                OutInRecordUtil outInRecordUtil = new OutInRecordUtil();
+                LocalDateTime startDateTime = now.withHour(0).withMinute(0).withSecond(0).withNano(0);
+                LocalDateTime endDateTime = startDateTime.plusDays(1).plusSeconds(-1);
+
+                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);
+                }
+
+                AttendanceRecordTask recordTask = new AttendanceRecordTask();
+                recordTask.teacherAttendanceRecord(startDateTime, statistics.getTimePeriod(),
+                        userService,
+                        ruleCategoryService,
+                        holidayDateService,
+                        wfTeacherleaveService,
+                        outInRecordService,
+                        carOutInRecordService,
+                        recordService
+                );
+            }
+
+
             //2、删除以前的数据
             statisticsRecordService.remove(
                     new QueryWrapper<AttendanceStatisticsRecord>().lambda()

+ 4 - 0
src/main/java/com/xjrsoft/module/classtime/service/impl/ClassTimeStatisticsServiceImpl.java

@@ -111,10 +111,12 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean addCourse(AddClassTimeStatisticsDto dto) {
         ClassTimeStatistics classTimeStatistics = BeanUtil.toBean(dto, ClassTimeStatistics.class);
         classTimeStatistics.setStatus(0);
         classTimeStatistics.setCategory(2);
+        classTimeStatistics.setOverWorkloadNumberStatus(0);
         classTimeStatistics.setCreateDate(new Date());
 
         List<WeekTimeRangeVo> weekTimeRangeVos = calculateNaturalWeeks(classTimeStatistics.getStartDate(), classTimeStatistics.getEndDate());
@@ -144,6 +146,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean updateCourse(ClassTimeStatistics classTimeStatistics) {
         List<WeekTimeRangeVo> weekTimeRangeVos = calculateNaturalWeeks(classTimeStatistics.getStartDate(), classTimeStatistics.getEndDate());
         classTimeStatistics.setWeeks(weekTimeRangeVos.size());
@@ -760,6 +763,7 @@ public class ClassTimeStatisticsServiceImpl extends MPJBaseServiceImpl<ClassTime
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean refreshCourseRecord(ClassTimeStatistics statistics) {
         try {
             // 1、查询教师

+ 1 - 0
src/main/java/com/xjrsoft/module/job/AttendanceRecordTask.java

@@ -185,6 +185,7 @@ public class AttendanceRecordTask {
             }
 
             TeacherOutInRecordDto outInDto = new TeacherOutInRecordDto();
+            outInDto.setTimePeriod(timePeriod);
             outInDto.setQueryDate(startTime.toLocalDate());
             outInDto.setEndTime(endTime);
             outInDto.setStartTime(startTime);

+ 46 - 0
src/main/java/com/xjrsoft/module/liteflow/node/StudentDropOutNode.java

@@ -3,9 +3,16 @@ package com.xjrsoft.module.liteflow.node;
 import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.common.enums.ArchivesStatusEnum;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.WorkflowApproveType;
+import com.xjrsoft.module.hikvision.entity.HikvisionData;
+import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
+import com.xjrsoft.module.hikvision.util.ApiUtil;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.student.entity.StudentDropOut;
 import com.xjrsoft.module.student.mapper.StudentDropOutMapper;
@@ -21,9 +28,11 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.support.TransactionSynchronization;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 
 /**
@@ -42,6 +51,9 @@ public class StudentDropOutNode extends NodeComponent {
     @Autowired
     private WorkflowRecordMapper workflowRecordMapper;
 
+    @Autowired
+    private HikvisionDataMapper hikvisionDataMapper;
+
     @Override
     public void process() throws Exception {
         // 获取表单中数据编号
@@ -92,6 +104,40 @@ public class StudentDropOutNode extends NodeComponent {
                         );
                         schoolRoll.setArchivesStatus(ArchivesStatusEnum.FB2904.getCode());
                         studentSchoolRollService.updateById(schoolRoll);
+
+                        //删除海康出入权限
+                        String hikvisionId = hikvisionDataMapper.getStudentHikvisionId(studentDropOut.getClassId());
+                        ApiUtil apiUtil = new ApiUtil();
+                        String apiPath = "/api/pmas/v1/person/batch/delete";
+                        JsonObject paramJson = new JsonObject();
+                        JsonArray personIndexCodes = new JsonArray();
+                        personIndexCodes.add(hikvisionId);
+                        paramJson.add("personIndexCodes", personIndexCodes);
+                        String doPost = apiUtil.doPost(apiPath, paramJson.toString(), null);
+
+                        JsonParser parser = new JsonParser();
+                        JsonObject resultJson = parser.parse(doPost).getAsJsonObject();
+                        if(resultJson.get("code").getAsInt() == 0){
+                            JsonArray success = resultJson.get("data").getAsJsonObject().get("success").getAsJsonArray();
+
+                            Set<String> valuesSet = new HashSet<>();
+                            String keyToExtract = "indexCode";
+                            // 遍历 JSON 数组并提取指定键的值
+                            for (JsonElement jsonElement : success) {
+                                JsonObject jsonObject = jsonElement.getAsJsonObject();
+                                if (jsonObject.has(keyToExtract)) {
+                                    String value = jsonObject.get(keyToExtract).getAsString();
+                                    valuesSet.add(value);
+                                }
+                            }
+                            if(valuesSet.contains(hikvisionId)){
+                                hikvisionDataMapper.delete(
+                                        new QueryWrapper<HikvisionData>().lambda()
+                                                .eq(HikvisionData::getSourceId, studentDropOut.getClassId())
+                                                .eq(HikvisionData::getHikvisionId, hikvisionId)
+                                );
+                            }
+                        }
                     });
                 }
             });

+ 3 - 0
src/main/java/com/xjrsoft/module/outint/dto/TeacherOutInRecordDto.java

@@ -46,4 +46,7 @@ public class TeacherOutInRecordDto implements Serializable {
     @ApiModelProperty("海康记录时间")
     private LocalDateTime endTime;
 
+    @ApiModelProperty("时间段:1上午 2下午 3晚上")
+    private Integer timePeriod;
+
 }

+ 9 - 1
src/main/resources/mapper/outin/TeacherOutInRecordMapper.xml

@@ -6,7 +6,15 @@
     <select id="getListByParam" parameterType="com.xjrsoft.module.outint.dto.TeacherOutInRecordDto" resultType="com.xjrsoft.module.outint.entity.TeacherOutInRecord">
         SELECT * FROM teacher_out_in_record
         WHERE delete_mark = 0
-        AND  #{dto.endTime} >= record_time
+        <if test="dto.timePeriod == 1">
+            AND #{dto.endTime} >= record_time
+        </if>
+        <if test="dto.timePeriod == 2">
+            AND record_time between #{dto.startTime} and #{dto.endTime}
+        </if>
+        <if test="dto.timePeriod == 3">
+            AND #{dto.endTime} >= record_time
+        </if>
         AND status = #{dto.status}
         AND DATE_FORMAT(record_time, '%Y-%m-%d') = #{dto.queryDate}
         AND user_id = #{dto.userId}