|
|
@ -0,0 +1,194 @@
|
|
|
|
|
|
|
|
package org.jeecg.modules.ocr.init;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
import org.jeecg.common.constant.OcrConstant;
|
|
|
|
|
|
|
|
import org.jeecg.common.util.RedisUtil;
|
|
|
|
|
|
|
|
import org.jeecg.common.util.RestUtil;
|
|
|
|
|
|
|
|
import org.jeecg.modules.ocr.model.TaskModel;
|
|
|
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrIdentifyService;
|
|
|
|
|
|
|
|
import org.jeecg.modules.ocr.service.impl.TaskService;
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
|
|
|
import org.springframework.boot.ApplicationArguments;
|
|
|
|
|
|
|
|
import org.springframework.boot.ApplicationRunner;
|
|
|
|
|
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
|
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
|
|
import java.net.UnknownHostException;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* @Description ocr任务回调 无量云 请求.
|
|
|
|
|
|
|
|
* @Author ZhouWenTao
|
|
|
|
|
|
|
|
* @Date 2023/8/4 11:39
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Configuration
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
|
|
public class HandleCallbacklnit implements ApplicationRunner {
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
RedisUtil redisUtil;
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
TaskService taskService;
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
IOcrIdentifyService ocrIdentifyService;
|
|
|
|
|
|
|
|
@Value("${system.project.enableHandleTask}")
|
|
|
|
|
|
|
|
private boolean enableHandleTask;
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
*
|
|
|
|
|
|
|
|
* @param args
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
@Async
|
|
|
|
|
|
|
|
public void run(ApplicationArguments args) throws UnknownHostException {
|
|
|
|
|
|
|
|
/*if (enableHandleTask) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Thread.sleep(5000l);
|
|
|
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//循环获取 有没有需要 回调 的任务.
|
|
|
|
|
|
|
|
while (true) {
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
Thread.sleep(10000l);
|
|
|
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<TaskModel> taskList = taskService.getTaskList();
|
|
|
|
|
|
|
|
if (taskList.size()==0) {
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for (TaskModel taskModel : taskList) {
|
|
|
|
|
|
|
|
//刷新redis,执行中
|
|
|
|
|
|
|
|
flushTask(taskModel.getTaskId(), 1);
|
|
|
|
|
|
|
|
//执行
|
|
|
|
|
|
|
|
executeTaskp(taskModel);
|
|
|
|
|
|
|
|
//刷新待运行任务
|
|
|
|
|
|
|
|
log.error("任务已执行:"+taskModel.getTaskId());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* 刷新任务状态
|
|
|
|
|
|
|
|
* @param taskId
|
|
|
|
|
|
|
|
* @param status 状态 1 运行中,2 已结束
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
public void flushTask(String taskId, int status) {
|
|
|
|
|
|
|
|
List<TaskModel> taskList = taskService.getTaskList();
|
|
|
|
|
|
|
|
if (taskList != null && taskList.size() > 0) {
|
|
|
|
|
|
|
|
TaskModel taskModel = taskList.stream().filter(t -> t.getTaskId().equals(taskId)).findFirst().get();
|
|
|
|
|
|
|
|
if (taskModel != null) {
|
|
|
|
|
|
|
|
int taskLevel = taskModel.getTaskLevel();
|
|
|
|
|
|
|
|
String task = (String) redisUtil.get("task_identify_" + taskLevel);
|
|
|
|
|
|
|
|
JSONArray taskJsonArray = JSONObject.parseArray(task);
|
|
|
|
|
|
|
|
taskList = new ArrayList<>();
|
|
|
|
|
|
|
|
if (task != null) {
|
|
|
|
|
|
|
|
taskList.addAll(taskJsonArray.toJavaList(TaskModel.class));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (status == 1) {
|
|
|
|
|
|
|
|
//更新任务状态
|
|
|
|
|
|
|
|
taskList.forEach(t -> {
|
|
|
|
|
|
|
|
if (t.getTaskId().equals(taskId)) {
|
|
|
|
|
|
|
|
t.setTaskStatus("1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
} else if (status == 2) {
|
|
|
|
|
|
|
|
//删除任务
|
|
|
|
|
|
|
|
taskList = taskList.stream().filter(t -> !t.getTaskId().equals(taskId)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
String s = JSONObject.toJSONString(taskList);
|
|
|
|
|
|
|
|
//存入redis
|
|
|
|
|
|
|
|
redisUtil.set("task_identify_" + taskLevel, s);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//执行任务
|
|
|
|
|
|
|
|
public void executeTaskp(TaskModel taskModel) {
|
|
|
|
|
|
|
|
//睡眠
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
String parameter = taskModel.getParameter();
|
|
|
|
|
|
|
|
// 任务类型
|
|
|
|
|
|
|
|
if ("identify".equals(taskModel.getTaskType())) {
|
|
|
|
|
|
|
|
String[] parameters = parameter.split(",");
|
|
|
|
|
|
|
|
//通用识别
|
|
|
|
|
|
|
|
String masterTaskId = parameters[0];//主任务redis
|
|
|
|
|
|
|
|
String task_id = parameters[1];
|
|
|
|
|
|
|
|
String image = parameters[2];
|
|
|
|
|
|
|
|
JSONObject requestBody = new JSONObject();
|
|
|
|
|
|
|
|
requestBody.put("task_id", task_id);
|
|
|
|
|
|
|
|
requestBody.put("img_path", image);
|
|
|
|
|
|
|
|
//nohup python app.py & tail -f nohup.out &
|
|
|
|
|
|
|
|
//更新主任务,正在识别中. conda activate ai
|
|
|
|
|
|
|
|
ocrIdentifyService.updateMasterTaskStartTime(task_id.split("_")[0]);
|
|
|
|
|
|
|
|
boolean flag=false;
|
|
|
|
|
|
|
|
JSONObject semanticResponseJson =null;
|
|
|
|
|
|
|
|
while (!flag){
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
semanticResponseJson = RestUtil.post(OcrConstant.api_test2_identify_url, requestBody);
|
|
|
|
|
|
|
|
if (semanticResponseJson!=null) {
|
|
|
|
|
|
|
|
flag=true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}catch (org.springframework.web.client.ResourceAccessException e){
|
|
|
|
|
|
|
|
log.error(e.getMessage());
|
|
|
|
|
|
|
|
log.error("正在重试...");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
semanticResponseJson.put("identifyId", masterTaskId);
|
|
|
|
|
|
|
|
log.info("ocr识别返回数据:");
|
|
|
|
|
|
|
|
log.info(semanticResponseJson.toJSONString());
|
|
|
|
|
|
|
|
ocrIdentifyService.getSemanticInfo(semanticResponseJson);
|
|
|
|
|
|
|
|
//该子任务已执行,判断主任务是否残留
|
|
|
|
|
|
|
|
String masterTask = (String) redisUtil.get("identify_" + masterTaskId);
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(masterTask)) {
|
|
|
|
|
|
|
|
//主任务中排除当前任务
|
|
|
|
|
|
|
|
String collect = Arrays.asList(masterTask.split(",")).stream().filter(t -> !t.equals(task_id)).collect(Collectors.joining(","));
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(collect)) {
|
|
|
|
|
|
|
|
//如果主任务下的子任务已清空,删除key
|
|
|
|
|
|
|
|
redisUtil.del("identify_" + masterTaskId);
|
|
|
|
|
|
|
|
//刷新Ocr识别任务状态
|
|
|
|
|
|
|
|
ocrIdentifyService.updateOcrIdentifyStatus(masterTaskId, "1");
|
|
|
|
|
|
|
|
log.error("更新任务状态,id:" + masterTaskId);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
//主任务还存在,刷新主任务明细
|
|
|
|
|
|
|
|
redisUtil.set("identify_" + masterTaskId, collect);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
Thread.sleep(2000l);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//模拟执行成功
|
|
|
|
|
|
|
|
String overTaskIds = (String) redisUtil.get("over_task_"+taskModel.getTaskType());
|
|
|
|
|
|
|
|
if (org.apache.commons.lang.StringUtils.isBlank(overTaskIds)) {
|
|
|
|
|
|
|
|
overTaskIds = taskModel.getTaskId();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (!Arrays.asList(overTaskIds.split(",")).contains(taskModel.getTaskId())) {
|
|
|
|
|
|
|
|
//该任务未执行过
|
|
|
|
|
|
|
|
overTaskIds += "," + taskModel.getTaskId();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
//该任务已结束过
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//存入已执行 redis里
|
|
|
|
|
|
|
|
redisUtil.set("over_task_"+taskModel.getTaskType(), overTaskIds);
|
|
|
|
|
|
|
|
log.error(taskModel.getTaskLevel() + "-级别," + taskModel.getTaskId() + "-已执行");
|
|
|
|
|
|
|
|
//从3中任务集中,删除该任务
|
|
|
|
|
|
|
|
flushTask(taskModel.getTaskId(), 2);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|