|
@@ -134,41 +134,43 @@ public class Out_In_RecordUtil {
|
|
|
List<AttendanceRuleDetails> ruleDetailsList = use.query(sql, AttendanceRuleDetails.class);
|
|
|
if(!ruleDetailsList.isEmpty()){
|
|
|
AttendanceRuleDetails ruleDetails = ruleDetailsList.get(0);
|
|
|
- if(ruleDetails.getIsAttendance() != null && ruleDetails.getIsAttendance() == 0){
|
|
|
- attendanceStatus = "不考勤";
|
|
|
- }else{
|
|
|
- LocalDateTime amStartTime = null, amEndTime = null, pmStartTime = null, pmEndTime = null, eveningStartTime = null, eveningEndTime = null;
|
|
|
- if(ruleDetails.getAmStatus() != null && ruleDetails.getAmStatus() == 1){
|
|
|
- amStartTime = recordTime.withHour(ruleDetails.getAmStartTime().getHour())
|
|
|
- .withMinute(ruleDetails.getAmStartTime().getMinute())
|
|
|
- .withSecond(ruleDetails.getAmStartTime().getSecond());
|
|
|
- amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().getHour())
|
|
|
- .withMinute(ruleDetails.getAmEndTime().getMinute())
|
|
|
- .withSecond(ruleDetails.getAmEndTime().getSecond());
|
|
|
- }
|
|
|
- if(ruleDetails.getPmStatus() != null && ruleDetails.getPmStatus() == 1){
|
|
|
- pmStartTime = recordTime.withHour(ruleDetails.getPmStartTime().getHour())
|
|
|
- .withMinute(ruleDetails.getPmStartTime().getMinute())
|
|
|
- .withSecond(ruleDetails.getPmStartTime().getSecond());
|
|
|
- pmEndTime = recordTime.withHour(ruleDetails.getPmEndTime().getHour())
|
|
|
- .withMinute(ruleDetails.getPmEndTime().getMinute())
|
|
|
- .withSecond(ruleDetails.getPmEndTime().getSecond());
|
|
|
- }
|
|
|
- if(status == 0){//出
|
|
|
- if(recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)){
|
|
|
- attendanceStatus = "早退";
|
|
|
- }else if(recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)){
|
|
|
- attendanceStatus = "早退";
|
|
|
- }else{
|
|
|
- attendanceStatus = "离校";
|
|
|
+ if (ruleDetails != null) {
|
|
|
+ if (ruleDetails.getIsAttendance() != null && ruleDetails.getIsAttendance() == 0) {
|
|
|
+ attendanceStatus = "不考勤";
|
|
|
+ } else {
|
|
|
+ LocalDateTime amStartTime = null, amEndTime = null, pmStartTime = null, pmEndTime = null, eveningStartTime = null, eveningEndTime = null;
|
|
|
+ if (ruleDetails.getAmStatus() != null && ruleDetails.getAmStatus() == 1) {
|
|
|
+ amStartTime = recordTime.withHour(ruleDetails.getAmStartTime().getHour())
|
|
|
+ .withMinute(ruleDetails.getAmStartTime().getMinute())
|
|
|
+ .withSecond(ruleDetails.getAmStartTime().getSecond());
|
|
|
+ amEndTime = recordTime.withHour(ruleDetails.getAmEndTime().getHour())
|
|
|
+ .withMinute(ruleDetails.getAmEndTime().getMinute())
|
|
|
+ .withSecond(ruleDetails.getAmEndTime().getSecond());
|
|
|
}
|
|
|
- }else{//进
|
|
|
- if(recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)){
|
|
|
- attendanceStatus = "迟到";
|
|
|
- }else if(recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)){
|
|
|
- attendanceStatus = "迟到";
|
|
|
- }else{
|
|
|
- attendanceStatus = "到校";
|
|
|
+ if (ruleDetails.getPmStatus() != null && ruleDetails.getPmStatus() == 1) {
|
|
|
+ pmStartTime = recordTime.withHour(ruleDetails.getPmStartTime().getHour())
|
|
|
+ .withMinute(ruleDetails.getPmStartTime().getMinute())
|
|
|
+ .withSecond(ruleDetails.getPmStartTime().getSecond());
|
|
|
+ pmEndTime = recordTime.withHour(ruleDetails.getPmEndTime().getHour())
|
|
|
+ .withMinute(ruleDetails.getPmEndTime().getMinute())
|
|
|
+ .withSecond(ruleDetails.getPmEndTime().getSecond());
|
|
|
+ }
|
|
|
+ if (status == 0) {//出
|
|
|
+ if (recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)) {
|
|
|
+ attendanceStatus = "早退";
|
|
|
+ } else if (recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)) {
|
|
|
+ attendanceStatus = "早退";
|
|
|
+ } else {
|
|
|
+ attendanceStatus = "离校";
|
|
|
+ }
|
|
|
+ } else {//进
|
|
|
+ if (recordTime.isBefore(amEndTime) && recordTime.isAfter(amStartTime)) {
|
|
|
+ attendanceStatus = "迟到";
|
|
|
+ } else if (recordTime.isBefore(pmEndTime) && recordTime.isAfter(pmStartTime)) {
|
|
|
+ attendanceStatus = "迟到";
|
|
|
+ } else {
|
|
|
+ attendanceStatus = "到校";
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -403,7 +405,7 @@ public class Out_In_RecordUtil {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- JsonElement facePicUriElement = item.get("facePicUri");
|
|
|
+ JsonElement facePicUriElement = item.get("plateNoPicUri");
|
|
|
String facePicUri;
|
|
|
if (facePicUriElement == null || facePicUriElement.isJsonNull()) {
|
|
|
facePicUri = "null";
|
|
@@ -449,44 +451,52 @@ public class Out_In_RecordUtil {
|
|
|
}
|
|
|
|
|
|
public void GetTeacherAndStudentRecordsTest(Db use, FaceImportMapper faceImportMapper, String data) throws SQLException, ParseException {
|
|
|
- if (data == null || data.trim().isEmpty()) {
|
|
|
- log.warn("Empty data string, skipping processing");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
try {
|
|
|
- JsonElement responseElement = new Gson().fromJson(data, JsonElement.class);
|
|
|
-
|
|
|
- if (!responseElement.isJsonObject()) {
|
|
|
- log.error("Invalid JSON format, expected a JSON object");
|
|
|
- return;
|
|
|
- }
|
|
|
+ List<String> teacherEventIdList = faceImportMapper.GetTeacherUrlList();
|
|
|
+ List<String> studentEventIdList = faceImportMapper.GetStudentUrlList();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
- JsonObject responseObject = responseElement.getAsJsonObject();
|
|
|
+ JsonObject jsonObject = new Gson().fromJson(data, JsonObject.class);
|
|
|
+ JsonObject paramsObject = jsonObject.getAsJsonObject("params");
|
|
|
+ JsonArray eventsArray = paramsObject.getAsJsonArray("events");
|
|
|
|
|
|
- if (!responseObject.has("data") || !responseObject.get("data").isJsonObject()) {
|
|
|
- log.error("Missing or invalid 'data' field in JSON");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- JsonObject dataObject = responseObject.getAsJsonObject("data");
|
|
|
-
|
|
|
- if (!dataObject.has("list") || !dataObject.get("list").isJsonArray()) {
|
|
|
- log.error("Missing or invalid 'list' field in JSON");
|
|
|
- return;
|
|
|
- }
|
|
|
+ for (JsonElement eventElement : eventsArray) {
|
|
|
+ JsonObject eventObject = eventElement.getAsJsonObject();
|
|
|
+ JsonObject dataObject = eventObject.getAsJsonObject("data");
|
|
|
|
|
|
- JsonArray dataList = dataObject.getAsJsonArray("list");
|
|
|
- JsonArray responseBuilder = new JsonArray();
|
|
|
-
|
|
|
- for (JsonElement item : dataList) {
|
|
|
- responseBuilder.add(item);
|
|
|
+ String idNum = null;
|
|
|
+ if (dataObject.has("ExtEventPersonNo")) {
|
|
|
+ idNum = dataObject.get("ExtEventPersonNo").getAsString();
|
|
|
+ }
|
|
|
+ String happenTime = eventObject.get("happenTime").getAsString();
|
|
|
+ String extEventPictureURL = dataObject.get("ExtEventPictureURL").getAsString();
|
|
|
+ int status = eventObject.get("status").getAsInt();
|
|
|
+ String eventId = eventObject.get("eventId").getAsString();
|
|
|
+ String recordTimeStr = ChangeTime(happenTime);
|
|
|
+
|
|
|
+ if (idNum == null) continue;
|
|
|
+
|
|
|
+ if (!Objects.equals(faceImportMapper.IsStudentTypeByPersonId(Long.valueOf(idNum)), "学生")) {
|
|
|
+ // 老师记录
|
|
|
+ if (teacherEventIdList.contains(eventId)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
|
|
|
+ String attendanceStatus = discernTeacherStatus(use, recordTimeDate, status, Long.valueOf(idNum));
|
|
|
+ teacherInsertRecord(use, Long.valueOf(idNum), recordTimeStr, ApiUtil.GetRedirectURL(extEventPictureURL), status, eventId, attendanceStatus);
|
|
|
+ } else {
|
|
|
+ // 学生记录
|
|
|
+ if (studentEventIdList.contains(eventId)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ LocalDateTime recordTimeDate = LocalDateTime.parse(recordTimeStr, formatter);
|
|
|
+ String attendanceStatus = discernStudentStatus(use, recordTimeDate, status, Long.valueOf(idNum));
|
|
|
+ studentInsertRecord(use, Long.valueOf(idNum), faceImportMapper.GetTeacherIdByPersonId(Long.valueOf(idNum)),
|
|
|
+ faceImportMapper.GetClassIdByPersonId(Long.valueOf(idNum)), ApiUtil.GetRedirectURL(extEventPictureURL), recordTimeStr, status,eventId, attendanceStatus);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- InsertTeacherStudentRecords(use, responseBuilder, faceImportMapper);
|
|
|
-
|
|
|
} catch (Exception e) {
|
|
|
- log.error("Error processing JSON data", e);
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|