From 05725108f66518938aa1bc2908889b6250eccba3 Mon Sep 17 00:00:00 2001 From: Vincent <19330835921@163.com> Date: Sat, 1 Jun 2024 23:00:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E9=87=8D=E8=AF=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/ocr/prevailcloudlog/list.html | 21 +++--- .../controller/PrevailCloudApiController.java | 50 +++++++++----- .../ocr/dataobject/OcrPrevailCloudLog.java | 6 ++ .../cn/jyjz/xiaoyao/ocr/thread/TaskQueue.java | 69 ++++++++++++++++++- 4 files changed, 117 insertions(+), 29 deletions(-) diff --git a/htmlweb/web/backstage/oa/ocr/prevailcloudlog/list.html b/htmlweb/web/backstage/oa/ocr/prevailcloudlog/list.html index e650d5ce..038e6ccc 100644 --- a/htmlweb/web/backstage/oa/ocr/prevailcloudlog/list.html +++ b/htmlweb/web/backstage/oa/ocr/prevailcloudlog/list.html @@ -5,7 +5,7 @@ 数据拉取日志 - + <#include "/head/headlist.html" /> @@ -141,6 +141,7 @@ }, {width: 80, valign: "middle", field: 'responseParam', title: '响应参数', sortable: true}, {width: 80, valign: "middle", field: 'requestParam', title: '请求参数', sortable: true}, + {width: 80, valign: "middle", field: 'time', title: '重试次数', sortable: true}, { width:200, field: 'id', @@ -148,9 +149,8 @@ formatter:function(value,oData,index) { var listOperation = ""; $(jspOperation).each(function (i, toolbar) { - console.log(toolbar); if (toolbar.text === '修改' && oData.status !== 100) { - listOperation = listOperation + " " + "重试" + "   "; + listOperation = listOperation + " " + "重试" + "   "; } }); return listOperation; @@ -167,7 +167,7 @@ _tableListPost.bootstrapTable('refreshOptions',{pageNumber:1}); } - function updateData(jframeid,str){ + function updateData(jframeid,str,id){ $(document).ready(function() { // Encode the parameter string to be URL-safe // Make an AJAX GET request @@ -175,14 +175,17 @@ url: '${ctx}/test/api/pullPictureByParameter', // Replace with your server endpoint type: 'GET', headers: {"logintoken": parent.getLoginToken()}, - data: { parameterString: str }, + data: { parameterString: str, id }, success: function(response) { - console.log(response); - toastr.success('Request was successful!'); + if (response || "success" === response) { + refreshTable(); + toastr.success('Request was successful!'); + } else { + toastr.error('Request was failed!'); + } }, error: function(xhr, status, error) { - console.log(error); - toastr.error('Request was failed!'); + toastr.error('Request has exception!'); } }); }); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/PrevailCloudApiController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/PrevailCloudApiController.java index 8e9d85dd..a30ba542 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/PrevailCloudApiController.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/PrevailCloudApiController.java @@ -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.utils.ApiConfig; 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.OcrPrevailCloudLogService; import cn.jyjz.xiaoyao.ocr.thread.TaskQueue; import cn.jyjz.xiaoyao.ocr.util.RequestParameterFormat; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.Maps; -import lombok.extern.flogger.Flogger; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.utils.Lists; import org.springframework.beans.factory.annotation.Autowired; 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.RestController; -import sun.nio.ch.ThreadPool; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -38,7 +37,11 @@ import java.util.Date; import java.util.HashMap; import java.util.List; 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控制器 @@ -70,7 +73,7 @@ public class PrevailCloudApiController { /** * 用于执行全量拉取的定长线程池 */ - private ExecutorService pictureSourceAllPool = new ThreadPoolExecutor( + private ExecutorService pictureSourceAllPool = new ThreadPoolExecutor( 1, 1, 3, @@ -87,32 +90,33 @@ public class PrevailCloudApiController { /** * 拉取无量云全量任务数据,根据业务主体 + * * @param request * @return */ @GetMapping("pullPictureAllByAccountNo") - public String pullPictureAllByAccountNo(HttpServletRequest request){ + public String pullPictureAllByAccountNo(HttpServletRequest request) { //检查是否已有全量拉取在执行 - if(pictureSourceAllPullMsg.isLock()){ + if (pictureSourceAllPullMsg.isLock()) { return pictureSourceAllPullMsg.getMsg(); } //1.定义参数 String beginStr = request.getParameter("beginStr"); - if(StringUtils.isBlank(beginStr)){ + if (StringUtils.isBlank(beginStr)) { return "开始时间不能为空"; } String endStr = request.getParameter("endStr"); - if(StringUtils.isBlank(endStr)){ + if (StringUtils.isBlank(endStr)) { return "结束时间不能为空"; } String tenantNoStr = request.getParameter("tenantNo"); - if(StringUtils.isBlank(tenantNoStr)){ + if (StringUtils.isBlank(tenantNoStr)) { return "租户不能为空"; } String accountNoStr = request.getParameter("accountNo"); - if(StringUtils.isBlank(accountNoStr)){ + if (StringUtils.isBlank(accountNoStr)) { return "业务主体不能为空"; } Long tenantNo = Long.parseLong(tenantNoStr); @@ -125,8 +129,8 @@ public class PrevailCloudApiController { //3.调用线程 pictureSourceAllPool.execute( - new PullAllPictureSourceThread(tenantNo,accountNo,startDate - ,endDate,pictureSourceAllPullMsg,prevailCloudApi,apiConfig) + new PullAllPictureSourceThread(tenantNo, accountNo, startDate + , endDate, pictureSourceAllPullMsg, prevailCloudApi, apiConfig) ); 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("2024-03-31 07:00:000","yyyy-MM-dd HH:mm:ss"); 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"); Instant einstant = dateTime1.toInstant(); pictureSourceParameter.setStartTime(Date.from(binstant)); @@ -279,11 +283,23 @@ public class PrevailCloudApiController { } @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); List resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter); 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) { @@ -299,7 +315,7 @@ public class PrevailCloudApiController { //赋值默认参数 pictureSourceResult.setRequestParam(pictureSourceParameter); //将可以处理数据放入处理队列中 - TaskQueue.pictureDisposePushData(pictureSourceResult, ocrPictureService, ocrPrevailCloudLogService); + TaskQueue.pictureDisposePushDataUpdateLog(pictureSourceResult, id, ocrPictureService, ocrPrevailCloudLogService); } return true; diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPrevailCloudLog.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPrevailCloudLog.java index 070821c3..1d24d759 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPrevailCloudLog.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPrevailCloudLog.java @@ -113,4 +113,10 @@ public class OcrPrevailCloudLog { */ @TableField(value = "redundance") private String redundance; + + /** + * 重试次数 + */ + @TableField(value = "time") + private Integer time = 0; } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/TaskQueue.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/TaskQueue.java index 29a11c51..139c6d9b 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/TaskQueue.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/TaskQueue.java @@ -48,11 +48,11 @@ public class TaskQueue { 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){ + && (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{ + } else { pictureSourceResult.setComment("ocr审批全部通过,由无量云发起了重置审批流程的操作。"); } ocrPictureService.deletePictureInfo(ocrPicture.getId()); @@ -68,6 +68,7 @@ public class TaskQueue { .responseParam(pictureSourceResult.toString()) .type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE) .status(100) + .time(0) .build(); ocrPrevailCloudLogService.save(ocrPrevailCloudLog); resultSet.add(String.valueOf(taskId)); @@ -79,6 +80,7 @@ public class TaskQueue { .responseParam(pictureSourceResult.toString()) .type(PrevailCloudConstant.DISPOSE_PICTURE_SOURCE) .status(500) + .time(0) .build(); ocrPrevailCloudLogService.save(ocrPrevailCloudLog); return false; @@ -86,6 +88,67 @@ public class TaskQueue { 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; + } + /** * 无量云接口数据处理 拉取队列值 *