|
|
@ -2,9 +2,12 @@ package cn.jyjz.xiaoyao.ocr.service.impl;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
import cn.jyjz.flowable.service.IFlowInstanceService;
|
|
|
|
import cn.jyjz.flowable.service.IFlowInstanceService;
|
|
|
|
import cn.jyjz.xiaoyao.abase.service.SeqManageService;
|
|
|
|
import cn.jyjz.xiaoyao.abase.service.SeqManageService;
|
|
|
|
import cn.jyjz.xiaoyao.admin.service.LogService;
|
|
|
|
import cn.jyjz.xiaoyao.admin.service.LogService;
|
|
|
|
|
|
|
|
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
|
|
|
|
|
|
|
|
import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
|
|
|
|
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
|
|
|
|
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
|
|
|
|
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
|
|
|
|
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
|
|
|
|
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
|
|
|
|
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
|
|
|
@ -37,10 +40,17 @@ import org.springframework.web.context.request.RequestContextHolder;
|
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
|
|
import java.awt.color.ColorSpace;
|
|
|
|
|
|
|
|
import java.awt.image.BufferedImage;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.io.Serializable;
|
|
|
|
import java.io.Serializable;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
|
|
|
import java.net.URLConnection;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 业务层实现
|
|
|
|
* 业务层实现
|
|
|
@ -88,6 +98,9 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
@Resource
|
|
|
|
@Resource
|
|
|
|
private CategoryService categoryService;
|
|
|
|
private CategoryService categoryService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
private OcrPictureInfoService ocrPictureInfoService;
|
|
|
|
|
|
|
|
|
|
|
|
private Object lock = new Object();
|
|
|
|
private Object lock = new Object();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -102,6 +115,9 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
DataDictionaryUtil dataDictionaryUtil;
|
|
|
|
DataDictionaryUtil dataDictionaryUtil;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
UserTokenService userTokenService;
|
|
|
|
|
|
|
|
|
|
|
|
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId, UserToken sysUser, String search_month, HttpServletRequest request, String buessinessno) {
|
|
|
|
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId, UserToken sysUser, String search_month, HttpServletRequest request, String buessinessno) {
|
|
|
|
|
|
|
|
|
|
|
|
//图片错误信息
|
|
|
|
//图片错误信息
|
|
|
@ -116,86 +132,66 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
//图片信息不能为空
|
|
|
|
//图片信息不能为空
|
|
|
|
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
|
|
|
|
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
|
|
|
|
//生成任务包
|
|
|
|
//生成任务包
|
|
|
|
//String packageName = seqManageService.getSeqNextNo("AI任务包");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 相似度、图片查询时间未传
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//创建任务包
|
|
|
|
|
|
|
|
OcrPackagetask ocrPackagetask = this.ocrPackagetaskService.create(buessinessno, tenantId, sysUser, null);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (null == ocrPackagetask) {
|
|
|
|
|
|
|
|
return ResultVoUtil.error("失败。");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//用于标记相似度是否存在百分百的情况
|
|
|
|
//用于标记相似度是否存在百分百的情况
|
|
|
|
|
|
|
|
|
|
|
|
List<OcrPicture> newList = new ArrayList<>();
|
|
|
|
List<OcrPicture> newList = new ArrayList<>();
|
|
|
|
|
|
|
|
Map<String, String> resultMap = new HashMap<>();
|
|
|
|
for (OcrPicture ocrPicture : ocrPictureList) {
|
|
|
|
for (OcrPicture ocrPicture : ocrPictureList) {
|
|
|
|
|
|
|
|
|
|
|
|
//如果当前图片已经生成任务包,直接跳过
|
|
|
|
|
|
|
|
if (ocrPicture.getTaskstatus().equals("1")) {
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//图片查重的比对图片集合
|
|
|
|
//图片查重的比对图片集合
|
|
|
|
List<OcrPicture> compareList = new ArrayList<>();
|
|
|
|
List<OcrPicture> compareList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
//非历史图片主键集合
|
|
|
|
//非历史图片主键集合
|
|
|
|
List<String> picturecompareList = new ArrayList<>();
|
|
|
|
List<String> picturecompareList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
boolean havePoint = false;
|
|
|
|
boolean havePoint = false;
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(ocrPicture.getImgHash())) {
|
|
|
|
|
|
|
|
Map<String, String> map = this.getOcrPictureClassifyAndHash(ocrPicture.getLocalpictrueurl());
|
|
|
|
|
|
|
|
if (map != null) {
|
|
|
|
|
|
|
|
ocrPicture.setImgHash(map.get("hash"));
|
|
|
|
|
|
|
|
ocrPicture.setClassificationid(map.get("classId"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// this.updateById(ocrPicture);
|
|
|
|
|
|
|
|
}
|
|
|
|
//二次遍历进行比对
|
|
|
|
//二次遍历进行比对
|
|
|
|
for (OcrPicture ocrPictureNext : ocrPictureList) {
|
|
|
|
for (OcrPicture ocrPictureNext : ocrPictureList) {
|
|
|
|
|
|
|
|
|
|
|
|
if (ocrPictureNext.getId().longValue() == ocrPicture.getId().longValue()) {
|
|
|
|
if (ocrPictureNext.getId().longValue() == ocrPicture.getId().longValue()) {
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//TODO 接口请求判断重复情况
|
|
|
|
//TODO 接口请求判断重复情况
|
|
|
|
logService.addLog(103, "AI获取图片相似度接口", sysUser, "sendParams");
|
|
|
|
if (StringUtils.isBlank(ocrPictureNext.getImgHash())) {
|
|
|
|
|
|
|
|
Map<String, String> map = this.getOcrPictureClassifyAndHash(ocrPictureNext.getLocalpictrueurl());
|
|
|
|
|
|
|
|
if (map != null) {
|
|
|
|
JSONObject jsonObjectSimi = ImageClassUtil.getSimilarity(ocrPicture.getImgurl(),
|
|
|
|
ocrPictureNext.setImgHash(map.get("hash"));
|
|
|
|
ocrPictureNext.getImgurl(),
|
|
|
|
ocrPictureNext.setClassificationid(map.get("classId"));
|
|
|
|
similarityPath);
|
|
|
|
}
|
|
|
|
System.out.println("responseDataXs--code = [" + jsonObjectSimi.get("code") + "]");
|
|
|
|
// this.updateById(ocrPictureNext);
|
|
|
|
System.out.println("responseDataXs--similarity = [" + jsonObjectSimi.get("similarity") + "]");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String resultValue = "";
|
|
|
|
String resultValue = "";
|
|
|
|
|
|
|
|
String strId = ocrPicture.getId() + ":" + ocrPictureNext.getId();
|
|
|
|
//返回内容为零,表示成功,否则表示失败
|
|
|
|
String strNextId = ocrPictureNext.getId() + ":" + ocrPicture.getId();
|
|
|
|
if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0")) {
|
|
|
|
if (resultMap.containsKey(strId) || resultMap.containsKey(strNextId)) {
|
|
|
|
|
|
|
|
resultValue = resultMap.get(strId) == null ? resultMap.get(strNextId) : resultMap.get(strId);
|
|
|
|
resultValue = jsonObjectSimi.getString("similarity");
|
|
|
|
|
|
|
|
ocrPictureNext.setResult(resultValue);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
resultValue = "0";
|
|
|
|
String img = StringUtils.isBlank(ocrPicture.getImgHash()) ? StringUtils.isBlank(ocrPicture.getLocalpictrueurl()) ? ocrPicture.getImgurl() : ocrPicture.getLocalpictrueurl() : ocrPicture.getImgHash();
|
|
|
|
ocrPictureNext.setResult(resultValue);
|
|
|
|
String imgNext = StringUtils.isBlank(ocrPictureNext.getImgHash()) ? StringUtils.isBlank(ocrPictureNext.getLocalpictrueurl()) ? ocrPictureNext.getImgurl() : ocrPictureNext.getLocalpictrueurl() : ocrPictureNext.getImgHash();
|
|
|
|
|
|
|
|
resultValue = HashCompareUtil.cmpHash(img, imgNext);
|
|
|
|
|
|
|
|
resultMap.put(strId, resultValue);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ocrPictureNext.setResult(resultValue);
|
|
|
|
BigDecimal b1 = new BigDecimal(resultValue);
|
|
|
|
BigDecimal b1 = new BigDecimal(resultValue);
|
|
|
|
BigDecimal b2 = new BigDecimal("100");
|
|
|
|
BigDecimal b2 = new BigDecimal("100");
|
|
|
|
int val = b1.compareTo(b2);
|
|
|
|
int val = b1.compareTo(b2);
|
|
|
|
if (val == 0) {
|
|
|
|
if (val == 0) {
|
|
|
|
havePoint = true;
|
|
|
|
havePoint = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//如果当前图片未生成任务需要临时保存
|
|
|
|
//如果当前图片未生成任务需要临时保存
|
|
|
|
if (ocrPictureNext.getTaskstatus().equals("0")) {
|
|
|
|
if (ocrPictureNext.getTaskstatus().equals("0")) {
|
|
|
|
picturecompareList.add(ocrPictureNext.getId().toString());
|
|
|
|
picturecompareList.add(ocrPictureNext.getId().toString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
compareList.add(ocrPictureNext);
|
|
|
|
compareList.add(ocrPictureNext);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bubbleSortOpt(compareList);
|
|
|
|
bubbleSortOpt(compareList);
|
|
|
|
//从大到小进行排序
|
|
|
|
//从大到小进行排序
|
|
|
|
ocrPicture.setListCom(compareList);
|
|
|
|
ocrPicture.setListCom(compareList);
|
|
|
|
|
|
|
|
|
|
|
|
//非历史图片主键集合
|
|
|
|
//非历史图片主键集合
|
|
|
|
ocrPicture.setPicturecompareList(picturecompareList);
|
|
|
|
ocrPicture.setPicturecompareList(picturecompareList);
|
|
|
|
|
|
|
|
|
|
|
|
//查询项目对象
|
|
|
|
//查询项目对象
|
|
|
|
if (null == ocrPicture.getCategoryid()) {
|
|
|
|
if (null == ocrPicture.getCategoryid()) {
|
|
|
|
//TODO 没有对应项目,返回提示信息
|
|
|
|
//TODO 没有对应项目,返回提示信息
|
|
|
@ -224,7 +220,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//创建工单,如果创建成功,增加标志,用于过滤条件使用
|
|
|
|
//创建工单,如果创建成功,增加标志,用于过滤条件使用
|
|
|
|
OcrTaskchildPicture ocrTaskchildPicture = this.ocrTaskchildPictureService.create(ocrPicture, tenantId, sysUser, ocrPackagetask.getId(), buessinessno);
|
|
|
|
OcrTaskchildPicture ocrTaskchildPicture = this.ocrTaskchildPictureService.create(ocrPicture, tenantId, sysUser, null, buessinessno);
|
|
|
|
if (null != ocrTaskchildPicture) {
|
|
|
|
if (null != ocrTaskchildPicture) {
|
|
|
|
|
|
|
|
|
|
|
|
//发起流程
|
|
|
|
//发起流程
|
|
|
@ -253,18 +249,6 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
if (null != pointsList && !pointsList.isEmpty()) {
|
|
|
|
if (null != pointsList && !pointsList.isEmpty()) {
|
|
|
|
this.ocrTaskchildPictureService.markPoint(pointsList);
|
|
|
|
this.ocrTaskchildPictureService.markPoint(pointsList);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(search_month)) {
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) <= 12 && Integer.parseInt(search_month) > 0) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ocrPackagetask.setSearchtimes(SearchEnum.getName(Integer.parseInt(search_month)));
|
|
|
|
|
|
|
|
} else if (StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) > 20) {
|
|
|
|
|
|
|
|
ocrPackagetask.setSearchtimes(SearchEnum.getName((Integer.parseInt(search_month) - 20)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ocrPackagetask.setPictureno(ocrPictureList.size());
|
|
|
|
|
|
|
|
this.ocrPackagetaskService.updateById(ocrPackagetask);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//原主图设置为任务包已经生成
|
|
|
|
//原主图设置为任务包已经生成
|
|
|
|
this.updateBatchById(ocrPictureList);
|
|
|
|
this.updateBatchById(ocrPictureList);
|
|
|
|
|
|
|
|
|
|
|
@ -290,8 +274,6 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
StringBuffer errorProject = new StringBuffer();
|
|
|
|
StringBuffer errorProject = new StringBuffer();
|
|
|
|
//流程错误信息
|
|
|
|
//流程错误信息
|
|
|
|
StringBuffer errorFlow = new StringBuffer();
|
|
|
|
StringBuffer errorFlow = new StringBuffer();
|
|
|
|
//记录任务相似度为百分百的任务主键
|
|
|
|
|
|
|
|
List<Long> pointsList = new ArrayList<>();
|
|
|
|
|
|
|
|
//图片信息不能为空
|
|
|
|
//图片信息不能为空
|
|
|
|
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
|
|
|
|
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
|
|
|
|
//生成任务包
|
|
|
|
//生成任务包
|
|
|
@ -310,87 +292,6 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
if (null == ocrPackagetask) {
|
|
|
|
if (null == ocrPackagetask) {
|
|
|
|
return ResultVoUtil.error("失败。");
|
|
|
|
return ResultVoUtil.error("失败。");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//用于标记相似度是否存在百分百的情况
|
|
|
|
|
|
|
|
List<OcrPicture> newList = new ArrayList<>();
|
|
|
|
|
|
|
|
Map<String, String> resultMap = new HashMap<>();
|
|
|
|
|
|
|
|
for (OcrPicture ocrPicture : ocrPictureList) {
|
|
|
|
|
|
|
|
//如果当前图片已经生成任务包,直接跳过
|
|
|
|
|
|
|
|
if (ocrPicture.getTaskstatus().equals("1")) {
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//图片查重的比对图片集合
|
|
|
|
|
|
|
|
List<OcrPicture> compareList = new ArrayList<>();
|
|
|
|
|
|
|
|
//非历史图片主键集合
|
|
|
|
|
|
|
|
List<String> picturecompareList = new ArrayList<>();
|
|
|
|
|
|
|
|
boolean havePoint = false;
|
|
|
|
|
|
|
|
logService.addLog(103, "AI获取图片相似度接口", sysUser, "sendParams");
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(ocrPicture.getImgHash())) {
|
|
|
|
|
|
|
|
Map<String, String> map = this.getOcrPictureClassifyAndHash(ocrPicture.getLocalpictrueurl());
|
|
|
|
|
|
|
|
if (map != null) {
|
|
|
|
|
|
|
|
ocrPicture.setImgHash(map.get("hash"));
|
|
|
|
|
|
|
|
ocrPicture.setClassificationid(map.get("classId"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// this.updateById(ocrPicture);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//二次遍历进行比对
|
|
|
|
|
|
|
|
for (OcrPicture ocrPictureNext : ocrPictureList) {
|
|
|
|
|
|
|
|
//分类不一致的也不需要进行比对
|
|
|
|
|
|
|
|
if (ocrPictureNext.getId().longValue() == ocrPicture.getId().longValue()) {
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//分类不一致的也不需要进行比对
|
|
|
|
|
|
|
|
//TODO 接口请求判断重复情况
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(ocrPictureNext.getImgHash())) {
|
|
|
|
|
|
|
|
Map<String, String> map = this.getOcrPictureClassifyAndHash(ocrPictureNext.getLocalpictrueurl());
|
|
|
|
|
|
|
|
if (map != null) {
|
|
|
|
|
|
|
|
ocrPictureNext.setImgHash(map.get("hash"));
|
|
|
|
|
|
|
|
ocrPictureNext.setClassificationid(map.get("classId"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// this.updateById(ocrPictureNext);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
String resultValue = "";
|
|
|
|
|
|
|
|
String strId = ocrPicture.getId() + ":" + ocrPictureNext.getId();
|
|
|
|
|
|
|
|
String strNextId = ocrPictureNext.getId() + ":" + ocrPicture.getId();
|
|
|
|
|
|
|
|
if (resultMap.containsKey(strId) || resultMap.containsKey(strNextId)) {
|
|
|
|
|
|
|
|
resultValue = resultMap.get(strId) == null ? resultMap.get(strNextId) : resultMap.get(strId);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
String img = StringUtils.isBlank(ocrPicture.getImgHash()) ? StringUtils.isBlank(ocrPicture.getLocalpictrueurl()) ? ocrPicture.getImgurl() : ocrPicture.getLocalpictrueurl() : ocrPicture.getImgHash();
|
|
|
|
|
|
|
|
String imgNext = StringUtils.isBlank(ocrPictureNext.getImgHash()) ? StringUtils.isBlank(ocrPictureNext.getLocalpictrueurl()) ? ocrPictureNext.getImgurl() : ocrPictureNext.getLocalpictrueurl() : ocrPictureNext.getImgHash();
|
|
|
|
|
|
|
|
resultValue = HashCompareUtil.cmpHash(img, imgNext);
|
|
|
|
|
|
|
|
resultMap.put(strId, resultValue);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ocrPictureNext.setResult(resultValue);
|
|
|
|
|
|
|
|
BigDecimal b1 = new BigDecimal(resultValue);
|
|
|
|
|
|
|
|
BigDecimal b2 = new BigDecimal("100");
|
|
|
|
|
|
|
|
int val = b1.compareTo(b2);
|
|
|
|
|
|
|
|
if (val == 0) {
|
|
|
|
|
|
|
|
havePoint = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//如果当前图片未生成任务需要临时保存
|
|
|
|
|
|
|
|
if (ocrPictureNext.getTaskstatus().equals("0")) {
|
|
|
|
|
|
|
|
picturecompareList.add(ocrPictureNext.getId().toString());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
compareList.add(ocrPictureNext);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// this.updateBatchById(ocrPictureList);
|
|
|
|
|
|
|
|
bubbleSortOpt(compareList);
|
|
|
|
|
|
|
|
//从大到小进行排序
|
|
|
|
|
|
|
|
ocrPicture.setListCom(compareList);
|
|
|
|
|
|
|
|
//非历史图片主键集合
|
|
|
|
|
|
|
|
ocrPicture.setPicturecompareList(picturecompareList);
|
|
|
|
|
|
|
|
//创建工单,如果创建成功,增加标志,用于过滤条件使用
|
|
|
|
|
|
|
|
OcrTaskchildPicture ocrTaskchildPicture = this.updateTaskChild(ocrPicture, ocrPackagetask.getId(), buessinessno);
|
|
|
|
|
|
|
|
if (null != ocrTaskchildPicture) {
|
|
|
|
|
|
|
|
if (havePoint) {
|
|
|
|
|
|
|
|
pointsList.add(ocrTaskchildPicture.getId());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ocrPicture.setTaskstatus("1");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//批量更新 pointsList 主键相似度为百分百的数据
|
|
|
|
|
|
|
|
if (null != pointsList && !pointsList.isEmpty()) {
|
|
|
|
|
|
|
|
this.ocrTaskchildPictureService.markPoint(pointsList);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(search_month)) {
|
|
|
|
if (StringUtils.isNotBlank(search_month)) {
|
|
|
|
if (StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) <= 12 && Integer.parseInt(search_month) > 0) {
|
|
|
|
if (StringUtils.isNotBlank(search_month) && Integer.parseInt(search_month) <= 12 && Integer.parseInt(search_month) > 0) {
|
|
|
|
ocrPackagetask.setSearchtimes(SearchEnum.getName(Integer.parseInt(search_month)));
|
|
|
|
ocrPackagetask.setSearchtimes(SearchEnum.getName(Integer.parseInt(search_month)));
|
|
|
@ -401,7 +302,12 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
ocrPackagetask.setPictureno(ocrPictureList.size());
|
|
|
|
ocrPackagetask.setPictureno(ocrPictureList.size());
|
|
|
|
this.ocrPackagetaskService.updateById(ocrPackagetask);
|
|
|
|
this.ocrPackagetaskService.updateById(ocrPackagetask);
|
|
|
|
//原主图设置为任务包已经生成
|
|
|
|
//原主图设置为任务包已经生成
|
|
|
|
this.updateBatchById(ocrPictureList);
|
|
|
|
List<Long> collect = ocrPictureList.stream().map(OcrPicture::getId).collect(Collectors.toList());
|
|
|
|
|
|
|
|
List<OcrTaskchildPicture> list = ocrTaskchildPictureService.list(new LambdaQueryWrapper<OcrTaskchildPicture>().in(OcrTaskchildPicture::getPictureid, collect));
|
|
|
|
|
|
|
|
for (OcrTaskchildPicture ocrTaskchildPicture : list) {
|
|
|
|
|
|
|
|
ocrTaskchildPicture.setPackageid(ocrPackagetask.getId());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ocrTaskchildPictureService.updateBatchById(list);
|
|
|
|
if (StringUtils.isBlank(error) && StringUtils.isBlank(errorProject) && StringUtils.isBlank(errorFlow)) {
|
|
|
|
if (StringUtils.isBlank(error) && StringUtils.isBlank(errorProject) && StringUtils.isBlank(errorFlow)) {
|
|
|
|
return ResultVoUtil.success();
|
|
|
|
return ResultVoUtil.success();
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -463,7 +369,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
return ocrTaskchildPictureService.updateById(ocrTaskchildPicture) ? ocrTaskchildPicture : null;
|
|
|
|
return ocrTaskchildPictureService.updateById(ocrTaskchildPicture) ? ocrTaskchildPicture : null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId) {
|
|
|
|
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId,HttpServletRequest request) {
|
|
|
|
//图片错误信息
|
|
|
|
//图片错误信息
|
|
|
|
StringBuffer error = new StringBuffer();
|
|
|
|
StringBuffer error = new StringBuffer();
|
|
|
|
//项目错误信息
|
|
|
|
//项目错误信息
|
|
|
@ -502,15 +408,12 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
UserToken userToken = new UserToken();
|
|
|
|
UserToken userToken = userTokenService.getUserToken(RequestBaseUtil.getToken(request));
|
|
|
|
userToken.setLoginname("admin");
|
|
|
|
|
|
|
|
userToken.setUsername("admin");
|
|
|
|
|
|
|
|
//创建工单,如果创建成功,增加标志,用于过滤条件使用
|
|
|
|
//创建工单,如果创建成功,增加标志,用于过滤条件使用
|
|
|
|
OcrTaskchildPicture ocrTaskchildPicture = this.ocrTaskchildPictureService.create(ocrPicture, tenantId, userToken, null, null);
|
|
|
|
OcrTaskchildPicture ocrTaskchildPicture = this.ocrTaskchildPictureService.create(ocrPicture, tenantId, userToken, null, null);
|
|
|
|
if (null != ocrTaskchildPicture) {
|
|
|
|
if (null != ocrTaskchildPicture) {
|
|
|
|
//发起流程
|
|
|
|
//发起流程
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
|
|
|
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request));
|
|
|
|
|
|
|
|
flowInstanceService.startProcessInstanceById(
|
|
|
|
flowInstanceService.startProcessInstanceById(
|
|
|
|
category.getProcessdefinitionid(),
|
|
|
|
category.getProcessdefinitionid(),
|
|
|
|
null,
|
|
|
|
null,
|
|
|
@ -765,7 +668,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
|
|
|
|
|
|
|
|
QueryWrapper<OcrPicture> queryWrapper = new QueryWrapper();
|
|
|
|
QueryWrapper<OcrPicture> queryWrapper = new QueryWrapper();
|
|
|
|
|
|
|
|
|
|
|
|
queryWrapper.eq("suspiciousfile","0");
|
|
|
|
queryWrapper.eq("suspiciousfile", "0");
|
|
|
|
for (OcrUsersearchchild usersearchchild : ocrUsersearch.getOcrUsersearchchildList()) {
|
|
|
|
for (OcrUsersearchchild usersearchchild : ocrUsersearch.getOcrUsersearchchildList()) {
|
|
|
|
this.formattingSearchChild(queryWrapper, usersearchchild);
|
|
|
|
this.formattingSearchChild(queryWrapper, usersearchchild);
|
|
|
|
|
|
|
|
|
|
|
@ -797,13 +700,84 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
|
|
|
|
boolean saveBatch = this.saveBatch(ocrPictureList);
|
|
|
|
boolean saveBatch = this.saveBatch(ocrPictureList);
|
|
|
|
//3.添加图片信息
|
|
|
|
//3.添加图片信息
|
|
|
|
if (saveBatch) {
|
|
|
|
if (saveBatch) {
|
|
|
|
|
|
|
|
this.savePicturesInfo(ocrPictureList);
|
|
|
|
this.convertImage(ocrPictureList);
|
|
|
|
this.convertImage(ocrPictureList);
|
|
|
|
this.createTaskChild(ocrPictureList, ocrPictureList.get(0).getTenantId().toString());
|
|
|
|
|
|
|
|
return ocrPictureList.size();
|
|
|
|
return ocrPictureList.size();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void savePicturesInfo(List<OcrPicture> ocrPictureList) {
|
|
|
|
|
|
|
|
List<OcrPictureInfo> list = new ArrayList<>();
|
|
|
|
|
|
|
|
for (OcrPicture ocrPicture : ocrPictureList) {
|
|
|
|
|
|
|
|
if (StringUtils.isNotBlank(ocrPicture.getImgurl())) {
|
|
|
|
|
|
|
|
OcrPictureInfo imageInfo = getImageInfo(ocrPicture.getImgurl());
|
|
|
|
|
|
|
|
if (ObjectUtil.isNotEmpty(imageInfo)) {
|
|
|
|
|
|
|
|
imageInfo.setPictureId(ocrPicture.getId());
|
|
|
|
|
|
|
|
list.add(imageInfo);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ocrPictureInfoService.saveBatch(list);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private OcrPictureInfo getImageInfo(String imageUrl) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
// 创建URL对象
|
|
|
|
|
|
|
|
URL url = new URL(imageUrl);
|
|
|
|
|
|
|
|
// 打开连接
|
|
|
|
|
|
|
|
URLConnection urlConnection = url.openConnection();
|
|
|
|
|
|
|
|
// 获取图片大小
|
|
|
|
|
|
|
|
Integer imageSize = urlConnection.getContentLength();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 使用ImageIO读取图片
|
|
|
|
|
|
|
|
BufferedImage image = ImageIO.read(url);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (image != null) {
|
|
|
|
|
|
|
|
OcrPictureInfo info = new OcrPictureInfo();
|
|
|
|
|
|
|
|
// 获取图片宽度和高度
|
|
|
|
|
|
|
|
int width = image.getWidth();
|
|
|
|
|
|
|
|
int height = image.getHeight();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取色彩空间类型
|
|
|
|
|
|
|
|
ColorSpace colorSpace = image.getColorModel().getColorSpace();
|
|
|
|
|
|
|
|
String colorSpaceType;
|
|
|
|
|
|
|
|
switch (colorSpace.getType()) {
|
|
|
|
|
|
|
|
case ColorSpace.TYPE_RGB:
|
|
|
|
|
|
|
|
colorSpaceType = "RGB";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ColorSpace.TYPE_GRAY:
|
|
|
|
|
|
|
|
colorSpaceType = "Grayscale";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ColorSpace.TYPE_CMYK:
|
|
|
|
|
|
|
|
colorSpaceType = "CMYK";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
colorSpaceType = "Other";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
String formatName = ImageIO.getImageReadersByMIMEType("image/jpeg").next().getFormatName();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
System.out.println("Image Size: " + imageSize + " bytes");
|
|
|
|
|
|
|
|
System.out.println("Width: " + width + ", Height: " + height);
|
|
|
|
|
|
|
|
System.out.println("Color Space: " + colorSpaceType);
|
|
|
|
|
|
|
|
info.setCreateTime(System.currentTimeMillis());
|
|
|
|
|
|
|
|
info.setImgSpace(colorSpaceType);
|
|
|
|
|
|
|
|
info.setImgSize(imageSize.toString());
|
|
|
|
|
|
|
|
info.setImgMeasure(width + "x" + height);
|
|
|
|
|
|
|
|
info.setImgFormat(formatName);
|
|
|
|
|
|
|
|
return info;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
log.info("Cannot read image from URL.");
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
log.error("Error: " + e.getMessage());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void convertImage(List<OcrPicture> list) {
|
|
|
|
private void convertImage(List<OcrPicture> list) {
|
|
|
|
for (OcrPicture ocrPicture : list) {
|
|
|
|
for (OcrPicture ocrPicture : list) {
|
|
|
|
PictureImgToLocalEntity entity = new PictureImgToLocalEntity();
|
|
|
|
PictureImgToLocalEntity entity = new PictureImgToLocalEntity();
|
|
|
|