Browse Source

增加条件查询,停止爬虫

wh-mc-dev
parent
commit
b7491a0a46
13 changed files with 189 additions and 54 deletions
  1. 8
      pom.xml
  2. 2
      src/main/java/com/qniao/zsh/ZtbSpiderHandleApplication.java
  3. 41
      src/main/java/com/qniao/zsh/api/command/controlspider/admin/SpiderStateAdminCommandController.java
  4. 1
      src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderCreateDto.java
  5. 27
      src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderStopDto.java
  6. 49
      src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java
  7. 14
      src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java
  8. 14
      src/main/java/com/qniao/zsh/application/service/startspider/SpiderStateApplicationService.java
  9. 3
      src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/constant/SpiderStateEnum.java
  10. 21
      src/main/java/com/qniao/zsh/infrastructure/config/MybatisPlusPageConfig.java
  11. 8
      src/main/java/com/qniao/zsh/query/spider/SpiderQueryService.java
  12. 34
      src/main/java/com/qniao/zsh/query/spider/impl/SpiderQueryServiceImpl.java
  13. 21
      src/main/java/com/qniao/zsh/query/spider/queryparams/SpiderByQueryParam.java

8
pom.xml

@ -142,4 +142,12 @@
</snapshots> </snapshots>
</repository> </repository>
</repositories> </repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project> </project>

2
src/main/java/com/qniao/zsh/ZtbSpiderHandleApplication.java

