From 2f0e40f30412c3f926557dd3e54b1324285e4070 Mon Sep 17 00:00:00 2001 From: sunchenliang <2532527871@qq.com> Date: Sat, 23 Mar 2024 14:36:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E9=94=AE=E6=9F=A5?= =?UTF-8?q?=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/UserapproveServiceImpl.java | 4 +- .../ocr/controller/OcrPictureController.java | 2 + .../ocr/dataDao/OcrPictureInfoMapper.java | 13 + .../ocr/dataobject/OcrPictureInfo.java | 255 +++++++++ .../ocr/service/OcrPictureInfoService.java | 14 + .../ocr/service/OcrPictureService.java | 2 +- .../impl/OcrPictureInfoServiceImpl.java | 19 + .../service/impl/OcrPictureServiceImpl.java | 276 ++++----- .../impl/TaskchildPictureServiceImpl.java | 539 +++++++++--------- .../oa/mapper/oa/OcrPictureInfoMapper.xml | 23 + 10 files changed, 723 insertions(+), 424 deletions(-) create mode 100644 jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrPictureInfoMapper.java create mode 100644 jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPictureInfo.java create mode 100644 jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureInfoService.java create mode 100644 jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureInfoServiceImpl.java create mode 100644 jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/mapper/oa/OcrPictureInfoMapper.xml diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserapproveServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserapproveServiceImpl.java index bfb5d8a3..f58a6fc9 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserapproveServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserapproveServiceImpl.java @@ -32,9 +32,9 @@ public class UserapproveServiceImpl extends BaseServiceImpl { +} \ No newline at end of file diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPictureInfo.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPictureInfo.java new file mode 100644 index 00000000..582d7192 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPictureInfo.java @@ -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; + } +} \ No newline at end of file diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureInfoService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureInfoService.java new file mode 100644 index 00000000..8dafabf6 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureInfoService.java @@ -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{ + + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java index a4fec8cb..0a8ecee7 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureService.java @@ -34,7 +34,7 @@ public interface OcrPictureService extends BaseService { public ResultVo createTaskChild(List ocrPictureList, String tenantId , UserToken sysUser, String search_month, HttpServletRequest req, String buessinessno); - public ResultVo createTaskChild(List ocrPictureList, String tenantId); + public ResultVo createTaskChild(List ocrPictureList, String tenantId,HttpServletRequest request); /** * 查询工单图片信息 diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureInfoServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureInfoServiceImpl.java new file mode 100644 index 00000000..21591df5 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureInfoServiceImpl.java @@ -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 implements OcrPictureInfoService{ + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java index 9672d790..701e6241 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java @@ -2,9 +2,12 @@ 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.service.IFlowInstanceService; import cn.jyjz.xiaoyao.abase.service.SeqManageService; 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.ResultVoUtil; 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 javax.annotation.Resource; +import javax.imageio.ImageIO; 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.math.BigDecimal; +import java.net.URL; +import java.net.URLConnection; import java.util.*; +import java.util.stream.Collectors; /** * 业务层实现 @@ -88,6 +98,9 @@ public class OcrPictureServiceImpl extends BaseServiceImpl ocrPictureList, String tenantId, UserToken sysUser, String search_month, HttpServletRequest request, String buessinessno) { //图片错误信息 @@ -116,86 +132,66 @@ public class OcrPictureServiceImpl extends BaseServiceImpl newList = new ArrayList<>(); + Map resultMap = new HashMap<>(); for (OcrPicture ocrPicture : ocrPictureList) { - - //如果当前图片已经生成任务包,直接跳过 - if (ocrPicture.getTaskstatus().equals("1")) { - continue; - } - - //图片查重的比对图片集合 List compareList = new ArrayList<>(); - //非历史图片主键集合 List picturecompareList = new ArrayList<>(); - boolean havePoint = false; + if (StringUtils.isBlank(ocrPicture.getImgHash())) { + Map 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 接口请求判断重复情况 - logService.addLog(103, "AI获取图片相似度接口", sysUser, "sendParams"); - - - JSONObject jsonObjectSimi = ImageClassUtil.getSimilarity(ocrPicture.getImgurl(), - ocrPictureNext.getImgurl(), - similarityPath); - System.out.println("responseDataXs--code = [" + jsonObjectSimi.get("code") + "]"); - System.out.println("responseDataXs--similarity = [" + jsonObjectSimi.get("similarity") + "]"); - + if (StringUtils.isBlank(ocrPictureNext.getImgHash())) { + Map map = this.getOcrPictureClassifyAndHash(ocrPictureNext.getLocalpictrueurl()); + if (map != null) { + ocrPictureNext.setImgHash(map.get("hash")); + ocrPictureNext.setClassificationid(map.get("classId")); + } +// this.updateById(ocrPictureNext); + } String resultValue = ""; - - //返回内容为零,表示成功,否则表示失败 - if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0")) { - - resultValue = jsonObjectSimi.getString("similarity"); - ocrPictureNext.setResult(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 { - resultValue = "0"; - ocrPictureNext.setResult(resultValue); + 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); } bubbleSortOpt(compareList); //从大到小进行排序 ocrPicture.setListCom(compareList); - //非历史图片主键集合 ocrPicture.setPicturecompareList(picturecompareList); - //查询项目对象 if (null == ocrPicture.getCategoryid()) { //TODO 没有对应项目,返回提示信息 @@ -224,7 +220,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl 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); @@ -290,8 +274,6 @@ public class OcrPictureServiceImpl extends BaseServiceImpl pointsList = new ArrayList<>(); //图片信息不能为空 if (null != ocrPictureList && !ocrPictureList.isEmpty()) { //生成任务包 @@ -310,87 +292,6 @@ public class OcrPictureServiceImpl extends BaseServiceImpl newList = new ArrayList<>(); - Map resultMap = new HashMap<>(); - for (OcrPicture ocrPicture : ocrPictureList) { - //如果当前图片已经生成任务包,直接跳过 - if (ocrPicture.getTaskstatus().equals("1")) { - continue; - } - //图片查重的比对图片集合 - List compareList = new ArrayList<>(); - //非历史图片主键集合 - List picturecompareList = new ArrayList<>(); - boolean havePoint = false; - logService.addLog(103, "AI获取图片相似度接口", sysUser, "sendParams"); - if (StringUtils.isBlank(ocrPicture.getImgHash())) { - Map 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 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) && Integer.parseInt(search_month) <= 12 && Integer.parseInt(search_month) > 0) { ocrPackagetask.setSearchtimes(SearchEnum.getName(Integer.parseInt(search_month))); @@ -401,7 +302,12 @@ public class OcrPictureServiceImpl extends BaseServiceImpl collect = ocrPictureList.stream().map(OcrPicture::getId).collect(Collectors.toList()); + List list = ocrTaskchildPictureService.list(new LambdaQueryWrapper().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)) { return ResultVoUtil.success(); } else { @@ -463,7 +369,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl ocrPictureList, String tenantId) { + public ResultVo createTaskChild(List ocrPictureList, String tenantId,HttpServletRequest request) { //图片错误信息 StringBuffer error = new StringBuffer(); //项目错误信息 @@ -502,15 +408,12 @@ public class OcrPictureServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper(); - queryWrapper.eq("suspiciousfile","0"); + queryWrapper.eq("suspiciousfile", "0"); for (OcrUsersearchchild usersearchchild : ocrUsersearch.getOcrUsersearchchildList()) { this.formattingSearchChild(queryWrapper, usersearchchild); @@ -797,13 +700,84 @@ public class OcrPictureServiceImpl extends BaseServiceImpl ocrPictureList) { + List 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 list) { for (OcrPicture ocrPicture : list) { PictureImgToLocalEntity entity = new PictureImgToLocalEntity(); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/TaskchildPictureServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/TaskchildPictureServiceImpl.java index 540becf7..d2984ca6 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/TaskchildPictureServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/TaskchildPictureServiceImpl.java @@ -43,276 +43,275 @@ import java.util.List; import java.util.Map; /** -* 业务层实现 -*/ + * 业务层实现 + */ @Service("taskchildPictureService") @Slf4j -public class TaskchildPictureServiceImpl extends BaseServiceImpl implements IFormCustomService { - - @Resource - private OcrTaskchildPictureService ocrTaskchildPictureService; - @Autowired - private UserTokenService userTokenService; - @Autowired - private XiaoyaoConfig xiaoyaoConfig; - @Autowired - private FtperrorService ftperrorService; - @Autowired - private CategoryService categoryService; - @Autowired - private UserService userService; - @Autowired - private SeqManageService seqManageService; - @Autowired - private CandidateuserService candidateuserService; - - @Autowired - private IFlowFormMessageService iFlowFormMessageService; - @Override - public String saveForm(HttpServletRequest request) { - OcrTaskchildPicture model = null; - try { - model = RequestBaseUtil.reflects(request,OcrTaskchildPicture.class); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } - - if(null != model && null == model.getId()){ - - UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request)); - model.setCreateuser(userToken.getLoginname()); - - MultipartHttpServletRequest multipartRequest = WebUtils - .getNativeRequest(request, MultipartHttpServletRequest.class); - MultipartFile multipartfile = multipartRequest.getFile("fileannex"); - - //上传附件 - if (null != multipartfile && !multipartfile.isEmpty()) { - String filepat = SystemConstantsOa.OA_FILE_PATH; - - //获得文件后缀 - String fileType = FilenameUtils.getExtension(multipartfile.getOriginalFilename()); - - //重新命名 - String fileName = System.currentTimeMillis() + "_c." + fileType; - - ResultVo rs = UploadSpringUtil.springUpload(multipartfile, xiaoyaoConfig, filepat, fileName,ftperrorService); - if (null != rs) { - if (rs.getCode().equals(ResultVo.SUCCESS)) { - model.setFileannex(rs.getOtherMessage().toString()); - } - } - } - - //设置流程编号 - Map map = new HashMap<>(); - map.put("systemcode",SystemConstantsOa.OA_BUSSINRSS_NO_FIX); - Category category = categoryService.getById(model.getCategoryid()); - if(null != category){ - map.put("categoryformtype",category.getFormtype()); - } - List distionaryList = candidateuserService.selectList(userToken.getLoginname()); - if(null != distionaryList && !distionaryList.isEmpty()){ - map.put("deptcodeno",distionaryList.get(0).getCodeno()); - } - map.put("number","6"); - - model.setBuessinessno(seqManageService.getSeqNextNo(map)); - model.setCreatedate(System.currentTimeMillis()); - this.save(model); - return model.getId().toString(); - }else{ - - MultipartHttpServletRequest multipartRequest = WebUtils - .getNativeRequest(request, MultipartHttpServletRequest.class); - MultipartFile multipartfile = multipartRequest.getFile("fileannex"); - - //上传附件 - if (null != multipartfile && !multipartfile.isEmpty()) { - String filepat = SystemConstantsOa.OA_FILE_PATH; - - //获得文件后缀 - String fileType = FilenameUtils.getExtension(multipartfile.getOriginalFilename()); - - //重新命名 - String fileName = System.currentTimeMillis() + "_c." + fileType; - - ResultVo rs = UploadSpringUtil.springUpload(multipartfile, xiaoyaoConfig, filepat, fileName,ftperrorService); - if (null != rs) { - if (rs.getCode().equals(ResultVo.SUCCESS)) { - model.setFileannex(rs.getOtherMessage().toString()); - } - } - } - - model.setUpdatetime(System.currentTimeMillis()); - this.ocrTaskchildPictureService.updateById(model); - return model.getId().toString(); - } - } - - @Override - public String editForm(HttpServletRequest request, String fromid) { - if(StringUtils.isBlank(fromid)){ - return null; - } - OcrTaskchildPicture modelOld = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); - if(null == modelOld){ - return null; - } - OcrTaskchildPicture modelNew = null; - try { - modelNew = RequestBaseUtil.reflects(request,OcrTaskchildPicture.class); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } - - if(null != modelNew){ - modelNew.setId(modelNew.getId()); - UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request)); - - MultipartHttpServletRequest multipartRequest = WebUtils - .getNativeRequest(request, MultipartHttpServletRequest.class); - MultipartFile multipartfile = multipartRequest.getFile("fileannex"); - - //上传附件 - if (null != multipartfile && !multipartfile.isEmpty()) { - String filepat = SystemConstantsOa.OA_FILE_PATH; - - //获得文件后缀 - String fileType = FilenameUtils.getExtension(multipartfile.getOriginalFilename()); - - //重新命名 - String fileName = System.currentTimeMillis() + "_c." + fileType; - - ResultVo rs = UploadSpringUtil.springUpload(multipartfile, xiaoyaoConfig, filepat, fileName,ftperrorService); - if (null != rs) { - if (rs.getCode().equals(ResultVo.SUCCESS)) { - modelNew.setFileannex(rs.getOtherMessage().toString()); - } - } - } - - modelNew.setUpdatetime(System.currentTimeMillis()); - modelNew.setUpdateuser(userToken.getUserid()); - this.ocrTaskchildPictureService.updateById(modelNew); - return modelNew.getId().toString(); - } - - return null; - } - - @Override - public boolean delForm(String formid) { - if(StringUtils.isNotBlank(formid)){ - return this.ocrTaskchildPictureService.removeById(formid) ; - } - return false; - } - - @Override - public boolean updateForm(String fromid, String deploymentid, String processdefinitionid, String assignee, String taskId, String processInstanceId,String tasknme) { - if(StringUtils.isNotBlank(fromid) && StringUtils.isNotBlank(deploymentid) && StringUtils.isNotBlank(processdefinitionid)){ - OcrTaskchildPicture model = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); - model .setProcessinstanceid(processInstanceId); - model.setProcessdefinitionid(processdefinitionid); - model.setDeploymentid(deploymentid); - model.setAssignee(assignee); - model.setTaskname(tasknme); - model.setStates(SystemConstantsOa.OA_STATUS_TYPE_ING); - //查询审批人姓名 - String[] assignees = assignee.split(","); - StringBuffer stringBuffer = new StringBuffer(); - for(String tempAssign:assignees){ - User user = userService.findByLoginname(tempAssign); - if(StringUtils.isNotBlank(stringBuffer.toString())){ - stringBuffer.append("," + user.getUsername()); - }else { - stringBuffer.append(user.getUsername()); - } - //发送消息 - //iFlowFormMessageService.sendMsg(user.getLoginname(),model.getUsername() + SystemMessage.SYS_OA_TYPE_LEAVE + SystemMessage.SYS_OA_TO_DO,taskId,processInstanceId,fromid, CacheQyweixinConstants.OA_DISTIONARY_TYPE_MSG_SHENPI,model.getCategoryid().toString()); - } - model.setAssigneename(stringBuffer.toString()); - - return this.ocrTaskchildPictureService.updateById(model); - } - return false; - } - - @Override - public boolean editStatesForm(String fromid, int states, String assignee) { - //TODO 后期修改图片的状态 - if(StringUtils.isNotBlank(fromid)){ - OcrTaskchildPicture model = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); - if(StringUtils.isNotBlank(assignee)){ - User user1 = userService.findByLoginname(assignee); - model.setAssigneename(user1.getUsername()); - model.setAssignee(assignee); - } - - //如果状态为拒绝,监听程序不改变当前状态 - if(model.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE){ - //判断是否为撤回 - if(states == SystemConstantsOa.OA_STATUS_TYPE_CANCLE){ - model.setProcessinstanceid(""); - model.setDeploymentid(""); - model.setProcessdefinitionid(""); - model.setAssigneename(""); - model.setAssignee(""); - } - - model.setStates(states); - return this.ocrTaskchildPictureService.updateById(model); - } - } - return false; - } - - @Override - public boolean endForm(String fromid, int states, String assignee, String processInstanceId,String tasknme) { - //TODO 后期修改图片的状态 - if(StringUtils.isNotBlank(fromid)){ - OcrTaskchildPicture model = this.selectDtoById(Long.parseLong(fromid)); - if(StringUtils.isNotBlank(assignee)){ - User user1 = userService.findByLoginname(assignee); - model.setAssigneename(user1.getUsername()); - model.setAssignee(assignee); - } - 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()); - //如果状态为拒绝,监听程序不改变当前状态 - if(model.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE){ - model.setStates(states); - return this.updateById(model); - } - } - return false; - } - - @Override - public FlowModelVO getForm(String fromid) { - if(StringUtils.isNotBlank(fromid)){ - OcrTaskchildPicture model = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); - - //查询审批人 - if(null != model){ - return model.getFlowModelVO(); - } - - } - return null; - } +public class TaskchildPictureServiceImpl extends BaseServiceImpl implements IFormCustomService { + + @Resource + private OcrTaskchildPictureService ocrTaskchildPictureService; + @Autowired + private UserTokenService userTokenService; + @Autowired + private XiaoyaoConfig xiaoyaoConfig; + @Autowired + private FtperrorService ftperrorService; + @Autowired + private CategoryService categoryService; + @Autowired + private UserService userService; + @Autowired + private SeqManageService seqManageService; + @Autowired + private CandidateuserService candidateuserService; + + @Autowired + private IFlowFormMessageService iFlowFormMessageService; + + @Override + public String saveForm(HttpServletRequest request) { + OcrTaskchildPicture model = null; + try { + model = RequestBaseUtil.reflects(request, OcrTaskchildPicture.class); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + + if (null != model && null == model.getId()) { + + UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request)); + model.setCreateuser(userToken.getLoginname()); + + MultipartHttpServletRequest multipartRequest = WebUtils + .getNativeRequest(request, MultipartHttpServletRequest.class); + MultipartFile multipartfile = multipartRequest.getFile("fileannex"); + + //上传附件 + if (null != multipartfile && !multipartfile.isEmpty()) { + String filepat = SystemConstantsOa.OA_FILE_PATH; + + //获得文件后缀 + String fileType = FilenameUtils.getExtension(multipartfile.getOriginalFilename()); + + //重新命名 + String fileName = System.currentTimeMillis() + "_c." + fileType; + + ResultVo rs = UploadSpringUtil.springUpload(multipartfile, xiaoyaoConfig, filepat, fileName, ftperrorService); + if (null != rs) { + if (rs.getCode().equals(ResultVo.SUCCESS)) { + model.setFileannex(rs.getOtherMessage().toString()); + } + } + } + + //设置流程编号 + Map map = new HashMap<>(); + map.put("systemcode", SystemConstantsOa.OA_BUSSINRSS_NO_FIX); + Category category = categoryService.getById(model.getCategoryid()); + if (null != category) { + map.put("categoryformtype", category.getFormtype()); + } + List distionaryList = candidateuserService.selectList(userToken.getLoginname()); + if (null != distionaryList && !distionaryList.isEmpty()) { + map.put("deptcodeno", distionaryList.get(0).getCodeno()); + } + map.put("number", "6"); + + model.setBuessinessno(seqManageService.getSeqNextNo(map)); + model.setCreatedate(System.currentTimeMillis()); + this.save(model); + return model.getId().toString(); + } else { + + MultipartHttpServletRequest multipartRequest = WebUtils + .getNativeRequest(request, MultipartHttpServletRequest.class); + MultipartFile multipartfile = multipartRequest.getFile("fileannex"); + + //上传附件 + if (null != multipartfile && !multipartfile.isEmpty()) { + String filepat = SystemConstantsOa.OA_FILE_PATH; + + //获得文件后缀 + String fileType = FilenameUtils.getExtension(multipartfile.getOriginalFilename()); + + //重新命名 + String fileName = System.currentTimeMillis() + "_c." + fileType; + + ResultVo rs = UploadSpringUtil.springUpload(multipartfile, xiaoyaoConfig, filepat, fileName, ftperrorService); + if (null != rs) { + if (rs.getCode().equals(ResultVo.SUCCESS)) { + model.setFileannex(rs.getOtherMessage().toString()); + } + } + } + + model.setUpdatetime(System.currentTimeMillis()); + this.ocrTaskchildPictureService.updateById(model); + return model.getId().toString(); + } + } + + @Override + public String editForm(HttpServletRequest request, String fromid) { + if (StringUtils.isBlank(fromid)) { + return null; + } + OcrTaskchildPicture modelOld = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); + if (null == modelOld) { + return null; + } + OcrTaskchildPicture modelNew = null; + try { + modelNew = RequestBaseUtil.reflects(request, OcrTaskchildPicture.class); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + + if (null != modelNew) { + modelNew.setId(modelNew.getId()); + UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(request)); + + MultipartHttpServletRequest multipartRequest = WebUtils + .getNativeRequest(request, MultipartHttpServletRequest.class); + MultipartFile multipartfile = multipartRequest.getFile("fileannex"); + + //上传附件 + if (null != multipartfile && !multipartfile.isEmpty()) { + String filepat = SystemConstantsOa.OA_FILE_PATH; + + //获得文件后缀 + String fileType = FilenameUtils.getExtension(multipartfile.getOriginalFilename()); + + //重新命名 + String fileName = System.currentTimeMillis() + "_c." + fileType; + + ResultVo rs = UploadSpringUtil.springUpload(multipartfile, xiaoyaoConfig, filepat, fileName, ftperrorService); + if (null != rs) { + if (rs.getCode().equals(ResultVo.SUCCESS)) { + modelNew.setFileannex(rs.getOtherMessage().toString()); + } + } + } + + modelNew.setUpdatetime(System.currentTimeMillis()); + modelNew.setUpdateuser(userToken.getUserid()); + this.ocrTaskchildPictureService.updateById(modelNew); + return modelNew.getId().toString(); + } + + return null; + } + + @Override + public boolean delForm(String formid) { + if (StringUtils.isNotBlank(formid)) { + return this.ocrTaskchildPictureService.removeById(formid); + } + return false; + } + + @Override + public boolean updateForm(String fromid, String deploymentid, String processdefinitionid, String assignee, String taskId, String processInstanceId, String tasknme) { + if (StringUtils.isNotBlank(fromid) && StringUtils.isNotBlank(deploymentid) && StringUtils.isNotBlank(processdefinitionid)) { + OcrTaskchildPicture model = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); + model.setProcessinstanceid(processInstanceId); + model.setProcessdefinitionid(processdefinitionid); + model.setDeploymentid(deploymentid); + model.setAssignee(assignee); + model.setTaskname(tasknme); + model.setStates(SystemConstantsOa.OA_STATUS_TYPE_ING); + //查询审批人姓名 + String[] assignees = assignee.split(","); + StringBuffer stringBuffer = new StringBuffer(); + for (String tempAssign : assignees) { + User user = userService.findByLoginname(tempAssign); + if (StringUtils.isNotBlank(stringBuffer.toString())) { + stringBuffer.append("," + user.getUsername()); + } else { + stringBuffer.append(user.getUsername()); + } + //发送消息 + //iFlowFormMessageService.sendMsg(user.getLoginname(),model.getUsername() + SystemMessage.SYS_OA_TYPE_LEAVE + SystemMessage.SYS_OA_TO_DO,taskId,processInstanceId,fromid, CacheQyweixinConstants.OA_DISTIONARY_TYPE_MSG_SHENPI,model.getCategoryid().toString()); + } + model.setAssigneename(stringBuffer.toString()); + + return this.ocrTaskchildPictureService.updateById(model); + } + return false; + } + + @Override + public boolean editStatesForm(String fromid, int states, String assignee) { + //TODO 后期修改图片的状态 + if (StringUtils.isNotBlank(fromid)) { + OcrTaskchildPicture model = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); + if (StringUtils.isNotBlank(assignee)) { + User user1 = userService.findByLoginname(assignee); + model.setAssigneename(user1.getUsername()); + model.setAssignee(assignee); + } + + //如果状态为拒绝,监听程序不改变当前状态 + if (model.getStates().intValue() != SystemConstantsOa.OA_STATUS_TYPE_REFUSE) { + //判断是否为撤回 + if (states == SystemConstantsOa.OA_STATUS_TYPE_CANCLE) { + model.setProcessinstanceid(""); + model.setDeploymentid(""); + model.setProcessdefinitionid(""); + model.setAssigneename(""); + model.setAssignee(""); + } + + model.setStates(states); + return this.ocrTaskchildPictureService.updateById(model); + } + } + return false; + } + + @Override + public boolean endForm(String fromid, int states, String assignee, String processInstanceId, String tasknme) { + //TODO 后期修改图片的状态 + if (StringUtils.isNotBlank(fromid)) { + OcrTaskchildPicture model = this.selectDtoById(Long.parseLong(fromid)); + if (StringUtils.isNotBlank(assignee)) { + User user1 = userService.findByLoginname(assignee); + model.setAssigneename(user1.getUsername()); + model.setAssignee(assignee); + } + 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()); + //如果状态为拒绝,监听程序不改变当前状态 + model.setStates(states); + return this.updateById(model); + } + return false; + } + + @Override + public FlowModelVO getForm(String fromid) { + if (StringUtils.isNotBlank(fromid)) { + OcrTaskchildPicture model = this.ocrTaskchildPictureService.selectDtoById(Long.parseLong(fromid)); + + //查询审批人 + if (null != model) { + return model.getFlowModelVO(); + } + + } + return null; + } } diff --git a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/mapper/oa/OcrPictureInfoMapper.xml b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/mapper/oa/OcrPictureInfoMapper.xml new file mode 100644 index 00000000..41449fd2 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/mapper/oa/OcrPictureInfoMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + id, picture_id, img_size, img_format, img_measure, upload_time, create_time, img_space, + tag_time, `source` + + \ No newline at end of file