day4
遇到问题:
MAVEN版本对应问题,改一个配置会引起其他的一起变,如下
D:apache-maven-3.9.9inmvn.cmd -Didea.version=2025.2.3 -Dmaven.ext.class.path=D:JetBrainsIntelliJ IDEA 2025.1.2pluginsmavenlibmaven-event-listener.jar -Djansi.passthrough=true -Dstyle.color=always -s D:apache-maven-3.9.9confsettings.xml -Dmaven.repo.local=D:MyJavamaven_repository clean -f pom.xml
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'profile' (position: START_TAG seen ... variables for plugins in the POM.
|
|-->
<profile>... @191:13) @ D:apache-maven-3.9.9confsettings.xml, line 191, column 13
[WARNING] Unrecognised tag: 'profile' (position: START_TAG seen ... variables for plugins in the POM.
|
|-->
<profile>... @191:13) @ D:apache-maven-3.9.9confsettings.xml, line 191, column 13
[WARNING]
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] 'dependencies.dependency.version' for org.springframework.ai:spring-ai-openai-spring-boot-starter:jar is missing. @ line 93, column 21
@
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR] The project com.fj.report:fj-report-server:1.0.0 (D:OneDriveDesktopzskjj-report-serverpom.xml) has 1 error
[ERROR] 'dependencies.dependency.version' for org.springframework.ai:spring-ai-openai-spring-boot-starter:jar is missing. @ line 93, column 21
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
可以去仓库服务 找对应的版本以及组号
提交代码:
循环查询转定时任务:
- 添加定时任务配置 ScheduleConfig.java
package com.fj.report.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 定时任务配置类
* @author fj
*/
@Configuration
@EnableScheduling
public class ScheduleConfig {
}
- 创建定时任务服务接口
package com.fj.report.service;
/**
* 解析任务调度服务接口
*/
public interface ParseTaskScheduleService {
/**
* 定时扫描并处理待处理的解析任务
*/
void scanAndProcessPendingTasks();
}
- 实现定时任务服务接口
package com.fj.report.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fj.report.entity.SysCaseFileParseTask;
import com.fj.report.service.ParseTaskScheduleService;
import com.fj.report.service.PdfRecognitionService;
import com.fj.report.service.SysCaseFileParseTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import static com.fj.report.common.comstants.CommonConstants.MAX_FILE_PARSE_TIMEOUT_MINUTES;
/**
* 解析任务调度服务实现类
*
* @author fj
*/
@Service
@Slf4j
public class ParseTaskScheduleTaskImpl implements ParseTaskScheduleService {
@Autowired
private SysCaseFileParseTaskService sysCaseFileParseTaskService;
@Autowired
private PdfRecognitionService pdfRecognitionService;
/**
* 每 5 秒定时扫描并处理待处理的解析任务
*/
@Scheduled(fixedRate = 5000) // 每 5 秒执行一次
@Override
public void scanAndProcessPendingTasks() {
log.debug("扫描并处理待处理的解析任务...");
// 查询状态为 0(待处理) 和 1(处理中) 的任务
LambdaQueryWrapper<SysCaseFileParseTask> wrapper = new LambdaQueryWrapper<>();
wrapper.in(SysCaseFileParseTask::getStatus, 0, 1)
.orderByAsc(SysCaseFileParseTask::getCreateTime);
List<SysCaseFileParseTask> tasks = sysCaseFileParseTaskService.list(wrapper);
if(tasks.isEmpty()){
log.debug("没有待处理的解析任务。");
return;
}
//逐个处理任务
for(SysCaseFileParseTask task : tasks){
// 处理任务
processTask(task);
}
}
/**
* 解析单个任务
* @param task
*/
private void processTask(SysCaseFileParseTask task) {
log.info("处理解析任务:taskId={},status={}", task.getId(), task.getStatus());
// 检查任务是否超时(超过30分钟)
if(isTaskTimeout(task)){
sysCaseFileParseTaskService.updateTaskFailed(task.getId(), "任务处理超时");
return;
}
// 查询第三方状态
String statusResult = pdfRecognitionService.queryDocParsingStatus(task.getThirdPlatformTaskId());
if(statusResult == null){
return;
}
// 解析状态
JSONObject statusJson = JSON.parseObject(statusResult);
JSONObject data = statusJson.getJSONObject("data");
if(data == null){
return;
}
String status = data.getString("status");
Integer numberOfSuccessfulParsing = data.getInteger("numberOfSuccessfulParsing");
log.info("任务状态:taskId={},status={},numberOfSuccessfulParsing={}",
task.getId(), status, numberOfSuccessfulParsing);
// 根据任务状态进行处理
handleTaskStatus(task, status, numberOfSuccessfulParsing, statusJson, data);
}
/**
* 根据任务状态处理任务
* @param task
* @param status
* @param numberOfSuccessfulParsing
* @param statusJson
* @param data
*/
private void handleTaskStatus(SysCaseFileParseTask task, String status, Integer numberOfSuccessfulParsing,
JSONObject statusJson, JSONObject data) {
if("success".equalsIgnoreCase(status)){
// 任务成功,获取解析结果
sysCaseFileParseTaskService.fetchAndSaveResults(task.getId(), numberOfSuccessfulParsing);
}else if("fail".equalsIgnoreCase(status)){
// 任务失败,更新状态
String failCode = data.getString("code");
String failMessage = data.getString("message");
if(failMessage == null){
failMessage = statusJson.getString("Message");
}
if(failCode == null){
failCode = statusJson.getString("Code");
}
sysCaseFileParseTaskService.updateTaskFailed(task.getId(), failCode, failMessage);
}else if("processing".equalsIgnoreCase(status)){
// 任务处理中,更新状态
if(task.getStatus() != 1){
sysCaseFileParseTaskService.updateTaskProcessing(task.getId());
}
}else if("init".equalsIgnoreCase(status)){
// 任务初始化,保持待处理状态
log.debug("任务处于初始化状态,保持待处理状态:taskId={}", task.getId());
}
}
/**
* 检查任务是否超时
* @param task
* @return
*/
private boolean isTaskTimeout(SysCaseFileParseTask task) {
LocalDateTime startTime = task.getProcessingStartTime();
if(startTime == null){
startTime = task.getCreateTime();
}
LocalDateTime now = LocalDateTime.now();
long minutes = java.time.Duration.between(startTime, now).toMinutes();
return minutes > MAX_FILE_PARSE_TIMEOUT_MINUTES; // 超过30分钟视为超时
}
}