|
|
@@ -6,11 +6,13 @@ import com.google.gson.JsonArray;
|
|
|
import com.google.gson.JsonElement;
|
|
|
import com.google.gson.JsonObject;
|
|
|
import com.xjrsoft.common.enums.OutInStatusEnum;
|
|
|
+import com.xjrsoft.common.exception.MyException;
|
|
|
import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
|
|
|
import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
|
|
|
import com.xjrsoft.module.attendance.entity.AttendanceRuleDetails;
|
|
|
import com.xjrsoft.module.attendance.vo.AttendanceRuleDetailsUserVo;
|
|
|
import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
|
|
|
+import me.zhyd.oauth.log.Log;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
@@ -22,6 +24,7 @@ import java.time.ZoneOffset;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
@@ -30,7 +33,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|
|
public class OutInRecordUtil {
|
|
|
private static final Logger log = LoggerFactory.getLogger(OutInRecordUtil.class);
|
|
|
|
|
|
- private void teacherInsertRecord(Long userId, String recordTime, String facePhoto, int status, String eventId, String attendanceStatus){
|
|
|
+ private void teacherInsertRecord(String userId, String recordTime, String facePhoto, int status, String eventId, String attendanceStatus){
|
|
|
String photoValue = (facePhoto != null && !facePhoto.equals("null")) ? facePhoto : "";
|
|
|
|
|
|
String sql = "INSERT INTO teacher_out_in_record(create_date, user_id, record_time, face_photo, eventId, status,delete_mark,enabled_mark, attendance_status) " +
|
|
|
@@ -47,7 +50,7 @@ public class OutInRecordUtil {
|
|
|
// SqlRunnerAdapter.db().update(updSql);
|
|
|
}
|
|
|
|
|
|
- private void studentInsertRecord(Long userId, Long teacherId, Long classId, String facePhoto, String recordTime, int status, String eventId, String attendanceStatus){
|
|
|
+ private void studentInsertRecord(String userId, Long teacherId, Long classId, String facePhoto, String recordTime, int status, String eventId, String attendanceStatus){
|
|
|
String photoValue = (facePhoto != null && !facePhoto.equals("null")) ? facePhoto : "";
|
|
|
|
|
|
String sql = "INSERT INTO student_out_in_record(create_date, user_id, teacher_id, class_id, face_photo, record_time , eventId,status,delete_mark,enabled_mark, attendance_status) " +
|
|
|
@@ -101,6 +104,13 @@ public class OutInRecordUtil {
|
|
|
|
|
|
SqlRunnerAdapter.db().dynamicInsert(tableName, where);
|
|
|
|
|
|
+ String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
|
|
|
+ List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
+ Map<String, Long> sourceIdMap = new HashMap<>();
|
|
|
+ for (Map<String, Object> objectMap : list) {
|
|
|
+ sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
|
|
|
+ }
|
|
|
+
|
|
|
//车辆入库后,判定教师考勤状态
|
|
|
if(carMessageApplyId != 0){
|
|
|
String selectTable = "car_message_apply";
|
|
|
@@ -108,7 +118,7 @@ public class OutInRecordUtil {
|
|
|
selectWhere.set("id", carMessageApplyId);
|
|
|
selectWhere.set("car_number", planNo);
|
|
|
Map<String, Object> objectMap = SqlRunnerAdapter.db().dynamicSelectOne(selectTable, selectWhere);
|
|
|
- Long userId = Long.parseLong(objectMap.get("user_id").toString());
|
|
|
+ Long userId = sourceIdMap.get(objectMap.get("user_id").toString());
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
LocalDateTime recordTimeDate = LocalDateTime.parse(recordTime, formatter);
|
|
|
String attendanceStatus = discernTeacherStatus(recordTimeDate, status, userId);
|
|
|
@@ -180,15 +190,21 @@ public class OutInRecordUtil {
|
|
|
InsertTeacherStudentRecords(responseBuilder, faceImportMapper);
|
|
|
}
|
|
|
|
|
|
- private void InsertTeacherStudentRecords(JsonArray doorEventsResponse, FaceImportMapper faceImportMapper) throws ParseException {
|
|
|
+ public void InsertTeacherStudentRecords(JsonArray doorEventsResponse, FaceImportMapper faceImportMapper) throws ParseException {
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
- List<Long> teacherUserIds = faceImportMapper.getTeacherUserIds();
|
|
|
+ String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
|
|
|
+ List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
+ Map<String, Long> sourceIdMap = new HashMap<>();
|
|
|
+ for (Map<String, Object> objectMap : list) {
|
|
|
+ sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
|
|
|
+ }
|
|
|
+
|
|
|
for (JsonElement element : doorEventsResponse) {
|
|
|
JsonObject item = element.getAsJsonObject();
|
|
|
|
|
|
- Long personId;
|
|
|
+ String personId;
|
|
|
try {
|
|
|
- personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsLong();
|
|
|
+ personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsString();
|
|
|
}catch (Exception e){
|
|
|
continue;
|
|
|
}
|
|
|
@@ -209,15 +225,15 @@ public class OutInRecordUtil {
|
|
|
String recordTime = item.get("eventTime").isJsonNull() ? null : item.get("eventTime").getAsString();
|
|
|
String eventId = item.get("eventId").isJsonNull() ? null : item.get("eventId").getAsString();
|
|
|
String recordTimeStr = ChangeTime(recordTime);
|
|
|
- if (teacherUserIds.contains(personId)) {
|
|
|
+ if (sourceIdMap.containsKey(personId)) {
|
|
|
// 老师记录
|
|
|
LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
|
|
|
- String attendanceStatus = discernTeacherStatus(recordTimeDate, status, personId);
|
|
|
+ String attendanceStatus = discernTeacherStatus(recordTimeDate, status, sourceIdMap.get(personId));
|
|
|
teacherInsertRecord(personId, recordTimeStr, ApiUtil.GetRedirectURL(uri),status,eventId, attendanceStatus);
|
|
|
} else {
|
|
|
// 学生记录
|
|
|
LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
|
|
|
- String attendanceStatus = discernStudentStatus(recordTimeDate, status, personId);
|
|
|
+ String attendanceStatus = discernStudentStatus(recordTimeDate, status, sourceIdMap.get(personId));
|
|
|
studentInsertRecord(personId, faceImportMapper.GetTeacherIdByPersonId(personId),
|
|
|
faceImportMapper.GetClassIdByPersonId(personId), ApiUtil.GetRedirectURL(uri), recordTimeStr, status, eventId, attendanceStatus);
|
|
|
}
|
|
|
@@ -577,7 +593,12 @@ public class OutInRecordUtil {
|
|
|
JsonObject paramsObject = data.getAsJsonObject("params");
|
|
|
JsonArray eventsArray = paramsObject.getAsJsonArray("events");
|
|
|
|
|
|
- List<Long> teacherUserIds = faceImportMapper.getTeacherUserIds();
|
|
|
+ String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
|
|
|
+ List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
+ Map<String, Long> sourceIdMap = new HashMap<>();
|
|
|
+ for (Map<String, Object> objectMap : list) {
|
|
|
+ sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
|
|
|
+ }
|
|
|
for (JsonElement eventElement : eventsArray) {
|
|
|
JsonObject eventObject = eventElement.getAsJsonObject();
|
|
|
JsonObject dataObject = eventObject.getAsJsonObject("data");
|
|
|
@@ -606,21 +627,22 @@ public class OutInRecordUtil {
|
|
|
|
|
|
if (idNum == null) continue;
|
|
|
|
|
|
- if (teacherUserIds.contains(Long.valueOf(idNum))) {
|
|
|
+ if (sourceIdMap.containsKey(idNum)) {
|
|
|
// 老师记录
|
|
|
LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
|
|
|
- String attendanceStatus = discernTeacherStatus(recordTimeDate, status, Long.valueOf(idNum));
|
|
|
- teacherInsertRecord(Long.valueOf(idNum), recordTimeStr, ApiUtil.GetRedirectURL(extEventPictureURL), status, eventId, attendanceStatus);
|
|
|
+ String attendanceStatus = discernTeacherStatus(recordTimeDate, status, sourceIdMap.get(idNum));
|
|
|
+ teacherInsertRecord(idNum, recordTimeStr, ApiUtil.GetRedirectURL(extEventPictureURL), status, eventId, attendanceStatus);
|
|
|
} else {
|
|
|
// 学生记录
|
|
|
LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
|
|
|
- String attendanceStatus = discernStudentStatus(recordTimeDate, status, Long.valueOf(idNum));
|
|
|
- studentInsertRecord(Long.valueOf(idNum), faceImportMapper.GetTeacherIdByPersonId(Long.valueOf(idNum)),
|
|
|
- faceImportMapper.GetClassIdByPersonId(Long.valueOf(idNum)), ApiUtil.GetRedirectURL(extEventPictureURL), recordTimeStr, status, eventId, attendanceStatus);
|
|
|
+ String attendanceStatus = discernStudentStatus(recordTimeDate, status, sourceIdMap.get(idNum));
|
|
|
+ studentInsertRecord(idNum, faceImportMapper.GetTeacherIdByPersonId(idNum),
|
|
|
+ faceImportMapper.GetClassIdByPersonId(idNum), ApiUtil.GetRedirectURL(extEventPictureURL), recordTimeStr, status, eventId, attendanceStatus);
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ Log.error(e.getMessage(), e);
|
|
|
+ throw new MyException("海康出入记录同步报错");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -816,6 +838,12 @@ public class OutInRecordUtil {
|
|
|
public void getTeacherRecords(FaceImportMapper faceImportMapper, LocalDateTime startDateTime, LocalDateTime endDateTime,
|
|
|
Map<Long, AttendanceRuleDetailsUserVo> teacherRules) throws ParseException {
|
|
|
JsonArray responseBuilder = new JsonArray();
|
|
|
+ String sql = "SELECT hikvision_id,source_id FROM hikvision_data WHERE table_name = 'base_teacher'";
|
|
|
+ List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql);
|
|
|
+ Map<String, Long> sourceIdMap = new HashMap<>();
|
|
|
+ for (Map<String, Object> objectMap : list) {
|
|
|
+ sourceIdMap.put(objectMap.get("hikvision_id").toString(), Long.parseLong(objectMap.get("source_id").toString()));
|
|
|
+ }
|
|
|
|
|
|
AtomicInteger pageNo = new AtomicInteger(1);
|
|
|
int pageSize = 1000;
|
|
|
@@ -838,14 +866,14 @@ public class OutInRecordUtil {
|
|
|
InsertTeacherStudentRecords(responseBuilder, faceImportMapper);
|
|
|
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
- List<Long> teacherUserIds = faceImportMapper.getTeacherUserIds();
|
|
|
+ List<String> teacherUserIds = faceImportMapper.getTeacherUserIds();
|
|
|
List<String> insertSqls = new ArrayList<>();
|
|
|
for (JsonElement element : responseBuilder) {
|
|
|
JsonObject item = element.getAsJsonObject();
|
|
|
|
|
|
- Long personId;
|
|
|
+ String personId;
|
|
|
try {
|
|
|
- personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsLong();
|
|
|
+ personId = item.get("personId").isJsonNull() ? null : item.get("personId").getAsString();
|
|
|
}catch (Exception e){
|
|
|
continue;
|
|
|
}
|
|
|
@@ -869,7 +897,7 @@ public class OutInRecordUtil {
|
|
|
if (teacherUserIds.contains(personId)) {
|
|
|
// 老师记录
|
|
|
LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
|
|
|
- String attendanceStatus = discernTeacherStatus(recordTimeDate, status, teacherRules.get(personId));
|
|
|
+ String attendanceStatus = discernTeacherStatus(recordTimeDate, status, teacherRules.get(sourceIdMap.get(personId)));
|
|
|
String insSql = "INSERT INTO teacher_out_in_record(create_date, user_id, record_time, face_photo, eventId, status,delete_mark,enabled_mark, attendance_status) "
|
|
|
+ "select now(), '" + personId + "', '" + recordTimeStr + "', '" +
|
|
|
ApiUtil.GetRedirectURL(uri) + "', '" + eventId + "', '" +status + "',0,1,'" + attendanceStatus + "'" +
|