Compare commits

...

9 Commits

Binary file not shown.

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数据拉取日志</title>
<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>
<#include "/head/headlist.html" />
</head>
@ -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 + "<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;
@ -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!');
}
});
});

@ -32,10 +32,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
*
@ -73,9 +70,13 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
//map值转string 注意对日期类型进行操作,加密包要求值全部为string
for (String key : queryParam.keySet()) {
if (queryParam.get(key) != null) {
queryParamStr.put(key, queryParam.get(key).toString());
if(key.equals("startTime") || key.equals("endTime")){
Date date = (Date) queryParam.get(key);
queryParamStr.put(key,String.valueOf(date.getTime()));
}else{
queryParamStr.put(key, queryParam.get(key).toString());
}
}
}
//加密请求参数
@ -141,7 +142,12 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
//map值转string 注意对日期类型进行操作,加密包要求值全部为string
for (String key : queryParam.keySet()) {
if (queryParam.get(key) != null) {
queryParamStr.put(key, queryParam.get(key).toString());
if(key.equals("startTime") || key.equals("endTime")){
Date date = (Date) queryParam.get(key);
queryParamStr.put(key,String.valueOf(date.getTime()));
}else{
queryParamStr.put(key, queryParam.get(key).toString());
}
}
}

@ -19,6 +19,7 @@ import org.apache.commons.lang.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.*;
@ -113,6 +114,7 @@ public class PullAllPictureSourceThread implements Runnable{
Instant endInstant = startDate.offsetNew(DateField.DAY_OF_YEAR, 1).toInstant();
pictureSourceParameter.setStartTime(Date.from(startInstant));
pictureSourceParameter.setEndTime(Date.from(endInstant));
//记录当前拉取日期
pictureSourceAllPullMsg.setTimeStr(DateFormatUtils.format(startDate,"yyyy-MM-dd"));
while (hasNextPage) {

@ -336,7 +336,14 @@ public class OcrPictureController extends BaseController {
queryWrapper.isNotNull("local_pictrue_url");
Page<OcrPicture> page = new Page<OcrPicture>(pageNo, pageSize);
IPage<OcrPicture> pageList = ocrPictureService.page(page, queryWrapper);
IPage<OcrPicture> pageList = null;
//判断是否带有图片查询的条件,图片查询获取的是相似图片的的数据。
String pictureId = req.getParameter("izupload");
if(StringUtils.isNotBlank(pictureId)){
pageList = ocrPictureService.pagePictureSimilarity(pictureId,page, queryWrapper);
}else{
pageList = ocrPictureService.page(page, queryWrapper);
}
List<OcrPicture> ocrPictures = pageList.getRecords();
List<OcrPicture> ocrPicturesNew = new ArrayList<>();

@ -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<PictureSourceResult> 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;

@ -74,7 +74,7 @@ public class OcrPrevailCloudLog {
*
*/
@TableField(value = "create_time")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
/**
@ -87,7 +87,7 @@ public class OcrPrevailCloudLog {
*
*/
@TableField(value = "update_time")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date updateTime;
/**
@ -113,4 +113,10 @@ public class OcrPrevailCloudLog {
*/
@TableField(value = "redundance")
private String redundance;
/**
*
*/
@TableField(value = "time")
private Integer time = 0;
}

@ -7,7 +7,9 @@ import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@ -91,4 +93,6 @@ public interface OcrPictureService extends BaseService<OcrPicture> {
OcrPicture selectByRemark(String remark);
OcrTaskchildPicture getOcrTaskChildPictureByPictureId(String pictureId);
IPage<OcrPicture> pagePictureSimilarity(String pictureId, Page<OcrPicture> page, QueryWrapper<OcrPicture> queryWrapper);
}

@ -3,7 +3,6 @@ package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.jyjz.flowable.common.ProcessConstant;
import cn.jyjz.flowable.service.IFlowInstanceService;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
@ -14,7 +13,6 @@ import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.service.CategoryService;
import cn.jyjz.xiaoyao.oa.from.service.UserapproveService;
import cn.jyjz.xiaoyao.oa.from.service.impl.UserapproveServiceImpl;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiConfig;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
@ -353,6 +351,61 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
return ocrTaskchildPictureService.getOne(new LambdaQueryWrapper<OcrTaskchildPicture>().eq(OcrTaskchildPicture::getPictureid, pictureId));
}
@Override
public IPage<OcrPicture> pagePictureSimilarity(String pictureId, Page<OcrPicture> page, QueryWrapper<OcrPicture> queryWrapper) {
OcrPictureDuplicateHis ocrPictureDuplicateHis = ocrPictureDuplicateHisService.queryByPictureId(Long.parseLong(pictureId));
if(ocrPictureDuplicateHis==null){
page.setTotal(0);
page.setRecords(new ArrayList<>());
return page;
}
Map<String,Object> picturesMap = JSONObject.parseObject(ocrPictureDuplicateHis.getCheckDuplicateResultHisJson());
// 将Map转换成List
List<Map.Entry<String, Integer>> pictureMapList = new ArrayList(picturesMap.entrySet());
// 根据Map的值进行排序
pictureMapList.sort(Map.Entry.comparingByValue());
//将排序后的list倒序
Collections.reverse(pictureMapList);
//赋值总数到page中
page.setTotal(pictureMapList.size());
//对list分页获取
List<Map.Entry<String, Integer>> pageMapList = new ArrayList<>();
Long fromIndex = (page.getCurrent()-1) * page.getSize();
Long toIndex =fromIndex + page.getSize();
//判断如果当前页,是否还有整页完整数据
if(toIndex > pictureMapList.size()){
if(fromIndex<pictureMapList.size()){
//没有整页完整数据,但是还有数据
pageMapList = pictureMapList.subList(Integer.parseInt(fromIndex.toString()),pictureMapList.size());
}
}else{
pageMapList = pictureMapList.subList(Integer.parseInt(fromIndex.toString()),Integer.parseInt(toIndex.toString()));
}
//判断是否还需要获取关联查询数据
if(pageMapList.size()<=0){
page.setRecords(new ArrayList<>());
return page;
}
//有数据得情况下,关联查询出对应数据
List<Long> pictureIds = new ArrayList<>();
for (Map.Entry<String, Integer> pictureHisEntry : pageMapList) {
pictureIds.add(Long.parseLong(pictureHisEntry.getKey()));
}
QueryWrapper queryWrapperP = new QueryWrapper();
queryWrapperP.in("id",pictureIds);
List<OcrPicture> pictures = baseMapper.selectList(queryWrapperP);
//此处相似阈值进行替换,替换为与改图片比对得阈值
for (OcrPicture picture : pictures) {
String similarity = picturesMap.get(picture.getId().toString()).toString();
picture.setSimilarityscore(Integer.parseInt(similarity));
}
Collections.sort(pictures, (o1, o2) -> Integer.compare(o2.getSimilarityscore(), o1.getSimilarityscore()));
page.setRecords(pictures);
return page;
}
// @Override
// public Long getPhotoDateTime(OcrPicture picture) {
// long timestamp = 0L;

@ -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;
}
/**
*
*

@ -22,13 +22,13 @@ spring:
primary: master
datasource:
master:
url: jdbc:mysql://47.93.59.251:3306/ocrnew?useUnicode=true&nullCatalogMeansCurrent=true&characterEncoding=UTF-8&characterSetResults=utf8&serverTimezone=Asia/Shanghai&useSSL=false
url: jdbc:mysql://81.70.154.131:3306/ocrnew?useUnicode=true&nullCatalogMeansCurrent=true&characterEncoding=UTF-8&characterSetResults=utf8&serverTimezone=Asia/Shanghai&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: ysltest
password: ysltest2024.
type: com.alibaba.druid.pool.DruidDataSource
slave:
url: jdbc:mysql://47.93.59.251:3306/ocrnew?useUnicode=true&nullCatalogMeansCurrent=true&characterEncoding=UTF-8&characterSetResults=utf8&serverTimezone=Asia/Shanghai&useSSL=false
url: jdbc:mysql://81.70.154.131:3306/ocrnew?useUnicode=true&nullCatalogMeansCurrent=true&characterEncoding=UTF-8&characterSetResults=utf8&serverTimezone=Asia/Shanghai&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: ysltest
password: ysltest2024.

Loading…
Cancel
Save