feat: 一件查重、创建任务包新逻辑调整

pull/1/head
shuliYao 1 year ago
parent 15b105543f
commit 353d28c90e

@ -0,0 +1,157 @@
package cn.jyjz.xiaoyao.ocr.controller;
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;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrCheckDuplicate;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.service.IOcrCheckDuplicateService;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.util.SearchConfigEnum;
import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/25 1:31
*/
@RestController
@RequestMapping("/ocr/checkDuplicate")
public class OcrCheckDuplicateController {
@Resource
private UserTokenService userTokenService;
@Resource
private IOcrCheckDuplicateService ocrCheckDuplicateService;
@Resource
private OcrPictureService ocrPictureService;
@ApiOperation(value = "一键查重", notes = "一键查重")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", name = "X-Tenant-Id", value = "租户主键,用户登录时的信息“tenantList”中获得。", dataType = "String", required = true)
})
@GetMapping(value = "/openCheckDuplicate")
public ResultVo checkDuplicate(OcrPicture ocrPicture, HttpServletRequest req) {
//获取当前登录人
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(req));
//租户主键,由前端页面传送
String tenantId = req.getHeader("X-Tenant-Id");
if (StringUtils.isBlank(tenantId)) {
return ResultVoUtil.error("租户主键不能为空");
}
QueryWrapper<OcrPicture> queryWrapper = new QueryWrapper<>();
//根据参数枚举获取检索参数并映射为数据库的字段的key-v map
Map<String, Object> paraMap = new HashMap<>();
for (SearchConfigEnum config : SearchConfigEnum.values()) {
String searchvalue = req.getParameter(config.getId());
if (StringUtils.isNotBlank(searchvalue)) {
paraMap.put(config.getMeaning(), searchvalue);
}
}
//调用查询参数解析方法解析为queryWrapper
queryWrapper = SearchParaFormatting.searchParaParse(queryWrapper, paraMap);
queryWrapper.eq("tenant_id", tenantId);
List<OcrPicture> pageList = ocrPictureService.listPage(queryWrapper);
if (null != pageList && !pageList.isEmpty()) {
if (pageList.size() == 1) {
return ResultVoUtil.error("查重数据至少要有两条。");
} else {
return ocrCheckDuplicateService.duplicateCheck(pageList, tenantId, userToken, req,paraMap);
}
} else {
return ResultVoUtil.error("没有查重数据。");
}
}
//取消查重任务接口
@ApiOperation(value = "获取查重任务接口异步状态", notes = "获取查重任务接口异步状态")
@GetMapping("/getCheckDuplicateStatus")
@ResponseBody
public ResultVo getCheckDuplicateStatus(HttpServletResponse response, HttpServletRequest request,
@RequestParam(name="checkDuplicateNo",required = true) String checkDuplicateNo) throws IOException {
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
if(StringUtils.isBlank(checkDuplicateNo)){
return ResultVoUtil.error("查重编号不能为空");
}
OcrCheckDuplicate dto = this.ocrCheckDuplicateService.getCheckDuplicateStatus(checkDuplicateNo);
if(null != dto){
return ResultVoUtil.success(dto);
}else{
return ResultVoUtil.error();
}
}
/**
*
* @param request
* @return
*/
@GetMapping(value = "/getLastCheckNo")
public ResultVo getLastCheckNo(HttpServletRequest request) {
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
String lastCheckNo = this.ocrCheckDuplicateService.getLastCheckNo(tenantId);
if(!StringUtils.isBlank(lastCheckNo)){
return ResultVoUtil.success(lastCheckNo);
}else{
return ResultVoUtil.success();
}
}
/**
*
* @param request
* @return
*/
@GetMapping(value = "/removeCheckDuplicate")
public ResultVo removeCheckDuplicate(HttpServletRequest request,@RequestParam(name="checkDuplicateNo",required = true) String checkDuplicateNo) {
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
Boolean result = this.ocrCheckDuplicateService.removeCheckDuplicate(checkDuplicateNo,tenantId);
if(result){
return ResultVoUtil.success("取消查重任务成功!");
}
return ResultVoUtil.error("取消任务失败!");
}
}

