|
|
@@ -88,13 +88,11 @@ public class ScheduleController {
|
|
|
@Transactional(rollbackFor = {Exception.class})
|
|
|
public void autoDispatch() throws Exception {
|
|
|
|
|
|
- logger.info("1");
|
|
|
+ logger.info("执行希沃考勤拉取");
|
|
|
Date dateNow = new Date();
|
|
|
- logger.info("2");
|
|
|
String getDate = TimeExchange.getDate();
|
|
|
try {
|
|
|
if (scheduleConfig.getIsOpen().equals("1")) {
|
|
|
- logger.info("3");
|
|
|
List<SmartAttendance> attendances = new ArrayList<>();
|
|
|
List<Integer> deleteAttendances = new ArrayList<>();
|
|
|
//判断当前月份是九月前还是九月后 九月前就不包括本年
|
|
|
@@ -111,46 +109,42 @@ public class ScheduleController {
|
|
|
gradeNames.add((yearNow.intValue() - 2) + "级");
|
|
|
gradeNames.add((yearNow.intValue() - 3) + "级");
|
|
|
}
|
|
|
- logger.info("4");
|
|
|
List<Integer> gradeIs = new ArrayList<>();
|
|
|
List<String> gradeIds = new ArrayList<>();
|
|
|
List<SmartGrade> grades = smartGradeService.getSmartGrades(gradeNames);
|
|
|
- logger.info("5");
|
|
|
+
|
|
|
for (SmartGrade data : grades) {
|
|
|
- gradeIds.add(data.getId()+"");
|
|
|
+ gradeIds.add(data.getId() + "");
|
|
|
gradeIs.add(data.getId());
|
|
|
}
|
|
|
List<SmartUser> students = smartUserService.queryStudentsByGrade(gradeIds);
|
|
|
- logger.info("6");
|
|
|
+
|
|
|
// SmartUser studentData = smartUserService.getSmartById(1088);
|
|
|
// students.add(studentData);
|
|
|
|
|
|
//循环班级的classUid
|
|
|
List<SmartClass> classes = smartClassService.getSmartClasssByGrade(gradeIs);
|
|
|
- logger.info("7");
|
|
|
|
|
|
// SmartClass classData = smartClassService.getSmartClassById(204);
|
|
|
// classes.add(classData);
|
|
|
|
|
|
//当天已存在的考勤数据 判断是否重复使用
|
|
|
List<SmartAttendance> attendanceList = smartAttendanceService.queryAttendancesNoleave(TimeExchange.getStartOfDayStr(dateNow), TimeExchange.getEndOfDayStr(dateNow));
|
|
|
- logger.info("8");
|
|
|
+
|
|
|
for (SmartClass data : classes) {
|
|
|
- logger.info("循环1");
|
|
|
Optional<SmartGrade> oGrade = grades.stream().filter(e -> e.getId().equals(data.getGradeId())).findFirst();
|
|
|
- logger.info("循环2");
|
|
|
//region 获取考勤事件ID
|
|
|
//初始化客户端
|
|
|
SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
|
|
|
- logger.info("循环3");
|
|
|
+
|
|
|
AttendanceRuleListEventByClazzParam param = new AttendanceRuleListEventByClazzParam();
|
|
|
- logger.info("循环4");
|
|
|
+
|
|
|
//响应体,MimeType为 application/json
|
|
|
AttendanceRuleListEventByClazzParam.RequestBody requestBody = AttendanceRuleListEventByClazzParam.RequestBody.builder()
|
|
|
.build();
|
|
|
- logger.info("循环5");
|
|
|
+
|
|
|
param.setRequestBody(requestBody);
|
|
|
- logger.info("循环6");
|
|
|
+
|
|
|
//query
|
|
|
AttendanceRuleListEventByClazzParam.Query query = AttendanceRuleListEventByClazzParam.Query.builder()
|
|
|
.appId(seewoConfig.getAppId())
|
|
|
@@ -160,11 +154,11 @@ public class ScheduleController {
|
|
|
.page(1)
|
|
|
.pageSize(20)
|
|
|
.build();
|
|
|
- logger.info("循环7");
|
|
|
+
|
|
|
requestBody.setQuery(query);
|
|
|
- logger.info("循环8");
|
|
|
+
|
|
|
AttendanceRuleListEventByClazzRequest request = new AttendanceRuleListEventByClazzRequest(param);
|
|
|
- logger.info("循环9");
|
|
|
+
|
|
|
// 该接口需要数据权限,请将授权资源id替换至下方,请妥善保管好授权资源id,避免泄露
|
|
|
// permissionId位置: 控制台 -> 应用详情 -> 我申请的 -> 已通过的接口 -> 调用范围 -> 审批信息 中查看授权资源的「学校id」或「区域id」
|
|
|
request.setPermissionId("");
|
|
|
@@ -176,19 +170,19 @@ public class ScheduleController {
|
|
|
|
|
|
//考勤事件ID
|
|
|
List<AttendanceRuleListEventByClazzResult.DataItem> eventItems = new ArrayList<>();
|
|
|
- logger.info("循环10");
|
|
|
+
|
|
|
if (result != null && result.getResponseBody().getCode().equals("000000")) {
|
|
|
- logger.info("循环11");
|
|
|
+
|
|
|
if (result.getResponseBody().getData() != null) {
|
|
|
- logger.info("循环12");
|
|
|
+
|
|
|
eventItems = result.getResponseBody().getData();
|
|
|
- logger.info("循环13");
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
//endregion
|
|
|
|
|
|
for (AttendanceRuleListEventByClazzResult.DataItem eventId : eventItems) {
|
|
|
- logger.info("循环14");
|
|
|
+
|
|
|
//判断考勤是否开始 用考勤事件的开始时间和当前时间判断 考勤规则开始生效了才拉取
|
|
|
Date eventStartTime = TimeExchange.StringToDate((getDate + " " + eventId.getAttendStartTime() + ":00"), "yyyy-MM-dd HH:mm:ss");
|
|
|
Date nowDate = dateNow;
|
|
|
@@ -196,20 +190,18 @@ public class ScheduleController {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- logger.info("循环15");
|
|
|
/**
|
|
|
* 定时获取考勤
|
|
|
*/
|
|
|
//初始化客户端
|
|
|
//SeewoClient seewoClient = new DefaultSeewoClient(new Account(seewoConfig.getAppId(), seewoConfig.getAppSecret()));
|
|
|
AttendanceServiceListAttendClassRecordsParam kParam = new AttendanceServiceListAttendClassRecordsParam();
|
|
|
- logger.info("循环16");
|
|
|
//响应体,MimeType为 application/json
|
|
|
AttendanceServiceListAttendClassRecordsParam.RequestBody kRequestBody = AttendanceServiceListAttendClassRecordsParam.RequestBody.builder()
|
|
|
.build();
|
|
|
- logger.info("循环17");
|
|
|
+
|
|
|
kParam.setRequestBody(kRequestBody);
|
|
|
- logger.info("循环18");
|
|
|
+
|
|
|
//query
|
|
|
AttendanceServiceListAttendClassRecordsParam.Query kQuery = AttendanceServiceListAttendClassRecordsParam.Query.builder()
|
|
|
.eventId(eventId.getRuleId())//考勤事件ID 固定写死
|
|
|
@@ -220,11 +212,10 @@ public class ScheduleController {
|
|
|
.schoolUid(seewoConfig.getSchoolId())//学校uid
|
|
|
.attendType(1)//考勤类型 时间考勤(默认):1 课程考勤:2
|
|
|
.build();
|
|
|
- logger.info("循环19");
|
|
|
kRequestBody.setQuery(kQuery);
|
|
|
- logger.info("循环20");
|
|
|
+
|
|
|
kParam.setRequestBody(kRequestBody);
|
|
|
- logger.info("循环21");
|
|
|
+
|
|
|
AttendanceServiceListAttendClassRecordsRequest kRequest = new AttendanceServiceListAttendClassRecordsRequest(kParam);
|
|
|
logger.info("入参1:" + kRequest);
|
|
|
//如果想要调用沙箱环境,请通过设置 request 对象的 serverUrl 属性,如:
|
|
|
@@ -234,70 +225,67 @@ public class ScheduleController {
|
|
|
logger.info("出参1:" + kResult);
|
|
|
|
|
|
if (kResult != null && kResult.getResponseBody().getCode().equals("000000")) {
|
|
|
- logger.info("循环22");
|
|
|
+
|
|
|
List<AttendanceServiceListAttendClassRecordsResult.RecordsItem> items = kResult.getResponseBody().getData().getRecords();
|
|
|
- logger.info("循环23");
|
|
|
+
|
|
|
if (students != null && students.size() > 0 && items != null && items.size() > 0) {
|
|
|
- logger.info("循环24");
|
|
|
+
|
|
|
List<String> uids = items.stream().map(AttendanceServiceListAttendClassRecordsResult.RecordsItem::getUserUid).distinct().collect(Collectors.toList());
|
|
|
- logger.info("循环25");
|
|
|
+
|
|
|
for (String uid : uids) {
|
|
|
- logger.info("uid"+uid);
|
|
|
- if(!org.springframework.util.StringUtils.hasText(uid)){
|
|
|
- logger.info("循环25.5");
|
|
|
+
|
|
|
+ if (!org.springframework.util.StringUtils.hasText(uid)) {
|
|
|
continue;
|
|
|
}
|
|
|
- logger.info("循环26");
|
|
|
+
|
|
|
Optional<SmartUser> student = students.stream().filter(e -> e.getXwStudentUid().equals(uid)).findFirst();
|
|
|
- logger.info("循环27");
|
|
|
+
|
|
|
if (student != null && student.isPresent()) {
|
|
|
- logger.info("循环28");
|
|
|
+
|
|
|
List<SmartAttendance> oldAttends = attendanceList.stream().filter(e -> e.getUserId().equals(student.get().getId())
|
|
|
&& e.getRuleId() != null && e.getRuleId().equals(eventId.getRuleId())).collect(Collectors.toList());
|
|
|
- logger.info("循环29");
|
|
|
+
|
|
|
List<AttendanceServiceListAttendClassRecordsResult.RecordsItem> newAttends = items.stream().filter(e -> e.getUserUid().equals(student.get().getXwStudentUid())).collect(Collectors.toList());
|
|
|
- logger.info("循环30");
|
|
|
+
|
|
|
if (newAttends != null && newAttends.size() > 0) {
|
|
|
int i = 0;
|
|
|
for (AttendanceServiceListAttendClassRecordsResult.RecordsItem newAttend : newAttends) {
|
|
|
- logger.info("循环31");
|
|
|
+
|
|
|
if (oldAttends.size() > i) {
|
|
|
- logger.info("循环32");
|
|
|
+
|
|
|
SmartAttendance oldData = new SmartAttendance();
|
|
|
- logger.info("循环33");
|
|
|
+
|
|
|
oldData = oldAttends.get(i);
|
|
|
- logger.info("循环34");
|
|
|
+
|
|
|
if (newAttend.getStatus().intValue() != 6) {
|
|
|
- logger.info("循环35");
|
|
|
+
|
|
|
boolean isUpdate = false;
|
|
|
Date AttendTime = StringUtils.hasText(newAttend.getAttendTime()) ? TimeExchange.StringToDate((getDate + " " + newAttend.getAttendTime()), "yyyy-MM-dd HH:mm:ss") : TimeExchange.StringToDate((getDate + " " + eventId.getAttendEndTime() + ":00"), "yyyy-MM-dd HH:mm:ss");
|
|
|
- logger.info("循环36");
|
|
|
+
|
|
|
if (oldData.getAttendTime().compareTo(AttendTime) != 0) {
|
|
|
oldData.setAttendTime(AttendTime);
|
|
|
isUpdate = true;
|
|
|
}
|
|
|
- logger.info("循环37");
|
|
|
+
|
|
|
if (newAttend.getStatus().intValue() != oldData.getStatus()) {
|
|
|
oldData.setStatus(newAttend.getStatus());
|
|
|
isUpdate = true;
|
|
|
}
|
|
|
- logger.info("循环38");
|
|
|
+
|
|
|
if (!eventId.getRuleId().equals(oldData.getRuleId())) {
|
|
|
oldData.setRuleId(eventId.getRuleId());
|
|
|
isUpdate = true;
|
|
|
}
|
|
|
- logger.info("循环39");
|
|
|
+
|
|
|
if (isUpdate) {
|
|
|
attendances.add(oldData);
|
|
|
}
|
|
|
- logger.info("循环40");
|
|
|
+
|
|
|
} else {
|
|
|
deleteAttendances.add(oldData.getId());
|
|
|
}
|
|
|
} else {
|
|
|
- logger.info("循环41");
|
|
|
if (newAttend.getStatus().intValue() != 6) {//请假数据不通过考勤接口拿 因为考勤给的请假数据没有请假原因和请假时长
|
|
|
- logger.info("循环42");
|
|
|
SmartAttendance attendance = new SmartAttendance();
|
|
|
attendance.setUserId(student.get().getId());
|
|
|
attendance.setUserUid(newAttend.getUserUid());
|
|
|
@@ -308,9 +296,7 @@ public class ScheduleController {
|
|
|
attendance.setAttendTime(StringUtils.hasText(newAttend.getAttendTime()) ? TimeExchange.StringToDate((getDate + " " + newAttend.getAttendTime()), "yyyy-MM-dd HH:mm:ss") : TimeExchange.StringToDate((getDate + " " + eventId.getAttendEndTime() + ":00"), "yyyy-MM-dd HH:mm:ss"));
|
|
|
attendance.setStatus(newAttend.getStatus());
|
|
|
attendance.setRuleId(eventId.getRuleId());
|
|
|
- logger.info("循环43");
|
|
|
attendances.add(attendance);
|
|
|
- logger.info("循环44");
|
|
|
}
|
|
|
}
|
|
|
i++;
|
|
|
@@ -331,8 +317,7 @@ public class ScheduleController {
|
|
|
smartAttendanceService.deleteDatasByids(deleteAttendances);
|
|
|
}
|
|
|
}
|
|
|
- } catch (
|
|
|
- Exception e) {
|
|
|
+ } catch (Exception e) {
|
|
|
logger.info("考勤定时任务失败:" + e.getMessage());
|
|
|
throw new Exception("考勤定时任务失败" + e.getMessage());
|
|
|
}
|