diff --git a/src/main/java/com/xiang/common/enums/ScheduleEnums.java b/src/main/java/com/xiang/common/enums/ScheduleEnums.java index 7fa8e0e..684c88f 100644 --- a/src/main/java/com/xiang/common/enums/ScheduleEnums.java +++ b/src/main/java/com/xiang/common/enums/ScheduleEnums.java @@ -8,7 +8,7 @@ import lombok.Getter; public enum ScheduleEnums { DOMAIN_DYNAMIC_ANALYSIS_TASK(4, "domain", "domainDynamicAnalysisTask"), - + GLADOS_CHECK_IN_TASK(0, "glados", "gladosCheckInTask"), ; private final Integer modeleCode; diff --git a/src/main/java/com/xiang/common/factory/schedule/BaseScheduleTaskTemplate.java b/src/main/java/com/xiang/common/factory/schedule/BaseScheduleTaskTemplate.java index 1ce762c..1d07da0 100644 --- a/src/main/java/com/xiang/common/factory/schedule/BaseScheduleTaskTemplate.java +++ b/src/main/java/com/xiang/common/factory/schedule/BaseScheduleTaskTemplate.java @@ -1,9 +1,11 @@ package com.xiang.common.factory.schedule; import com.xiang.common.pojo.schedule.ScheduleOpeningConfigDO; +import com.xiang.common.pojo.schedule.ScheduleRunLogDO; import com.xiang.common.pojo.schedule.TaskResult; import com.xiang.common.pojo.schedule.ValidationResult; import com.xiang.common.service.IScheduleOpeningConfigService; +import com.xiang.common.service.IScheduleRunLogService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,9 +18,11 @@ public abstract class BaseScheduleTaskTemplate { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private final IScheduleOpeningConfigService scheduleOpeningConfigService; + private final IScheduleRunLogService scheduleRunLogService; - protected BaseScheduleTaskTemplate(IScheduleOpeningConfigService scheduleOpeningConfigService) { + protected BaseScheduleTaskTemplate(IScheduleOpeningConfigService scheduleOpeningConfigService, IScheduleRunLogService scheduleRunLogService) { this.scheduleOpeningConfigService = scheduleOpeningConfigService; + this.scheduleRunLogService = scheduleRunLogService; } @@ -70,6 +74,11 @@ public abstract class BaseScheduleTaskTemplate { * @return */ protected abstract Integer getModule(); + /** + * 获取模块名称(子类必须实现) + * @return + */ + protected abstract String getModuleName(); /** * 任务校验(子类必须实现) @@ -117,6 +126,14 @@ public abstract class BaseScheduleTaskTemplate { // 可在此扩展:写入数据库、发送通知等 // 例如:saveTaskLog(getTaskName(), "SUCCESS", duration, result.getDetail()); + ScheduleRunLogDO scheduleRunLogDO = new ScheduleRunLogDO(); + scheduleRunLogDO.setModuleName(getModuleName()); + scheduleRunLogDO.setTaskName(getTaskName()); + scheduleRunLogDO.setParams(result.getParams()); + scheduleRunLogDO.setResponse(result.getSummary()); + scheduleRunLogDO.setCreateTime(endTime); + scheduleRunLogDO.setRequestFlag(result.isSuccess() ? 1 : 0); + scheduleRunLogService.save(scheduleRunLogDO); } /** @@ -131,6 +148,15 @@ public abstract class BaseScheduleTaskTemplate { // 可在此扩展:写入数据库、发送告警等 // 例如:saveTaskLog(getTaskName(), "FAILURE", duration, e.getMessage()); + + ScheduleRunLogDO scheduleRunLogDO = new ScheduleRunLogDO(); + scheduleRunLogDO.setModuleName(getModuleName()); + scheduleRunLogDO.setTaskName(getTaskName()); +// scheduleRunLogDO.setParams(); + scheduleRunLogDO.setResponse(e.getMessage()); + scheduleRunLogDO.setCreateTime(endTime); + scheduleRunLogDO.setRequestFlag(0); + scheduleRunLogService.save(scheduleRunLogDO); } /** diff --git a/src/main/java/com/xiang/common/mapper/GladosRunLogDao.java b/src/main/java/com/xiang/common/mapper/GladosRunLogDao.java new file mode 100644 index 0000000..69a7f9a --- /dev/null +++ b/src/main/java/com/xiang/common/mapper/GladosRunLogDao.java @@ -0,0 +1,11 @@ +package com.xiang.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xiang.common.pojo.glados.GladosRunLogDO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface GladosRunLogDao extends BaseMapper { +} diff --git a/src/main/java/com/xiang/common/mapper/GladosUserDao.java b/src/main/java/com/xiang/common/mapper/GladosUserDao.java new file mode 100644 index 0000000..07881d6 --- /dev/null +++ b/src/main/java/com/xiang/common/mapper/GladosUserDao.java @@ -0,0 +1,17 @@ +package com.xiang.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xiang.common.pojo.glados.GladosUserDO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + + +/** + * @Author: xiang + * @Date: 2025-05-09 13:49 + */ +@Mapper +@Repository +public interface GladosUserDao extends BaseMapper { + +} diff --git a/src/main/java/com/xiang/common/mapper/ScheduleRunLogDao.java b/src/main/java/com/xiang/common/mapper/ScheduleRunLogDao.java new file mode 100644 index 0000000..8b0b6e6 --- /dev/null +++ b/src/main/java/com/xiang/common/mapper/ScheduleRunLogDao.java @@ -0,0 +1,11 @@ +package com.xiang.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.xiang.common.pojo.schedule.ScheduleRunLogDO; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface ScheduleRunLogDao extends BaseMapper { +} diff --git a/src/main/java/com/xiang/common/pojo/glados/GladosRunLogDO.java b/src/main/java/com/xiang/common/pojo/glados/GladosRunLogDO.java new file mode 100644 index 0000000..bb4d187 --- /dev/null +++ b/src/main/java/com/xiang/common/pojo/glados/GladosRunLogDO.java @@ -0,0 +1,47 @@ +package com.xiang.common.pojo.glados; + +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @Author: xiang + * @Date: 2025-05-09 13:56 + */ +@Data +@Builder +public class GladosRunLogDO { + + private static final long serialVersionUID = 1L; + + private Integer id; + + /** + * 用户id + */ + private Integer userId; + /** + * 用户 + */ + private String user; + + /** + * 请求的时间 + */ + private LocalDateTime time; + + /** + * 是否成功(0: 失败 1:成功) + */ + private Integer status; + + + private Integer code; + + /** + * 返回的响应 + */ + private String response; + +} diff --git a/src/main/java/com/xiang/common/pojo/glados/GladosUserDO.java b/src/main/java/com/xiang/common/pojo/glados/GladosUserDO.java new file mode 100644 index 0000000..9684fbf --- /dev/null +++ b/src/main/java/com/xiang/common/pojo/glados/GladosUserDO.java @@ -0,0 +1,24 @@ +package com.xiang.common.pojo.glados; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * @Author: xiang + * @Date: 2025-05-09 13:49 + */ +@Data +@TableName("glados_script_user") +public class GladosUserDO { + + private Integer id; + + private String user; + + private String email; + + private String cookie; + + private Integer status; + +} diff --git a/src/main/java/com/xiang/common/pojo/glados/req/GladosCheckInReq.java b/src/main/java/com/xiang/common/pojo/glados/req/GladosCheckInReq.java new file mode 100644 index 0000000..0e75bff --- /dev/null +++ b/src/main/java/com/xiang/common/pojo/glados/req/GladosCheckInReq.java @@ -0,0 +1,16 @@ +package com.xiang.common.pojo.glados.req; + +import lombok.Data; + +/** + * @Author: xiang + * @Date: 2025-05-08 15:22 + */ +@Data +public class GladosCheckInReq { + + /** + * cookie + */ + private String cookie; +} diff --git a/src/main/java/com/xiang/common/pojo/glados/resp/CheckInResp.java b/src/main/java/com/xiang/common/pojo/glados/resp/CheckInResp.java new file mode 100644 index 0000000..18aad27 --- /dev/null +++ b/src/main/java/com/xiang/common/pojo/glados/resp/CheckInResp.java @@ -0,0 +1,20 @@ +package com.xiang.common.pojo.glados.resp; + +import lombok.Data; + +/** + * @Author: xiang + * @Date: 2026-01-23 09:21 + */ +@Data +public class CheckInResp { + + private Long id; + private Long userId; + private Long time; + private String asset; + private String business; + private String change; + private String balance; + private String detail; +} diff --git a/src/main/java/com/xiang/common/pojo/glados/resp/GLaDOSResponse.java b/src/main/java/com/xiang/common/pojo/glados/resp/GLaDOSResponse.java new file mode 100644 index 0000000..9fae3eb --- /dev/null +++ b/src/main/java/com/xiang/common/pojo/glados/resp/GLaDOSResponse.java @@ -0,0 +1,21 @@ +package com.xiang.common.pojo.glados.resp; + +import lombok.Data; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-05-08 14:55 + */ +@Data +public class GLaDOSResponse { + + private Long code; + + private Integer points; + + private String message; + + private List list; +} diff --git a/src/main/java/com/xiang/common/pojo/schedule/ScheduleRunLogDO.java b/src/main/java/com/xiang/common/pojo/schedule/ScheduleRunLogDO.java new file mode 100644 index 0000000..f303534 --- /dev/null +++ b/src/main/java/com/xiang/common/pojo/schedule/ScheduleRunLogDO.java @@ -0,0 +1,22 @@ +package com.xiang.common.pojo.schedule; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@TableName("schedule_run_log") +public class ScheduleRunLogDO { + private Long id; + private String moduleName; + private String taskName; + private String params; + private String response; + private LocalDateTime createTime; + private Integer requestFlag; +} diff --git a/src/main/java/com/xiang/common/pojo/schedule/TaskResult.java b/src/main/java/com/xiang/common/pojo/schedule/TaskResult.java index e603973..cf52a25 100644 --- a/src/main/java/com/xiang/common/pojo/schedule/TaskResult.java +++ b/src/main/java/com/xiang/common/pojo/schedule/TaskResult.java @@ -8,10 +8,15 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class TaskResult { + + private String params; + /** * 是否成功 */ private boolean success; + /** + * 响应结果 + */ private String summary; - private Object detail; } diff --git a/src/main/java/com/xiang/common/service/IScheduleRunLogService.java b/src/main/java/com/xiang/common/service/IScheduleRunLogService.java new file mode 100644 index 0000000..420c001 --- /dev/null +++ b/src/main/java/com/xiang/common/service/IScheduleRunLogService.java @@ -0,0 +1,7 @@ +package com.xiang.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xiang.common.pojo.schedule.ScheduleRunLogDO; + +public interface IScheduleRunLogService extends IService { +} diff --git a/src/main/java/com/xiang/common/service/ScheduleRunLogServiceImpl.java b/src/main/java/com/xiang/common/service/ScheduleRunLogServiceImpl.java new file mode 100644 index 0000000..98c31fa --- /dev/null +++ b/src/main/java/com/xiang/common/service/ScheduleRunLogServiceImpl.java @@ -0,0 +1,10 @@ +package com.xiang.common.service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xiang.common.mapper.ScheduleRunLogDao; +import com.xiang.common.pojo.schedule.ScheduleRunLogDO; +import org.springframework.stereotype.Service; + +@Service +public class ScheduleRunLogServiceImpl extends ServiceImpl implements IScheduleRunLogService { +} diff --git a/src/main/java/com/xiang/service/module/domain/schedule/DomainDynamicAnalysisTask.java b/src/main/java/com/xiang/service/module/domain/schedule/DomainDynamicAnalysisTask.java index a5116ea..b41777f 100644 --- a/src/main/java/com/xiang/service/module/domain/schedule/DomainDynamicAnalysisTask.java +++ b/src/main/java/com/xiang/service/module/domain/schedule/DomainDynamicAnalysisTask.java @@ -4,6 +4,7 @@ import com.xiang.common.enums.ScheduleEnums; import com.xiang.common.factory.schedule.BaseScheduleTaskTemplate; import com.xiang.common.pojo.schedule.TaskResult; import com.xiang.common.service.IScheduleOpeningConfigService; +import com.xiang.common.service.IScheduleRunLogService; import com.xiang.common.utils.IpUtils; import com.xiang.service.module.domain.service.IDomainService; import lombok.extern.slf4j.Slf4j; @@ -15,8 +16,8 @@ import org.springframework.stereotype.Component; public class DomainDynamicAnalysisTask extends BaseScheduleTaskTemplate { private final IDomainService IDomainService; - public DomainDynamicAnalysisTask(IScheduleOpeningConfigService scheduleOpeningConfigService, IDomainService IDomainService) { - super(scheduleOpeningConfigService); + public DomainDynamicAnalysisTask(IScheduleOpeningConfigService scheduleOpeningConfigService, IScheduleRunLogService scheduleRunLogService, IDomainService IDomainService) { + super(scheduleOpeningConfigService, scheduleRunLogService); this.IDomainService = IDomainService; } @@ -25,6 +26,11 @@ public class DomainDynamicAnalysisTask extends BaseScheduleTaskTemplate { return ScheduleEnums.DOMAIN_DYNAMIC_ANALYSIS_TASK.getModeleCode(); } + @Override + protected String getModuleName() { + return ScheduleEnums.DOMAIN_DYNAMIC_ANALYSIS_TASK.getModule(); + } + @Override protected String getTaskName() { return ScheduleEnums.DOMAIN_DYNAMIC_ANALYSIS_TASK.getTaskName(); @@ -44,11 +50,13 @@ public class DomainDynamicAnalysisTask extends BaseScheduleTaskTemplate { IDomainService.dynamicDomainAnalysis(publicIp); } catch (Exception e) { log.error("动态解析公网ip失败, ip:{}", publicIp, e); + taskResult.setSuccess(false); + taskResult.setSummary(e.getMessage()); + return taskResult; } } taskResult.setSuccess(true); - taskResult.setSummary(""); - taskResult.setDetail(null); + taskResult.setSummary("ddns解析成功"); return taskResult; } diff --git a/src/main/java/com/xiang/service/module/glados/constants/GladosConstants.java b/src/main/java/com/xiang/service/module/glados/constants/GladosConstants.java new file mode 100644 index 0000000..76330c6 --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/constants/GladosConstants.java @@ -0,0 +1,23 @@ +package com.xiang.service.module.glados.constants; + +/** + * @Author: xiang + * @Date: 2025-05-08 15:27 + */ +public class GladosConstants { + + /** + * glados 主域名 + */ + private static final String GLADOS_URL_PREFIX = "https://glados.cloud"; + + /** + * 签到接口 + */ + public static final String GLADOS_CHECK_IN_URL = GLADOS_URL_PREFIX + "/api/user/checkin"; + + /** + * 签到请求体 + */ + public static final String GLADOS_CHECK_IN_BODY = "{\"token\":\"glados.cloud\"}"; +} diff --git a/src/main/java/com/xiang/service/module/glados/manage/GladosRunLogManageImpl.java b/src/main/java/com/xiang/service/module/glados/manage/GladosRunLogManageImpl.java new file mode 100644 index 0000000..86e20a5 --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/manage/GladosRunLogManageImpl.java @@ -0,0 +1,10 @@ +package com.xiang.service.module.glados.manage; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xiang.common.mapper.GladosRunLogDao; +import com.xiang.common.pojo.glados.GladosRunLogDO; +import org.springframework.stereotype.Service; + +@Service +public class GladosRunLogManageImpl extends ServiceImpl implements IGladosRunLogManage { +} diff --git a/src/main/java/com/xiang/service/module/glados/manage/GladosUserManageImpl.java b/src/main/java/com/xiang/service/module/glados/manage/GladosUserManageImpl.java new file mode 100644 index 0000000..8d69d6c --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/manage/GladosUserManageImpl.java @@ -0,0 +1,30 @@ +package com.xiang.service.module.glados.manage; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.IService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xiang.common.mapper.GladosUserDao; +import com.xiang.common.pojo.glados.GladosUserDO; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class GladosUserManageImpl extends ServiceImpl implements IGladosUserManage { + @Override + public List listAllUsers() { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(GladosUserDO::getStatus, 1); + return baseMapper.selectList(lqw); + } + + @Override + public GladosUserDO findByUsername(String username) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(GladosUserDO::getStatus, 1); + lqw.eq(GladosUserDO::getUser, username); + lqw.last("limit 1"); + return baseMapper.selectOne(lqw); + } +} diff --git a/src/main/java/com/xiang/service/module/glados/manage/IGladosRunLogManage.java b/src/main/java/com/xiang/service/module/glados/manage/IGladosRunLogManage.java new file mode 100644 index 0000000..e55f5ee --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/manage/IGladosRunLogManage.java @@ -0,0 +1,7 @@ +package com.xiang.service.module.glados.manage; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xiang.common.pojo.glados.GladosRunLogDO; + +public interface IGladosRunLogManage extends IService { +} diff --git a/src/main/java/com/xiang/service/module/glados/manage/IGladosUserManage.java b/src/main/java/com/xiang/service/module/glados/manage/IGladosUserManage.java new file mode 100644 index 0000000..42c5545 --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/manage/IGladosUserManage.java @@ -0,0 +1,13 @@ +package com.xiang.service.module.glados.manage; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xiang.common.pojo.glados.GladosUserDO; + +import java.util.List; + +public interface IGladosUserManage extends IService { + + List listAllUsers(); + + GladosUserDO findByUsername(String username); +} diff --git a/src/main/java/com/xiang/service/module/glados/schedule/GladosCheckInTask.java b/src/main/java/com/xiang/service/module/glados/schedule/GladosCheckInTask.java new file mode 100644 index 0000000..60be5e7 --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/schedule/GladosCheckInTask.java @@ -0,0 +1,46 @@ +package com.xiang.service.module.glados.schedule; + +import com.xiang.common.enums.ScheduleEnums; +import com.xiang.common.factory.schedule.BaseScheduleTaskTemplate; +import com.xiang.common.pojo.schedule.TaskResult; +import com.xiang.common.service.IScheduleOpeningConfigService; +import com.xiang.common.service.IScheduleRunLogService; +import com.xiang.service.module.glados.service.IGLaDOSService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @Author: xiang + * @Date: 2025-05-08 15:24 + */ +@Component +@Slf4j +public class GladosCheckInTask extends BaseScheduleTaskTemplate { + + private final IGLaDOSService glaDOSService; + + public GladosCheckInTask(IScheduleOpeningConfigService scheduleOpeningConfigService, IScheduleRunLogService scheduleRunLogService, IGLaDOSService glaDOSService) { + super(scheduleOpeningConfigService, scheduleRunLogService); + this.glaDOSService = glaDOSService; + } + + @Override + protected String getTaskName() { + return ScheduleEnums.GLADOS_CHECK_IN_TASK.getTaskName(); + } + + @Override + protected Integer getModule() { + return ScheduleEnums.GLADOS_CHECK_IN_TASK.getModeleCode(); + } + + @Override + protected String getModuleName() { + return ScheduleEnums.GLADOS_CHECK_IN_TASK.getModule(); + } + + @Override + protected TaskResult doExecute(Object validatedParams) { + return glaDOSService.checkIn(); + } +} diff --git a/src/main/java/com/xiang/service/module/glados/schedule/GladosSchedule.java b/src/main/java/com/xiang/service/module/glados/schedule/GladosSchedule.java new file mode 100644 index 0000000..26755e9 --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/schedule/GladosSchedule.java @@ -0,0 +1,23 @@ +package com.xiang.service.module.glados.schedule; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@Component +@Slf4j +@RequiredArgsConstructor +@RestController +public class GladosSchedule { + + private final GladosCheckInTask gladosCheckInJob; + + @Scheduled(cron = "0 0 7 1/1 * ?") + @GetMapping("/test1") + public void checkIn() { + gladosCheckInJob.run(); + } +} diff --git a/src/main/java/com/xiang/service/module/glados/server/GladosServer.java b/src/main/java/com/xiang/service/module/glados/server/GladosServer.java new file mode 100644 index 0000000..b37a400 --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/server/GladosServer.java @@ -0,0 +1,27 @@ +package com.xiang.service.module.glados.server; + +import com.xiang.service.module.glados.service.IGLaDOSService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/script/glados") +@RequiredArgsConstructor +public class GladosServer { + + private final IGLaDOSService gladosService; + + @GetMapping("/checkIn") + public void checkIn(@RequestParam("username") String username) { + try { + gladosService.checkIn(username); + } catch (Exception e) { + log.error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/xiang/service/module/glados/service/GLaDOSServiceImpl.java b/src/main/java/com/xiang/service/module/glados/service/GLaDOSServiceImpl.java new file mode 100644 index 0000000..fca9fdd --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/service/GLaDOSServiceImpl.java @@ -0,0 +1,149 @@ +package com.xiang.service.module.glados.service; + +import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson2.TypeReference; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Maps; +import com.xiang.common.factory.ScriptDingTalkFactory; +import com.xiang.common.pojo.glados.GladosRunLogDO; +import com.xiang.common.pojo.glados.GladosUserDO; +import com.xiang.common.pojo.glados.resp.CheckInResp; +import com.xiang.common.pojo.glados.resp.GLaDOSResponse; +import com.xiang.common.pojo.schedule.TaskResult; +import com.xiang.common.utils.HttpService; +import com.xiang.service.module.glados.constants.GladosConstants; +import com.xiang.service.module.glados.manage.IGladosRunLogManage; +import com.xiang.service.module.glados.manage.IGladosUserManage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * @Author: xiang + * @Date: 2025-05-08 14:38 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class GLaDOSServiceImpl implements IGLaDOSService { + + private final IGladosUserManage gladosUserManage; + + private final ScriptDingTalkFactory dingTalkService; + + + @Override + public TaskResult checkIn() { + TaskResult taskResult = new TaskResult(); + + + List users = gladosUserManage.listAllUsers(); + if (CollectionUtils.isEmpty(users)) { + taskResult.setSuccess(false); + taskResult.setSummary("无可使用的用户"); + return taskResult; + } + StringBuilder sb = new StringBuilder(); + for (GladosUserDO user : users) { + try { + for (int i = 0; i < 3; i++) { + if (checkInV2(user, sb)) { + break; + } + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + log.error("线程暂停10s失败"); + } + } + } catch (Exception e) { + log.error("签到失败,", e); + } + } + if (StringUtils.isNotBlank(sb.toString())) { + taskResult.setSuccess(false); + taskResult.setSummary(sb.toString()); + return taskResult; + } + taskResult.setSuccess(true); + return taskResult; + } + + @Override + public void checkIn(String username) { + GladosUserDO gladosUserDO = gladosUserManage.findByUsername(username); + if (Objects.isNull(gladosUserDO)) { + log.info("[job] Glados Check In user not exists, username:{}", username); + return; + } + checkInV2(gladosUserDO, new StringBuilder()); + } + + public boolean checkInV2(GladosUserDO user, StringBuilder sb) { + Map header = Maps.newHashMap(); + header.put("Cookie", user.getCookie()); + + String response = null; + + try { + response = HttpService.doPost(GladosConstants.GLADOS_CHECK_IN_URL, header, GladosConstants.GLADOS_CHECK_IN_BODY); + } catch (Exception e) { + log.error("http请求异常:{}", user.getEmail()); + return false; + } + if (org.apache.commons.lang3.StringUtils.isBlank(response)) { + sb.append(user.getUser()).append("请求结果为空!"); + return false; + } + + GLaDOSResponse gLaDOSResponse = JSONObject.parseObject(response, new TypeReference>() { + }); + if (Objects.isNull(gLaDOSResponse)) { + sb.append(user.getUser()).append("请求结果为空!"); + return false; + } + + if (0 == gLaDOSResponse.getCode()) { + // 成功请求 + if (Objects.nonNull(gLaDOSResponse.getPoints()) && 0 != gLaDOSResponse.getPoints()) { + // 签到成功 + dingTalkService.sendMsg("[时间:" + LocalDateTime.now() + "] 用户: " + + user.getEmail() + "签到成功,获得积分:" + gLaDOSResponse.getPoints()); + return Boolean.TRUE; + } + } + + if (gLaDOSResponse.getMessage().contains("Today's observation logged")) { + if (!CollectionUtils.isEmpty(gLaDOSResponse.getList())) { + dingTalkService.sendMsg("用户:" + user.getEmail() + "当前已签到。结果:" + gLaDOSResponse.getList().get(0)); + sb.append(user.getUser()).append("当前已经签到!"); + return true; + } + } + + if (-2 == gLaDOSResponse.getCode()) { + log.warn("签到失败,用户:{}, cookie过期:{}", user.getEmail(), gLaDOSResponse.getMessage()); + String message = "[时间:" + LocalDateTime.now() + "] 用户: " + user.getEmail() + ",签到消息: " + + gLaDOSResponse.getMessage() + "手动请求:http://general.xiangtech.xyz:30026/script/glados/checkIn?username=" + user.getUser(); + try { + dingTalkService.sendMsg(message); + sb.append(user.getUser()).append("签到结果异常!结果:").append(gLaDOSResponse.getMessage()); + return true; + } catch (Exception e) { + log.error("发送钉钉消息失败", e); + } + } + + // 请求异常 + dingTalkService.sendMsg("用户:" + user.getEmail() + "请求异常,响应结果:" + gLaDOSResponse.getMessage()); + sb.append(user.getUser()).append("响应结果异常!结果:").append(gLaDOSResponse.getMessage()); + return false; + } +} diff --git a/src/main/java/com/xiang/service/module/glados/service/IGLaDOSService.java b/src/main/java/com/xiang/service/module/glados/service/IGLaDOSService.java new file mode 100644 index 0000000..7dbe626 --- /dev/null +++ b/src/main/java/com/xiang/service/module/glados/service/IGLaDOSService.java @@ -0,0 +1,23 @@ +package com.xiang.service.module.glados.service; + +import com.xiang.common.pojo.glados.GladosUserDO; +import com.xiang.common.pojo.schedule.TaskResult; + +/** + * @Author: xiang + * @Date: 2025-05-08 14:38 + */ +public interface IGLaDOSService { + + + /** + * 签到 + */ + TaskResult checkIn(); + + /** + * 根据用户名签到 + * @param username + */ + void checkIn(String username); +}