diff --git a/pom.xml b/pom.xml index 05a5de1..a2b9982 100644 --- a/pom.xml +++ b/pom.xml @@ -142,4 +142,12 @@ + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/src/main/java/com/qniao/zsh/ZtbSpiderHandleApplication.java b/src/main/java/com/qniao/zsh/ZtbSpiderHandleApplication.java index b82c748..9c1eab2 100644 --- a/src/main/java/com/qniao/zsh/ZtbSpiderHandleApplication.java +++ b/src/main/java/com/qniao/zsh/ZtbSpiderHandleApplication.java @@ -9,7 +9,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @date 2023/2/21 * 启动主类 */ -@SpringBootApplication(scanBasePackages = {"com.qniao.zsh"}) +@SpringBootApplication(scanBasePackages = {"org.mc.ddd", "com.qniao.zsh"}) @MapperScan("com.qniao.zsh.infrastructure.dao") public class ZtbSpiderHandleApplication { diff --git a/src/main/java/com/qniao/zsh/api/command/controlspider/admin/SpiderStateAdminCommandController.java b/src/main/java/com/qniao/zsh/api/command/controlspider/admin/SpiderStateAdminCommandController.java index 7568ed9..9a6f171 100644 --- a/src/main/java/com/qniao/zsh/api/command/controlspider/admin/SpiderStateAdminCommandController.java +++ b/src/main/java/com/qniao/zsh/api/command/controlspider/admin/SpiderStateAdminCommandController.java @@ -1,6 +1,10 @@ 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 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 io.swagger.annotations.ApiOperation; 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.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; /** @@ -33,27 +41,40 @@ public class SpiderStateAdminCommandController { @ApiOperation("启动爬虫") - @PostMapping("/run/spider/{spiderId}") - public String run(@PathVariable Long spiderId) throws Exception { - + @PostMapping("/run/spider") + public List run(@RequestParam("spiderId") Long spiderId) throws Exception { return spiderStateApplicationService.run(spiderId); + } + @ApiOperation("停止爬虫的周期运行") + @PostMapping("/stop/spider") + public List stop(@RequestBody @Validated SpiderStopDto dto){ + return spiderStateApplicationService.stop(dto.transform().getId()); } + @ApiOperation("创建爬虫") @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("查询爬虫列表分页") @GetMapping("/query/spider") - public PageQueryResult adminPageAiAlarm(PageQueryParams pageUtil) { - return spiderQueryService.adminPage(pageUtil); + public PageQueryResult adminPageAiAlarm(PageQueryParams pageUtil, SpiderState spiderState, SpiderByQueryParam spiderByQueryParam) { + return spiderQueryService.adminPage(pageUtil, spiderState,spiderByQueryParam); + } + + @GetMapping("/get/spider/status") + @ApiOperation(value = "获取状态信息") + public List getRuntimeEnv() { + List results = new ArrayList<>(); + EnumUtil.getEnumMap(SpiderStateEnum.class).forEach((k, v) -> { + results.add(new EnumItemVo(v.getValue(), v.getDesc())); + }); + + return results; } } diff --git a/src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderCreateDto.java b/src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderCreateDto.java index 678001e..596dde0 100644 --- a/src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderCreateDto.java +++ b/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.SpiderStopped; import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderStopDto.java b/src/main/java/com/qniao/zsh/api/command/controlspider/admin/request/SpiderStopDto.java new file mode 100644 index 0000000..57aa8ac --- /dev/null +++ b/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 { + @SpiderStopped + @ApiModelProperty("爬虫ID") + private Long id; + + + @Override + public SpiderState transform() { + SpiderState spiderState = ObjectConverter.convert(this, SpiderState.class); + spiderState.setId(id); + return spiderState; + } +} diff --git a/src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java b/src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java new file mode 100644 index 0000000..37aa63e --- /dev/null +++ b/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[] payload() default {}; +} + +class SpiderStoppedValidator implements ConstraintValidator { + @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; + + } +} diff --git a/src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java b/src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java index 46e642a..6c4a64b 100644 --- a/src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java +++ b/src/main/java/com/qniao/zsh/application/service/createspider/CreateSpiderApplicationService.java @@ -1,16 +1,10 @@ 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.repository.SpiderStateRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; - import javax.annotation.Resource; -import java.util.HashMap; -import java.util.Map; /** * @author wh @@ -22,14 +16,12 @@ public class CreateSpiderApplicationService { @Resource private SpiderStateRepository spiderStateRepository; - public String create(String spiderName){ + public Long create(String spiderName){ SpiderState spiderState = new SpiderState(); spiderState.setSpiderName(spiderName); - spiderStateRepository.save(spiderState); - Map map = new HashMap<>(1); - map.put("code", String.valueOf(HttpStatus.HTTP_OK)); - return JSONUtil.toJsonStr(map); + return spiderStateRepository.save(spiderState); + } } diff --git a/src/main/java/com/qniao/zsh/application/service/startspider/SpiderStateApplicationService.java b/src/main/java/com/qniao/zsh/application/service/startspider/SpiderStateApplicationService.java index ec25dc4..e15614b 100644 --- a/src/main/java/com/qniao/zsh/application/service/startspider/SpiderStateApplicationService.java +++ b/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.infrastructure.util.LinuxCommandUtil; import lombok.extern.slf4j.Slf4j; +import org.mc.ddd.infrastructure.response.constant.BizResponseTypeEnum; import org.springframework.stereotype.Service; import javax.annotation.Resource; - +import java.util.Collections; +import java.util.List; /** @@ -28,7 +30,7 @@ public class SpiderStateApplicationService { private SpiderStateRepository spiderStateRepository; - public String run(Long spiderId) throws Exception { + public List run(Long spiderId) throws Exception { //获取实体 SpiderState spiderState = spiderStateRepository.load(spiderId); @@ -46,6 +48,12 @@ public class SpiderStateApplicationService { //更新数据库 spiderStateRepository.save(spiderState); - return retStrBuilder; + return Collections.singletonList(retStrBuilder); + } + public List stop(Long spiderId){ + SpiderState spiderState = spiderStateRepository.load(spiderId); + spiderState.setStatus(SpiderStateEnum.NOT_STARTED); + spiderStateRepository.save(spiderState); + return Collections.singletonList(BizResponseTypeEnum.SUCCESS.getDesc()); } } diff --git a/src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/constant/SpiderStateEnum.java b/src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/constant/SpiderStateEnum.java index 3f7ec3c..855117c 100644 --- a/src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/constant/SpiderStateEnum.java +++ b/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.JsonValue; import lombok.Getter; +import org.mc.ddd.constant.BaseEnum; /** * @author wh @@ -12,7 +13,7 @@ import lombok.Getter; */ @Getter @JsonFormat(shape = JsonFormat.Shape.OBJECT) -public enum SpiderStateEnum { +public enum SpiderStateEnum implements BaseEnum { /** * 爬取成功 */ diff --git a/src/main/java/com/qniao/zsh/infrastructure/config/MybatisPlusPageConfig.java b/src/main/java/com/qniao/zsh/infrastructure/config/MybatisPlusPageConfig.java deleted file mode 100644 index 8ccd427..0000000 --- a/src/main/java/com/qniao/zsh/infrastructure/config/MybatisPlusPageConfig.java +++ /dev/null @@ -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; - } -} diff --git a/src/main/java/com/qniao/zsh/query/spider/SpiderQueryService.java b/src/main/java/com/qniao/zsh/query/spider/SpiderQueryService.java index aac1a1f..5740eee 100644 --- a/src/main/java/com/qniao/zsh/query/spider/SpiderQueryService.java +++ b/src/main/java/com/qniao/zsh/query/spider/SpiderQueryService.java @@ -1,9 +1,8 @@ package com.qniao.zsh.query.spider; - - 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.PageQueryResult; @@ -17,8 +16,9 @@ public interface SpiderQueryService { /** * admin页面 * - * @param pageUtil 分页参数 + * @param pageUtil 分页参数 + * @param spiderState 爬虫实体 * @return {@link PageQueryResult} */ - PageQueryResult adminPage(PageQueryParams pageUtil); + PageQueryResult adminPage(PageQueryParams pageUtil, SpiderState spiderState, SpiderByQueryParam spiderByQueryParam); } diff --git a/src/main/java/com/qniao/zsh/query/spider/impl/SpiderQueryServiceImpl.java b/src/main/java/com/qniao/zsh/query/spider/impl/SpiderQueryServiceImpl.java index f7199f9..a339741 100644 --- a/src/main/java/com/qniao/zsh/query/spider/impl/SpiderQueryServiceImpl.java +++ b/src/main/java/com/qniao/zsh/query/spider/impl/SpiderQueryServiceImpl.java @@ -1,17 +1,19 @@ package com.qniao.zsh.query.spider.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.qniao.zsh.domain.aggregate.spiderstate.entity.SpiderState; import com.qniao.zsh.infrastructure.dao.SpiderStateDao; 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.PageQueryResult; import org.springframework.stereotype.Service; import javax.annotation.Resource; - +import java.util.Objects; /** @@ -24,8 +26,34 @@ public class SpiderQueryServiceImpl implements SpiderQueryService { private SpiderStateDao spiderStateDao; @Override - public PageQueryResult adminPage(PageQueryParams pageUtil) { - IPage iPage = spiderStateDao.selectPage(pageUtil.toPage(),null); + public PageQueryResult adminPage(PageQueryParams pageUtil, SpiderState spiderState, SpiderByQueryParam spiderByQueryParam) { + LambdaQueryWrapper 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 iPage = spiderStateDao.selectPage(pageUtil.toPage(), wrapper); + return PageQueryResult.forClass(SpiderState.class).from(iPage); } diff --git a/src/main/java/com/qniao/zsh/query/spider/queryparams/SpiderByQueryParam.java b/src/main/java/com/qniao/zsh/query/spider/queryparams/SpiderByQueryParam.java new file mode 100644 index 0000000..d0d52aa --- /dev/null +++ b/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; + +}