diff --git a/pom.xml b/pom.xml index 287aa46..ff400d1 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,11 @@ + + com.xiang.pom + xmc-common + 1.0-SNAPSHOT + com.xiang xservice-common diff --git a/script/src/main/java/com/xiang/xservice/application/script/glados/schedule/GladosCheckInJob.java b/script/src/main/java/com/xiang/xservice/application/script/glados/schedule/GladosCheckInJob.java index daf878d..f6d7cb2 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/glados/schedule/GladosCheckInJob.java +++ b/script/src/main/java/com/xiang/xservice/application/script/glados/schedule/GladosCheckInJob.java @@ -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(); diff --git a/script/src/main/java/com/xiang/xservice/application/script/glados/service/GLaDOSServiceImpl.java b/script/src/main/java/com/xiang/xservice/application/script/glados/service/GLaDOSServiceImpl.java index b83407e..5af649f 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/glados/service/GLaDOSServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/application/script/glados/service/GLaDOSServiceImpl.java @@ -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 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; } } diff --git a/script/src/main/java/com/xiang/xservice/application/script/xb/schedule/xb/FundInfoQueryJob.java b/script/src/main/java/com/xiang/xservice/application/script/xb/schedule/xb/FundInfoQueryJob.java index 07e6e7d..a5ecd43 100644 --- a/script/src/main/java/com/xiang/xservice/application/script/xb/schedule/xb/FundInfoQueryJob.java +++ b/script/src/main/java/com/xiang/xservice/application/script/xb/schedule/xb/FundInfoQueryJob.java @@ -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 fundInfos = xbFundMapper.queryListIn2Min(); if (CollectionUtils.isEmpty(fundInfos)) { diff --git a/script/src/main/java/com/xiang/xservice/common/utils/DateUtils.java b/script/src/main/java/com/xiang/xservice/common/utils/DateUtils.java index e83b6d8..6b55a9c 100644 --- a/script/src/main/java/com/xiang/xservice/common/utils/DateUtils.java +++ b/script/src/main/java/com/xiang/xservice/common/utils/DateUtils.java @@ -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; } }