Merge pull request 'feat: 补充图片拉取重试逻辑' (#163) from feature/retryPullData into test

Reviewed-on: #163
feat/uodateFlow20240623
cuihaojie 1 year ago
commit 906fc1e65b

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数据拉取日志</title> <title>数据拉取日志</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="${ctx}/static/js/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
<#include "/head/headlist.html" /> <#include "/head/headlist.html" />
</head> </head>
@ -141,6 +141,7 @@
}, },
{width: 80, valign: "middle", field: 'responseParam', title: '响应参数', sortable: true}, {width: 80, valign: "middle", field: 'responseParam', title: '响应参数', sortable: true},
{width: 80, valign: "middle", field: 'requestParam', title: '请求参数', sortable: true}, {width: 80, valign: "middle", field: 'requestParam', title: '请求参数', sortable: true},
{width: 80, valign: "middle", field: 'time', title: '重试次数', sortable: true},
{ {
width:200, width:200,
field: 'id', field: 'id',
@ -148,9 +149,8 @@
formatter:function(value,oData,index) { formatter:function(value,oData,index) {
var listOperation = ""; var listOperation = "";
$(jspOperation).each(function (i, toolbar) { $(jspOperation).each(function (i, toolbar) {
console.log(toolbar);
if (toolbar.text === '修改' && oData.status !== 100) { if (toolbar.text === '修改' && oData.status !== 100) {
listOperation = listOperation + "<a href=\"javascript:" + toolbar.actionmethod + "('${resourceid}','" + encodeURIComponent(oData.requestParam) + "');\" class=\"btn " + toolbar.img + " btn-xs\")><i class=\"fa " + "fa-refresh" + "\"></i> " + "重试" + " </a>&nbsp;&nbsp;"; listOperation = listOperation + "<a href=\"javascript:" + toolbar.actionmethod + "('${resourceid}','" + encodeURIComponent(oData.requestParam) + "','" + encodeURIComponent(oData.id) + "');\" class=\"btn " + toolbar.img + " btn-xs\")><i class=\"fa " + "fa-refresh" + "\"></i> " + "重试" + " </a>&nbsp;&nbsp;";
} }
}); });
return listOperation; return listOperation;
@ -167,7 +167,7 @@
_tableListPost.bootstrapTable('refreshOptions',{pageNumber:1}); _tableListPost.bootstrapTable('refreshOptions',{pageNumber:1});
} }
function updateData(jframeid,str){ function updateData(jframeid,str,id){
$(document).ready(function() { $(document).ready(function() {
// Encode the parameter string to be URL-safe // Encode the parameter string to be URL-safe
// Make an AJAX GET request // Make an AJAX GET request
@ -175,14 +175,17 @@
url: '${ctx}/test/api/pullPictureByParameter', // Replace with your server endpoint url: '${ctx}/test/api/pullPictureByParameter', // Replace with your server endpoint
type: 'GET', type: 'GET',
headers: {"logintoken": parent.getLoginToken()}, headers: {"logintoken": parent.getLoginToken()},
data: { parameterString: str }, data: { parameterString: str, id },
success: function(response) { success: function(response) {
console.log(response); if (response || "success" === response) {
toastr.success('Request was successful!'); refreshTable();
toastr.success('Request was successful!');
} else {
toastr.error('Request was failed!');
}
}, },
error: function(xhr, status, error) { error: function(xhr, status, error) {
console.log(error); toastr.error('Request has exception!');
toastr.error('Request was failed!');
} }
}); });
}); });

