|
|
|
|
@ -56,21 +56,21 @@ public class TimeTask {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 定时任务查询识别中任务的结果,并对结果进行解析存储,相应的改变任务状态
|
|
|
|
|
*
|
|
|
|
|
* 注意:不能添加事务 会导致数据错误
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
public void getTaskResult() {
|
|
|
|
|
String result = "";
|
|
|
|
|
try {
|
|
|
|
|
String expired = DictUtils.getDictValue("task_time_out", "task_timeout");
|
|
|
|
|
DaTask param = new DaTask();
|
|
|
|
|
param.setStatus("1"); //处理中
|
|
|
|
|
//查询所有识别中的任务
|
|
|
|
|
List<DaTask> daTasks = daTaskService.selectDaTaskListByStatus(param);
|
|
|
|
|
if (daTasks != null && daTasks.size() > 0) {
|
|
|
|
|
for (DaTask datask : daTasks) {
|
|
|
|
|
//查看认识是否超时, 计算两个日期之间的差值(毫秒) 分钟-> / (1000 * 60)
|
|
|
|
|
long diff = (new Date().getTime() - datask.getUpdateTime().getTime()) / (1000 * 60);
|
|
|
|
|
String expired = DictUtils.getDictValue("task_time_out", "task_timeout");
|
|
|
|
|
//查看识别是否超时, 计算两个日期之间的差值(毫秒) 分钟-> / (1000 * 60)
|
|
|
|
|
long diff = (new Date().getTime() - datask.getSbStart().getTime()) / (1000 * 60);
|
|
|
|
|
if (diff > Long.parseLong(expired)) {
|
|
|
|
|
datask.setStatus("3"); //设置状态任务超时
|
|
|
|
|
daTaskService.updateDaTask(datask);
|
|
|
|
|
@ -91,9 +91,12 @@ public class TimeTask {
|
|
|
|
|
try {
|
|
|
|
|
jsonobject = new JSONObject(result);
|
|
|
|
|
} catch (JSONException e) {
|
|
|
|
|
Date date = new Date();
|
|
|
|
|
//todo 处理json异常 之前测试多次出现返回结果:Internal Server Error
|
|
|
|
|
datask.setStatus("4"); //任务异常
|
|
|
|
|
datask.setRemark(result);
|
|
|
|
|
datask.setSbEnd(date);//识别结束时间
|
|
|
|
|
datask.setProcessDuration(date.getTime()-datask.getSbStart().getTime());
|
|
|
|
|
daTaskService.updateDaTask(datask);
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
System.err.println("get_result:" + result);
|
|
|
|
|
@ -104,9 +107,7 @@ public class TimeTask {
|
|
|
|
|
if (status.equals("1")) { //1处理中
|
|
|
|
|
continue;
|
|
|
|
|
} else if (status.equals("2")) { //2识别任务已结束,获取并存储数据
|
|
|
|
|
datask.setRemark(msg); //记录返回结果的msg信息
|
|
|
|
|
String code = jsonobject.getStr("code");
|
|
|
|
|
// Integer total = jsonobject.getInt("total");
|
|
|
|
|
//获取失败id
|
|
|
|
|
String failPicid = jsonobject.getStr("failPicid");
|
|
|
|
|
//获取失败的id集合
|
|
|
|
|
@ -114,15 +115,17 @@ public class TimeTask {
|
|
|
|
|
|
|
|
|
|
//更新任务记录信息
|
|
|
|
|
datask.setStatus("2");//已结束
|
|
|
|
|
datask.setRemark(msg); //记录返回结果的msg信息
|
|
|
|
|
datask.setFailIds(StringUtils.join(failIds, ","));
|
|
|
|
|
//获取成功的图片ids 重传任务时 成功ids=alls-fails
|
|
|
|
|
List<Long> allpicIds = Stream.of(datask.getPicIds().split(","))
|
|
|
|
|
.map(Long::parseLong)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
List<Long> allpicIds = Stream.of(datask.getPicIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
|
|
|
|
|
List<Long> successIds = allpicIds.stream().filter(item -> !failIds.contains(item)).collect(Collectors.toList());
|
|
|
|
|
datask.setSuccessIds(StringUtils.join(successIds, ","));
|
|
|
|
|
datask.setFailNum(failIds.size());
|
|
|
|
|
datask.setSuccessNum(allpicIds.size() - failIds.size());
|
|
|
|
|
Date date = new Date();
|
|
|
|
|
datask.setSbEnd(date);//识别结束时间
|
|
|
|
|
datask.setProcessDuration(date.getTime()-datask.getSbStart().getTime());
|
|
|
|
|
daTaskService.updateDaTask(datask);
|
|
|
|
|
|
|
|
|
|
// code=1 识别成功或者部分成功,如果code=0 识别全部失败 无需存储信息
|
|
|
|
|
@ -258,7 +261,7 @@ public class TimeTask {
|
|
|
|
|
if (info != null && info.size() > 0) {
|
|
|
|
|
for (DaYtzm ytzm : info) {
|
|
|
|
|
//判断返回结果是否都是字符串 "无"
|
|
|
|
|
/* if(CallThirdInterface.allFieldsEqualTo(ytzm,"无")){
|
|
|
|
|
/*if(CallThirdInterface.allFieldsEqualTo(ytzm,"无")){
|
|
|
|
|
continue;
|
|
|
|
|
}*/
|
|
|
|
|
ytzm.setAllPicIds(picIds);
|
|
|
|
|
@ -348,15 +351,17 @@ public class TimeTask {
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//获取数据成功后,清除对应taskId的信息
|
|
|
|
|
clearThirdTaskResult(datask.getId());
|
|
|
|
|
}
|
|
|
|
|
} else if (status.equals("3")) { //=3第三方服务崩溃或者其他异常---任务丢失
|
|
|
|
|
} else { //=3或者其他值,第三方服务崩溃或者其他异常---任务丢失
|
|
|
|
|
Date date = new Date();
|
|
|
|
|
datask.setRemark(msg); //记录返回结果的msg信息
|
|
|
|
|
datask.setStatus("4"); //设置状态任务异常
|
|
|
|
|
datask.setSbEnd(date);//识别结束时间
|
|
|
|
|
datask.setProcessDuration(date.getTime()-datask.getSbStart().getTime());
|
|
|
|
|
daTaskService.updateDaTask(datask);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
//获取数据成功后,清除对应taskId的信息
|
|
|
|
|
clearThirdTaskResult(datask.getId());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
logger.info("-------------------------------------暂时没有识别中的任务----------------------------------");
|
|
|
|
|
@ -371,6 +376,7 @@ public class TimeTask {
|
|
|
|
|
* 定时任务,对等待中的任务进行提交(识别中任务<third_task_max值时)
|
|
|
|
|
*/
|
|
|
|
|
public void submitTask() {
|
|
|
|
|
DaTask scTask = new DaTask();
|
|
|
|
|
String result = "";
|
|
|
|
|
try {
|
|
|
|
|
//获取字典第三方任务最大数量
|
|
|
|
|
@ -378,10 +384,11 @@ public class TimeTask {
|
|
|
|
|
//1.获取所有等待任务
|
|
|
|
|
DaTask param = new DaTask();
|
|
|
|
|
param.setStatus("-1"); //等待中
|
|
|
|
|
//查询所有识别中的任务
|
|
|
|
|
//查询所有等待中的任务
|
|
|
|
|
List<DaTask> daTasks = daTaskService.selectDaTaskListByStatus(param);
|
|
|
|
|
if (daTasks != null && daTasks.size() > 0) {
|
|
|
|
|
for (DaTask daTask : daTasks) {
|
|
|
|
|
scTask=daTask; //捕获异常的时候使用这个对象
|
|
|
|
|
DaTask sbz = new DaTask();
|
|
|
|
|
sbz.setStatus("1"); //处理中
|
|
|
|
|
//2.获取所有识别中的任务
|
|
|
|
|
@ -392,7 +399,7 @@ public class TimeTask {
|
|
|
|
|
} else {
|
|
|
|
|
List<Long> ids;
|
|
|
|
|
//判断需要上传的图片
|
|
|
|
|
if (daTask.getSuccessNum() != null && daTask.getSuccessNum() > 0) {
|
|
|
|
|
if (daTask.getSuccessNum() != null &&(daTask.getNum()> daTask.getSuccessNum() && daTask.getSuccessNum() > 0)){
|
|
|
|
|
String failIds = daTask.getFailIds();
|
|
|
|
|
ids = Stream.of(failIds.split(","))
|
|
|
|
|
.map(Long::parseLong)
|
|
|
|
|
@ -414,18 +421,20 @@ public class TimeTask {
|
|
|
|
|
File file = new File(path);
|
|
|
|
|
files.add(file);
|
|
|
|
|
}
|
|
|
|
|
//调用第三方接口 先清数据
|
|
|
|
|
CallThirdInterface.callThirdInterfaceClearByTaskId(url4, daTask.getId());
|
|
|
|
|
Long start = System.currentTimeMillis();
|
|
|
|
|
result = CallThirdInterface.callThirdInterfaceUpload(url1, files, daTask.getYwType(), ids, daTask.getId());
|
|
|
|
|
Long end = System.currentTimeMillis();
|
|
|
|
|
//! 解析JSON字符串,获取键对应的值
|
|
|
|
|
JSONObject jsonobject = null;
|
|
|
|
|
jsonobject = new JSONObject(result);
|
|
|
|
|
code = jsonobject.getStr("code");
|
|
|
|
|
msg = jsonobject.getStr("msg");
|
|
|
|
|
//记录最后一次识别的操作时间
|
|
|
|
|
daTask.setUpdateTime(new Date());
|
|
|
|
|
//上传任务所用时长(毫秒)
|
|
|
|
|
daTask.setUpDuration(end-start);
|
|
|
|
|
if (code != null && code.equals("1")) { //code=0 任务接收失败,code=1成功
|
|
|
|
|
daTask.setStatus("1"); //识别中
|
|
|
|
|
daTask.setSbStart(new Date()); //识别开始时间
|
|
|
|
|
daTask.setSbEnd(null);//清空识别结束时间
|
|
|
|
|
daTask.setLastNum(picRecards.size());
|
|
|
|
|
daTaskService.updateDaTask(daTask);
|
|
|
|
|
} else {
|
|
|
|
|
@ -440,6 +449,9 @@ public class TimeTask {
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
scTask.setStatus("0");
|
|
|
|
|
scTask.setRemark(e.getMessage()+",result:"+result);
|
|
|
|
|
daTaskService.updateDaTask(scTask);
|
|
|
|
|
System.out.println("upload_api接口:" + result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|