@ -9,7 +9,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @date 2023/2/21 * @date 2023/2/21
* 启动主类 * 启动主类
*/ */
@SpringBootApplication(scanBasePackages = {"com.qniao.zsh"})
@SpringBootApplication(scanBasePackages = {"org.mc.ddd", "com.qniao.zsh"})
@MapperScan("com.qniao.zsh.infrastructure.dao") @MapperScan("com.qniao.zsh.infrastructure.dao")
public class ZtbSpiderHandleApplication { public class ZtbSpiderHandleApplication {

41
src/main/java/com/qniao/zsh/api/command/controlspider/admin/SpiderStateAdminCommandController.java

@ -1,6 +1,10 @@
package com.qniao.zsh.api.command.controlspider.admin; package com.qniao.zsh.api.command.controlspider.admin;
import cn.hutool.core.util.EnumUtil;
import com.qniao.zsh.api.command.controlspider.admin.request.SpiderStopDto;
import com.qniao.zsh.domain.aggregate.spiderstate.constant.SpiderStateEnum;
import com.qniao.zsh.query.spider.queryparams.SpiderByQueryParam;
import org.mc.ddd.infrastructure.persistent.PageQueryParams; import org.mc.ddd.infrastructure.persistent.PageQueryParams;
import com.qniao.zsh.api.command.controlspider.admin.request.SpiderCreateDto; import com.qniao.zsh.api.command.controlspider.admin.request.SpiderCreateDto;
@ -10,10 +14,14 @@ import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import com.qniao.zsh.query.spider.SpiderQueryService; import com.qniao.zsh.query.spider.SpiderQueryService;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.mc.ddd.infrastructure.persistent.PageQueryResult; import org.mc.ddd.infrastructure.persistent.PageQueryResult;
import org.mc.ddd.infrastructure.response.vo.EntityCreatedVo;
import org.mc.ddd.infrastructure.response.vo.EnumItemVo;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/** /**
@ -33,27 +41,40 @@ public class SpiderStateAdminCommandController {
@ApiOperation("启动爬虫") @ApiOperation("启动爬虫")
@PostMapping("/run/spider/{spiderId}")
public String run(@PathVariable Long spiderId) throws Exception {
@PostMapping("/run/spider")
public List<String> run(@RequestParam("spiderId") Long spiderId) throws Exception {
return spiderStateApplicationService.run(spiderId); return spiderStateApplicationService.run(spiderId);
}
@ApiOperation("停止爬虫的周期运行")
@PostMapping("/stop/spider")
public List<String> stop(@RequestBody @Validated SpiderStopDto dto){
return spiderStateApplicationService.stop(dto.transform().getId());
} }
@ApiOperation("创建爬虫") @ApiOperation("创建爬虫")
@PostMapping("/create/spider") @PostMapping("/create/spider")
public String create(@RequestBody @Validated SpiderCreateDto dto) {
public EntityCreatedVo create(@RequestBody @Validated SpiderCreateDto dto) {
//判断爬虫是否已经存在 //判断爬虫是否已经存在
return createSpiderApplicationService.create(dto.transform().getSpiderName());
return new EntityCreatedVo(createSpiderApplicationService.create(dto.transform().getSpiderName()));
} }
@ApiOperation("查询爬虫列表分页") @ApiOperation("查询爬虫列表分页")
@GetMapping("/query/spider") @GetMapping("/query/spider")
public PageQueryResult<SpiderState> adminPageAiAlarm(PageQueryParams pageUtil) {
return spiderQueryService.adminPage(pageUtil);
public PageQueryResult<SpiderState> adminPageAiAlarm(PageQueryParams pageUtil, SpiderState spiderState, SpiderByQueryParam spiderByQueryParam) {
return spiderQueryService.adminPage(pageUtil, spiderState,spiderByQueryParam);
}
@GetMapping("/get/spider/status")
@ApiOperation(value = "获取状态信息")
public List<EnumItemVo> getRuntimeEnv() {
List<EnumItemVo> results = new ArrayList<>();
EnumUtil.getEnumMap(SpiderStateEnum.class).forEach((k, v) -> {
results.add(new EnumItemVo(v.getValue(), v.getDesc()));
});
return results;
} }
} }

1
src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderCreateDto.java

@ -2,6 +2,7 @@ package com.qniao.zsh.api.command.controlspider.admin.request;
import com.qniao.zsh.api.validator.SpiderExisted; import com.qniao.zsh.api.validator.SpiderExisted;
import com.qniao.zsh.api.validator.SpiderStopped;
import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState; import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;

27
src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderStopDto.java

@ -0,0 +1,27 @@
package com.qniao.zsh.api.command.controlspider.admin.request;
import com.qniao.zsh.api.validator.SpiderStopped;
import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.mc.ddd.domain.Assembler;
import org.mc.ddd.infrastructure.util.ObjectConverter;
/**
* @author wh
* @date 2023/3/27
*/
@Data
public class SpiderStopDto implements Assembler<SpiderState> {
@SpiderStopped
@ApiModelProperty("爬虫ID")
private Long id;
@Override
public SpiderState transform() {
SpiderState spiderState = ObjectConverter.convert(this, SpiderState.class);
spiderState.setId(id);
return spiderState;
}
}

49
src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java

@ -0,0 +1,49 @@
package com.qniao.zsh.api.validator;
import cn.hutool.core.util.ObjectUtil;
import com.qniao.zsh.domain.aggregate.spiderstate.constant.SpiderStateEnum;
import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import com.qniao.zsh.infrastructure.dao.SpiderStateDao;
import javax.annotation.Resource;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;
/**
* @author wh
* @date 2023/3/27
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({FIELD, PARAMETER})
@Constraint(validatedBy = {SpiderStoppedValidator.class})
public @interface SpiderStopped {
String message() default "爬虫已经停止";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
class SpiderStoppedValidator implements ConstraintValidator<SpiderStopped, Long> {
@Resource
private SpiderStateDao spiderStateDao;
@Override
public boolean isValid(Long id, ConstraintValidatorContext context) {
SpiderState spiderState = spiderStateDao.selectById(id);
boolean test = spiderState.getStatus() == SpiderStateEnum.FAIL;
// return spiderState.getStatus() == SpiderStateEnum.FAIL;
return spiderState.getStatus() != SpiderStateEnum.NOT_STARTED;
}
}

14
src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java

@ -1,16 +1,10 @@
package com.qniao.zsh.application.service.createspider; package com.qniao.zsh.application.service.createspider;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONUtil;
import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState; import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import com.qniao.zsh.domain.aggregate.spiderstate.repository.SpiderStateRepository; import com.qniao.zsh.domain.aggregate.spiderstate.repository.SpiderStateRepository;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/** /**
* @author wh * @author wh
@ -22,14 +16,12 @@ public class CreateSpiderApplicationService {
@Resource @Resource
private SpiderStateRepository spiderStateRepository; private SpiderStateRepository spiderStateRepository;
public String create(String spiderName){
public Long create(String spiderName){
SpiderState spiderState = new SpiderState(); SpiderState spiderState = new SpiderState();
spiderState.setSpiderName(spiderName); spiderState.setSpiderName(spiderName);
spiderStateRepository.save(spiderState);
Map<String,String> map = new HashMap<>(1);
map.put("code", String.valueOf(HttpStatus.HTTP_OK));
return JSONUtil.toJsonStr(map);
return spiderStateRepository.save(spiderState);
} }
} }

14
src/main/java/com/qniao/zsh/application/service/startspider/SpiderStateApplicationService.java

@ -7,10 +7,12 @@ import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import com.qniao.zsh.domain.aggregate.spiderstate.repository.SpiderStateRepository; import com.qniao.zsh.domain.aggregate.spiderstate.repository.SpiderStateRepository;
import com.qniao.zsh.infrastructure.util.LinuxCommandUtil; import com.qniao.zsh.infrastructure.util.LinuxCommandUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.mc.ddd.infrastructure.response.constant.BizResponseTypeEnum;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
/** /**
@ -28,7 +30,7 @@ public class SpiderStateApplicationService {
private SpiderStateRepository spiderStateRepository; private SpiderStateRepository spiderStateRepository;
public String run(Long spiderId) throws Exception {
public List<String> run(Long spiderId) throws Exception {
//获取实体 //获取实体
SpiderState spiderState = spiderStateRepository.load(spiderId); SpiderState spiderState = spiderStateRepository.load(spiderId);
@ -46,6 +48,12 @@ public class SpiderStateApplicationService {
//更新数据库 //更新数据库
spiderStateRepository.save(spiderState); spiderStateRepository.save(spiderState);
return retStrBuilder;
return Collections.singletonList(retStrBuilder);
}
public List<String> stop(Long spiderId){
SpiderState spiderState = spiderStateRepository.load(spiderId);
spiderState.setStatus(SpiderStateEnum.NOT_STARTED);
spiderStateRepository.save(spiderState);
return Collections.singletonList(BizResponseTypeEnum.SUCCESS.getDesc());
} }
} }

3
src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/constant/SpiderStateEnum.java

@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonValue; import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter; import lombok.Getter;
import org.mc.ddd.constant.BaseEnum;
/** /**
* @author wh * @author wh
@ -12,7 +13,7 @@ import lombok.Getter;
*/ */
@Getter @Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT) @JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum SpiderStateEnum {
public enum SpiderStateEnum implements BaseEnum<Integer> {
/** /**
* 爬取成功 * 爬取成功
*/ */

21
src/main/java/com/qniao/zsh/infrastructure/config/MybatisPlusPageConfig.java

@ -1,21 +0,0 @@
package com.qniao.zsh.infrastructure.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author wh
* @date 2023/3/22
*/
@Configuration
public class MybatisPlusPageConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

8
src/main/java/com/qniao/zsh/query/spider/SpiderQueryService.java

@ -1,9 +1,8 @@
package com.qniao.zsh.query.spider; package com.qniao.zsh.query.spider;
import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState; import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import com.qniao.zsh.query.spider.queryparams.SpiderByQueryParam;
import org.mc.ddd.infrastructure.persistent.PageQueryParams; import org.mc.ddd.infrastructure.persistent.PageQueryParams;
import org.mc.ddd.infrastructure.persistent.PageQueryResult; import org.mc.ddd.infrastructure.persistent.PageQueryResult;
@ -17,8 +16,9 @@ public interface SpiderQueryService {
/** /**
* admin页面 * admin页面
* *
* @param pageUtil 分页参数
* @param pageUtil 分页参数
* @param spiderState 爬虫实体
* @return {@link PageQueryResult} * @return {@link PageQueryResult}
*/ */
PageQueryResult<SpiderState> adminPage(PageQueryParams pageUtil);
PageQueryResult<SpiderState> adminPage(PageQueryParams pageUtil, SpiderState spiderState, SpiderByQueryParam spiderByQueryParam);
} }

34
src/main/java/com/qniao/zsh/query/spider/impl/SpiderQueryServiceImpl.java

@ -1,17 +1,19 @@
package com.qniao.zsh.query.spider.impl; package com.qniao.zsh.query.spider.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState; import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState;
import com.qniao.zsh.infrastructure.dao.SpiderStateDao; import com.qniao.zsh.infrastructure.dao.SpiderStateDao;
import com.qniao.zsh.query.spider.SpiderQueryService; import com.qniao.zsh.query.spider.SpiderQueryService;
import com.qniao.zsh.query.spider.queryparams.SpiderByQueryParam;
import org.mc.ddd.infrastructure.persistent.PageQueryParams; import org.mc.ddd.infrastructure.persistent.PageQueryParams;
import org.mc.ddd.infrastructure.persistent.PageQueryResult; import org.mc.ddd.infrastructure.persistent.PageQueryResult;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Objects;
/** /**
@ -24,8 +26,34 @@ public class SpiderQueryServiceImpl implements SpiderQueryService {
private SpiderStateDao spiderStateDao; private SpiderStateDao spiderStateDao;
@Override @Override
public PageQueryResult<SpiderState> adminPage(PageQueryParams pageUtil) {
IPage<SpiderState> iPage = spiderStateDao.selectPage(pageUtil.toPage(),null);
public PageQueryResult<SpiderState> adminPage(PageQueryParams pageUtil, SpiderState spiderState, SpiderByQueryParam spiderByQueryParam) {
LambdaQueryWrapper<SpiderState> wrapper = new LambdaQueryWrapper<>();
if (Objects.nonNull(spiderState.getSpiderName())) {
wrapper.like(SpiderState::getSpiderName, spiderState.getSpiderName());
}
if (Objects.nonNull(spiderState.getId())) {
wrapper.eq(SpiderState::getId, spiderState.getId());
}
if (Objects.nonNull(spiderState.getDuration())) {
wrapper.eq(SpiderState::getDuration, spiderState.getDuration());
}
if (Objects.nonNull(spiderState.getStatus())) {
wrapper.eq(SpiderState::getStatus, spiderState.getStatus());
}
if (Objects.nonNull(spiderState.getStatus())) {
wrapper.eq(SpiderState::getStatus, spiderState.getStatus());
}
// if ((Objects.nonNull(spiderByQueryParam.getCreateTimeBegin()) && Objects.nonNull(spiderByQueryParam.getCreateTimeEnd())))
// {
// wrapper.between(SpiderState::getCreatedTime,spiderByQueryParam.getCreateTimeBegin(),spiderByQueryParam.getCreateTimeEnd());
// }
// if ((Objects.nonNull(spiderByQueryParam.getMinDuration()) && Objects.nonNull(spiderByQueryParam.getMaxDuration())))
// {
// wrapper.between(SpiderState::getDuration,spiderByQueryParam.getMinDuration(),spiderByQueryParam.getMaxDuration());
// }
IPage<SpiderState> iPage = spiderStateDao.selectPage(pageUtil.toPage(), wrapper);
return PageQueryResult.forClass(SpiderState.class).from(iPage); return PageQueryResult.forClass(SpiderState.class).from(iPage);
} }

21
src/main/java/com/qniao/zsh/query/spider/queryparams/SpiderByQueryParam.java

@ -0,0 +1,21 @@
package com.qniao.zsh.query.spider.queryparams;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author wh
* @date 2023/3.27
*/
@Data
public class SpiderByQueryParam{
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTimeBegin;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTimeEnd;
private Integer minDuration;
private Integer maxDuration;
}
Loading…
Cancel
Save