@ -13,22 +13,21 @@ import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.api.thread.PullAllPictureSourceThread; import cn.jyjz.xiaoyao.ocr.api.thread.PullAllPictureSourceThread;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiConfig; import cn.jyjz.xiaoyao.ocr.api.utils.ApiConfig;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage; import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
import cn.jyjz.xiaoyao.ocr.common.PrevailCloudConstant;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPrevailCloudLog;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService; import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.service.OcrPrevailCloudLogService; import cn.jyjz.xiaoyao.ocr.service.OcrPrevailCloudLogService;
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue; import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
import cn.jyjz.xiaoyao.ocr.util.RequestParameterFormat; import cn.jyjz.xiaoyao.ocr.util.RequestParameterFormat;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.extern.flogger.Flogger;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists; import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import sun.nio.ch.ThreadPool;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -38,7 +37,11 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.*; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* api * api
@ -70,7 +73,7 @@ public class PrevailCloudApiController {
/** /**
* 线 * 线
*/ */
private ExecutorService pictureSourceAllPool = new ThreadPoolExecutor( private ExecutorService pictureSourceAllPool = new ThreadPoolExecutor(
1, 1,
1, 1,
3, 3,
@ -87,32 +90,33 @@ public class PrevailCloudApiController {
/** /**
* *
*
* @param request * @param request
* @return * @return
*/ */
@GetMapping("pullPictureAllByAccountNo") @GetMapping("pullPictureAllByAccountNo")
public String pullPictureAllByAccountNo(HttpServletRequest request){ public String pullPictureAllByAccountNo(HttpServletRequest request) {
//检查是否已有全量拉取在执行 //检查是否已有全量拉取在执行
if(pictureSourceAllPullMsg.isLock()){ if (pictureSourceAllPullMsg.isLock()) {
return pictureSourceAllPullMsg.getMsg(); return pictureSourceAllPullMsg.getMsg();
} }
//1.定义参数 //1.定义参数
String beginStr = request.getParameter("beginStr"); String beginStr = request.getParameter("beginStr");
if(StringUtils.isBlank(beginStr)){ if (StringUtils.isBlank(beginStr)) {
return "开始时间不能为空"; return "开始时间不能为空";
} }
String endStr = request.getParameter("endStr"); String endStr = request.getParameter("endStr");
if(StringUtils.isBlank(endStr)){ if (StringUtils.isBlank(endStr)) {
return "结束时间不能为空"; return "结束时间不能为空";
} }
String tenantNoStr = request.getParameter("tenantNo"); String tenantNoStr = request.getParameter("tenantNo");
if(StringUtils.isBlank(tenantNoStr)){ if (StringUtils.isBlank(tenantNoStr)) {
return "租户不能为空"; return "租户不能为空";
} }
String accountNoStr = request.getParameter("accountNo"); String accountNoStr = request.getParameter("accountNo");
if(StringUtils.isBlank(accountNoStr)){ if (StringUtils.isBlank(accountNoStr)) {
return "业务主体不能为空"; return "业务主体不能为空";
} }
Long tenantNo = Long.parseLong(tenantNoStr); Long tenantNo = Long.parseLong(tenantNoStr);
@ -125,8 +129,8 @@ public class PrevailCloudApiController {
//3.调用线程 //3.调用线程
pictureSourceAllPool.execute( pictureSourceAllPool.execute(
new PullAllPictureSourceThread(tenantNo,accountNo,startDate new PullAllPictureSourceThread(tenantNo, accountNo, startDate
,endDate,pictureSourceAllPullMsg,prevailCloudApi,apiConfig) , endDate, pictureSourceAllPullMsg, prevailCloudApi, apiConfig)
); );
return "执行开始"; return "执行开始";
} }
@ -159,7 +163,7 @@ public class PrevailCloudApiController {
DateTime dateTime = DateUtil.parse(beginStr + " 00:00:00", "yyyy-MM-dd HH:mm:ss"); DateTime dateTime = DateUtil.parse(beginStr + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
// DateTime dateTime = DateUtil.parse("2024-03-31 07:00:000","yyyy-MM-dd HH:mm:ss"); // DateTime dateTime = DateUtil.parse("2024-03-31 07:00:000","yyyy-MM-dd HH:mm:ss");
Instant binstant = dateTime.toInstant(); Instant binstant = dateTime.toInstant();
DateTime dateTime1 = DateUtil.parse(endStr+" 23:59:59","yyyy-MM-dd HH:mm:ss"); DateTime dateTime1 = DateUtil.parse(endStr + " 23:59:59", "yyyy-MM-dd HH:mm:ss");
// DateTime dateTime1 = DateUtil.parse("2024-03-31 09:00:00","yyyy-MM-dd HH:mm:ss"); // DateTime dateTime1 = DateUtil.parse("2024-03-31 09:00:00","yyyy-MM-dd HH:mm:ss");
Instant einstant = dateTime1.toInstant(); Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant)); pictureSourceParameter.setStartTime(Date.from(binstant));
@ -279,11 +283,23 @@ public class PrevailCloudApiController {
} }
@GetMapping("/pullPictureByParameter") @GetMapping("/pullPictureByParameter")
public Boolean pullPictureByParameter(String parameterString) { public Boolean pullPictureByParameter(String parameterString, Long id) {
OcrPrevailCloudLog byId = ocrPrevailCloudLogService.getById(id);
if (byId == null) {
return false;
}
PictureSourceParameter pictureSourceParameter = RequestParameterFormat.fromString(parameterString); PictureSourceParameter pictureSourceParameter = RequestParameterFormat.fromString(parameterString);
List<PictureSourceResult> resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter); List<PictureSourceResult> resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter);
if (CollectionUtils.isEmpty(resultList)) { if (CollectionUtils.isEmpty(resultList)) {
return false; //更新日志
OcrPrevailCloudLog ocrPrevailCloudLog = OcrPrevailCloudLog.builder()
.status(100)
.id(id)
.time(byId.getTime() + 1)
.build();
ocrPrevailCloudLogService.updateById(ocrPrevailCloudLog);
return true;
} }
for (PictureSourceResult pictureSourceResult : resultList) { for (PictureSourceResult pictureSourceResult : resultList) {
@ -299,7 +315,7 @@ public class PrevailCloudApiController {
//赋值默认参数 //赋值默认参数
pictureSourceResult.setRequestParam(pictureSourceParameter); pictureSourceResult.setRequestParam(pictureSourceParameter);
//将可以处理数据放入处理队列中 //将可以处理数据放入处理队列中
TaskQueue.pictureDisposePushData(pictureSourceResult, ocrPictureService, ocrPrevailCloudLogService); TaskQueue.pictureDisposePushDataUpdateLog(pictureSourceResult, id, ocrPictureService, ocrPrevailCloudLogService);
} }
return true; return true;

@ -113,4 +113,10 @@ public class OcrPrevailCloudLog {
*/ */
@TableField(value = "redundance") @TableField(value = "redundance")
private String redundance; private String redundance;
/**
*
*/
@TableField(value = "time")
private Integer time = 0;
} }

@ -48,11 +48,11 @@ public class TaskQueue {
if (ocrPicture != null) { if (ocrPicture != null) {
OcrTaskchildPicture taskchildPicture = ocrPictureService.getOcrTaskChildPictureByPictureId(ocrPicture.getId().toString()); OcrTaskchildPicture taskchildPicture = ocrPictureService.getOcrTaskChildPictureByPictureId(ocrPicture.getId().toString());
if (taskchildPicture != null && pictureSourceResult.getTaskStatus() != null if (taskchildPicture != null && pictureSourceResult.getTaskStatus() != null
&& (pictureSourceResult.getTaskStatus() == 6 || pictureSourceResult.getTaskStatus() == 7) && (taskchildPicture.getStates() == 5 || taskchildPicture.getStates()==3)) { && (pictureSourceResult.getTaskStatus() == 6 || pictureSourceResult.getTaskStatus() == 7) && (taskchildPicture.getStates() == 5 || taskchildPicture.getStates() == 3)) {
if(taskchildPicture.getStates() == 5){ if (taskchildPicture.getStates() == 5) {
String result = ocrPictureService.getPictureApproveResult(ocrPicture.getId()); String result = ocrPictureService.getPictureApproveResult(ocrPicture.getId());
pictureSourceResult.setComment(result); pictureSourceResult.setComment(result);
}else{ } else {
pictureSourceResult.setComment("ocr审批全部通过由无量云发起了重置审批流程的操作。"); pictureSourceResult.setComment("ocr审批全部通过由无量云发起了重置审批流程的操作。");
} }
ocrPictureService.deletePictureInfo(ocrPicture.getId()); ocrPictureService.deletePictureInfo(ocrPicture.getId());
@ -68,6 +68,7 @@ public class TaskQueue {
.responseParam(pictureSourceResult.toString()) .responseParam(pictureSourceResult.toString())
.type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE) .type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE)
.status(100) .status(100)
.time(0)
.build(); .build();
ocrPrevailCloudLogService.save(ocrPrevailCloudLog); ocrPrevailCloudLogService.save(ocrPrevailCloudLog);
resultSet.add(String.valueOf(taskId)); resultSet.add(String.valueOf(taskId));
@ -79,6 +80,7 @@ public class TaskQueue {
.responseParam(pictureSourceResult.toString()) .responseParam(pictureSourceResult.toString())
.type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE) .type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE)
.status(500) .status(500)
.time(0)
.build(); .build();
ocrPrevailCloudLogService.save(ocrPrevailCloudLog); ocrPrevailCloudLogService.save(ocrPrevailCloudLog);
return false; return false;
@ -86,6 +88,67 @@ public class TaskQueue {
return true; return true;
} }
/**
* [] push bi
*
* @param pictureSourceResult //三方拉取 获取到的图片对象
* @return
*/
public static boolean pictureDisposePushDataUpdateLog(PictureSourceResult pictureSourceResult, Long id, OcrPictureService ocrPictureService, OcrPrevailCloudLogService ocrPrevailCloudLogService) {
OcrPrevailCloudLog byId = ocrPrevailCloudLogService.getById(id);
if (byId == null) {
return false;
}
try {
Long taskId = pictureSourceResult.getTaskId();
OcrPicture ocrPicture = ocrPictureService.selectByRemark(String.valueOf(taskId));
if (ocrPicture != null) {
OcrTaskchildPicture taskchildPicture = ocrPictureService.getOcrTaskChildPictureByPictureId(ocrPicture.getId().toString());
if (taskchildPicture != null && pictureSourceResult.getTaskStatus() != null
&& (pictureSourceResult.getTaskStatus() == 6 || pictureSourceResult.getTaskStatus() == 7) && (taskchildPicture.getStates() == 5 || taskchildPicture.getStates() == 3)) {
if (taskchildPicture.getStates() == 5) {
String result = ocrPictureService.getPictureApproveResult(ocrPicture.getId());
pictureSourceResult.setComment(result);
} else {
pictureSourceResult.setComment("ocr审批全部通过由无量云发起了重置审批流程的操作。");
}
ocrPictureService.deletePictureInfo(ocrPicture.getId());
pictureSourceResult.setId(ocrPicture.getId());
} else {
return true;
}
}
//更新日志
OcrPrevailCloudLog ocrPrevailCloudLog = OcrPrevailCloudLog.builder()
.formId(pictureSourceResult.getTaskId())
.requestParam(pictureSourceResult.getRequestParam().toString())
.responseParam(pictureSourceResult.toString())
.type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE)
.status(100)
.id(id)
.time(byId.getTime() + 1)
.build();
ocrPrevailCloudLogService.updateById(ocrPrevailCloudLog);
resultSet.add(String.valueOf(taskId));
pictureDisposeQueue.put(pictureSourceResult);
} catch (InterruptedException e) {
OcrPrevailCloudLog ocrPrevailCloudLog = OcrPrevailCloudLog.builder()
.formId(pictureSourceResult.getTaskId())
.requestParam(pictureSourceResult.getRequestParam().toString())
.responseParam(pictureSourceResult.toString())
.type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE)
.status(500)
.time(byId.getTime() + 1)
.id(id)
.build();
ocrPrevailCloudLogService.updateById(ocrPrevailCloudLog);
return false;
}
return true;
}
/** /**
* *
* *

Loading…
Cancel
Save