feat: 基本完成联调

feature/task-zhanglin
Vincent 1 week ago
parent 2eb2149471
commit 2290d0b116

@ -20,4 +20,6 @@ public class LivePhoto {
private String md5;
private String url;
private String type;
}

@ -2,9 +2,11 @@ package org.jeecg.module.custom.ocr.api.thread;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.module.custom.ocr.api.entity.TaskCompletionRequest;
import org.jeecg.module.custom.ocr.common.entity.RequestData;
@ -18,7 +20,9 @@ import org.jeecg.module.custom.ocr.dataobject.*;
import org.jeecg.module.custom.ocr.service.OcrPictureInfoService;
import org.jeecg.module.custom.ocr.service.OcrPictureService;
import org.jeecg.module.custom.ocr.utils.ApiHelper;
import org.jeecg.module.custom.ocr.utils.HashCompareUtil;
import org.jeecg.module.custom.ocr.utils.ImageClassUtil;
import org.jeecg.module.custom.ocr.utils.StringUtils;
import org.jeecg.module.custom.ocr.utils.httputil.HttpClient;
import org.jeecg.module.custom.ocr.utils.httputil.HttpMethod;
import org.jeecg.module.custom.ocr.utils.httputil.HttpParamers;
@ -30,10 +34,7 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@ -70,6 +71,9 @@ public class DuplicateTaskRunner {
@Value("${image.classifyBaseUrl}")
private String classifyBaseUrl;
@Value("${image.classifyPath}")
private String classifyPath;
private ScheduledExecutorService executor;
@Autowired
private OcrPictureInfoService ocrPictureInfoService;
@ -95,12 +99,24 @@ public class DuplicateTaskRunner {
// // 调用 OcrPictureService.listPage 查询图片
// List<OcrPicture> pictures = ocrPictureService.listPage(queryWrapper);
List<Task> tasks = taskMapper.selectByAccountNoAndQueryConfig(duplicateTask.getAccountNo(), duplicateTask.getQueryConfig());
List<Task> tasks = taskMapper.selectByAccountNoAndQueryConfig(duplicateTask.getTenantNo(), duplicateTask.getQueryConfig());
if (StringUtils.isNotEmpty(duplicateTask.getTaskNos())) {
List<String> taskNos = Arrays.asList(duplicateTask.getTaskNos().split(","));
if (!CollectionUtils.isEmpty(taskNos)) {
tasks = tasks.stream().filter(item -> taskNos.contains(String.valueOf(item.getTaskNo()))).collect(Collectors.toList());
}
}
boolean result = true;
DuplicateTask.QueryConfig queryConfig = JSONObject.parseObject(duplicateTask.getQueryConfig(), DuplicateTask.QueryConfig.class);
List<TaskCompletionRequest.HisPictureRepeat> historyLists = Lists.newArrayList();
Set<Long> pictureIds = Sets.newHashSet();
if (!CollectionUtils.isEmpty(tasks)) {
List<Long> taskIds = tasks.stream().map(Task::getId).collect(Collectors.toList());
List<OcrPictureInfo> pictures = ocrPictureInfoMapper.selectByTaskIds(taskIds);
List<Long> taskNoList = tasks.stream().map(Task::getTaskNo).collect(Collectors.toList());
List<OcrPictureInfo> pictures = ocrPictureInfoMapper.selectByTaskNos(taskNoList);
if (!CollectionUtils.isEmpty(pictures)) {
pictures = pictures.stream().filter(item -> queryConfig.getValidateColumn().contains(item.getType())).collect(Collectors.toList());
}
// 如果图片数量大于 1进行两两对比
double maxSimilarity = 0.0;
if (pictures != null && pictures.size() > 1) {
@ -110,8 +126,18 @@ public class DuplicateTaskRunner {
OcrPictureInfo second = pictures.get(j);
// 计算相似度
String similarityScore = ImageClassUtil.getSimilarity(first.getImageUrl(), second.getImageUrl(), classifyBaseUrl);
String similarityScore = HashCompareUtil.cmpHash(first.getImgHash(), second.getImgHash());
// String similarityScore = ImageClassUtil.getSimilarity(first.getImageUrl(), second.getImageUrl(), classifyBaseUrl);
double similarityValue = Double.parseDouble(similarityScore);
if (!pictureIds.contains(first.getId()) && similarityValue > queryConfig.getConfidenceLevel()) {
TaskCompletionRequest.HisPictureRepeat hisPictureRepeat = new TaskCompletionRequest.HisPictureRepeat();
hisPictureRepeat.setHisTaskNo(first.getTaskNo());
hisPictureRepeat.setHisRepeatImgUrl(first.getImageUrl());
hisPictureRepeat.setHisRepeatImgNo(first.getId());
pictureIds.add(first.getId());
historyLists.add(hisPictureRepeat);
}
maxSimilarity = Math.max(maxSimilarity, similarityValue);
// 保存对比结果到 PictureCompare
@ -138,12 +164,12 @@ public class DuplicateTaskRunner {
String[] taskNos = duplicateTask.getTaskNos().split(",");
for (String taskNo : taskNos) {
notifyTaskCompletion(taskNo, duplicateTask.getTenantNo(), duplicateTask.getAccountNo(), maxSimilarity, pictures);
notifyTaskCompletion(taskNo, duplicateTask.getTenantNo(), duplicateTask.getAccountNo(), maxSimilarity, pictures, historyLists);
}
} else {
String[] taskNos = duplicateTask.getTaskNos().split(",");
for (String taskNo : taskNos) {
notifyTaskCompletion(taskNo, duplicateTask.getTenantNo(), duplicateTask.getAccountNo(), 0, Lists.newArrayList());
notifyTaskCompletion(taskNo, duplicateTask.getTenantNo(), duplicateTask.getAccountNo(), 0, Lists.newArrayList(), historyLists);
}
duplicateTaskMapper.updateCompletedAndMaxSimilarity(duplicateTask.getId(), 1, "0");
}
@ -160,130 +186,7 @@ public class DuplicateTaskRunner {
}
}
private QueryWrapper<OcrPicture> toQueryWrapper(DuplicateTask task) {
QueryWrapper<OcrPicture> queryWrapper = new QueryWrapper<>();
// 解析 queryConfig JSON
if (task.getQueryConfig() != null && !task.getQueryConfig().isEmpty()) {
try {
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> queryMap = objectMapper.readValue(task.getQueryConfig(), Map.class);
// 映射 OcrPicture 的数据库列名
Map<String, String> fieldToColumnMap = new HashMap<>();
fieldToColumnMap.put("id", "ID");
fieldToColumnMap.put("createBy", "create_by");
fieldToColumnMap.put("createTime", "create_time");
fieldToColumnMap.put("updateBy", "update_by");
fieldToColumnMap.put("updateTime", "update_time");
fieldToColumnMap.put("classificationid", "classificationid");
fieldToColumnMap.put("pictureclassid", "pictureclassid");
fieldToColumnMap.put("pictureclassscores", "pictureclassscores");
fieldToColumnMap.put("iztrueorfalse", "iztrueorfalse");
fieldToColumnMap.put("judgeid", "judgeid");
fieldToColumnMap.put("judgedesc", "judgedesc");
fieldToColumnMap.put("tenantId", "tenant_id");
fieldToColumnMap.put("tenantstatus", "tenantstatus");
fieldToColumnMap.put("plantcode", "plantCode");
fieldToColumnMap.put("tenantname", "tenantname");
fieldToColumnMap.put("pictureid", "pictureid");
fieldToColumnMap.put("picturename", "picturename");
fieldToColumnMap.put("imgname", "imgName");
fieldToColumnMap.put("imgurl", "imgUrl");
fieldToColumnMap.put("picturestatus", "picturestatus");
fieldToColumnMap.put("projectid", "projectId");
fieldToColumnMap.put("projectidname", "projectIdName");
fieldToColumnMap.put("projectstatus", "projectstatus");
fieldToColumnMap.put("planid", "planId");
fieldToColumnMap.put("planname", "planName");
fieldToColumnMap.put("planstatus", "planstatus");
fieldToColumnMap.put("planchildid", "planchildid");
fieldToColumnMap.put("planchildname", "planchildname");
fieldToColumnMap.put("planchildstatus", "planchildstatus");
fieldToColumnMap.put("uptime", "upTime");
fieldToColumnMap.put("gentime", "genTime");
fieldToColumnMap.put("space", "space");
fieldToColumnMap.put("source", "source");
fieldToColumnMap.put("uphead", "upHead");
fieldToColumnMap.put("upuserid", "upuserid");
fieldToColumnMap.put("upname", "upName");
fieldToColumnMap.put("releasearea", "releaseArea");
fieldToColumnMap.put("releaseprovince", "releaseProvince");
fieldToColumnMap.put("remark", "remark");
fieldToColumnMap.put("taskname", "taskName");
fieldToColumnMap.put("taskstatus", "taskstatus");
fieldToColumnMap.put("workStatus", "work_status");
fieldToColumnMap.put("categoryid", "categoryid");
fieldToColumnMap.put("taskchildpictureid", "taskchildpictureid");
fieldToColumnMap.put("field1", "field1");
fieldToColumnMap.put("field2", "field2");
fieldToColumnMap.put("field3", "field3");
fieldToColumnMap.put("field4", "field4");
fieldToColumnMap.put("field5", "field5");
fieldToColumnMap.put("field6", "field6");
fieldToColumnMap.put("field7", "field7");
fieldToColumnMap.put("field8", "field8");
fieldToColumnMap.put("field9", "field9");
fieldToColumnMap.put("field10", "field10");
fieldToColumnMap.put("field11", "field11");
fieldToColumnMap.put("field12", "field12");
fieldToColumnMap.put("field13", "field13");
fieldToColumnMap.put("field14", "field14");
fieldToColumnMap.put("field15", "field15");
fieldToColumnMap.put("field16", "field16");
fieldToColumnMap.put("field17", "field17");
fieldToColumnMap.put("field18", "field18");
fieldToColumnMap.put("localpictrueurl", "local_pictrue_url");
fieldToColumnMap.put("isdownload", "is_download");
fieldToColumnMap.put("imgHash", "img_hash");
fieldToColumnMap.put("similarityscore", "similarity_score");
fieldToColumnMap.put("downloadErrorCount", "download_error_count");
fieldToColumnMap.put("localThumbnailUrl", "local_thumbnail_url");
fieldToColumnMap.put("serverThumbnailUrl", "server_thumbnail_url");
fieldToColumnMap.put("submitDateTimestamp", "submit_date_timestamp");
fieldToColumnMap.put("isRepeat", "is_repeat");
fieldToColumnMap.put("suspiciousfile", "suspiciousfile");
fieldToColumnMap.put("location", "location");
fieldToColumnMap.put("comment", "comment");
fieldToColumnMap.put("photoDateTimestamp", "photo_date_timestamp");
fieldToColumnMap.put("completeSimilarGroupId", "complete_similar_group_id");
fieldToColumnMap.put("history", "history");
// 动态添加查询条件
for (Map.Entry<String, Object> entry : queryMap.entrySet()) {
String fieldName = entry.getKey();
Object value = entry.getValue();
String columnName = fieldToColumnMap.get(fieldName);
if (columnName != null && value != null) {
queryWrapper.eq(columnName, value);
}
}
} catch (Exception e) {
throw new RuntimeException("Failed to parse queryConfig", e);
}
}
// 添加 DuplicateTask 的其他字段作为查询条件
if (task.getTenantNo() != null) {
queryWrapper.eq("tenant_id", task.getTenantNo());
}
if (task.getAccountNo() != null) {
queryWrapper.eq("pictureid", task.getAccountNo()); // 假设 pictureid 对应 accountNo
}
if (task.getTaskNos() != null && !task.getTaskNos().isEmpty()) {
// 假设 taskNos 是逗号分隔的字符串,转换为 List<Long>
String[] taskNosArray = task.getTaskNos().split(",");
List<Long> taskNosList = Arrays.asList(taskNosArray).stream()
.map(Long::parseLong)
.collect(Collectors.toList());
queryWrapper.in("remark", taskNosList);
}
return queryWrapper;
}
private boolean notifyTaskCompletion(String taskNo, Long tenantNo, Long accountNo, double maxSimilarity, List<OcrPictureInfo> pictures) {
private boolean notifyTaskCompletion(String taskNo, Long tenantNo, Long accountNo, double maxSimilarity, List<OcrPictureInfo> pictures, List<TaskCompletionRequest.HisPictureRepeat> historyLists) {
try {
// 构造任务完成数据
TaskCompletionRequest.TaskCompletionData data = new TaskCompletionRequest.TaskCompletionData();
@ -305,7 +208,7 @@ public class DuplicateTaskRunner {
repeat.setImgNo(p.getId());
repeat.setImgUrl(p.getImageUrl());
repeat.setDynamicFields(new HashMap<>()); // 动态字段待补充
repeat.setHisPictureRepeatList(Arrays.asList());
repeat.setHisPictureRepeatList(historyLists);
return repeat;
})
.collect(Collectors.toList());
@ -317,19 +220,26 @@ public class DuplicateTaskRunner {
data.setApproveDetailList(Arrays.asList());
// 序列化 data 为 JSON
String jsonData = JSONObject.toJSONString(data);
String jsonData = JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
// 加密请求参数
RequestData requestData = ApiHelper.buildRequest(
tenantNo.toString(),
apiConfig.getAccessKey(),
apiConfig.getAccessCode(),
jsonData
);
// RequestData requestData = ApiHelper.buildResponse(
// RequestData requestData = ApiHelper.buildRequest(
// tenantNo.toString(),
// apiConfig.getAccessKey(),
// apiConfig.getAccessCode(),
// jsonData
// );
ResultData<String> stringResultData = ApiHelper.buildResponse(
apiConfig.getAccessCode(),
jsonData
);
RequestData requestData = new RequestData();
requestData.setAccessKey(apiConfig.getAccessKey());
requestData.setSignature(stringResultData.getSignature());
requestData.setTimestamp(stringResultData.getTimestamp());
requestData.setTenantCode(tenantNo.toString());
requestData.setData(stringResultData.getData());
// 组装请求
// TODO: 需提供实际路径

@ -46,13 +46,13 @@ public class PictureImgToLocalTask implements Runnable {
//1.开始转储图片
Boolean result = true;
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getLivePhoto());
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getDrt0011());
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getDrt0013());
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getDrt0014());
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getLivePhoto(), "LivePhoto1");
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getDrt0011(), "drt0011");
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getDrt0013(), "drt0013");
handlePicture(result, task, ocrPictureService, taskService, pictureImgToLocal.getDrt0014(), "drt0014");
}
private void handlePicture(Boolean result, Task task, OcrPictureService ocrPictureService, TaskService taskService, List<LivePhoto> livePhotos) {
private void handlePicture(Boolean result, Task task, OcrPictureService ocrPictureService, TaskService taskService, List<LivePhoto> livePhotos, String type) {
if (CollectionUtils.isEmpty(livePhotos)) {
return;
}
@ -63,7 +63,7 @@ public class PictureImgToLocalTask implements Runnable {
File file = new File(livePhoto.getFileUrl());
// pictureImgToLocal.getLivePhoto().getLocalImgUrl()
if (!file.isFile()) {
result = DownloadImgUtil.downloadImage(livePhoto.getFileUrl().replaceAll("https://https://", "https://"), livePhoto.getFileName());
result = DownloadImgUtil.downloadImage(livePhoto.getFileUrl(), livePhoto.getFileName());
// result = DownloadImgUtil.downloadImage(pictureImgToLocal.getLivePhoto().getFileUrl(), "D:\\code\\ocr-activity-backend\\1.jpeg");
}
}
@ -87,7 +87,7 @@ public class PictureImgToLocalTask implements Runnable {
taskService.updateById(task);
logger.info("图片本地化,回写数据完成!");
logger.info("开启获取图片信息操作!");
ocrPictureService.savePicturesInfo(task);
ocrPictureService.savePicturesInfo(task, livePhoto.getFileUrl(), type);
logger.info("获取图片信息操作,结束!");
}
} else {

@ -3,10 +3,13 @@ package org.jeecg.module.custom.ocr.controller;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.module.custom.ocr.api.PrevailCloudApi;
import org.jeecg.module.custom.ocr.api.entity.LivePhoto;
import org.jeecg.module.custom.ocr.api.entity.PictureSourceAllPullMsg;
import org.jeecg.module.custom.ocr.api.thread.PullAllPictureSourceThread;
import org.jeecg.module.custom.ocr.common.entity.RequestData;
@ -129,7 +132,19 @@ public class PrevailCloudApiController {
try {
RequestData requestData = JSON.parseObject(JSON.toJSONString(request), RequestData.class);
String decryptRequest = ApiHelper.decryptRequest(accessCode, requestData);
List<TaskDTO> taskDTOS = JSON.parseArray(decryptRequest, TaskDTO.class);
// Create ObjectMapper with FAIL_ON_UNKNOWN_PROPERTIES set to false
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// Parse the decrypted request into TaskDTO list
List<TaskDTO> taskDTOS = objectMapper.readValue(decryptRequest,
objectMapper.getTypeFactory().constructCollectionType(List.class, TaskDTO.class));
// Convert LivePhoto fields from LinkedHashMap to LivePhoto objects
for (TaskDTO taskDTO : taskDTOS) {
convertLivePhotoFields(taskDTO);
}
AddTaskRequest addTaskRequest = convertToAddTaskRequest(request);
addTaskRequest.getData().setRecords(taskDTOS);
@ -139,6 +154,42 @@ public class PrevailCloudApiController {
}
}
private void convertLivePhotoFields(TaskDTO taskDTO) {
try {
ObjectMapper objectMapper = new ObjectMapper();
// Convert livePhoto field
if (taskDTO.getLivePhoto() != null) {
List<LivePhoto> livePhotos = objectMapper.convertValue(taskDTO.getLivePhoto(),
objectMapper.getTypeFactory().constructCollectionType(List.class, LivePhoto.class));
taskDTO.setLivePhoto(livePhotos);
}
// Convert drt0011 field
if (taskDTO.getDrt0011() != null) {
List<LivePhoto> drt0011 = objectMapper.convertValue(taskDTO.getDrt0011(),
objectMapper.getTypeFactory().constructCollectionType(List.class, LivePhoto.class));
taskDTO.setDrt0011(drt0011);
}
// Convert drt0013 field
if (taskDTO.getDrt0013() != null) {
List<LivePhoto> drt0013 = objectMapper.convertValue(taskDTO.getDrt0013(),
objectMapper.getTypeFactory().constructCollectionType(List.class, LivePhoto.class));
taskDTO.setDrt0013(drt0013);
}
// Convert drt0014 field
if (taskDTO.getDrt0014() != null) {
List<LivePhoto> drt0014 = objectMapper.convertValue(taskDTO.getDrt0014(),
objectMapper.getTypeFactory().constructCollectionType(List.class, LivePhoto.class));
taskDTO.setDrt0014(drt0014);
}
} catch (Exception e) {
throw new RuntimeException("Failed to convert LivePhoto fields", e);
}
}
/**
*
*

@ -14,4 +14,6 @@ import java.util.List;
*/
public interface OcrPictureInfoMapper extends BaseMapper<OcrPictureInfo> {
List<OcrPictureInfo> selectByTaskIds(@Param("taskIds") List<Long> taskIds);
List<OcrPictureInfo> selectByTaskNos(@Param("taskNos") List<Long> taskNos);
}

@ -1,6 +1,7 @@
package org.jeecg.module.custom.ocr.dataobject;
import lombok.Data;
import java.util.List;
@Data
public class DuplicateTask {
@ -61,4 +62,24 @@ public class DuplicateTask {
*
*/
private Boolean completed;
@Data
public static class QueryConfig {
private Integer confidenceLevel;
private List<String> validateColumn;
private String validateObject;
private String validateScope;
private String startTime;
private String endTime;
private String crossProvider;
private boolean exCondition;
}
}

@ -97,6 +97,12 @@ public class OcrPictureInfo {
@TableField(value = "task_id")
private Long taskId;
@TableField(value = "task_no")
private Long taskNo;
@TableField(value = "type")
private String type;
@TableField(value = "img_hash")
private String imgHash;

@ -29,5 +29,5 @@ public interface OcrPictureService extends BaseService<OcrPicture> {
OcrPicture getByTaskId(Long taskId);
void savePicturesInfo(Task task);
void savePicturesInfo(Task task, String fileUrl , String type);
}

@ -164,20 +164,18 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
}
@Override
public void savePicturesInfo(Task task) {
public void savePicturesInfo(Task task, String imageUrl, String type) {
boolean isConnection = true;
String url = task.getImageUrl();
if (!StringUtils.isEmpty(task.getLocalImageUrl())) {
url = task.getLocalImageUrl();
isConnection = false;
}
OcrPictureInfo imageInfo = getImageInfo(url, isConnection);
OcrPictureInfo imageInfo = getImageInfo(imageUrl, isConnection);
imageInfo.setPictureId(task.getId());
imageInfo.setImgName(String.valueOf(task.getImageNo()));
imageInfo.setImageUrl(task.getImageUrl());
imageInfo.setImageUrl(imageUrl);
imageInfo.setLocalImageUrl(task.getLocalImageUrl());
imageInfo.setImgHash(task.getImgHash());
imageInfo.setTaskId(task.getId());
imageInfo.setTaskNo(task.getTaskNo());
imageInfo.setType(type);
ocrPictureInfoService.save(imageInfo);
}

@ -60,7 +60,7 @@ public class TaskServiceImpl implements TaskService {
@Override
public void deleteTasks(List<Long> taskNos) {
taskMapper.deleteByTaskNos(taskNos);
// taskMapper.deleteByTaskNos(taskNos);
}
private Task toTask(AddTaskRequest request) {

@ -0,0 +1,42 @@
package org.jeecg.module.custom.ocr.utils;
public class HashCompareUtil {
public static String cmpHash(String hash1,String hash2){
int n = 0;
// hash长度不同则返回-1代表传参出错
if (hash1.length() != hash2.length()){
return "-1";
}
for(int i = 0; i < hash1.length(); i++){
if( hash1.charAt(i) != hash2.charAt(i)){
n=n + 1;
}
}
String formattedResult="";
double c=100.0 - n/64.0 * 100.0;
if (c % 1 == 0) {
// 如果是整数,将小数位去除
formattedResult = String.valueOf((int) c);
} else {
// 如果不是整数,保留两位小数
formattedResult = String.valueOf(Math.round(c));
}
return formattedResult;
}
public static void main(String[] args) {
String a="1111111100000111000110110001101100110011001100000000000011110001";
String b="1111111100000111000110110001101100110011001100000000000011110001";
long start = System.currentTimeMillis();
int ss=0;
// for(int i=0;i<5000000;i++){
// String a="1111111100000111000110110001101100110011001100000000000011110001"+i;
// String b="1011111100000111000110110001101100110011001100000000000011110001"+i;
String dd = HashCompareUtil.cmpHash(a, b);
System.out.println(dd);
// ss=i;
// }
}
}

@ -70,8 +70,9 @@ public class ImageClassUtil {
JSONObject jsonObjectVi = new JSONObject();
jsonObjectVi.put("taskId", taskId);
JSONArray jsonArrayVi = new JSONArray();
// jsonArrayVi.add(imgurl);
jsonArrayVi.add("/server/ocr/data/images/test01.png");
// TODO: 测试环境可能需要调整本地图片地址路径
jsonArrayVi.add(imgurl);
// jsonArrayVi.add("/server/ocr/data/images/test01.png");
jsonObjectVi.put("imgUrls", jsonArrayVi);
HttpParamers paramersVi = HttpParamers.httpPostParamers();

@ -15,17 +15,20 @@
<result column="tag_time" jdbcType="BIGINT" property="tagTime" />
<result column="source" jdbcType="VARCHAR" property="source" />
<result column="task_id" jdbcType="VARCHAR" property="taskId" />
<result column="task_no" jdbcType="VARCHAR" property="taskNo" />
</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>
<select id="selectByTaskIds">
<select id="selectByTaskIds" resultType="org.jeecg.module.custom.ocr.dataobject.OcrPictureInfo">
SELECT * FROM ocr_picture_info WHERE history = 0 AND task_id IN
<foreach collection="taskIds" item="taskId" open="(" separator="," close=")">
#{taskId}
</foreach>
</select>
<select id="selectByTaskNos" resultType="org.jeecg.module.custom.ocr.dataobject.OcrPictureInfo">
SELECT * FROM ocr_picture_info WHERE history = 0 AND task_no IN
<foreach collection="taskNos" item="taskNo" open="(" separator="," close=")">
#{taskNo}
</foreach>
</select>
</mapper>

@ -28,7 +28,7 @@
</resultMap>
<sql id="Base_Column_List">
id, tenant_code, access_key, timestamp, signature, tenant_no, task_no, account_no,
tenant_code, access_key, timestamp, signature, tenant_no, task_no, account_no,
account_name, project_no, project_name, task_form_no, plan_no, plan_name,
plan_child_no, plan_child_name, task_id, task_name, user_no, user_name,
submit_time, live_photo, dynamic_fields
@ -38,7 +38,6 @@
INSERT INTO task (
<include refid="Base_Column_List" />
) VALUES (
#{id},
#{tenantCode},
#{accessKey},
#{timestamp},
@ -79,46 +78,18 @@
SELECT *
FROM task t
WHERE t.account_no = #{accountNo}
<if test="queryConfig != null and queryConfig != ''">
AND (
<choose>
<!-- Parse JSON confidenceLevel and compare with dynamic_fields -->
<when test="queryConfig.contains('confidenceLevel')">
<![CDATA[
JSON_EXTRACT(t.dynamic_fields, '$.confidenceLevel') >= CAST(JSON_EXTRACT(#{queryConfig}, '$.confidenceLevel') AS DECIMAL)
]]>
</when>
<otherwise>
1=1
</otherwise>
</choose>
<!-- Handle startTime and endTime for submit_time range -->
<if test="queryConfig.contains('startTime')">
<![CDATA[
AND t.submit_time >= UNIX_TIMESTAMP(STR_TO_DATE(
JSON_UNQUOTE(JSON_EXTRACT(#{queryConfig}, '$.startTime')),
'%Y-%m-%d %H:%i:%s.%f'
)) * 1000
]]>
</if>
<if test="queryConfig.contains('endTime')">
<![CDATA[
AND t.submit_time <= UNIX_TIMESTAMP(STR_TO_DATE(
JSON_UNQUOTE(JSON_EXTRACT(#{queryConfig}, '$.endTime')),
'%Y-%m-%d %H:%i:%s.%f'
)) * 1000
]]>
</if>
<!-- Handle exCondition boolean -->
<if test="queryConfig.contains('exCondition')">
<![CDATA[
AND JSON_EXTRACT(t.dynamic_fields, '$.exCondition') = JSON_EXTRACT(#{queryConfig}, '$.exCondition')
]]>
</if>
AND JSON_EXTRACT(t.dynamic_fields, '$.createTime') BETWEEN
UNIX_TIMESTAMP(STR_TO_DATE(JSON_UNQUOTE(JSON_EXTRACT(#{queryConfig}, '$.startTime')), '%Y-%m-%d %H:%i:%s.%f')) * 1000
AND
UNIX_TIMESTAMP(STR_TO_DATE(JSON_UNQUOTE(JSON_EXTRACT(#{queryConfig}, '$.endTime')), '%Y-%m-%d %H:%i:%s.%f')) * 1000
AND EXISTS (
SELECT 1
FROM JSON_TABLE(
JSON_EXTRACT(#{queryConfig}, '$.validateColumn'),
'$[*]' COLUMNS (col VARCHAR(255) PATH '$')
) AS jt
WHERE JSON_EXTRACT(t.dynamic_fields, CONCAT('$.', jt.col)) IS NOT NULL
AND JSON_LENGTH(JSON_EXTRACT(t.dynamic_fields, CONCAT('$.', jt.col))) > 0
)
</if>
</select>
</mapper>

Loading…
Cancel
Save