parent
d678700078
commit
82cd93d232
@ -0,0 +1,133 @@
|
|||||||
|
package org.jeecg.modules.ocr.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
import org.jeecg.common.util.RedisUtil;
|
||||||
|
import org.jeecg.modules.ocr.entity.OcrIdentify;
|
||||||
|
import org.jeecg.modules.ocr.model.TaskModel;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description
|
||||||
|
* @Author ZhouWenTao
|
||||||
|
* @Date 2023/8/4 11:11
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class TaskService {
|
||||||
|
@Resource
|
||||||
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
public void postSemantic(OcrIdentify ocrIdentify, List<String> identifyUrlList) {
|
||||||
|
String id = ocrIdentify.getId();
|
||||||
|
String masterTask = (String) redisUtil.get("identify_" + id);
|
||||||
|
if (StringUtils.isNotBlank(masterTask)) {
|
||||||
|
log.error("任务已存在_" + ocrIdentify.getId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String priority = ocrIdentify.getPriority();//加急状态;//任务优先级
|
||||||
|
String identifyUrl = null;
|
||||||
|
String taskType = "identify";
|
||||||
|
//拼接子任务id
|
||||||
|
String taskId = null;
|
||||||
|
StringBuffer task_master = new StringBuffer();
|
||||||
|
for (int i = 0; i < identifyUrlList.size(); i++) {
|
||||||
|
taskId = String.format(id + "_" + (i + 1));
|
||||||
|
task_master.append(taskId).append(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
//执行子任务.
|
||||||
|
JSONObject requestBody = new JSONObject();
|
||||||
|
TaskModel taskModel = new TaskModel();
|
||||||
|
if (identifyUrlList.size()>0) {
|
||||||
|
redisUtil.set("identify_" + id, task_master.toString());
|
||||||
|
for (int i = 0; i < identifyUrlList.size(); i++) {
|
||||||
|
identifyUrl = identifyUrlList.get(i);
|
||||||
|
taskModel.setTaskId(taskId);
|
||||||
|
taskModel.setTaskType("identify");
|
||||||
|
taskModel.setTaskLevel(Integer.valueOf(priority));
|
||||||
|
taskModel.setTaskStatus("0");
|
||||||
|
taskModel.setParameter(id + "," + taskId + "," + identifyUrl);
|
||||||
|
//保存子任务
|
||||||
|
saveTask(taskModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Result saveTask(TaskModel taskModel) {
|
||||||
|
String taskId = taskModel.getTaskId();
|
||||||
|
String task_ = (String) redisUtil.get("task_" +taskModel.getTaskType()+"_"+taskModel.getTaskLevel());
|
||||||
|
if (task_ == null || task_.equals("[]")) {
|
||||||
|
//无历史任务
|
||||||
|
List<TaskModel> jsonObjects = Arrays.asList(taskModel);
|
||||||
|
task_ = JSONObject.toJSONString(jsonObjects);
|
||||||
|
} else {
|
||||||
|
//有历史任务
|
||||||
|
JSONArray jsonArray = JSONObject.parseArray(task_);
|
||||||
|
if (jsonArray != null) {
|
||||||
|
List<TaskModel> taskList = jsonArray.toJavaList(TaskModel.class);
|
||||||
|
List<TaskModel> staskList = taskList.stream().filter(t -> t.getTaskId().equals(taskId)).collect(Collectors.toList());
|
||||||
|
TaskModel task = null;
|
||||||
|
if (staskList == null || staskList.size() == 0) {
|
||||||
|
//该任务不存在, 看看 库表里 该任务是否已执行成功了
|
||||||
|
String overTask = (String) redisUtil.get("over_task_"+taskModel.getTaskType());
|
||||||
|
if (org.apache.commons.lang.StringUtils.isNotBlank(overTask) && Arrays.asList(overTask.split(",")).contains(taskId)) {
|
||||||
|
//库表里已执行过
|
||||||
|
return Result.OK("该任务已执行结束");
|
||||||
|
} else {
|
||||||
|
//库表中未执行过,追加任务
|
||||||
|
taskList.add(taskModel);
|
||||||
|
task_ = JSONObject.toJSONString(taskList);
|
||||||
|
}
|
||||||
|
} else if ("0".equals(staskList.get(0).getTaskStatus())) {
|
||||||
|
//该任务 待运行
|
||||||
|
return Result.OK("该任务还处于排队中");
|
||||||
|
} else if ("1".equals(staskList.get(0).getTaskStatus())) {
|
||||||
|
//该任务 运行中
|
||||||
|
return Result.OK("该任务还处于运行中");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//存入redis
|
||||||
|
redisUtil.set("task_" +taskModel.getTaskType()+"_"+taskModel.getTaskLevel(), task_);
|
||||||
|
//执行任务
|
||||||
|
//executeTask();
|
||||||
|
return Result.OK("已追加到任务");
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取全部任务
|
||||||
|
public List<TaskModel> getTaskList() {
|
||||||
|
String task_0 = (String) redisUtil.get("task_identify_0");
|
||||||
|
String task_1 = (String) redisUtil.get("task_identify_1");
|
||||||
|
/*String task_2 = (String) redisUtil.get("task_2");
|
||||||
|
String task_3 = (String) redisUtil.get("task_3");*/
|
||||||
|
JSONArray task0JsonArray = JSONObject.parseArray(task_0);
|
||||||
|
JSONArray task1JsonArray = JSONObject.parseArray(task_1);
|
||||||
|
/*JSONArray task2JsonArray = JSONObject.parseArray(task_2);
|
||||||
|
JSONArray task3JsonArray = JSONObject.parseArray(task_3);*/
|
||||||
|
List<TaskModel> taskList = new ArrayList<>();
|
||||||
|
if (task0JsonArray != null) {
|
||||||
|
taskList.addAll(task0JsonArray.toJavaList(TaskModel.class));
|
||||||
|
}
|
||||||
|
if (task1JsonArray != null) {
|
||||||
|
taskList.addAll(task1JsonArray.toJavaList(TaskModel.class));
|
||||||
|
}
|
||||||
|
/*if (task2JsonArray != null) {
|
||||||
|
taskList.addAll(task2JsonArray.toJavaList(TaskModel.class));
|
||||||
|
}
|
||||||
|
if (task3JsonArray != null) {
|
||||||
|
taskList.addAll(task3JsonArray.toJavaList(TaskModel.class));
|
||||||
|
}*/
|
||||||
|
return taskList;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue