修改一键查重

pull/1/head
sunchenliang 1 year ago
parent 13813dd154
commit 2f0e40f304

@ -32,9 +32,9 @@ public class UserapproveServiceImpl extends BaseServiceImpl<UserapproveMybatisDa
userapprove.setCreatedate(System.currentTimeMillis()); userapprove.setCreatedate(System.currentTimeMillis());
userapprove.setUsername(userToken.getUsername()); userapprove.setUsername(userToken.getUsername());
if (taskVO.getApprovd()) { if (taskVO.getApprovd()) {
userapprove.setStatshis(3); userapprove.setStatshis(2);
} else { } else {
userapprove.setStatshis(5); userapprove.setStatshis(3);
} }

@ -177,6 +177,8 @@ public class OcrPictureController extends BaseController {
return ResultVoUtil.error("查重数据至少要有两条。"); return ResultVoUtil.error("查重数据至少要有两条。");
} }
} }
ocrPictureService.createTaskChild(pageList, pageList.get(0).getTenantId().toString(),req);
return ResultVoUtil.error("没有查重数据。"); return ResultVoUtil.error("没有查重数据。");
} }

@ -0,0 +1,13 @@
package cn.jyjz.xiaoyao.ocr.dataDao;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* ClassName $className$.java
* Description:
* Author scl.
* Date 2024/3/22 07:09
*/
public interface OcrPictureInfoMapper extends BaseMapper<OcrPictureInfo> {
}

@ -0,0 +1,255 @@
package cn.jyjz.xiaoyao.ocr.dataobject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* ClassName $className$.java
* Description:
* Author scl.
* Date 2024/3/22 07:09
*/
@TableName(value = "ocr_picture_info")
public class OcrPictureInfo {
/**
*
*/
@TableId(value = "id", type = IdType.INPUT)
private Long id;
/**
*
*/
@TableField(value = "picture_id")
private Long pictureId;
/**
*
*/
@TableField(value = "img_size")
private String imgSize;
/**
*
*/
@TableField(value = "img_format")
private String imgFormat;
/**
*
*/
@TableField(value = "img_measure")
private String imgMeasure;
/**
*
*/
@TableField(value = "upload_time")
private Long uploadTime;
/**
*
*/
@TableField(value = "create_time")
private Long createTime;
/**
*
*/
@TableField(value = "img_space")
private String imgSpace;
/**
*
*/
@TableField(value = "tag_time")
private Long tagTime;
/**
*
*/
@TableField(value = "`source`")
private String source;
/**
*
*
* @return id -
*/
public Long getId() {
return id;
}
/**
*
*
* @param id
*/
public void setId(Long id) {
this.id = id;
}
/**
*
*
* @return picture_id -
*/
public Long getPictureId() {
return pictureId;
}
/**
*
*
* @param pictureId
*/
public void setPictureId(Long pictureId) {
this.pictureId = pictureId;
}
/**
*
*
* @return img_size -
*/
public String getImgSize() {
return imgSize;
}
/**
*
*
* @param imgSize
*/
public void setImgSize(String imgSize) {
this.imgSize = imgSize;
}
/**
*
*
* @return img_format -
*/
public String getImgFormat() {
return imgFormat;
}
/**
*
*
* @param imgFormat
*/
public void setImgFormat(String imgFormat) {
this.imgFormat = imgFormat;
}
/**
*
*
* @return img_measure -
*/
public String getImgMeasure() {
return imgMeasure;
}
/**
*
*
* @param imgMeasure
*/
public void setImgMeasure(String imgMeasure) {
this.imgMeasure = imgMeasure;
}
/**
*
*
* @return upload_time -
*/
public Long getUploadTime() {
return uploadTime;
}
/**
*
*
* @param uploadTime
*/
public void setUploadTime(Long uploadTime) {
this.uploadTime = uploadTime;
}
/**
*
*
* @return create_time -
*/
public Long getCreateTime() {
return createTime;
}
/**
*
*
* @param createTime
*/
public void setCreateTime(Long createTime) {
this.createTime = createTime;
}
/**
*
*
* @return img_space -
*/
public String getImgSpace() {
return imgSpace;
}
/**
*
*
* @param imgSpace
*/
public void setImgSpace(String imgSpace) {
this.imgSpace = imgSpace;
}
/**
*
*
* @return tag_time -
*/
public Long getTagTime() {
return tagTime;
}
/**
*
*
* @param tagTime
*/
public void setTagTime(Long tagTime) {
this.tagTime = tagTime;
}
/**
*
*
* @return source -
*/
public String getSource() {
return source;
}
/**
*
*
* @param source
*/
public void setSource(String source) {
this.source = source;
}
}

@ -0,0 +1,14 @@
package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureInfo;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* ClassName $className$.java
* Description:
* Author scl.
* Date 2024/3/22 07:09
*/
public interface OcrPictureInfoService extends IService<OcrPictureInfo>{
}

@ -34,7 +34,7 @@ public interface OcrPictureService extends BaseService<OcrPicture> {
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId , UserToken sysUser, String search_month, HttpServletRequest req, String buessinessno); public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId , UserToken sysUser, String search_month, HttpServletRequest req, String buessinessno);
public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId); public ResultVo createTaskChild(List<OcrPicture> ocrPictureList, String tenantId,HttpServletRequest request);
/** /**
* *

@ -0,0 +1,19 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureInfo;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureInfoMapper;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureInfoService;
/**
* ClassName $className$.java
* Description:
* Author scl.
* Date 2024/3/22 07:09
*/
@Service
public class OcrPictureInfoServiceImpl extends ServiceImpl<OcrPictureInfoMapper, OcrPictureInfo> implements OcrPictureInfoService{
}

@ -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,
@ -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();

@ -68,6 +68,7 @@ public class TaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchildPic
@Autowired @Autowired
private IFlowFormMessageService iFlowFormMessageService; private IFlowFormMessageService iFlowFormMessageService;
@Override @Override
public String saveForm(HttpServletRequest request) { public String saveForm(HttpServletRequest request) {
OcrTaskchildPicture model = null; OcrTaskchildPicture model = null;
@ -294,11 +295,9 @@ public class TaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchildPic
model.setTaskname(tasknme); model.setTaskname(tasknme);
//iFlowFormMessageService.sendMsg(model.getCreateuser(),SystemMessage.SYS_OA_TYPE_LEAVE + SystemMessage.SYS_OA_TO_CLOSE,null,processInstanceId,fromid,CacheQyweixinConstants.OA_DISTIONARY_TYPE_MSG_SHENPI_PASS,model.getCategoryid().toString()); //iFlowFormMessageService.sendMsg(model.getCreateuser(),SystemMessage.SYS_OA_TYPE_LEAVE + SystemMessage.SYS_OA_TO_CLOSE,null,processInstanceId,fromid,CacheQyweixinConstants.OA_DISTIONARY_TYPE_MSG_SHENPI_PASS,model.getCategoryid().toString());
//如果状态为拒绝,监听程序不改变当前状态 //如果状态为拒绝,监听程序不改变当前状态
if(model.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE){
model.setStates(states); model.setStates(states);
return this.updateById(model); return this.updateById(model);
} }
}
return false; return false;
} }

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureInfoMapper">
<resultMap id="BaseResultMap" type="cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureInfo">
<!--@mbg.generated-->
<!--@Table ocr_picture_info-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="picture_id" jdbcType="BIGINT" property="pictureId" />
<result column="img_size" jdbcType="VARCHAR" property="imgSize" />
<result column="img_format" jdbcType="VARCHAR" property="imgFormat" />
<result column="img_measure" jdbcType="VARCHAR" property="imgMeasure" />
<result column="upload_time" jdbcType="BIGINT" property="uploadTime" />
<result column="create_time" jdbcType="BIGINT" property="createTime" />
<result column="img_space" jdbcType="VARCHAR" property="imgSpace" />
<result column="tag_time" jdbcType="BIGINT" property="tagTime" />
<result column="source" jdbcType="VARCHAR" property="source" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, picture_id, img_size, img_format, img_measure, upload_time, create_time, img_space,
tag_time, `source`
</sql>
</mapper>
Loading…
Cancel
Save