perf:glados签到优化

This commit is contained in:
Xiang
2025-12-09 11:09:21 +08:00
parent b2b1921c32
commit dd99d2609b
5 changed files with 87 additions and 10 deletions

View File

@@ -19,7 +19,7 @@ public class GladosCheckInJob {
private final GLaDOSService glaDOSService;
@Scheduled(cron = "0 0 8,16 1/1 * ?")
@Scheduled(cron = "0 0 7 1/1 * ?")
public void checkInJon() {
log.info("[job] Glados Check In Job start, time:{}", LocalDateTime.now());
glaDOSService.checkIn();

View File

@@ -2,13 +2,13 @@ package com.xiang.xservice.application.script.glados.service;
import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Maps;
import com.xiang.xservice.basic.utils.HttpUtils;
import com.xiang.xservice.application.script.glados.common.GladosConstants;
import com.xiang.xservice.application.script.glados.common.URLConstants;
import com.xiang.xservice.application.script.glados.entity.GladosRunLog;
import com.xiang.xservice.application.script.glados.entity.resp.GLaDOSResponse;
import com.xiang.xservice.application.script.glados.repository.GladosMapper;
import com.xiang.xservice.application.script.xb.entity.pojo.User;
import com.xiang.xservice.basic.utils.HttpUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -46,7 +46,16 @@ public class GLaDOSServiceImpl implements GLaDOSService{
StringBuffer sb = new StringBuffer();
users.parallelStream().forEach(user -> {
try {
checkIn(user, sb);
for (int i = 0; i < 3; i++) {
if (checkIn(user, sb)) {
break;
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
log.error("线程暂停10s失败");
}
}
} catch (Exception e) {
log.error("签到失败,", e);
}
@@ -54,7 +63,7 @@ public class GLaDOSServiceImpl implements GLaDOSService{
return sb.toString();
}
private void checkIn(User user, StringBuffer sb) {
private boolean checkIn(User user, StringBuffer sb) {
Map<String, String> header = Maps.newHashMap();
header.put("Cookie", user.getCookie());
@@ -72,6 +81,8 @@ public class GLaDOSServiceImpl implements GLaDOSService{
GLaDOSResponse gLaDOSResponse =JSONObject.parseObject(response, GLaDOSResponse.class);
if (Objects.nonNull(gLaDOSResponse)) {
log.info("http do post success, response:{}", response);
// 成功签到记录
if (0 == gLaDOSResponse.getCode() && Objects.nonNull(gLaDOSResponse.getPoints())) {
log.info("签到成功, 签到积分:{}, 签到消息:{}", gLaDOSResponse.getPoints(), gLaDOSResponse.getMessage());
sb.append(user.getEmail()).append("签到成功,获得积分:").append(gLaDOSResponse.getPoints()).append("\n");
@@ -81,11 +92,27 @@ public class GLaDOSServiceImpl implements GLaDOSService{
} catch (Exception e) {
log.error("发送钉钉消息失败", e);
}
GladosRunLog build = GladosRunLog.builder().time(LocalDateTime.now()).status(1).code(Integer.valueOf(gLaDOSResponse.getCode().toString())).response(response).user(user.getEmail()).userId(user.getId()).build();
gladosMapper.insertScriptRunLog(build);
return Boolean.TRUE;
}
// 重复签到,表示当日签到成功
if (1 == gLaDOSResponse.getCode()) {
log.warn("签到失败,重复签到,用户:{}, 签到消息:{}", user.getEmail(), gLaDOSResponse.getMessage());
sb.append(user).append("签到失败,重复签到,用户:").append(user).append(",签到消息:").append(gLaDOSResponse.getMessage());
try {
dingTalkService.sendScriptMsg("[时间:" + LocalDateTime.now() + "] 用户: " +
user.getEmail() + "当天已经签到成功!获得积分" + gLaDOSResponse.getList().get(0));
} catch (Exception e) {
log.error("发送钉钉消息失败", e);
}
GladosRunLog build = GladosRunLog.builder().time(LocalDateTime.now()).status(1).code(Integer.valueOf(gLaDOSResponse.getCode().toString())).response(response).user(user.getEmail()).userId(user.getId()).build();
gladosMapper.insertScriptRunLog(build);
return Boolean.TRUE;
}
// cookie过期
if (-2 == gLaDOSResponse.getCode()) {
log.warn("签到失败,用户:{}, cookie过期:{}", user.getEmail(), gLaDOSResponse.getMessage());
String message = "[时间:" + LocalDateTime.now() + "] 用户: " + user.getEmail() + ",签到消息: " + gLaDOSResponse.getMessage();
@@ -95,15 +122,25 @@ public class GLaDOSServiceImpl implements GLaDOSService{
log.error("发送钉钉消息失败", e);
}
}
// 其余的异常情况
if (gLaDOSResponse.getCode() != 1) {
log.warn("签到异常,返回的消息:{}", gLaDOSResponse.getMessage());
sb.append(user.getEmail()).append("签到异常,返回的消息:").append(gLaDOSResponse.getMessage()).append("\n");
}
GladosRunLog build = GladosRunLog.builder().time(LocalDateTime.now()).status(1).code(Integer.valueOf(gLaDOSResponse.getCode().toString())).response(response).user(user.getEmail()).userId(user.getId()).build();
GladosRunLog build = GladosRunLog.builder().time(LocalDateTime.now()).status(0).code(Integer.valueOf(gLaDOSResponse.getCode().toString())).response(response).user(user.getEmail()).userId(user.getId()).build();
gladosMapper.insertScriptRunLog(build);
return;
return Boolean.FALSE;
} else {
try {
String mes = "[时间:" + LocalDateTime.now() + "] 用户: " + user.getEmail() + ",签到异常,请求结果为空。";
dingTalkService.sendScriptMsg(mes);
} catch (Exception e) {
log.error("发送钉钉消息失败", e);
}
}
GladosRunLog build = GladosRunLog.builder().time(LocalDateTime.now()).status(0).response(response).user(user.getEmail()).userId(user.getId()).build();
gladosMapper.insertScriptRunLog(build);
return Boolean.FALSE;
}
}

View File

@@ -76,7 +76,8 @@ public class FundInfoQueryJob {
if (DateUtils.validWeekTime()) return;
LocalDate now = LocalDate.now();
com.alibaba.fastjson.JSONObject dayResult = (com.alibaba.fastjson.JSONObject) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY + RedisConstant.getDate4Key(), DateUtils.getDateFromDate(now));
if (com.xiang.xservice.common.utils.DateUtils.validHoliday(JSON.toJavaObject(dayResult, DayResult.class))) return;
com.xiang.xservice.common.utils.DateUtils dateUtils = new com.xiang.xservice.common.utils.DateUtils();
if (dateUtils.validHoliday(JSON.toJavaObject(dayResult, DayResult.class))) return;
List<com.xiang.xservice.application.script.xb.entity.pojo.xb.FundInfo> fundInfos = xbFundMapper.queryListIn2Min();
if (CollectionUtils.isEmpty(fundInfos)) {

View File

@@ -1,16 +1,50 @@
package com.xiang.xservice.common.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xiang.xservice.cache.service.IRedisService;
import com.xiang.xservice.common.entity.DayResult;
import com.xiang.xservice.common.enums.RedisConstant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDate;
/**
* @Author: xiang
* @Date: 2025-10-04 10:34
*/
@Slf4j
@RequiredArgsConstructor
public class DateUtils {
public static Boolean validHoliday(DayResult result) {
return com.xiang.xservice.basic.utils.DateUtils.validHolidayTime(
result.getDate(), result.getStatusDesc(), result.getWeek(), result.getStatus());
private IRedisService redisService;
public Boolean validHoliday(DayResult result) {
LocalDate now = LocalDate.now();
JSONObject dayResult = (JSONObject) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY + RedisConstant.getDate4Key(), com.xiang.xservice.basic.utils.DateUtils.getDateFromDate(now));
DayResult day = JSON.toJavaObject(dayResult, DayResult.class);
if (validHolidayTime(day.getDate(), day.getStatusDesc(), day.getWeek(), day.getStatus()))
return Boolean.TRUE;
return Boolean.FALSE;
}
private Boolean validHolidayTime(String date, String statusDesc, String week, String status) {
if (StringUtils.equals(status, "1")) {
return Boolean.TRUE;
}
if (StringUtils.equals(status, "2")) {
log.info("当前日期:{}, {}, 是工作日", date, week);
return Boolean.FALSE;
}
if (StringUtils.isEmpty(status)) {
if (StringUtils.equals(week, "周六") || StringUtils.equals(week, "周日")) {
log.info("当前日期:{}, {}, 是周末", date, week);
return Boolean.TRUE;
}
return Boolean.FALSE;
}
return Boolean.TRUE;
}
}