diff --git a/pom.xml b/pom.xml index 914e219..1516852 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,12 @@ commons-lang3 3.12.0 + + + com.qniao + xxl-job-core + 2.3.0 + org.springframework.boot diff --git a/src/main/java/com/qniao/zsh/api/command/paddle/admin/PaddleAdminCommandController.java b/src/main/java/com/qniao/zsh/api/command/paddle/admin/PaddleAdminCommandController.java new file mode 100644 index 0000000..4c15b0e --- /dev/null +++ b/src/main/java/com/qniao/zsh/api/command/paddle/admin/PaddleAdminCommandController.java @@ -0,0 +1,33 @@ +package com.qniao.zsh.api.command.paddle.admin; + +import com.qniao.zsh.api.command.paddle.admin.request.PaddleDto; +import com.qniao.zsh.api.command.paddle.admin.response.PaddleVo; +import com.qniao.zsh.application.service.paddle.PaddleApplicationService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.io.IOException; + +/** + * @author wh + * @date 2023/4/11 + */ +@RestController +@RequestMapping("admin/paddle") +public class PaddleAdminCommandController { + + @Resource + private PaddleApplicationService paddleApplicationService; + + @ApiOperation("飞桨文本解析") + @PostMapping("/analysis") + public PaddleVo analysis(@RequestBody PaddleDto paddleDto) throws IOException { + return paddleApplicationService.runPaddle(paddleDto); + + } + +} diff --git a/src/main/java/com/qniao/zsh/api/command/paddle/admin/request/PaddleDto.java b/src/main/java/com/qniao/zsh/api/command/paddle/admin/request/PaddleDto.java new file mode 100644 index 0000000..8bd2633 --- /dev/null +++ b/src/main/java/com/qniao/zsh/api/command/paddle/admin/request/PaddleDto.java @@ -0,0 +1,40 @@ +package com.qniao.zsh.api.command.paddle.admin.request; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author wh + * @date 2023/4/11 + */ +@Data +public class PaddleDto { + @NotNull + @JsonSerialize(using = ToStringSerializer.class) + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty("文章ID") + private String articleId; + + @NotNull + @JsonSerialize(using = ToStringSerializer.class) + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty("造纸厂ID") + private String paperMillId; + + @NotNull + @ApiModelProperty("文章标题") + private String title; + + @NotNull + @ApiModelProperty("文章正文") + private String content; + + + +} diff --git a/src/main/java/com/qniao/zsh/api/command/paddle/admin/response/PaddleVo.java b/src/main/java/com/qniao/zsh/api/command/paddle/admin/response/PaddleVo.java new file mode 100644 index 0000000..0105b53 --- /dev/null +++ b/src/main/java/com/qniao/zsh/api/command/paddle/admin/response/PaddleVo.java @@ -0,0 +1,24 @@ +package com.qniao.zsh.api.command.paddle.admin.response; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * @author wh + * @date 2023/4/11 + */ +@Data +public class PaddleVo { + + @NotNull + @ApiModelProperty("纸厂名字") + private String factory; + + @ApiModelProperty("纸类分类") + private List paperInfo; + + @ApiModelProperty("纸类价格") + private List paperPrice; +} diff --git a/src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java b/src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java index 46f88c9..844cb37 100644 --- a/src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java +++ b/src/main/java/com/qniao/zsh/api/validator/SpiderStopped.java @@ -1,6 +1,5 @@ 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; diff --git a/src/main/java/com/qniao/zsh/application/service/paddle/PaddleApplicationService.java b/src/main/java/com/qniao/zsh/application/service/paddle/PaddleApplicationService.java new file mode 100644 index 0000000..4599efe --- /dev/null +++ b/src/main/java/com/qniao/zsh/application/service/paddle/PaddleApplicationService.java @@ -0,0 +1,42 @@ +package com.qniao.zsh.application.service.paddle; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.qniao.zsh.api.command.paddle.admin.request.PaddleDto; +import com.qniao.zsh.api.command.paddle.admin.response.PaddleVo; +import com.qniao.zsh.infrastructure.config.SpiderDirectoryConfig; +import org.mc.ddd.infrastructure.util.ScriptRunnerHelper; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.List; + +/** + * @author wh + * @date 2023/4/11 + */ +@Service +public class PaddleApplicationService { + + public PaddleVo runPaddle(PaddleDto paddleDto) throws IOException { + //linux +// String result = ScriptRunnerHelper.handle("python3", + //win + String result = String.valueOf(ScriptRunnerHelper.handle("python", + SpiderDirectoryConfig.PADDLEDIR, + paddleDto.getTitle(), + paddleDto.getArticleId(), + paddleDto.getPaperMillId(), + paddleDto.getContent())); + String[] strings = result.split("\r\n"); + result = strings[strings.length - 1]; + JSONObject jsonResult = JSONUtil.parseObj(result); + PaddleVo paddleVo = new PaddleVo(); + paddleVo.setFactory(jsonResult.getStr("factory")); + paddleVo.setPaperInfo((List) jsonResult.getObj("paper_info")); + paddleVo.setPaperPrice((List) jsonResult.getObj("paper_price")); + return paddleVo; + } + +} diff --git a/src/main/java/com/qniao/zsh/domain/aggregate/paddle/entity/SpiderArticle.java b/src/main/java/com/qniao/zsh/domain/aggregate/paddle/entity/SpiderArticle.java new file mode 100644 index 0000000..d09d951 --- /dev/null +++ b/src/main/java/com/qniao/zsh/domain/aggregate/paddle/entity/SpiderArticle.java @@ -0,0 +1,27 @@ +package com.qniao.zsh.domain.aggregate.paddle.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.swagger.annotations.ApiModelProperty; + +/** + * @author wh + * @date 2023/4/11 + */ +public class SpiderArticle { + @JsonSerialize(using = ToStringSerializer.class) + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty("文章ID") + private Long articleId; + + @JsonSerialize(using = ToStringSerializer.class) + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty("造纸厂ID") + private Long paperMillId; + + + + +} diff --git a/src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/entity/SpiderState.java b/src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/entity/SpiderState.java index 442b41f..ba1e723 100644 --- a/src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/entity/SpiderState.java +++ b/src/main/java/com/qniao/zsh/domain/aggregate/spiderstate/entity/SpiderState.java @@ -1,21 +1,41 @@ package com.qniao.zsh.domain.aggregate.spiderstate.entity; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.qniao.zsh.domain.aggregate.spiderstate.constant.SpiderStateEnum; import lombok.Data; import lombok.EqualsAndHashCode; import io.swagger.annotations.ApiModelProperty; import org.mc.ddd.infrastructure.persistent.Entity; +import java.time.LocalDateTime; + /** * @author Administrator * @date 2023/2/21 *爬虫状态数据库 */ @Data -@EqualsAndHashCode(callSuper = true) @TableName("spider_state") -public class SpiderState extends Entity { +public class SpiderState { + + @JsonSerialize(using = ToStringSerializer.class) + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty("标识") + private Long id; + + @ApiModelProperty("是否删除 1-删除 0-未删除") + private Boolean isDeleted; + + @ApiModelProperty("创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") + private LocalDateTime createdTime; + + @ApiModelProperty("更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") + private LocalDateTime updatedTime; @ApiModelProperty("爬虫名字") private String spiderName; diff --git a/src/main/java/com/qniao/zsh/domain/aggregate/xxljob/entity/XxlJobInfo.java b/src/main/java/com/qniao/zsh/domain/aggregate/xxljob/entity/XxlJobInfo.java new file mode 100644 index 0000000..0e750cb --- /dev/null +++ b/src/main/java/com/qniao/zsh/domain/aggregate/xxljob/entity/XxlJobInfo.java @@ -0,0 +1,39 @@ +package com.qniao.zsh.domain.aggregate.xxljob.entity; + +import java.util.Date; + +public class XxlJobInfo { + + private int id; // 主键ID + + private int jobGroup; // 执行器主键ID + private String jobDesc; + + private Date addTime; + private Date updateTime; + + private String author; // 负责人 + private String alarmEmail; // 报警邮件 + + private String scheduleType; // 调度类型 + private String scheduleConf; // 调度配置,值含义取决于调度类型 + private String misfireStrategy; // 调度过期策略 + + private String executorRouteStrategy; // 执行器路由策略 + private String executorHandler; // 执行器,任务Handler名称 + private String executorParam; // 执行器,任务参数 + private String executorBlockStrategy; // 阻塞处理策略 + private int executorTimeout; // 任务执行超时时间,单位秒 + private int executorFailRetryCount; // 失败重试次数 + + private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum + private String glueSource; // GLUE源代码 + private String glueRemark; // GLUE备注 + private Date glueUpdatetime; // GLUE更新时间 + + private String childJobId; // 子任务ID,多个逗号分隔 + + private int triggerStatus; // 调度状态:0-停止,1-运行 + private long triggerLastTime; // 上次调度时间 + private long triggerNextTime; // 下次调度时间 +} diff --git a/src/main/java/com/qniao/zsh/infrastructure/config/SpiderDirectoryConfig.java b/src/main/java/com/qniao/zsh/infrastructure/config/SpiderDirectoryConfig.java index b0ff33d..4e17882 100644 --- a/src/main/java/com/qniao/zsh/infrastructure/config/SpiderDirectoryConfig.java +++ b/src/main/java/com/qniao/zsh/infrastructure/config/SpiderDirectoryConfig.java @@ -15,13 +15,19 @@ import org.springframework.context.annotation.Configuration; public class SpiderDirectoryConfig implements InitializingBean { @Value("${spier-dirdirectory}") - private String dir; + private String spider; - public static String DIR; + @Value("${paddle-dirdirectory}") + private String paddle; + + + public static String SCRAPYDIR; + public static String PADDLEDIR; @Override public void afterPropertiesSet() { - DIR = dir; + SCRAPYDIR = spider; + PADDLEDIR = paddle; } diff --git a/src/main/java/com/qniao/zsh/infrastructure/config/XxlJobConfig.java b/src/main/java/com/qniao/zsh/infrastructure/config/XxlJobConfig.java new file mode 100644 index 0000000..067dfc4 --- /dev/null +++ b/src/main/java/com/qniao/zsh/infrastructure/config/XxlJobConfig.java @@ -0,0 +1,43 @@ +package com.qniao.zsh.infrastructure.config; + +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Slf4j +public class XxlJobConfig { + @Value("${xxl.job.admin.addresses}") + private String adminAddresses; + @Value("${xxl.job.accessToken:}") + private String accessToken; + @Value("${xxl.job.executor.appname:}") + private String appname; + @Value("${xxl.job.executor.address:}") + private String address; + @Value("${xxl.job.executor.ip:}") + private String ip; + @Value("${xxl.job.executor.port:}") + private int port; + @Value("${xxl.job.executor.logpath:}") + private String logPath; + @Value("${xxl.job.executor.logretentiondays:0}") + private int logRetentionDays; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(adminAddresses); + xxlJobSpringExecutor.setAppname(appname); + xxlJobSpringExecutor.setAddress(address); + xxlJobSpringExecutor.setIp(ip); + xxlJobSpringExecutor.setPort(port); + xxlJobSpringExecutor.setAccessToken(accessToken); + xxlJobSpringExecutor.setLogPath(logPath); + xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); + return xxlJobSpringExecutor; + } +} \ No newline at end of file diff --git a/src/main/java/com/qniao/zsh/infrastructure/util/LinuxCommandUtil.java b/src/main/java/com/qniao/zsh/infrastructure/util/LinuxCommandUtil.java index acf9f77..ffc842d 100644 --- a/src/main/java/com/qniao/zsh/infrastructure/util/LinuxCommandUtil.java +++ b/src/main/java/com/qniao/zsh/infrastructure/util/LinuxCommandUtil.java @@ -32,7 +32,7 @@ public class LinuxCommandUtil { // 创建ProcessBuilder对象 ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", command); //配置工作目录 - builder.directory(new File(SpiderDirectoryConfig.DIR)); + builder.directory(new File(SpiderDirectoryConfig.SCRAPYDIR)); // 重定向标准输出和标准错误输出到Java进程 builder.redirectErrorStream(true); diff --git a/src/main/java/com/qniao/zsh/infrastructure/util/xxl/JobHandlerService.java b/src/main/java/com/qniao/zsh/infrastructure/util/xxl/JobHandlerService.java new file mode 100644 index 0000000..c3d3aa3 --- /dev/null +++ b/src/main/java/com/qniao/zsh/infrastructure/util/xxl/JobHandlerService.java @@ -0,0 +1,15 @@ +package com.qniao.zsh.infrastructure.util.xxl; +import com.qniao.zsh.domain.aggregate.xxljob.entity.XxlJobInfo; +import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; +import com.xxl.job.core.biz.model.TriggerParam; +import com.xxl.job.core.executor.XxlJobExecutor; +import java.sql.Timestamp; + + +public class JobHandlerService { + public void updateJob() { + XxlJobExecutor executor = new XxlJobExecutor(); + XxlJobInfo jobInfo = new XxlJobInfo(); + + } +} diff --git a/src/main/java/com/qniao/zsh/infrastructure/util/xxl/XxlJobDemo.java b/src/main/java/com/qniao/zsh/infrastructure/util/xxl/XxlJobDemo.java new file mode 100644 index 0000000..8164cd0 --- /dev/null +++ b/src/main/java/com/qniao/zsh/infrastructure/util/xxl/XxlJobDemo.java @@ -0,0 +1,16 @@ +package com.qniao.zsh.infrastructure.util.xxl; + +import com.xxl.job.core.biz.model.ReturnT; +import com.xxl.job.core.handler.annotation.XxlJob; +import org.springframework.stereotype.Component; + +@Component +public class XxlJobDemo { + + @XxlJob("myJobHandler") + public ReturnT myJobHandler(String param) throws Exception { + // your jobHandler code here + return ReturnT.SUCCESS; + } +} + diff --git a/src/main/java/com/qniao/zsh/infrastructure/util/xxl/xxl.java b/src/main/java/com/qniao/zsh/infrastructure/util/xxl/xxl.java new file mode 100644 index 0000000..3f38bd9 --- /dev/null +++ b/src/main/java/com/qniao/zsh/infrastructure/util/xxl/xxl.java @@ -0,0 +1,11 @@ +package com.qniao.zsh.infrastructure.util.xxl; + +import com.xxl.job.core.handler.annotation.XxlJob; + +public class xxl { + @XxlJob("spiderTest") + public static void main(String[] args) { + System.out.println("调用成功"); + + } +} diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 1f20e07..22761ee 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -34,7 +34,7 @@ xxl.job.admin.addresses: http://xxl-job-admin-dev.qniao.cn/xxl-job-admin # 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册 xxl.job.executor.appname: ztb-factory-dev # 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口; -xxl.job.executor.port: 9999 +xxl.job.executor.port: 3856 ### xxl-job executor log-path #xxl.job.executor.logpath: /data/applogs/xxl-job/jobhandler ### xxl-job executor log-retention-days @@ -45,6 +45,11 @@ xxl.job.executor.logretentiondays: 30 #spier-dirdirectory: D:\Project\papernews_spider #Linux spier-dirdirectory: /opt/ztb-information-spider/papernews_spider +#winpaddle +paddle-dirdirectory: E:\Python\ztb-information-spider - 副本\ztb-information-spider\papernews_spider\Module\PaddleRun.py +#Linuxpaddle +#paddle-dirdirectory: /opt/ztb-information-spider/papernews_spider/Module/PaddleRun.py + #登录请求url login-request: https://api-ops-ztb-test.qniao.cn/ztb-supply-chain-service/admin/login