江体小程序和zlb接口开发 #1
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
11
src/main/java/com/xiang/common/mapper/GladosRunLogDao.java
Normal file
11
src/main/java/com/xiang/common/mapper/GladosRunLogDao.java
Normal file
@@ -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<GladosRunLogDO> {
|
||||
}
|
||||
17
src/main/java/com/xiang/common/mapper/GladosUserDao.java
Normal file
17
src/main/java/com/xiang/common/mapper/GladosUserDao.java
Normal file
@@ -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<GladosUserDO> {
|
||||
|
||||
}
|
||||
11
src/main/java/com/xiang/common/mapper/ScheduleRunLogDao.java
Normal file
11
src/main/java/com/xiang/common/mapper/ScheduleRunLogDao.java
Normal file
@@ -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<ScheduleRunLogDO> {
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
24
src/main/java/com/xiang/common/pojo/glados/GladosUserDO.java
Normal file
24
src/main/java/com/xiang/common/pojo/glados/GladosUserDO.java
Normal file
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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<T> {
|
||||
|
||||
private Long code;
|
||||
|
||||
private Integer points;
|
||||
|
||||
private String message;
|
||||
|
||||
private List<T> list;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -8,10 +8,15 @@ import lombok.NoArgsConstructor;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class TaskResult {
|
||||
|
||||
private String params;
|
||||
|
||||
/**
|
||||
* 是否成功
|
||||
*/
|
||||
private boolean success;
|
||||
/**
|
||||
* 响应结果
|
||||
*/
|
||||
private String summary;
|
||||
private Object detail;
|
||||
}
|
||||
|
||||
@@ -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<ScheduleRunLogDO> {
|
||||
}
|
||||
@@ -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<ScheduleRunLogDao, ScheduleRunLogDO> implements IScheduleRunLogService {
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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\"}";
|
||||
}
|
||||
@@ -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<GladosRunLogDao, GladosRunLogDO> implements IGladosRunLogManage {
|
||||
}
|
||||
@@ -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<GladosUserDao, GladosUserDO> implements IGladosUserManage {
|
||||
@Override
|
||||
public List<GladosUserDO> listAllUsers() {
|
||||
LambdaQueryWrapper<GladosUserDO> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(GladosUserDO::getStatus, 1);
|
||||
return baseMapper.selectList(lqw);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GladosUserDO findByUsername(String username) {
|
||||
LambdaQueryWrapper<GladosUserDO> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(GladosUserDO::getStatus, 1);
|
||||
lqw.eq(GladosUserDO::getUser, username);
|
||||
lqw.last("limit 1");
|
||||
return baseMapper.selectOne(lqw);
|
||||
}
|
||||
}
|
||||
@@ -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<GladosRunLogDO> {
|
||||
}
|
||||
@@ -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<GladosUserDO> {
|
||||
|
||||
List<GladosUserDO> listAllUsers();
|
||||
|
||||
GladosUserDO findByUsername(String username);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<GladosUserDO> 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<String, String> 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<CheckInResp> gLaDOSResponse = JSONObject.parseObject(response, new TypeReference<GLaDOSResponse<CheckInResp>>() {
|
||||
});
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user