diff --git a/dangan-admin/src/main/resources/logback.xml b/dangan-admin/src/main/resources/logback.xml
index 036949d..951d027 100644
--- a/dangan-admin/src/main/resources/logback.xml
+++ b/dangan-admin/src/main/resources/logback.xml
@@ -3,7 +3,8 @@
-
+
+
diff --git a/dangan-common/src/main/java/com/da/common/enums/BusinessType.java b/dangan-common/src/main/java/com/da/common/enums/BusinessType.java
index b69fd4c..2eaf4e5 100644
--- a/dangan-common/src/main/java/com/da/common/enums/BusinessType.java
+++ b/dangan-common/src/main/java/com/da/common/enums/BusinessType.java
@@ -56,4 +56,8 @@ public enum BusinessType
* 清空数据
*/
CLEAN,
+ /**
+ * 重提任务
+ */
+ TASKUP,
}
diff --git a/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java b/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java
index d0cb587..f27225c 100644
--- a/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java
+++ b/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java
@@ -1,10 +1,10 @@
package com.da.dangan.controller;
-import cn.hutool.json.JSONObject;
+import com.da.common.annotation.Log;
import com.da.common.config.RuoYiConfig;
import com.da.common.core.controller.BaseController;
import com.da.common.core.domain.AjaxResult;
-import com.da.common.utils.DictUtils;
+import com.da.common.enums.BusinessType;
import com.da.common.utils.file.FileUploadUtils;
import com.da.common.utils.file.FileUtils;
import com.da.dangan.domain.DaPicturesRecard;
@@ -29,7 +29,6 @@ import java.util.Date;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
/**
* 档案采集Controller
@@ -177,7 +176,7 @@ public class DangAnCollectController extends BaseController {
/**
* 创建识别任务
*/
- @PostMapping("/recongnize")
+ /*@PostMapping("/recongnize")
public AjaxResult recognize(@RequestBody List picRecards) {
try {
//获取字典第三方任务最大数量
@@ -207,7 +206,7 @@ public class DangAnCollectController extends BaseController {
daTask.setNum(picRecards.size());
daTask.setStatus("-1");//默认等待状态 接收成功后修改为1
daTask.setPicIds(StringUtils.join(ids, ","));//逗号分割);
- daTask.setUpdateTime(new Date());//等待队列order by 字段
+ daTask.setUpdateTime(new Date());//开始等待时间,等待队列order by 字段
daTaskService.insertDaTask(daTask);
//获取识别中的任务
@@ -216,22 +215,28 @@ public class DangAnCollectController extends BaseController {
List daTasks = daTaskService.selectDaTaskListByStatus(param);
//获取等待任务
DaTask waitTask = new DaTask();
- waitTask.setStatus("-1"); //处理中
+ waitTask.setStatus("-1"); //等待中
List waitTasks = daTaskService.selectDaTaskListByStatus(waitTask);
- if ((waitTasks != null && waitTasks.size() > 0)||(daTasks != null && daTasks.size() >= maxTask)){
+ //上面默认创建了一个等待中的任务
+ if ((waitTasks != null && waitTasks.size() > 1)||(daTasks != null && daTasks.size() >= maxTask)){
return AjaxResult.success("任务进入等待队列");
} else {
//识别中任务<10,调用第三方接口
+ Long start = System.currentTimeMillis();
String result = CallThirdInterface.callThirdInterfaceUpload(url1, files, ywType, ids, daTask.getId());
+ Long end = System.currentTimeMillis();
//! 解析JSON字符串,获取键对应的值
JSONObject jsonobject = new JSONObject(result);
code = jsonobject.getStr("code");
msg = jsonobject.getStr("msg");
- //如果code=0 任务接收失败,code=1成功
- if (code != null && code.equals("1")) {
+ //上传任务所用时长(毫秒)
+ daTask.setUpDuration(end-start);
+ if (code != null && code.equals("1")) { //如果code=0 任务接收失败,code=1成功
daTask.setStatus("1"); //识别中
- daTask.setUpdateTime(new Date()); //设置updateTime 因定时任务判断任务超时使用updatetime
+ daTask.setSbStart(new Date()); //设置识别开始时间 因定时任务判断任务超时使用
+ daTask.setSbEnd(null);//清空识别结束时间
daTaskService.updateDaTask(daTask);
+ return AjaxResult.success("任务接收成功");
} else {
daTask.setStatus("0");
daTask.setRemark(msg);
@@ -247,13 +252,13 @@ public class DangAnCollectController extends BaseController {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
- return AjaxResult.success("任务接收成功");
- }
+ }*/
/**
* 创建识别任务
*/
- /*@PostMapping("/recongnize")
+ @Log(title = "识别任务", businessType = BusinessType.INSERT)
+ @PostMapping("/recongnize")
public AjaxResult recognize(@RequestBody List picRecards) {
//取所有id的集合 stream()有顺序
try {
@@ -267,6 +272,7 @@ public class DangAnCollectController extends BaseController {
DaTask daTask = new DaTask();
daTask.setCreateBy(getUsername());
daTask.setCreateTime(new Date());
+ daTask.setUpdateTime(new Date());//等待开始时间
daTask.setMuId(muId);
daTask.setMuPath(muPath);
daTask.setYwType(ywType);
@@ -282,12 +288,12 @@ public class DangAnCollectController extends BaseController {
return AjaxResult.error(e.getMessage());
}
return AjaxResult.success("任务创建成功");
- }*/
+ }
/**
* 任务重新识别
*/
- @PostMapping("/reRecongnize")
+ /* @PostMapping("/reRecongnize")
public AjaxResult reRecongnize(Long taskId) {
try {
//获取字典第三方任务最大数量
@@ -333,19 +339,20 @@ public class DangAnCollectController extends BaseController {
daTaskService.updateDaTask(daTask);
return AjaxResult.success("任务进入等待队列");
}else {//识别中任务<10
- //调用第三方接口 先清数据
- CallThirdInterface.callThirdInterfaceClearByTaskId(url4, taskId);
+ Long start = System.currentTimeMillis();
String result = CallThirdInterface.callThirdInterfaceUpload(url1, files, daTask.getYwType(), ids, taskId);
+ Long end = System.currentTimeMillis();
//! 解析JSON字符串,获取键对应的值
JSONObject 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.setLastNum(picRecards.size());
+ daTask.setSbStart(new Date());//开始识别时间
+ daTask.setSbEnd(null);//清空识别结束时间
daTaskService.updateDaTask(daTask);
} else {
daTask.setStatus("0");
@@ -360,26 +367,27 @@ public class DangAnCollectController extends BaseController {
return AjaxResult.error(e.getMessage());
}
return AjaxResult.success("任务接收成功");
- }
+ }*/
/**
* 任务重新识别
*/
- /*@PostMapping("/reRecongnize")
+ @Log(title = "识别任务", businessType = BusinessType.TASKUP)
+ @PostMapping("/reRecongnize")
public AjaxResult reRecongnize(Long taskId) {
try {
DaTask daTask = daTaskService.selectDaTaskById(taskId);
- // daTask.setCreateBy(getUsername());//存入操作用户
//修改任务状态
daTask.setStatus("-1");//默认等待状态
+ daTask.setUpdateTime(new Date());//等待开始时间
daTaskService.updateDaTask(daTask);
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
- return AjaxResult.success("提交成功");
- }*/
+ return AjaxResult.success("任务提交成功");
+ }
/**
* 调用ocr识别接口——上传图片为一组 (也就是上传N张图片为一组数据)-- 未使用
diff --git a/dangan-dangan/src/main/java/com/da/dangan/domain/DaTask.java b/dangan-dangan/src/main/java/com/da/dangan/domain/DaTask.java
index c03b50c..b72c74e 100644
--- a/dangan-dangan/src/main/java/com/da/dangan/domain/DaTask.java
+++ b/dangan-dangan/src/main/java/com/da/dangan/domain/DaTask.java
@@ -1,9 +1,12 @@
package com.da.dangan.domain;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
import com.da.common.annotation.Excel;
import com.da.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
/**
* 识别任务记录对象 da_task
@@ -66,6 +69,25 @@ public class DaTask extends BaseEntity
@Excel(name = "返回结果")
private String resultStr;
+ /** 上传时长(毫秒) */
+ @Excel(name = "上传时长(毫秒)")
+ private Long upDuration;
+
+ /** 识别开始时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "识别开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date sbStart;
+
+ /** 识别结束时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "识别结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date sbEnd;
+
+ /** 处理时长(毫秒) */
+ @Excel(name = "处理时长(毫秒)")
+ private Long processDuration;
+
+
/**
* 当前用户id
*/
@@ -196,6 +218,38 @@ public class DaTask extends BaseEntity
this.lastNum = lastNum;
}
+ public Long getUpDuration() {
+ return upDuration;
+ }
+
+ public void setUpDuration(Long upDuration) {
+ this.upDuration = upDuration;
+ }
+
+ public Date getSbStart() {
+ return sbStart;
+ }
+
+ public void setSbStart(Date sbStart) {
+ this.sbStart = sbStart;
+ }
+
+ public Date getSbEnd() {
+ return sbEnd;
+ }
+
+ public void setSbEnd(Date sbEnd) {
+ this.sbEnd = sbEnd;
+ }
+
+ public Long getProcessDuration() {
+ return processDuration;
+ }
+
+ public void setProcessDuration(Long processDuration) {
+ this.processDuration = processDuration;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@@ -213,6 +267,10 @@ public class DaTask extends BaseEntity
.append("failIds", getFailIds())
.append("resultStr", getResultStr())
.append("remark", getRemark())
+ .append("upDuration", getUpDuration())
+ .append("sbStart", getSbStart())
+ .append("sbEnd", getSbEnd())
+ .append("processDuration", getProcessDuration())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
diff --git a/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java b/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java
index 3fc965b..a50ab82 100644
--- a/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java
+++ b/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java
@@ -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 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 allpicIds = Stream.of(datask.getPicIds().split(","))
- .map(Long::parseLong)
- .collect(Collectors.toList());
+ List allpicIds = Stream.of(datask.getPicIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
List 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 {
* 定时任务,对等待中的任务进行提交(识别中任务 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 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);
}
}
diff --git a/dangan-dangan/src/main/resources/mapper/dangan/DaTaskMapper.xml b/dangan-dangan/src/main/resources/mapper/dangan/DaTaskMapper.xml
index 36a384b..b6a2ce8 100644
--- a/dangan-dangan/src/main/resources/mapper/dangan/DaTaskMapper.xml
+++ b/dangan-dangan/src/main/resources/mapper/dangan/DaTaskMapper.xml
@@ -19,6 +19,10 @@
+
+
+
+
@@ -26,7 +30,7 @@
- select id, mu_id, yw_type, mu_path, num, pic_ids, last_num, status, success_num, success_ids, fail_num, fail_ids, result_str, remark, create_by, create_time, update_by, update_time from da_task
+ select id, mu_id, yw_type, mu_path, num, pic_ids, last_num, status, success_num, success_ids, fail_num, fail_ids, result_str, remark, up_duration, sb_start, sb_end, process_duration, create_by, create_time, update_by, update_time from da_task
@@ -81,6 +89,10 @@
fail_ids,
result_str,
remark,
+ up_duration,
+ sb_start,
+ sb_end,
+ process_duration,
create_by,
create_time,
update_by,
@@ -100,6 +112,10 @@
#{failIds},
#{resultStr},
#{remark},
+ #{upDuration},
+ #{sbStart},
+ #{sbEnd},
+ #{processDuration},
#{createBy},
#{createTime},
#{updateBy},
@@ -123,6 +139,10 @@
fail_ids = #{failIds},
result_str = #{resultStr},
remark = #{remark},
+ up_duration = #{upDuration},
+ sb_start = #{sbStart},
+ sb_end = #{sbEnd},
+ process_duration = #{processDuration},
create_by = #{createBy},
create_time = #{createTime},
update_by = #{updateBy},
diff --git a/dangan-system/src/main/java/com/da/system/domain/SysOperLog.java b/dangan-system/src/main/java/com/da/system/domain/SysOperLog.java
index 63a0121..2a22715 100644
--- a/dangan-system/src/main/java/com/da/system/domain/SysOperLog.java
+++ b/dangan-system/src/main/java/com/da/system/domain/SysOperLog.java
@@ -1,10 +1,12 @@
package com.da.system.domain;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
import com.da.common.annotation.Excel;
import com.da.common.annotation.Excel.ColumnType;
import com.da.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+
/**
* 操作日志记录表 oper_log
@@ -24,7 +26,7 @@ public class SysOperLog extends BaseEntity
private String title;
/** 业务类型(0其它 1新增 2修改 3删除) */
- @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据")
+ @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据,10=重新提交")
private Integer businessType;
/** 业务类型数组 */
diff --git a/dangan-ui/vue.config.js b/dangan-ui/vue.config.js
index 632b5ed..04b0db2 100644
--- a/dangan-ui/vue.config.js
+++ b/dangan-ui/vue.config.js
@@ -36,6 +36,7 @@ module.exports = {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8080`,
+ //target: `http://172.16.9.9:8187`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''