|
|
|
@ -2,6 +2,7 @@ package org.jeecg.modules.api.controller;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
@ -14,8 +15,10 @@ import org.jeecg.common.util.AssertUtils;
|
|
|
|
|
import org.jeecg.common.util.RedisUtil;
|
|
|
|
|
import org.jeecg.common.util.RestUtil;
|
|
|
|
|
import org.jeecg.modules.ocr.entity.OcrIdentify;
|
|
|
|
|
import org.jeecg.modules.ocr.entity.OcrIdentifyDetail;
|
|
|
|
|
import org.jeecg.modules.ocr.entity.OcrRuleCheck;
|
|
|
|
|
import org.jeecg.modules.ocr.model.TaskModel;
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrIdentifyDetailService;
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrIdentifyService;
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrRuleCheckService;
|
|
|
|
|
import org.jeecg.modules.ocr.utils.FileOUtils;
|
|
|
|
@ -48,6 +51,8 @@ public class ApiController {
|
|
|
|
|
@Resource
|
|
|
|
|
private IOcrIdentifyService ocrIdentifyService;
|
|
|
|
|
@Resource
|
|
|
|
|
private IOcrIdentifyDetailService ocrIdentifyDetailService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ISysDictService sysDictService;
|
|
|
|
|
@Resource
|
|
|
|
|
private RedisUtil redisUtil;
|
|
|
|
@ -196,169 +201,19 @@ public class ApiController {
|
|
|
|
|
}
|
|
|
|
|
//==========================================================================================
|
|
|
|
|
|
|
|
|
|
/*@ApiOperation(value = "模拟创建任务", notes = "模拟创建任务")
|
|
|
|
|
@PostMapping(value = "/pushTask")
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Result pushTask(@RequestBody JSONObject jsonObject) {
|
|
|
|
|
//获取优先级1的任务
|
|
|
|
|
String taskId = jsonObject.getString("taskId");
|
|
|
|
|
String taskType = jsonObject.getString("taskType");
|
|
|
|
|
int taskLevel= jsonObject.getInteger("taskLevel");
|
|
|
|
|
String task_1 = (String) redisUtil.get("task_"+taskLevel);
|
|
|
|
|
if (task_1 == null || task_1.equals("[]")) {
|
|
|
|
|
//无历史任务
|
|
|
|
|
TaskModel task = new TaskModel();
|
|
|
|
|
task.setTaskId(taskId);
|
|
|
|
|
task.setTaskType(taskType);
|
|
|
|
|
task.setTaskStatus("0");//任务 待运行
|
|
|
|
|
task.setTaskLevel(taskLevel);
|
|
|
|
|
List<TaskModel> jsonObjects = Arrays.asList(task);
|
|
|
|
|
task_1 = JSONObject.toJSONString(jsonObjects);
|
|
|
|
|
} else {
|
|
|
|
|
//有历史任务
|
|
|
|
|
JSONArray jsonArray = JSONObject.parseArray(task_1);
|
|
|
|
|
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");
|
|
|
|
|
if (StringUtils.isNotBlank(overTask)&&Arrays.asList(overTask.split(",")).contains(taskId)) {
|
|
|
|
|
//库表里已执行过
|
|
|
|
|
return Result.OK("该任务已执行结束");
|
|
|
|
|
} else {
|
|
|
|
|
//库表中未执行过,追加任务
|
|
|
|
|
taskList.add(new TaskModel(taskId, taskLevel, taskType, "0", ""));
|
|
|
|
|
task_1 = 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_"+taskLevel, task_1);
|
|
|
|
|
//执行任务
|
|
|
|
|
executeTask();
|
|
|
|
|
return Result.OK("已追加到任务");
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
/*@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
@Async
|
|
|
|
|
public void executeTask() {
|
|
|
|
|
//获取任务
|
|
|
|
|
List<TaskModel> taskList=getTaskList();
|
|
|
|
|
//查看是否有执行中的任务
|
|
|
|
|
long executingCount = taskList.stream().filter(t -> t.getTaskStatus().equals("1")).count();
|
|
|
|
|
if (executingCount>0) {
|
|
|
|
|
//该方法正在执行中
|
|
|
|
|
log.error("该方法正在执行中");
|
|
|
|
|
}
|
|
|
|
|
List<TaskModel> waitingTaskList = taskList.stream().filter(t -> t.getTaskStatus().equals("0")).collect(Collectors.toList());
|
|
|
|
|
if (waitingTaskList!=null) {
|
|
|
|
|
while (waitingTaskList.size()>0){
|
|
|
|
|
//取第一个任务
|
|
|
|
|
TaskModel taskModel = waitingTaskList.get(0);
|
|
|
|
|
waitingTaskList.get(0).setTaskStatus("1");
|
|
|
|
|
//刷新redis,执行中
|
|
|
|
|
flushTask(taskModel.getTaskId(),1);
|
|
|
|
|
//执行
|
|
|
|
|
executeTaskp(taskModel);
|
|
|
|
|
//刷新已知任务
|
|
|
|
|
taskList=getTaskList();
|
|
|
|
|
//刷新待运行任务
|
|
|
|
|
waitingTaskList = taskList.stream().filter(t -> t.getTaskStatus().equals("0")).collect(Collectors.toList());
|
|
|
|
|
@ApiOperation(value = "刷新为完成的任务", notes = "任务完结通知")
|
|
|
|
|
@GetMapping("/restartTask")
|
|
|
|
|
public Result restartTask(){
|
|
|
|
|
//获取未执行完的任务
|
|
|
|
|
List<OcrIdentify> list = ocrIdentifyService.list(new LambdaQueryWrapper<OcrIdentify>().eq(OcrIdentify::getStatus, "0"));
|
|
|
|
|
List<String> identifyIdList = list.stream().map(l -> l.getId()).collect(Collectors.toList());
|
|
|
|
|
if (identifyIdList.size()>0) {
|
|
|
|
|
ocrIdentifyDetailService.remove(new LambdaQueryWrapper<OcrIdentifyDetail>().in(OcrIdentifyDetail::getIdentifyId,identifyIdList));
|
|
|
|
|
for (OcrIdentify ocrIdentify : list) {
|
|
|
|
|
List<String> identifyUrlList = FileOUtils.fileLists(null, ocrIdentify.getIdentifyUrl());
|
|
|
|
|
ocrIdentifyService.postSemantic(ocrIdentify,identifyUrlList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.error("任务已全部执行");
|
|
|
|
|
return Result.OK(list.size()+"个任务.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*//**
|
|
|
|
|
* 刷新任务状态
|
|
|
|
|
* @param taskId
|
|
|
|
|
* @param status 状态 1 运行中,2 已结束
|
|
|
|
|
*//*
|
|
|
|
|
public void flushTask(String taskId,int status) {
|
|
|
|
|
List<TaskModel> taskList = 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_"+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_"+taskLevel,s);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//执行任务
|
|
|
|
|
public void executeTaskp(TaskModel taskModel){
|
|
|
|
|
//睡眠
|
|
|
|
|
try {
|
|
|
|
|
Thread.sleep(20000l);
|
|
|
|
|
} catch (InterruptedException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
//模拟执行成功
|
|
|
|
|
String overTaskIds = (String) redisUtil.get("over_task");
|
|
|
|
|
if (StringUtils.isBlank(overTaskIds)) {
|
|
|
|
|
overTaskIds=taskModel.getTaskId();
|
|
|
|
|
}else{
|
|
|
|
|
if (!Arrays.asList(overTaskIds.split(",")).contains(taskModel.getTaskId())) {
|
|
|
|
|
//该任务未执行过
|
|
|
|
|
overTaskIds+=","+taskModel.getTaskId();
|
|
|
|
|
}else{
|
|
|
|
|
//该任务已结束过
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//存入已执行 redis里
|
|
|
|
|
redisUtil.set("over_task",overTaskIds);
|
|
|
|
|
log.error( taskModel.getTaskLevel()+"-级别,"+ taskModel.getTaskId()+"-已执行");
|
|
|
|
|
//从3中任务集中,删除该任务
|
|
|
|
|
flushTask(taskModel.getTaskId(),2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取全部任务
|
|
|
|
|
public List<TaskModel> getTaskList(){
|
|
|
|
|
String task_1 = (String) redisUtil.get("task_1");
|
|
|
|
|
String task_2 = (String) redisUtil.get("task_2");
|
|
|
|
|
String task_3 = (String) redisUtil.get("task_3");
|
|
|
|
|
JSONArray task1JsonArray = JSONObject.parseArray(task_1);
|
|
|
|
|
JSONArray task2JsonArray = JSONObject.parseArray(task_2);
|
|
|
|
|
JSONArray task3JsonArray = JSONObject.parseArray(task_3);
|
|
|
|
|
List<TaskModel> taskList=new ArrayList<>();
|
|
|
|
|
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;
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|