@ -12,13 +12,12 @@ import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrCheckDuplicate;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPlan;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskPackage;
import cn.jyjz.xiaoyao.ocr.dto.OcrTaskPackageDto;
import cn.jyjz.xiaoyao.ocr.service.IOcrCheckDuplicateResultService;
import cn.jyjz.xiaoyao.ocr.service.IOcrCheckDuplicateService;
import cn.jyjz.xiaoyao.ocr.service.IOcrTaskPackageService;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.util.DataUtil;
import cn.jyjz.xiaoyao.ocr.util.SearchConfigEnum;
import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -34,13 +33,14 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
*
* and
* </p>
*
* @author author
@ -53,111 +53,10 @@ public class OcrTaskPackageController extends BaseController {
@Resource
private IOcrTaskPackageService ocrTaskPackageService;
@Resource
private UserTokenService userTokenService;
@Resource
private UserService userService;
@Resource
private XiaoyaoConfig xiaoyaoConfig;
@Resource
private FtperrorService ftperrorService;
@Resource
private IOcrCheckDuplicateResultService ocrCheckDuplicateResultService;
@Resource
private IOcrCheckDuplicateService ocrCheckDuplicateService;
@Resource
private OcrPictureService ocrPictureService;
@ApiOperation(value = "一键查重", notes = "一键查重")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "header", name = "X-Tenant-Id", value = "租户主键,用户登录时的信息“tenantList”中获得。", dataType = "String", required = true)
})
@GetMapping(value = "/checkDuplicate")
public ResultVo checkDuplicate(OcrPicture ocrPicture, HttpServletRequest req) {
//获取当前登录人
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(req));
//租户主键,由前端页面传送
String tenantId = req.getHeader("X-Tenant-Id");
if (StringUtils.isBlank(tenantId)) {
return ResultVoUtil.error("租户主键不能为空");
}
QueryWrapper<OcrPicture> queryWrapper = new QueryWrapper<>();
//根据参数枚举获取检索参数并映射为数据库的字段的key-v map
Map<String, Object> paraMap = new HashMap<>();
for (SearchConfigEnum config : SearchConfigEnum.values()) {
String searchvalue = req.getParameter(config.getId());
if (StringUtils.isNotBlank(searchvalue)) {
paraMap.put(config.getMeaning(), searchvalue);
}
}
//调用查询参数解析方法解析为queryWrapper
queryWrapper = SearchParaFormatting.searchParaParse(queryWrapper, paraMap);
queryWrapper.eq("tenant_id", tenantId);
List<OcrPicture> pageList = ocrPictureService.listPage(queryWrapper);
if (null != pageList && !pageList.isEmpty()) {
if (pageList.size() == 1) {
return ResultVoUtil.error("查重数据至少要有两条。");
} else {
return ocrTaskPackageService.duplicateCheck(pageList, tenantId, userToken, req);
}
} else {
return ResultVoUtil.error("没有查重数据。");
}
}
//取消查重任务接口
@ApiOperation(value = "获取查重任务接口异步状态", notes = "获取查重任务接口异步状态")
@GetMapping("/getCheckDuplicateStatus")
@ResponseBody
public ResultVo getCheckDuplicateStatus(HttpServletResponse response, HttpServletRequest request,
@RequestParam(name="checkDuplicateNo",required = true) String checkDuplicateNo) throws IOException {
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
if(StringUtils.isBlank(checkDuplicateNo)){
return ResultVoUtil.error("查重编号不能为空");
}
OcrCheckDuplicate dto = this.ocrCheckDuplicateService.getCheckDuplicateStatus(checkDuplicateNo);
if(null != dto){
return ResultVoUtil.success(dto);
}else{
return ResultVoUtil.error();
}
}
/**
*
* @param request
* @return
*/
@GetMapping(value = "/getLastCheckNo")
public ResultVo getLastCheckNo(HttpServletRequest request) {
String tenantId = request.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
String lastCheckNo = this.ocrCheckDuplicateService.getLastCheckNo(tenantId);
if(StringUtils.isBlank(lastCheckNo)){
return ResultVoUtil.success(lastCheckNo);
}else{
return ResultVoUtil.error();
}
}
@Resource
private UserTokenService userTokenService;
/**
*
@ -165,9 +64,15 @@ public class OcrTaskPackageController extends BaseController {
* @param req
* @return
*/
@GetMapping(value = "/createPackage")
public ResultVo createPackage(OcrTaskPackage ocrTaskPackage, HttpServletRequest req) {
@PostMapping(value = "/createPackage")
public ResultVo createPackage(@RequestBody OcrTaskPackageDto ocrTaskPackage, HttpServletRequest req) {
UserToken userToken = this.userTokenService.getUserToken(RequestBaseUtil.getToken(req));
//租户
String tenantId = req.getHeader("X-Tenant-Id");
if(StringUtils.isBlank(tenantId)){
return ResultVoUtil.error("租户主键不能为空");
}
ocrTaskPackage.setTenantId(Long.parseLong(tenantId));
//校验参数包名称
if(ocrTaskPackage == null){
return ResultVoUtil.error("参数对象为空");
@ -178,27 +83,28 @@ public class OcrTaskPackageController extends BaseController {
return ResultVoUtil.error("任务包名称不能为空");
}
boolean isSuccess = ocrTaskPackageService.save(ocrTaskPackage);
if(isSuccess){
return ResultVoUtil.success(ocrTaskPackage);
}else{
return ResultVoUtil.error();
//校验参数包名称
if(StringUtils.isBlank(ocrTaskPackage.getCheckDuplicateNo())){
return ResultVoUtil.error("查重任务编号不能为空");
}
ocrTaskPackage.setCreateBy(userToken.getUserid());
ocrTaskPackage.setCreateTime(System.currentTimeMillis());
return ocrTaskPackageService.saveTaskPackage(ocrTaskPackage);
}
/**
*
* @param id
* @param packageId
* @param req
* @return
*/
@GetMapping(value = "/deletePackage")
public ResultVo deletePackage(Long id, HttpServletRequest req) {
boolean b = ocrTaskPackageService.removeById(id);
public ResultVo deletePackage(@RequestParam(name="packageId",required = true)Long packageId, HttpServletRequest req) {
OcrTaskPackage taskPackage = new OcrTaskPackage();
taskPackage.setId(packageId);
taskPackage.setIsDelete(1);
boolean b = ocrTaskPackageService.updateById(taskPackage);
if(b){
return ResultVoUtil.success();
}else{

@ -1,6 +1,6 @@
package cn.jyjz.xiaoyao.ocr.dataDao;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictrueDuplicateHis;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureDuplicateHis;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@ -13,6 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
* @since 2024-03-24
*/
@Mapper
public interface OcrPictrueDuplicateHisMapper extends BaseMapper<OcrPictrueDuplicateHis> {
public interface OcrPictureDuplicateHisMapper extends BaseMapper<OcrPictureDuplicateHis> {
}

@ -73,16 +73,16 @@ public class OcrPicture implements BaseDto, java.io.Serializable {
private String pictureclassscores;
@ApiModelProperty(value = "图片真假0:假1真")
@TableField(value = "iztrueorfalse", updateStrategy = FieldStrategy.IGNORED)
@TableField(value = "iztrueorfalse")
private Integer iztrueorfalse;
@ApiModelProperty(value = "选判真假原因id,从字典表中获得,其他时,当前字段为零")
@TableField(value = "judgeid", updateStrategy = FieldStrategy.IGNORED)
@TableField(value = "judgeid")
@JsonSerialize(using = ToStringSerializer.class)
private Long judgeid;
@ApiModelProperty(value = "图片为假的其他原因长度不超过50个汉字")
@TableField(value = "judgedesc", updateStrategy = FieldStrategy.IGNORED)
@TableField(value = "judgedesc")
private String judgedesc;
@ApiModelProperty(value = "公司ID")

@ -28,7 +28,7 @@ import lombok.experimental.Accessors;
@AllArgsConstructor
@TableName("ocr_pictrue_duplicate_his")
@ApiModel(value="OcrPictrueDuplicateHis对象", description="图片比对历史信息表")
public class OcrPictrueDuplicateHis implements Serializable {
public class OcrPictureDuplicateHis implements Serializable {
private static final long serialVersionUID = 1L;

@ -58,6 +58,9 @@ public class OcrTaskPackage implements Serializable {
@ApiModelProperty(value = "修改时间")
private Long updateTime;
@ApiModelProperty(value = "租户标识")
private Long tenantId;
private Integer isDelete;

@ -0,0 +1,35 @@
package cn.jyjz.xiaoyao.ocr.dto;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* dto
*
* @author hugh(shuli.yao) 1397940314@qq.com
* @version 1.0
* @date 2024/3/25 1:48
*/
@Data
public class OcrTaskPackageDto {
@ApiModelProperty(value = "任务包名称")
private String name;
@ApiModelProperty(value = "查重任务id")
private Long checkDuplicateId;
@ApiModelProperty(value = "查重任务编号")
private String checkDuplicateNo;
@ApiModelProperty(value = "租户标识")
private Long tenantId;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Long createTime;
}

@ -1,8 +1,15 @@
package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrCheckDuplicate;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
* <p>
*
@ -13,7 +20,47 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IOcrCheckDuplicateService extends IService<OcrCheckDuplicate> {
/**
*
* @param checkDuplicateNo
* @return
*/
OcrCheckDuplicate getCheckDuplicateStatus(String checkDuplicateNo);
/**
*
* @param tenantId
* @return
*/
String getLastCheckNo(String tenantId);
/**
*
* @param pageList
* @param tenantId
* @param userToken
* @param req
* @return
*/
ResultVo duplicateCheck(List<OcrPicture> pageList, String tenantId, UserToken userToken, HttpServletRequest req, Map<String, Object> paraMap);
/**
*
* @param ocrPictureList
* @param sysUser
*/
void comparePictureResultSave(List<OcrPicture> ocrPictureList,UserToken sysUser,Long checkDuplicateId) throws Exception;
/**
*
*/
Boolean removeCheckDuplicate(String checkDuplicateNo, String tenantId);
/**
*
* @param checkDuplicateNo
* @param tenantId
* @return
*/
OcrCheckDuplicate queryByCheckDuplicateNo(String checkDuplicateNo, Long tenantId);
}

@ -1,16 +0,0 @@
package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictrueDuplicateHis;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
*
* </p>
*
* @author author
* @since 2024-03-24
*/
public interface IOcrPictrueDuplicateHisService extends IService<OcrPictrueDuplicateHis> {
}

@ -0,0 +1,22 @@
package cn.jyjz.xiaoyao.ocr.service;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureDuplicateHis;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
*
* </p>
*
* @author author
* @since 2024-03-24
*/
public interface IOcrPictureDuplicateHisService extends IService<OcrPictureDuplicateHis> {
/**
* pictrueId
* @param pictureId
* @return
*/
OcrPictureDuplicateHis queryByPictureId(Long pictureId);
}

@ -4,6 +4,7 @@ import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskPackage;
import cn.jyjz.xiaoyao.ocr.dto.OcrTaskPackageDto;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
@ -19,6 +20,10 @@ import java.util.List;
*/
public interface IOcrTaskPackageService extends IService<OcrTaskPackage> {
ResultVo duplicateCheck(List<OcrPicture> pageList, String tenantId, UserToken userToken, HttpServletRequest req);
/**
*
* @param ocrTaskPackage
* @return
*/
ResultVo saveTaskPackage(OcrTaskPackageDto ocrTaskPackage);
}

@ -1,20 +1,48 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
import cn.jyjz.xiaoyao.admin.dataobject.User;
import cn.jyjz.xiaoyao.admin.service.LogService;
import cn.jyjz.xiaoyao.common.base.exception.CommonExceptionCodeEnum;
import cn.jyjz.xiaoyao.common.base.exception.ServiceException;
import cn.jyjz.xiaoyao.common.base.util.DateUtils;
import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
import cn.jyjz.xiaoyao.common.base.util.StringUtils;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.common.redis.cache.ehcache.EhCacheTask;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrCheckDuplicateMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrCheckDuplicate;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrCheckDuplicateResult;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureDuplicateHis;
import cn.jyjz.xiaoyao.ocr.service.IOcrCheckDuplicateResultService;
import cn.jyjz.xiaoyao.ocr.service.IOcrCheckDuplicateService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import cn.jyjz.xiaoyao.ocr.service.IOcrPictureDuplicateHisService;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.util.HashCompareUtil;
import cn.jyjz.xiaoyao.ocr.util.ImageClassUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import lombok.extern.log4j.Log4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
/**
@ -25,12 +53,83 @@ import java.util.function.Function;
* @author author
* @since 2024-03-24
*/
@Service
@Service("checkDuplicateService")
public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateMapper, OcrCheckDuplicate> implements IOcrCheckDuplicateService {
private Logger logger = LoggerFactory.getLogger(OcrCheckDuplicateServiceImpl.class);
@Resource
private OcrCheckDuplicateMapper ocrCheckDuplicateMapper;
@Resource
private IOcrCheckDuplicateResultService checkDuplicateResultService;
@Resource
private IOcrPictureDuplicateHisService pictureDuplicateHisService;
@Resource
private OcrPictureService pictureService;
@Resource
private LogService logService;
@Value("${image.classifyPath}")
private String classifyPath;
/**
*
*/
@Override
public ResultVo duplicateCheck(List<OcrPicture> ocrPictureList, String tenantId, UserToken sysUser, HttpServletRequest req,Map<String, Object> paraMap) {
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
//生成查重任务插入表ocr_check_duplicate
OcrCheckDuplicate ocrCheckDuplicate = new OcrCheckDuplicate();
// 生成查重任务编号,规则用户id+当前年月日时分秒
String checkDuplicateNoStr = sysUser.getUserid()+"-"+ DateUtils.parseDateToStr("yyyyMMddHHmmss",new Date());
ocrCheckDuplicate.setCheckDuplicateNo(checkDuplicateNoStr);
ocrCheckDuplicate.setTenantId(Long.valueOf(tenantId));
ocrCheckDuplicate.setCreateBy(sysUser.getUserid());
ocrCheckDuplicate.setCreateTime(DateUtil.current());
ocrCheckDuplicate.setPictureCount(ocrPictureList.size());
ocrCheckDuplicate.setStatus(1);
ocrCheckDuplicate.setSearchingJson(JSONObject.toJSONString(paraMap));//查重时左侧的筛选条件
this.save(ocrCheckDuplicate);
//异步执行图片比对查重功能
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
IOcrCheckDuplicateService checkDuplicateService = SpringUtils.getBean("checkDuplicateService");
Long id = ocrCheckDuplicate.getId();
OcrCheckDuplicate checkDuplicate = new OcrCheckDuplicate();
checkDuplicate.setId(id);
checkDuplicate.setStatus(7); //预留状态
try {
//异步调用查重任务
checkDuplicateService.comparePictureResultSave(ocrPictureList,sysUser,id);
checkDuplicate.setStatus(2);
} catch (Exception e) {
logger.error("异步执行图片比对异常:",e.getMessage());
checkDuplicate.setStatus(3);
}finally {
checkDuplicateService.updateById(checkDuplicate);
}
}
});
thread.start();
return ResultVoUtil.success(ocrCheckDuplicate);
}
return ResultVoUtil.error("比对图片不能为空!");
}
/**
*
*/
@Override
public OcrCheckDuplicate getCheckDuplicateStatus(String checkDuplicateNo) {
@ -46,11 +145,16 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
return ocrCheckDuplicate;
}
/**
*
*/
@Override
public String getLastCheckNo(String tenantId) {
QueryWrapper<OcrCheckDuplicate> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("tenant_id",tenantId);
queryWrapper.eq("status","1");
queryWrapper.eq("is_delete",0);
queryWrapper.orderByDesc("create_time");
List<OcrCheckDuplicate> list = ocrCheckDuplicateMapper.selectList(queryWrapper);
if(CollUtil.isNotEmpty(list)){
@ -59,4 +163,231 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
return null;
}
}
/**
* ocr_check_duplicate_result
* 1.ocr_check_duplicate
* 2.
* 3. orc_check_duplicate_result
* 4. ocr_pictrue_duplicate_his
* 5. orc_check_duplicate_result max_similarity
* 6.ocr_picturesimilarity_score
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void comparePictureResultSave(List<OcrPicture> ocrPictureList,UserToken sysUser,Long checkDuplicateId) throws Exception {
List<OcrCheckDuplicateResult> saveList = new ArrayList<>();
//需要创建任务的图片集合
List<String> createTaskList = new ArrayList<>();
//图片信息不能为空
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
//1.开启比对任务
for (OcrPicture ocrPicture : ocrPictureList) {
logService.addLog(103, "AI获取图片相似度接口", sysUser, "sendParams");
if (org.apache.commons.lang3.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"));
}
}
//定义比对结果存储结果map
Map<String, String> resultMap = new HashMap<>();
//定义比对临时map 防止重复比对
Map<String, String> compareMap = new HashMap<>();
//定义当前图片比对的最高阈值
BigDecimal maxSimilarity = new BigDecimal("0");
//1.1 开始便利进行比对
for (OcrPicture ocrPictureNext : ocrPictureList) {
//排除当前图片,自己跟自己没必要比较
if (ocrPictureNext.getId().longValue() == ocrPicture.getId().longValue()) {
continue;
}
//分类不一致的也不需要进行比对
//TODO 接口请求判断重复情况
if (org.apache.commons.lang3.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 (compareMap.containsKey(strId) || compareMap.containsKey(strNextId)) {
resultValue = resultMap.get(strId) == null ? compareMap.get(strNextId) : compareMap.get(strId);
} else {
String img = org.apache.commons.lang3.StringUtils.isBlank(ocrPicture.getImgHash()) ? org.apache.commons.lang3.StringUtils.isBlank(ocrPicture.getLocalpictrueurl()) ? ocrPicture.getImgurl() : ocrPicture.getLocalpictrueurl() : ocrPicture.getImgHash();
String imgNext = org.apache.commons.lang3.StringUtils.isBlank(ocrPictureNext.getImgHash()) ? org.apache.commons.lang3.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(b1.compareTo(maxSimilarity)==1){
maxSimilarity = b1;
}
resultMap.put(ocrPictureNext.getId().toString(),resultValue);
}
//1.2 比对结束组装入库参数
//定义比对存储对象
OcrCheckDuplicateResult ocrCheckDuplicateResult = new OcrCheckDuplicateResult();
ocrCheckDuplicateResult.setPictureId(ocrPicture.getId());
ocrCheckDuplicateResult.setMaxSimilarity(maxSimilarity.doubleValue());
ocrCheckDuplicateResult.setCompareResultJson(JSONObject.toJSONString(resultMap));
ocrCheckDuplicateResult.setCheckDuplicateId(checkDuplicateId);
saveList.add(ocrCheckDuplicateResult);
}
}
//批量入库
boolean b = checkDuplicateResultService.saveOrUpdateBatch(saveList);
if(!b){
throw new Exception("批量入库比对结果失败!");
}
//开始更新图片最高阈值
this.updatePictureSimilarityScore(saveList);
//开始更新 图片历史比对数据结果
this.updateCompareToPictureDuplicateHis(saveList);
}
@Override
public Boolean removeCheckDuplicate(String checkDuplicateNo, String tenantId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("tenant_id",tenantId);
queryWrapper.eq("check_duplicate_no",checkDuplicateNo);
OcrCheckDuplicate ocrCheckDuplicate = new OcrCheckDuplicate();
ocrCheckDuplicate.setIsDelete(1);
return baseMapper.update(ocrCheckDuplicate,queryWrapper)>0;
}
@Override
public OcrCheckDuplicate queryByCheckDuplicateNo(String checkDuplicateNo, Long tenantId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("tenant_id",tenantId);
queryWrapper.eq("check_duplicate_no",checkDuplicateNo);
OcrCheckDuplicate ocrCheckDuplicate = ocrCheckDuplicateMapper.selectOne(queryWrapper);
return ocrCheckDuplicate;
}
/**
*
* @param saveList
* @return
*/
private boolean updatePictureSimilarityScore(List<OcrCheckDuplicateResult> saveList) throws Exception {
List<OcrPicture> updateList = new ArrayList<>();
for (OcrCheckDuplicateResult ocrCheckDuplicateResult : saveList) {
OcrPicture picture = pictureService.selectDtoById(ocrCheckDuplicateResult.getPictureId());
OcrPicture ocrPicture = new OcrPicture();
//如果当前图片没有历史阈值,直接更新上阈值
if(picture.getSimilarityscore()==null){
ocrPicture.setId(picture.getId());
ocrPicture.setSimilarityscore(ocrCheckDuplicateResult.getMaxSimilarity().intValue());
updateList.add(ocrPicture);
continue;
}
BigDecimal oldSimilarityScore = new BigDecimal(picture.getSimilarityscore());
BigDecimal newSimilarityScore = new BigDecimal(ocrCheckDuplicateResult.getMaxSimilarity());
if(newSimilarityScore.compareTo(oldSimilarityScore)==1){
ocrPicture.setId(picture.getId());
ocrPicture.setSimilarityscore(newSimilarityScore.intValue());
updateList.add(ocrPicture);
}
}
if(updateList.size()<=0){
return true;
}
if(!pictureService.updateBatchById(updateList)){
throw new Exception("更新图片历史最高阈值失败!");
}
return true;
}
/**
*
* ocr_pictrue_duplicate_his
*/
public boolean updateCompareToPictureDuplicateHis(List<OcrCheckDuplicateResult> checkDuplicateResults) throws Exception {
//定义update集合
List<OcrPictureDuplicateHis> updateList = new ArrayList<>();
//定义insert集合
List<OcrPictureDuplicateHis> insertList = new ArrayList<>();
//1.循环便利本次比对结果
for (OcrCheckDuplicateResult checkDuplicateResult : checkDuplicateResults) {
//查看当前图片历史比对结果
OcrPictureDuplicateHis pictureDuplicateHis = pictureDuplicateHisService.queryByPictureId(checkDuplicateResult.getPictureId());
//获取本次对比结果map
ObjectMapper newObjectMapper = new ObjectMapper();
Map<String,Object> newMap = newObjectMapper.readValue(checkDuplicateResult.getCompareResultJson(), HashMap.class);
//创建当前用于存储的历史map
Map<String, Object> hisMap = new HashMap<>();
//定义处理对象
OcrPictureDuplicateHis pictureDuplicate = new OcrPictureDuplicateHis();
if(pictureDuplicateHis!=null){
//检查当前是否存在 历史
if(StringUtils.isNotBlank(pictureDuplicateHis.getCheckDuplicateResultHisJson())){
ObjectMapper hisObjectMapper = new ObjectMapper();
hisMap = hisObjectMapper.readValue(pictureDuplicateHis.getCheckDuplicateResultHisJson(), HashMap.class);
for (String key : newMap.keySet()) {
//开始变更旧map
hisMap.put(key,newMap.get(key));
}
pictureDuplicate.setId(pictureDuplicateHis.getId());
pictureDuplicate.setCheckDuplicateResultHisJson(JSONObject.toJSONString(hisMap));
pictureDuplicateHisService.updateById(pictureDuplicate);
updateList.add(pictureDuplicate);
continue;
}
}
//没有存储过
hisMap = newMap;
pictureDuplicate.setPictureId(checkDuplicateResult.getPictureId());
pictureDuplicate.setCheckDuplicateResultHisJson(JSONObject.toJSONString(hisMap));
insertList.add(pictureDuplicate);
}
if(updateList.size()>0){
if(!pictureDuplicateHisService.updateBatchById(updateList)){
throw new Exception("更新图片历史比对失败!");
}
}
if(insertList.size()>0){
if(!pictureDuplicateHisService.saveBatch(insertList)){
throw new Exception("新增图片历史比对失败!");
}
}
return true;
}
public Map<String, String> getOcrPictureClassifyAndHash(String img) {
JSONObject jsonObjectSimi = ImageClassUtil.getClassify(img, "1", classifyPath);
//返回内容为零,表示成功,否则表示失败
if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0") && jsonObjectSimi.get("data") != null && jsonObjectSimi.getJSONArray("data").size() > 0) {
JSONObject data = jsonObjectSimi.getJSONArray("data").getJSONObject(0);
Map<String, String> map = new HashMap();
map.put("classId", data.getString("classId"));
map.put("hash", data.getString("hash"));
return map;
} else {
return null;
}
}
}

@ -1,20 +0,0 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictrueDuplicateHisMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictrueDuplicateHis;
import cn.jyjz.xiaoyao.ocr.service.IOcrPictrueDuplicateHisService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
*
* </p>
*
* @author author
* @since 2024-03-24
*/
@Service
public class OcrPictrueDuplicateHisServiceImpl extends ServiceImpl<OcrPictrueDuplicateHisMapper, OcrPictrueDuplicateHis> implements IOcrPictrueDuplicateHisService {
}

@ -0,0 +1,33 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureDuplicateHisMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureDuplicateHis;
import cn.jyjz.xiaoyao.ocr.service.IOcrPictureDuplicateHisService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author author
* @since 2024-03-24
*/
@Service
public class OcrPictureDuplicateHisServiceImpl extends ServiceImpl<OcrPictureDuplicateHisMapper, OcrPictureDuplicateHis> implements IOcrPictureDuplicateHisService {
@Override
public OcrPictureDuplicateHis queryByPictureId(Long pictureId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("picture_id",pictureId);
List<OcrPictureDuplicateHis> pictureDuplicateHisList = baseMapper.selectList(queryWrapper);
if(pictureDuplicateHisList!=null && pictureDuplicateHisList.size()>0){
return pictureDuplicateHisList.get(0);
}
return null;
}
}

@ -466,7 +466,6 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
public List<OcrPicture> listPage(Wrapper<OcrPicture> queryWrapper) {
long count = this.count(queryWrapper);
Page<OcrPicture> ocrPicturePage = new Page<>(1, count);
ocrPicturePage.setMaxLimit(count);
IPage<OcrPicture> iPage = this.page(ocrPicturePage, queryWrapper);

@ -1,5 +1,6 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.jyjz.xiaoyao.admin.service.LogService;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
@ -7,12 +8,14 @@ import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskPackageMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.dto.OcrTaskPackageDto;
import cn.jyjz.xiaoyao.ocr.service.*;
import cn.jyjz.xiaoyao.ocr.util.HashCompareUtil;
import cn.jyjz.xiaoyao.ocr.util.ImageClassUtil;
import cn.jyjz.xiaoyao.ocr.util.SearchEnum;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import liquibase.pro.packaged.T;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -36,207 +39,23 @@ import java.util.Map;
@Service
public class OcrTaskPackageServiceImpl extends ServiceImpl<OcrTaskPackageMapper, OcrTaskPackage> implements IOcrTaskPackageService {
@Resource
private OcrPictureService ocrPictureService;
@Resource
private IOcrCheckDuplicateResultService checkDuplicateResultService;
@Resource
private IOcrCheckDuplicateService checkDuplicateService;
@Resource
private IOcrPictrueDuplicateHisService pictureDuplicateHisService;
@Resource
private LogService logService;
@Value("${image.classifyPath}")
private String classifyPath;
/**
*
*/
@Override
public ResultVo duplicateCheck(List<OcrPicture> ocrPictureList, String tenantId, UserToken sysUser, HttpServletRequest req) {
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
//生成查重任务插入表ocr_check_duplicate
OcrCheckDuplicate ocrCheckDuplicate = new OcrCheckDuplicate();
ocrCheckDuplicate.setCheckDuplicateNo("");// 生成查重任务编号,规则
ocrCheckDuplicate.setTenantId(Long.valueOf(tenantId));
ocrCheckDuplicate.setCreateBy(sysUser.getUserid());
ocrCheckDuplicate.setCreateTime(DateUtil.current());
ocrCheckDuplicate.setPictureCount(ocrPictureList.size());
ocrCheckDuplicate.setStatus(1);
ocrCheckDuplicate.setSearchingJson("");//查重时左侧的筛选条件
checkDuplicateService.save(ocrCheckDuplicate);
//异步执行图片比对查重功能 comparePictureResultSave()
//
}
return ResultVoUtil.success();
//生成查重任务插入ocr_check_duplicate
//异步执行查重任务比对查重
//异步查重结果回写 回写orc_check_duplicate_result
//图片比对历史 ocr_pictrue_duplicate_his 这个表的数据 以图片为维度,该图片与其他图片对比结果的保存
//回写 orc_check_duplicate_result表 max_similarity字段字段值是本次查重相似度最高的阈值。
//回写ocr_picture表similarity_score字段字段值是该图片所有历史比对的最高值如果本次比对的最高阈值小于最高值则不进行回写。
}
/**
* ocr_check_duplicate_result
*/
public void comparePictureResultSave(List<OcrPicture> ocrPictureList,UserToken sysUser) {
List<OcrCheckDuplicateResult> list = new ArrayList<>();
//图片错误信息
StringBuffer error = new StringBuffer();
//项目错误信息
StringBuffer errorProject = new StringBuffer();
//流程错误信息
StringBuffer errorFlow = new StringBuffer();
//记录任务相似度为百分百的任务主键
List<Long> pointsList = new ArrayList<>();
//图片信息不能为空
if (null != ocrPictureList && !ocrPictureList.isEmpty()) {
//用于标记相似度是否存在百分百的情况
List<OcrPicture> newList = new ArrayList<>();
Map<String, String> resultMap = new HashMap<>();
for (OcrPicture ocrPicture : ocrPictureList) {
//将比对结果按json格式存储
OcrCheckDuplicateResult ocrCheckDuplicateResult = new OcrCheckDuplicateResult();
//图片比对历史数据增量存储 ocr_pictrue_duplicate_his
OcrPictrueDuplicateHis pictrueDuplicateHis = new OcrPictrueDuplicateHis();
//如果当前图片已经生成任务包,直接跳过
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);
ocrPicture.setTaskstatus("1");
}
}
boolean b = checkDuplicateResultService.saveOrUpdateBatch(list);
}
/**
* ocr_pictrue_duplicate_his
*/
public void comparePicture(){
}
/**
* ocr_pictrue_duplicate_his
*/
public void newComparePicture(){
}
public Map<String, String> getOcrPictureClassifyAndHash(String img) {
JSONObject jsonObjectSimi = ImageClassUtil.getClassify(img, "1", classifyPath);
//返回内容为零,表示成功,否则表示失败
if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0") && jsonObjectSimi.get("data") != null && jsonObjectSimi.getJSONArray("data").size() > 0) {
JSONObject data = jsonObjectSimi.getJSONArray("data").getJSONObject(0);
Map<String, String> map = new HashMap();
map.put("classId", data.getString("classId"));
map.put("hash", data.getString("hash"));
return map;
} else {
return null;
}
}
public void bubbleSortOpt(List<OcrPicture> compareList) {
if (null == compareList) {
return;
}
OcrPicture temp = null;
for (int i = 0; i < compareList.size() - 1; i++) {
for (int j = 0; j < compareList.size() - i - 1; j++) {
if (Double.parseDouble(compareList.get(j).getResult()) < Double.parseDouble(compareList.get(j + 1).getResult())) {
temp = compareList.get(j);
compareList.set(j, compareList.get(j + 1));
compareList.set((j + 1), temp);
}
}
}
public ResultVo saveTaskPackage(OcrTaskPackageDto ocrTaskPackage) {
//1.获取查重任务
OcrCheckDuplicate ocrCheckDuplicate = checkDuplicateService.queryByCheckDuplicateNo(ocrTaskPackage.getCheckDuplicateNo(),ocrTaskPackage.getTenantId());
if(ocrCheckDuplicate==null){
return ResultVoUtil.error("无法获取到查重任务!");
}
OcrTaskPackage taskPackage = new OcrTaskPackage();
BeanUtil.copyProperties(ocrTaskPackage,taskPackage);
taskPackage.setCheckDuplicateId(ocrCheckDuplicate.getId());
if(this.save(taskPackage)){
return ResultVoUtil.success("创建任务包成功!");
}
return ResultVoUtil.error("创建任务包失败!");
}
}

@ -1,5 +1,7 @@
package cn.jyjz.xiaoyao.ocr.util;
import cn.hutool.core.date.DateUtil;
import java.util.Calendar;
import java.util.Date;
@ -38,4 +40,5 @@ public class DataUtil {
// DataUtil dataUtil = new DataUtil();
// dataUtil.afterDateByWeek(1);
// }
}

Loading…
Cancel
Save