Compare commits

..

48 Commits

Author SHA1 Message Date
sunchenliang 9968d626da Merge remote-tracking branch 'origin/feat/addSynchronizationData-20240409' into feat/addSynchronizationData-20240409
1 year ago
sunchenliang 242c4125e7 fix: 修改任务审批列表
1 year ago
sunchenliang 1ee8c6ec57 fix: 修改任务审批列表
1 year ago
sunchenliang 152f6b0efc Merge pull request 'fix: 审批完成通知无量云' (#84) from feat/addSynchronizationData-20240409 into test
1 year ago
sunchenliang 6edc53605a fix: 审批完成通知无量云
1 year ago
cuihaojie 6fbb0796eb Merge pull request 'fix:修改可疑文件夹相似度排序字段名,适配前端,同时修改apifox,新增下载图片监测接口,该接口暂不完善,还需要调整' (#83) from fix/Download_image_interface_added into test
1 year ago
DELL 6f38e0fb8d fix:解决合并冲突
1 year ago
DELL 7cad047448 Merge branch 'test' into fix/Download_image_interface_added
1 year ago
yaoshuli 931bb03211 Merge pull request 'fix: 增加根据无量云获取租户信息接口,修改任务审核时项目筛选条件' (#82) from fix/pullWLYDataProjectIdBug into test
1 year ago
DELL 075e9d515c fix:修改可疑文件夹相似度排序字段名,适配前端,同时修改apifox,新增下载图片监测接口,该接口暂不完善,还需要调整
1 year ago
shuliYao 98c6376623 fix: 增加根据无量云获取租户信息接口,修改任务审核时项目筛选条件
1 year ago
sunchenliang 04fe194c65 Merge pull request 'fix: 审批完成通知无量云' (#81) from feat/addSynchronizationData-20240409 into test
1 year ago
sunchenliang 4231e5d57e fix: 审批完成通知无量云
1 year ago
cuihaojie 5eef5ac101 Merge pull request 'fix:高级检索修复审批状态查询' (#80) from fix/Query_task_approval_status into test
1 year ago
DELL f277767e27 fix:高级检索修复审批状态查询
1 year ago
shuliYao c524d375bb fix: 解决任务审核报错
1 year ago
shuliYao d056ddb054 fix: 关闭自动补齐功能
1 year ago
shuliYao cb3c46e5a3 fix: 解决没有开启获取hash值问题
1 year ago
yaoshuli 294463c6a1 Merge pull request 'fix/checkDuplicateBug' (#79) from fix/checkDuplicateBug into test
1 year ago
shuliYao d76ba019c2 fix: 解决查重入库数据量过大,导致事务崩溃问题
1 year ago
shuliYao d96a911c3f fix: 解决图片本地化,拉取失败增加重试流程,解决查重1.6w条数据导致内存被拉崩。
1 year ago
cuihaojie 352bb37ed9 Merge pull request 'fix:修改pro配置文件' (#78) from fix/Configuration_file_modification into test
1 year ago
DELL 71e97d7bb6 fix:修改pro配置文件
1 year ago
cuihaojie 97afdfa7af Merge pull request 'fix:修改配置文件,新增data-url: https://b-test.prevailcloud.com/pangu/jingwei/thirdclient/command/pb/approval/result' (#77) from fix/Configuration_file_modification into test
1 year ago
DELL 7bef44f278 fix:修改配置文件,新增data-url: https://b-test.prevailcloud.com/pangu/jingwei/thirdclient/command/pb/approval/result
1 year ago
cuihaojie 8ed963d3ce Merge pull request 'fix:显示可疑文件列表新增提报时间排序和阈值排序' (#76) from fix/Suspicious_folder_list_sort into test
1 year ago
DELL 918676fb35 fix:显示可疑文件列表新增提报时间排序和阈值排序
1 year ago
shuliYao 9f94517852 fix: 解决图片下载检测程序问题
1 year ago
cuihaojie 5fc9a02fdb Merge pull request 'fix:新增图片下载监测,对未下载图片重新放入队列' (#75) from fix/Image_download_monitoring into test
1 year ago
DELL f3ee195183 fix:新增图片下载监测,对未下载图片重新放入队列
1 year ago
sunchenliang 4304f535d2 Merge pull request 'fix: 审批完成通知无量云' (#74) from feat/addSynchronizationData-20240407 into test
1 year ago
sunchenliang d779191b0d fix: 审批完成通知无量云
1 year ago
sunchenliang 0e995bf567 Merge pull request 'fix: 审批完成通知无量云' (#73) from feat/addSynchronizationData-20240407 into test
1 year ago
sunchenliang f1a9dc2fb7 fix: 审批完成通知无量云
1 year ago
yaoshuli ab6925a8cf Merge pull request 'fix: 拉取无量云2.0数据下载,数据丢失等问题解决,修改线程逻辑' (#72) from fix/pullWLYImgDataBug into test
1 year ago
shuliYao 4b1d62ac7e fix: 拉取无量云2.0数据下载,数据丢失等问题解决,修改线程逻辑
1 year ago
cuihaojie 32f5a5995b Merge pull request 'fix:解决高级筛选sql查询问题(关于时间区间or的情况),解决无量云批量拉取数据问题' (#71) from fix/Pull_infinite_cloud_data_2945 into test
1 year ago
DELL 3d71a7fca9 fix:解决高级筛选sql查询问题(关于时间区间or的情况),解决无量云批量拉取数据问题
1 year ago
yaoshuli 1ce888607b Merge pull request 'fix: 解决工作流相关,没有token认证问题,目前只是进行排除。' (#70) from fix/flowableAuthenticationBug into test
1 year ago
shuliYao de6fe2efa7 fix: 解决工作流相关,没有token认证问题,目前只是进行排除。
1 year ago
cuihaojie 565f626d0a Merge pull request 'fix:无量云拉取全量数据' (#69) from fix/Pull_infinite_cloud_data_2945 into test
1 year ago
DELL e5b673fcdb fix:无量云拉取全量数据
1 year ago
sunchenliang 9cf5787cba Merge pull request 'fix/Advanced_search_quadratic_2898' (#68) from fix/Advanced_search_quadratic_2898 into test
1 year ago
sunchenliang f6ff5d930c Merge remote-tracking branch 'origin/fix/Advanced_search_quadratic_2898' into fix/Advanced_search_quadratic_2898
1 year ago
DELL 123dd65e97 fix:任务审批高级检索
1 year ago
DELL 5b62e01a1a fix:任务审批高级检索
1 year ago
shuliYao ee43a048ae fix: 一键查重模糊搜索问题
1 year ago
shuliYao a6d17fbdc4 fix: 解决系统排序等各种bug
1 year ago

@ -124,6 +124,9 @@ public class SearchQuery implements java.io.Serializable{
public void addGreaterEqual(String field,Date value){ public void addGreaterEqual(String field,Date value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER_EQUAL); addQuery(field,value, SearchQueryConstant.SEARCH_GREATER_EQUAL);
} }
public void addGreaterEqual(String field,Long value){
addQuery(field,value, SearchQueryConstant.SEARCH_GREATER_EQUAL);
}
public void addLess(String field,Integer value){ public void addLess(String field,Integer value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS); addQuery(field,value, SearchQueryConstant.SEARCH_LESS);
} }
@ -155,6 +158,10 @@ public class SearchQuery implements java.io.Serializable{
addQuery(field,value, SearchQueryConstant.SEARCH_LESS_EQUAL); addQuery(field,value, SearchQueryConstant.SEARCH_LESS_EQUAL);
} }
public void addLessEqual(String field,Long value){
addQuery(field,value, SearchQueryConstant.SEARCH_LESS_EQUAL);
}
public void addRulesOp(String field,String rulesOp){ public void addRulesOp(String field,String rulesOp){
SearchQueryForm searchQueryForm = new SearchQueryForm(); SearchQueryForm searchQueryForm = new SearchQueryForm();
if(query.get(field)!=null){ if(query.get(field)!=null){

@ -60,7 +60,7 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
String[] excludespath = systemopenurlService.getOpenUrl(); String[] excludespath = systemopenurlService.getOpenUrl();
//不需要过滤的url //不需要过滤的url
String[] excludesOther = {"/static","/json",".js",".css",".ico",".jpg",".png",".pcm","/druid","/doc.html","/swagger-ui.html","/swagger-resources","/webjars/**","/v2/api-docs"}; String[] excludesOther = {"/static","/json",".js",".css",".ico",".jpg",".png",".pcm","/druid","/doc.html","/swagger-ui.html","/swagger-resources","/webjars/**","/v2/api-docs","/modeler","/app"};
String[] urls = ArrayUtils.addAll(excludespath, excludesOther); String[] urls = ArrayUtils.addAll(excludespath, excludesOther);

@ -33,11 +33,9 @@ import cn.jyjz.xiaoyao.oa.from.dataobject.Flowablecc;
import cn.jyjz.xiaoyao.oa.from.service.*; import cn.jyjz.xiaoyao.oa.from.service.*;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo; import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo;
import cn.jyjz.xiaoyao.ocr.dataobject.*; import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.service.*; import cn.jyjz.xiaoyao.ocr.service.*;
import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting; import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskchildPictureApproVo; import cn.jyjz.xiaoyao.ocr.vo.OcrTaskchildPictureApproVo;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -456,9 +454,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
variables.put("approvd", approve.getResult()); variables.put("approvd", approve.getResult());
OcrTaskchildPicture model = ocrTaskchildPictureService.getById(Long.parseLong(flowTaskInfo.getFormId())); OcrTaskchildPicture model = ocrTaskchildPictureService.getById(Long.parseLong(flowTaskInfo.getFormId()));
if (approve.getResult()) { if (approve.getResult()) {
disposeSucceedTask(task, processDefinition, variables, model, flowTaskInfo.getFormId(), userToken); disposeSucceedTask(task, processDefinition, variables, model, flowTaskInfo.getFormId(), userToken, approve);
} else { } else {
disposeFailureTask(task, flowTaskInfo.getFormId(), variables); disposeFailureTask(task, flowTaskInfo.getFormId(), variables, approve);
} }
userapproveService.save(userToken, approve, task, flowTaskInfo.getFormId()); userapproveService.save(userToken, approve, task, flowTaskInfo.getFormId());
successCount++; successCount++;
@ -475,7 +474,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
/** /**
* *
*/ */
private void disposeSucceedTask(Task task, ProcessDefinition processDefinition, Map<String, Object> variables, OcrTaskchildPicture model, String formId, UserToken userToken) { private void disposeSucceedTask(Task task, ProcessDefinition processDefinition, Map<String, Object> variables, OcrTaskchildPicture model, String formId, UserToken userToken, FlowApprove approve) throws Exception {
//进入下一个节点 //进入下一个节点
taskService.complete(task.getId(), variables); taskService.complete(task.getId(), variables);
updateAssignee(task.getProcessInstanceId(), task.getProcessDefinitionId(), processDefinition); updateAssignee(task.getProcessInstanceId(), task.getProcessDefinitionId(), processDefinition);
@ -488,17 +487,19 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
if (null != taskList && !taskList.isEmpty()) { if (null != taskList && !taskList.isEmpty()) {
taskData = taskList.get(0); taskData = taskList.get(0);
} }
OcrTaskchildPicture childPicture = ocrTaskchildPictureService.getById(Long.parseLong(formId));
if (ObjectUtils.isEmpty(taskData)) { if (ObjectUtils.isEmpty(taskData)) {
model.setFinishtime(System.currentTimeMillis()); model.setFinishtime(System.currentTimeMillis());
model.setStates(SystemConstantsOa.OA_STATUS_TYPE_END); model.setStates(SystemConstantsOa.OA_STATUS_TYPE_END);
ocrTaskchildPictureService.updateById(model); ocrTaskchildPictureService.updateById(model);
OcrPicture picture = ocrPictureService.getById(model.getPictureid());
ocrTaskchildPictureService.sendFlowTaskResult(childPicture, picture, approve);
} else { } else {
//判断节点上的描述字段是否伟finale_judgment,如果是,记录到终审表中,如果终审表已经存在,不再重复记录 //判断节点上的描述字段是否伟finale_judgment,如果是,记录到终审表中,如果终审表已经存在,不再重复记录
if (StringUtils.isNotBlank(taskData.getDescription()) && taskData.getDescription().equals(SystemConstantsOa.OA_TASK_COMPLETE_FINALE_FORM)) { if (StringUtils.isNotBlank(taskData.getDescription()) && taskData.getDescription().equals(SystemConstantsOa.OA_TASK_COMPLETE_FINALE_FORM)) {
User user = userService.findByLoginname(formData.getAssignee()); User user = userService.findByLoginname(formData.getAssignee());
userFinalService.save(user.getId().toString(), formId); userFinalService.save(user.getId().toString(), formId);
} }
OcrTaskchildPicture childPicture = ocrTaskchildPictureService.getById(Long.parseLong(formId));
this.sendMsg(childPicture, userToken); this.sendMsg(childPicture, userToken);
childPicture.setTaskId(taskData.getId()); childPicture.setTaskId(taskData.getId());
childPicture.setTaskname(taskData.getName()); childPicture.setTaskname(taskData.getName());
@ -512,7 +513,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
/** /**
* *
*/ */
private void disposeFailureTask(Task task, String formId, Map<String, Object> variables) { private void disposeFailureTask(Task task, String formId, Map<String, Object> variables, FlowApprove approve) throws Exception {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
//我这里以 流程定义key(oa_category_t定义的关键字逻辑唯一) + 业务表主键(请假表、调岗表等) + 业务表对应的servicename //我这里以 流程定义key(oa_category_t定义的关键字逻辑唯一) + 业务表主键(请假表、调岗表等) + 业务表对应的servicename
String businesskey = processInstance.getBusinessKey(); String businesskey = processInstance.getBusinessKey();
@ -535,8 +536,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
//设置流程结束状态 //设置流程结束状态
iFormCustomService.endForm(busskey[1], SystemConstantsOa.OA_STATUS_TYPE_REFUSE, assignee, task.getProcessInstanceId(), task.getName()); iFormCustomService.endForm(busskey[1], SystemConstantsOa.OA_STATUS_TYPE_REFUSE, assignee, task.getProcessInstanceId(), task.getName());
} }
//1、获取终止节点
List<EndEvent> endNodes = findEndFlowElement(task.getProcessDefinitionId());
//2、执行终止 //2、执行终止
List<Execution> executions = runtimeService.createExecutionQuery().parentId(task.getProcessInstanceId()).list(); List<Execution> executions = runtimeService.createExecutionQuery().parentId(task.getProcessInstanceId()).list();
List<String> executionIds = new ArrayList<>(); List<String> executionIds = new ArrayList<>();
@ -544,6 +543,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
OcrTaskchildPicture taskchildPicture = ocrTaskchildPictureService.getById(Long.parseLong(formId)); OcrTaskchildPicture taskchildPicture = ocrTaskchildPictureService.getById(Long.parseLong(formId));
taskchildPicture.setFinishtime(System.currentTimeMillis()); taskchildPicture.setFinishtime(System.currentTimeMillis());
ocrTaskchildPictureService.updateById(taskchildPicture); ocrTaskchildPictureService.updateById(taskchildPicture);
OcrPicture picture = ocrPictureService.getById(taskchildPicture.getPictureid());
ocrTaskchildPictureService.sendFlowTaskResult(taskchildPicture, picture, approve);
} }
//发送消息 //发送消息
@ -559,6 +561,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
jsonObject.put("taskId", model.getFromtaskid()); jsonObject.put("taskId", model.getFromtaskid());
jsonObject.put("nodeName", model.getTaskname()); jsonObject.put("nodeName", model.getTaskname());
jsonObject.put("states", 1); jsonObject.put("states", 1);
jsonObject.put("statesName", "待审批");
jsonObject.put("sendUserId", userToken.getUserid()); jsonObject.put("sendUserId", userToken.getUserid());
jsonObject.put("sendUserName", userToken.getUsername()); jsonObject.put("sendUserName", userToken.getUsername());
jsonObject.put("sendTime", System.currentTimeMillis()); jsonObject.put("sendTime", System.currentTimeMillis());
@ -1317,14 +1320,14 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
query.put("searchassignee", user.getLoginname()); query.put("searchassignee", user.getLoginname());
query.putAll(searchQuery); query.putAll(searchQuery);
// if (!StringUtils.isBlank(userSearchId)) { if (!StringUtils.isBlank(userSearchId)) {
// OcrUsersearch ocrUsersearch = ocrUsersearchService.selectByUserSearchId(userSearchId); OcrUsersearch ocrUsersearch = ocrUsersearchService.selectByUserSearchId(userSearchId);
// SearchQuery additionalQuery = new SearchQuery(); SearchQuery additionalQuery = new SearchQuery();
// for (OcrUsersearchchild usersearchchild : ocrUsersearch.getOcrUsersearchchildList()) { for (OcrUsersearchchild usersearchchild : ocrUsersearch.getOcrUsersearchchildList()) {
// this.formattingSearchChild1(additionalQuery, usersearchchild); this.formattingSearchChild1(additionalQuery, usersearchchild);
// } }
// query.putAll(additionalQuery.getQuery()); query.putAll(additionalQuery.getQuery());
// } }
Long count = ocrTaskchildPictureService.listmytaskCount(query); Long count = ocrTaskchildPictureService.listmytaskCount(query);
@ -1953,132 +1956,134 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
return queryWrapper; return queryWrapper;
} }
// private SearchQuery formattingSearchChild1(SearchQuery searchQuery, OcrUsersearchchild usersearchchild) { private SearchQuery formattingSearchChild1(SearchQuery searchQuery, OcrUsersearchchild usersearchchild) {
// switch (usersearchchild.getSearchRelationType()) { switch (usersearchchild.getSearchRelationType()) {
// case "where": case "where":
// // 添加 "where" 查询条件 // 添加 "where" 查询条件
// this.formattingSearchType1(searchQuery, usersearchchild); this.formattingSearchType1(searchQuery, usersearchchild);
// break; break;
// case "and": case "and":
// // 添加 "and" 查询条件 // 添加 "and" 查询条件
// searchQuery.addRulesOp(usersearchchild.getSearchfield(),"and"); searchQuery.addRulesOp(usersearchchild.getSearchfield(), "and");
// SearchQuery andQuery = this.formattingSearchType1(searchQuery, usersearchchild); SearchQuery andQuery = this.formattingSearchType1(searchQuery, usersearchchild);
// searchQuery.setSearchQuery(andQuery); searchQuery.setSearchQuery(andQuery);
// break; break;
// case "or": case "or":
// // 添加 "or" 查询条件 // 添加 "or" 查询条件
// searchQuery.addRulesOp(usersearchchild.getSearchfield(),"or"); searchQuery.addRulesOp(usersearchchild.getSearchfield(), "or");
// SearchQuery orQuery = this.formattingSearchType1(searchQuery, usersearchchild); SearchQuery orQuery = this.formattingSearchType1(searchQuery, usersearchchild);
// searchQuery.setSearchQuery(orQuery); searchQuery.setSearchQuery(orQuery);
// break; break;
// default: default:
// break; break;
// } }
// return searchQuery; return searchQuery;
// } }
//
// private SearchQuery formattingSearchType1(SearchQuery searchQuery, OcrUsersearchchild usersearchchild) { private SearchQuery formattingSearchType1(SearchQuery searchQuery, OcrUsersearchchild usersearchchild) {
// //查询类型 相等true 不相等fase //查询类型 相等true 不相等fase
// boolean queryType = "eq".equals(usersearchchild.getSearchtype()); boolean queryType = "eq".equals(usersearchchild.getSearchtype());
//
// // 1.获取检查数据,确定数据类型 // 1.获取检查数据,确定数据类型
// String valueType = SearchParaFormatting.clickSearchValue(usersearchchild.getSearchvalue()); String valueType = SearchParaFormatting.clickSearchValue(usersearchchild.getSearchvalue());
// List<String> arrayData = null; //集合型数据 List<String> arrayData = null; //集合型数据
// List<Integer> sectionInts = null; //纯数字区间型数据 List<Integer> sectionInts = null; //纯数字区间型数据
// String[] sections = null; //字符串区间型数据 String[] sections = null; //字符串区间型数据
// DateTime beginTime = null; //日期时间区间型数据 DateTime beginTime = null; //日期时间区间型数据
// DateTime endTime = null; //日期时间区间型数据 DateTime endTime = null; //日期时间区间型数据
//
// // 2.根据数据类型,解构数据 // 2.根据数据类型,解构数据
// switch (valueType) { switch (valueType) {
// case "array": case "array":
// //处理多文件 //处理多文件
// String[] datas = usersearchchild.getSearchvalue().split(","); String[] datas = usersearchchild.getSearchvalue().split(",");
// arrayData = Arrays.asList(datas); arrayData = Arrays.asList(datas);
// break; break;
// case "section": case "section":
// //格式化数据,仅在做区间的时候去除空格,其他地方不进行空格去除. //格式化数据,仅在做区间的时候去除空格,其他地方不进行空格去除.
// sections = usersearchchild.getSearchvalue().trim().replaceAll("\\s+", "").split("-"); sections = usersearchchild.getSearchvalue().trim().replaceAll("\\s+", "").split("-");
// //校验是否纯数字,纯数字的话要转成int,否则比对时会有问题 //校验是否纯数字,纯数字的话要转成int,否则比对时会有问题
// sectionInts = new ArrayList<>(); sectionInts = new ArrayList<>();
// for (String data : sections) { for (String data : sections) {
// if (data.matches("\\d+")) { if (data.matches("\\d+")) {
// sectionInts.add(Integer.parseInt(data)); sectionInts.add(Integer.parseInt(data));
// } }
// } }
// break; break;
// case "time": case "time":
// //格式化时间数据 //格式化时间数据
// String[] times = usersearchchild.getSearchvalue().trim().replaceAll("\\s+", "").split("-"); String[] times = usersearchchild.getSearchvalue().trim().replaceAll("\\s+", "").split("-");
// beginTime = DateUtil.parse(times[0], "yyyy/MM/dd"); beginTime = DateUtil.parse(times[0] + " 00:00:00", "yyyy/MM/dd HH:mm:ss");
// endTime = DateUtil.parse(times[1], "yyyy/MM/dd"); endTime = DateUtil.parse(times[1] + " 23:59:59", "yyyy/MM/dd HH:mm:ss");
// break; break;
// default: default:
// } }
//
// // 3.根据查询类型 组装查询条件 相等 // 3.根据查询类型 组装查询条件 相等
// switch (valueType) { switch (valueType) {
// case "array": case "array":
// //集合数据 //集合数据
// //相等 //相等
// if (queryType) { if (queryType) {
// searchQuery.addIn(usersearchchild.getSearchfield(), arrayData); searchQuery.addIn(usersearchchild.getSearchfield(), arrayData);
// break; break;
// } }
// //不相等 //不相等
// searchQuery.addNotIn(usersearchchild.getSearchfield(), arrayData); searchQuery.addNotIn(usersearchchild.getSearchfield(), arrayData);
// break; break;
//
// case "section": case "section":
// //数字区间查询 //数字区间查询
// if (sectionInts != null && sectionInts.size() == 2) { if (sectionInts != null && sectionInts.size() == 2) {
// if (queryType) { if (queryType) {
// //相等 //相等
// searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), sectionInts.get(0)); searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), sectionInts.get(0));
// searchQuery.addLessEqual(usersearchchild.getSearchfield(), sectionInts.get(1)); searchQuery.addLessEqual(usersearchchild.getSearchfield(), sectionInts.get(1));
// break; break;
// } }
// //不相等 //不相等
// searchQuery.addLess(usersearchchild.getSearchfield(), sectionInts.get(0));
// searchQuery.addGreater(usersearchchild.getSearchfield(), sectionInts.get(1)); searchQuery.addLess(usersearchchild.getSearchfield(), sectionInts.get(0));
// break; searchQuery.addGreater(usersearchchild.getSearchfield(), sectionInts.get(1));
// } break;
// }
// //字符串区间查询
// if (queryType) { //字符串区间查询
// //相等 if (queryType) {
// searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), sections[0]); //相等
// searchQuery.addLessEqual(usersearchchild.getSearchfield(), sections[1]); searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), sections[0]);
// break; searchQuery.addLessEqual(usersearchchild.getSearchfield(), sections[1]);
// } break;
// //不相等 }
// searchQuery.addLess(usersearchchild.getSearchfield(), sections[0]); //不相等
// searchQuery.addGreater(usersearchchild.getSearchfield(), sections[1]); searchQuery.addLess(usersearchchild.getSearchfield(), sections[0]);
// break; searchQuery.addGreater(usersearchchild.getSearchfield(), sections[1]);
// break;
//
// case "time":
// //时间区间数据 case "time":
// //相等 //时间区间数据
// if (queryType) { //相等
// searchQuery.addGreaterEqual(usersearchchild.getSearchfield(), beginTime); if (queryType) {
// searchQuery.addLessEqual(usersearchchild.getSearchfield(), endTime); searchQuery.addGreaterEqual(usersearchchild.getSearchfield() + "Start", beginTime.getTime());
// break; searchQuery.addLessEqual(usersearchchild.getSearchfield() + "End", endTime.getTime());
// } break;
// //不相等 }
// searchQuery.addLess(usersearchchild.getSearchfield(), beginTime); //不相等
// searchQuery.addGreater(usersearchchild.getSearchfield(), endTime); searchQuery.addRulesOp(usersearchchild.getSearchfield() + "Start", "or");
// break; searchQuery.addLess(usersearchchild.getSearchfield() + "Start", beginTime.getTime());
// searchQuery.addGreater(usersearchchild.getSearchfield() + "End", endTime.getTime());
// default: break;
// if (queryType) {
// searchQuery.addEqual(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue()); default:
// break; if (queryType) {
// } searchQuery.addEqual(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue());
// searchQuery.addNotEqual(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue()); break;
// } }
// return searchQuery; searchQuery.addNotEqual(usersearchchild.getSearchfield(), usersearchchild.getSearchvalue());
// } }
return searchQuery;
}
} }

@ -19,4 +19,18 @@ public interface PrevailCloudApi {
* @return * @return
*/ */
ApiPage<PictureSourceResult> pullPictureSource(PictureSourceParameter pictureSourceParameter) throws Exception; ApiPage<PictureSourceResult> pullPictureSource(PictureSourceParameter pictureSourceParameter) throws Exception;
void sendFlowTaskResult(String tenantId,String data) throws Exception;
/**
* id
* @param tenantNo
*/
void pullAccountInfo(long tenantNo) throws Exception;
/**
*
*/
boolean startImageDownloadMonitoring(String localImagePath) throws Exception;
} }

@ -2,17 +2,23 @@ package cn.jyjz.xiaoyao.ocr.api.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi; import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter; import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult; import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.api.utils.*; import cn.jyjz.xiaoyao.ocr.api.utils.*;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue; import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpClient; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpClient;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpMethod; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpMethod;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers; import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import liquibase.pro.packaged.S; import liquibase.pro.packaged.S;
import lombok.SneakyThrows;
import org.apache.commons.collections.SequencedHashMap; import org.apache.commons.collections.SequencedHashMap;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -48,6 +54,11 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
*/ */
private String pictureSourceUrl = "/pangu/jingwei/ocr/query/pb/task/pageList"; private String pictureSourceUrl = "/pangu/jingwei/ocr/query/pb/task/pageList";
/**
*
*/
private String sendResultUrl = "/pangu/jingwei/thirdclient/command/pb/approval/result";
/** /**
* *
*/ */
@ -116,4 +127,95 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
return null; return null;
} }
@Override
public void sendFlowTaskResult(String tenantId, String data) throws Exception {
RequestData requestData = ApiHelper.buildRequest(tenantId, apiConfig.getAccessKey(), apiConfig.getAccessCode(),data);//组装请求参数
String url = apiConfig.getInterfaceDomain()+sendResultUrl;
String requestBodyJson = JSONObject.toJSONString(requestData);
//入参
System.out.println("入参数据:"+requestBodyJson);
HttpParamers httpParamers = new HttpParamers(HttpMethod.POST);
httpParamers.setJsonParamer(requestBodyJson);
//发起请求
String responseJsonStr = HttpClient.doPost(url,httpParamers,null,apiConfig.getConnectTimeout(),apiConfig.getReadTimeout());
System.out.println(responseJsonStr);
}
@Override
public void pullAccountInfo(long tenantNo) throws Exception {
Map<String, Object> queryParam = new HashMap<>();
queryParam.put("tenantNo",tenantNo);
String json = JSONObject.toJSONString(queryParam);
RequestData requestData = ApiHelper.buildRequest(tenantNo+"", apiConfig.getAccessKey(), apiConfig.getAccessCode(),json);
String url = apiConfig.getInterfaceDomain()+tenantSourceUrl;
String requestBodyJson = JSONObject.toJSONString(requestData);
//入参
HttpParamers httpParamers = new HttpParamers(HttpMethod.POST);
httpParamers.setJsonParamer(requestBodyJson);
//发起请求
String responseJsonStr = HttpClient.doPost(url,httpParamers,null,apiConfig.getConnectTimeout(),apiConfig.getReadTimeout());
System.out.println(responseJsonStr);
ResultData<String> resultData =JSONUtil.toBean(responseJsonStr,ResultData.class);
if(resultData.getStatus()==100){;
//解析基础数据
String data = ApiHelper.decryptResponse(apiConfig.getAccessCode(), resultData);
ApiPage<String> apiPage = JSONUtil.toBean(data,ApiPage.class);
System.out.println(apiPage);
//解析数据结果为List
// List<PictureSourceResult> listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()),PictureSourceResult.class);
// ApiPage<PictureSourceResult> resultApiPage = new ApiPage<>();
// resultApiPage.setPageNo(apiPage.getPageNo());
// resultApiPage.setPageSize(apiPage.getPageSize());
// resultApiPage.setTotal(apiPage.getTotal());
// resultApiPage.setRecords(listResult);
// return resultApiPage;
}
}
/**
*
*
* @return
*/
@Override
public boolean startImageDownloadMonitoring(String localImagePath) {
Runnable runnable = new Runnable() {
@SneakyThrows
@Override
public void run() {
OcrPictureService ocrPictureService = SpringUtils.getBean("ocrPictureService");
logger.debug("图片下载监测中...");
// 查询数据库中local_picture_url字段为null的图片数据
LambdaQueryWrapper<OcrPicture> ocrPictureLambdaQueryWrapper = new LambdaQueryWrapper<>();
ocrPictureLambdaQueryWrapper.isNull(OcrPicture::getLocalpictrueurl);
List<OcrPicture> ocrPictureList = new ArrayList<>();
ocrPictureList = ocrPictureService.list(ocrPictureLambdaQueryWrapper);
logger.debug("待执行下载图片数量:{}",ocrPictureList.size());
for (OcrPicture pictureOne : ocrPictureList) {
// 创建 PictureImgToLocalEntity 对象并赋值
PictureImgToLocalEntity entity = new PictureImgToLocalEntity();
entity.setPictureId(pictureOne.getId());
entity.setImgUrl(pictureOne.getImgurl());
String imgurl = pictureOne.getImgurl();
entity.setLocalPath(localImagePath + imgurl.substring(imgurl.lastIndexOf("/")));
//本地调试下载地址
// entity.setLocalPath("D:\\server\\data\\images" + imgurl.substring(imgurl.lastIndexOf("/")));
// 将对象添加到下载图片队列中
boolean isAddedToQueue = false;
while (!isAddedToQueue) {
isAddedToQueue =TaskQueue.pictureImgToLocalPushData(entity);
if (!isAddedToQueue) {
logger.info("图片下载监测-添加队列失败,等待五秒后继续进行添加,图片id:{}",entity.getPictureId());
Thread.sleep(5000);
}
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
return true;
}
} }

@ -1,18 +1,23 @@
package cn.jyjz.xiaoyao.ocr.controller; package cn.jyjz.xiaoyao.ocr.controller;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi; import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter; import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult; import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage; import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
import cn.jyjz.xiaoyao.ocr.thread.ImageDownloadMonitoring;
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue; import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -23,9 +28,14 @@ import java.util.List;
* @version 1.0 * @version 1.0
* @date 2024/3/14 19:47 * @date 2024/3/14 19:47
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("/test/api") @RequestMapping("/test/api")
public class ApiTestController { public class ApiTestController {
@Value("${ocr.api.wly.localImagePath}")
private String localImagePath;
@Autowired @Autowired
private PrevailCloudApi prevailCloudApi; private PrevailCloudApi prevailCloudApi;
@ -71,4 +81,128 @@ public class ApiTestController {
return "处理失败"; return "处理失败";
} }
@GetMapping("pullAccountInfo")
public String pullAccountInfo(HttpServletRequest request){
try {
prevailCloudApi.pullAccountInfo(1714548920583360512L);
return "ok";
} catch (Exception e) {
e.printStackTrace();
}
return "处理失败";
}
@GetMapping("psTest01")
public String psTset01(HttpServletRequest request){
String beginStr = request.getParameter("beginStr");
String endStr = request.getParameter("endStr");
String pageSize = request.getParameter("pageSize");
String pageNo = request.getParameter("pageNo");
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
pictureSourceParameter.setPageSize(Integer.parseInt(pageSize));
pictureSourceParameter.setTenantNo(1714548920583360512L);
pictureSourceParameter.setAccountNo(1714887674875514880L);
List<String> notAddedToQueueTaskIds = new ArrayList<>();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
int totalCount = 0;
int totalLocalCount = 0;
int totalSize = 0;
DateTime startDate = DateUtil.parse(beginStr + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
DateTime endDate = DateUtil.parse(endStr + " 23:59:59", "yyyy-MM-dd HH:mm:ss");
while (startDate.isBefore(endDate) || startDate.compareTo(endDate) == 0) {
int currentPage = Integer.parseInt(pageNo);
boolean hasNextPage = true;
boolean isCountAdded = false;
while (hasNextPage) {
// 设置当天的开始和结束时间
Instant startInstant = startDate.toInstant();
Instant endInstant = startDate.offsetNew(DateField.DAY_OF_YEAR, 1).toInstant();
pictureSourceParameter.setStartTime(Date.from(startInstant));
pictureSourceParameter.setEndTime(Date.from(endInstant));
pictureSourceParameter.setPageNo(currentPage);
ApiPage<PictureSourceResult> apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
List<PictureSourceResult> listResult = apiPage.getRecords();
int count = apiPage.getTotal();
int localCount = listResult.size();
int size = 0;
for (PictureSourceResult pictureSourceResult : listResult) {
int retryCount = 0;
boolean addedToQueue = false;
if (pictureSourceResult.getLivePhoto() != null && !pictureSourceResult.getLivePhoto().isEmpty()) {
size++;
// 尝试将数据加入队列
while (!addedToQueue && retryCount < 5) { // 最多重试5次
addedToQueue = TaskQueue.pictureDisposePushData(pictureSourceResult);
if (!addedToQueue) {
Thread.sleep(60000);
retryCount++;
}
}
if (!addedToQueue) {
log.error("无法将数据添加到队列,开始时间:{}任务ID{}",startDate.toString("yyyy-MM-dd HH:mm:ss"),pictureSourceResult.getTaskId().toString());
notAddedToQueueTaskIds.add(pictureSourceResult.getTaskId().toString());
}
}
}
totalLocalCount += localCount;
totalSize += size;
if (!isCountAdded) {
totalCount += count;
isCountAdded = true; // 标记当天的统计信息已经被累加过了
}
// 输出当前日期范围内的统计信息
log.error("{}图片总数:{}条,本次获取:{}条,可处理数据:{}条",startDate.toString("yyyy-MM-dd"),count,localCount,size);
// 准备处理下一页的数据
currentPage++;
// 检查是否有下一页
if (localCount < Integer.parseInt(pageSize)) {
hasNextPage = false;
}
}
// 准备处理下一天的数据
startDate = startDate.offsetNew(DateField.DAY_OF_YEAR, 1);
}
log.error("未加入队列的任务ID列表{}",notAddedToQueueTaskIds);
log.error("当前区间内图片总数:{}条,本次获取:{}条,可处理数据:{}条",totalCount,totalLocalCount,totalSize);
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
return "开启入库";
}
@GetMapping("downloadImageMonitor")
public String downloadImageMonitor(HttpServletRequest request) {
String message;
try {
boolean result = prevailCloudApi.startImageDownloadMonitoring(localImagePath);
if (result) {
message = "操作成功";
} else {
message = "操作失败";
}
} catch (Exception e) {
e.printStackTrace();
message = "操作失败,发生异常:" + e.getMessage();
}
return message;
}
} }

@ -81,7 +81,11 @@ public class OcrCheckDuplicateController {
} }
//调用查询参数解析方法解析为queryWrapper //调用查询参数解析方法解析为queryWrapper
queryWrapper = SearchParaFormatting.searchParaParse(queryWrapper, paraMap); queryWrapper = SearchParaFormatting.searchParaParse(queryWrapper, paraMap);
//提报人模糊搜索
String upUserName = req.getParameter("upUserName");
if(StringUtils.isNotBlank(upUserName)){
queryWrapper.like("upName",upUserName);
}
queryWrapper.eq("tenant_id", tenantId); queryWrapper.eq("tenant_id", tenantId);
queryWrapper.eq("suspiciousfile", "0"); queryWrapper.eq("suspiciousfile", "0");
queryWrapper.orderBy(true,true,"submit_date_timestamp"); queryWrapper.orderBy(true,true,"submit_date_timestamp");
@ -114,6 +118,9 @@ public class OcrCheckDuplicateController {
OcrCheckDuplicate dto = this.ocrCheckDuplicateService.getCheckDuplicateStatus(checkDuplicateNo); OcrCheckDuplicate dto = this.ocrCheckDuplicateService.getCheckDuplicateStatus(checkDuplicateNo);
if (null != dto) { if (null != dto) {
if(dto.getStatus()==2){
return ResultVoUtil.success("查重任务执行完毕",dto);
}
return ResultVoUtil.success(dto); return ResultVoUtil.success(dto);
} else { } else {
return ResultVoUtil.error(); return ResultVoUtil.error();

@ -65,9 +65,10 @@ public class OcrTaskchildDubiousFileController {
@ApiOperation(value="可疑文件列表查询", notes="可疑文件列表查询") @ApiOperation(value="可疑文件列表查询", notes="可疑文件列表查询")
@RequestMapping(value = "/dubiousfilelist", method = RequestMethod.GET) @RequestMapping(value = "/dubiousfilelist", method = RequestMethod.GET)
public ResultVo<Page<OcrTaskChildPictureVo>> dubiousfilelist(HttpServletRequest request, public ResultVo<Page<OcrTaskChildPictureVo>> dubiousfilelist(HttpServletRequest request,
@RequestParam(value = "pageNo", required = false, defaultValue = "0") Integer pageNo, @RequestParam(value = "pageNo", required = false, defaultValue = "0") Integer pageNo,
@RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize, @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize,
@RequestParam(value = "orderbyname", required = true, defaultValue = "asc") String orderbyname) { @RequestParam(value = "orderByUptime",required = false) String orderByUptime,
@RequestParam(value = "orderBySimilarity",required = false) String orderBySimilarity) {
String tenantId = request.getHeader("X-Tenant-Id"); String tenantId = request.getHeader("X-Tenant-Id");
@ -97,7 +98,7 @@ public class OcrTaskchildDubiousFileController {
// //
// //IPage<OcrPicture> page = ocrpictureservice.page(iPage, wrapper); // //IPage<OcrPicture> page = ocrpictureservice.page(iPage, wrapper);
Page<OcrTaskChildPictureVo> page = ocrTaskchildDubiousFileService.dubiousfilelist(pageNo,pageSize,orderbyname,userToken,tenantId); Page<OcrTaskChildPictureVo> page = ocrTaskchildDubiousFileService.dubiousfilelist(pageNo,pageSize,orderByUptime,orderBySimilarity,userToken,tenantId);
return ResultVoUtil.success(page); return ResultVoUtil.success(page);
} }

@ -41,7 +41,8 @@ public class OcrCheckDuplicateResult implements Serializable {
@ApiModelProperty(value = "图片id") @ApiModelProperty(value = "图片id")
private Long pictureId; private Long pictureId;
@ApiModelProperty(value = "当前图片与任务包其他图片比对结果") @ApiModelProperty(value = "当前图片与任务包其他图片比对结果 (废弃,入库导致数据量过大)")
@TableField(exist = false)
private String compareResultJson; private String compareResultJson;
@ApiModelProperty(value = "查重任务id") @ApiModelProperty(value = "查重任务id")

@ -311,6 +311,10 @@ public class OcrPicture implements BaseDto, java.io.Serializable {
@TableField(value = "similarity_score") @TableField(value = "similarity_score")
private Integer similarityscore; private Integer similarityscore;
@ApiModelProperty(value = "下载到本地,失败次数")
@TableField(value = "download_error_count")
private Integer downloadErrorCount;
@ApiModelProperty(value = "图片查重的比对图片集合") @ApiModelProperty(value = "图片查重的比对图片集合")
@TableField(exist = false) @TableField(exist = false)
private List<OcrPicture> listCom; private List<OcrPicture> listCom;
@ -367,6 +371,9 @@ public class OcrPicture implements BaseDto, java.io.Serializable {
@TableField(exist = false) @TableField(exist = false)
private String taskId; private String taskId;
//保存当前登录用户的数据权限范围的搜索条件 //保存当前登录用户的数据权限范围的搜索条件
@TableField(exist = false) @TableField(exist = false)
@JsonIgnore @JsonIgnore

@ -0,0 +1,23 @@
package cn.jyjz.xiaoyao.ocr.dto;
import lombok.Data;
/**
* ClassName ResultDto$.java
* Description:
* Author scl.
* Date 2024/4/7 21:40
*/
@Data
public class ResultDto {
private Integer status;
private String message;
private Long timestamp;
private String signature;
private String data;
}

@ -17,6 +17,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IOcrTaskchildDubiousFileService extends IService<OcrTaskchildDubiousFile> { public interface IOcrTaskchildDubiousFileService extends IService<OcrTaskchildDubiousFile> {
Page<OcrTaskChildPictureVo> dubiousfilelist(Integer pageNo, Integer pageSize, String orderbyname, UserToken userToken, String tenantId); Page<OcrTaskChildPictureVo> dubiousfilelist(Integer pageNo, Integer pageSize,String orderByUptime,String orderBySimilarity,UserToken userToken, String tenantId);
} }

@ -61,6 +61,8 @@ public interface OcrPictureService extends BaseService<OcrPicture> {
*/ */
int savePictures(List<OcrPicture> ocrPictureList); int savePictures(List<OcrPicture> ocrPictureList);
void savePicturesInfo(OcrPicture ocrPicture);
ResultVo createPackageTask(List<OcrPicture> pageList, String tenantId, UserToken userToken, String searchMonth, HttpServletRequest req, String buessinessno, Map<String, Object> paramMap); ResultVo createPackageTask(List<OcrPicture> pageList, String tenantId, UserToken userToken, String searchMonth, HttpServletRequest req, String buessinessno, Map<String, Object> paramMap);
Map<String,String> getOcrPictureClassifyAndHash(String img); Map<String,String> getOcrPictureClassifyAndHash(String img);

@ -149,7 +149,7 @@ public interface OcrTaskchildPictureService extends BaseService<OcrTaskchildPict
Page<OcrTaskChildPictureVo> getPackageSimilarityList(Integer pageNo, Integer pageSize, String oderType, String oderName, String checkDuplicateId, String pictureId, UserToken userToken); Page<OcrTaskChildPictureVo> getPackageSimilarityList(Integer pageNo, Integer pageSize, String oderType, String oderName, String checkDuplicateId, String pictureId, UserToken userToken);
void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture, OcrPicture picture, FlowApprove flowApprove); void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture, OcrPicture picture, FlowApprove flowApprove) throws Exception;
List<OcrTaskChildPictureVo> getDubiousfileList(List<String> pictureIds, String userNodeType); List<OcrTaskChildPictureVo> getDubiousfileList(List<String> pictureIds, String userNodeType);
} }

@ -106,6 +106,7 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
//异步调用查重任务 //异步调用查重任务
checkDuplicateService.comparePictureResultSave(ocrPictureList, sysUser, id); checkDuplicateService.comparePictureResultSave(ocrPictureList, sysUser, id);
checkDuplicate.setStatus(2); checkDuplicate.setStatus(2);
checkDuplicate.setCompletionTime(System.currentTimeMillis());
} catch (Exception e) { } catch (Exception e) {
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw); PrintWriter pw = new PrintWriter(sw);
@ -115,6 +116,7 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
logger.error("异步执行图片比对异常:", e); logger.error("异步执行图片比对异常:", e);
logger.error("异步执行图片比对异常:", e.getMessage()); logger.error("异步执行图片比对异常:", e.getMessage());
checkDuplicate.setStatus(3); checkDuplicate.setStatus(3);
checkDuplicate.setCompletionTime(System.currentTimeMillis());
} finally { } finally {
checkDuplicateService.updateById(checkDuplicate); checkDuplicateService.updateById(checkDuplicate);
} }
@ -176,8 +178,8 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
* 6.ocr_picturesimilarity_score * 6.ocr_picturesimilarity_score
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) // @Transactional(rollbackFor = Exception.class)
public void comparePictureResultSave(List<OcrPicture> ocrPictureList, UserToken sysUser, Long checkDuplicateId) throws Exception { public void comparePictureResultSave(List<OcrPicture> ocrPictureList, UserToken sysUser, Long checkDuplicateId){
List<OcrCheckDuplicateResult> saveList = new ArrayList<>(); List<OcrCheckDuplicateResult> saveList = new ArrayList<>();
//需要创建任务的图片集合 //需要创建任务的图片集合
@ -196,10 +198,10 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
if (org.apache.commons.lang3.StringUtils.isBlank(ocrPicture.getImgHash())) { if (org.apache.commons.lang3.StringUtils.isBlank(ocrPicture.getImgHash())) {
String url = ocrPicture.getLocalpictrueurl(); String url = ocrPicture.getLocalpictrueurl();
if(StringUtils.isBlank(url)){ if(StringUtils.isBlank(url)){
if(StringUtils.isBlank(ocrPicture.getImgurl())){ // if(StringUtils.isBlank(ocrPicture.getImgurl())){
continue; // }
} // url = ocrPicture.getImgurl();
url = ocrPicture.getImgurl(); continue;
} }
Map<String, String> map = this.getOcrPictureClassifyAndHash(url); Map<String, String> map = this.getOcrPictureClassifyAndHash(url);
@ -226,10 +228,11 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
logger.info("图片没有hash值进入分类并获取hash接口:{}",JSONObject.toJSON(ocrPictureNext)); logger.info("图片没有hash值进入分类并获取hash接口:{}",JSONObject.toJSON(ocrPictureNext));
String url = ocrPictureNext.getLocalpictrueurl(); String url = ocrPictureNext.getLocalpictrueurl();
if(StringUtils.isBlank(url)){ if(StringUtils.isBlank(url)){
if(StringUtils.isBlank(ocrPictureNext.getImgurl())){ // if(StringUtils.isBlank(ocrPictureNext.getImgurl())){
continue; // continue;
} // }
url = ocrPictureNext.getImgurl(); // url = ocrPictureNext.getImgurl();
continue;
} }
Map<String, String> map = this.getOcrPictureClassifyAndHash(url); Map<String, String> map = this.getOcrPictureClassifyAndHash(url);
if (map != null) { if (map != null) {
@ -288,33 +291,58 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
if(similarityGroupOrderMap.get(ocrPicture.getId().toString())!=null){ if(similarityGroupOrderMap.get(ocrPicture.getId().toString())!=null){
ocrCheckDuplicateResult.setSimilarityGroupOrder(similarityGroupOrderMap.get(ocrPicture.getId().toString())); ocrCheckDuplicateResult.setSimilarityGroupOrder(similarityGroupOrderMap.get(ocrPicture.getId().toString()));
} }
//1.3开启入库操作,不能进行批量入库,会导致内存被拉崩
saveList.add(ocrCheckDuplicateResult); saveList.add(ocrCheckDuplicateResult);
List<OcrPicture> pictures = new ArrayList<>();
pictures.add(ocrPicture);
try {
this.saveCheckDuplicateData(checkDuplicateId,saveList,pictures,ocrPictureList.get(0).getTenantId().toString(),sysUser);
} catch (Exception e) {
logger.error("比对结果入库异常! error:{}",e.getMessage());
}
saveList = new ArrayList<>();
} }
} }
logger.info("查重任务:{},开启创建任务",checkDuplicateId);
if (CollectionUtils.isNotEmpty(ocrPictureList)) { }
ocrTaskchildPictureService.createTask(ocrPictureList, ocrPictureList.get(0).getTenantId().toString(), sysUser);
} /**
logger.info("查重任务:{},结束创建任务",checkDuplicateId); *
//批量入库 * @return
logger.info("查重任务:{},开启批量入库任务",checkDuplicateId); */
@Transactional(rollbackFor = Exception.class)
public boolean saveCheckDuplicateData(Long checkDuplicateId,List<OcrCheckDuplicateResult> saveList,List<OcrPicture> ocrPictureList, String tenantId,UserToken sysUser) throws Exception {
//1.批量入库
logger.debug("查重任务:{},开启批量入库任务",checkDuplicateId);
boolean b = checkDuplicateResultService.saveOrUpdateBatch(saveList); boolean b = checkDuplicateResultService.saveOrUpdateBatch(saveList);
if (!b) { if (!b) {
logger.error("入库比对结果失败,{}",checkDuplicateId);
throw new Exception("批量入库比对结果失败!"); throw new Exception("批量入库比对结果失败!");
} }
logger.info("查重任务:{},结束批量入库任务",checkDuplicateId); //2.开始更新图片最高阈值
//开始更新图片最高阈值 logger.debug("查重任务:{},更新最高阈值",checkDuplicateId);
logger.info("查重任务:{},更新最高阈值",checkDuplicateId); b = this.updatePictureSimilarityScore(saveList);
this.updatePictureSimilarityScore(saveList); if (!b) {
logger.info("查重任务:{},结束更新最高阈值",checkDuplicateId); logger.error("更新最高阈值,{}",checkDuplicateId);
//开始更新 图片历史比对数据结果 throw new Exception("更新最高阈值失败!");
}
//3.开始更新 图片历史比对数据结果
logger.info("查重任务:{},更新图片历史比对结果",checkDuplicateId); logger.info("查重任务:{},更新图片历史比对结果",checkDuplicateId);
this.updateCompareToPictureDuplicateHis(saveList); b = this.updateCompareToPictureDuplicateHis(saveList);
logger.info("查重任务:{},结束图片历史比对结果",checkDuplicateId); if (!b) {
logger.error("更新图片历史比对结果失败,{}",checkDuplicateId);
throw new Exception("更新图片历史比对结果失败!");
}
//4.开始更新 图片历史比对数据结果
logger.info("查重任务:{},开启创建任务",checkDuplicateId);
if (CollectionUtils.isNotEmpty(ocrPictureList)) {
ocrTaskchildPictureService.createTask(ocrPictureList, ocrPictureList.get(0).getTenantId().toString(), sysUser);
}
return true;
} }
@Override @Override
public Boolean removeCheckDuplicate(String checkDuplicateNo, String tenantId) { public Boolean removeCheckDuplicate(String checkDuplicateNo, String tenantId) {
QueryWrapper queryWrapper = new QueryWrapper(); QueryWrapper queryWrapper = new QueryWrapper();
@ -478,8 +506,7 @@ public class OcrCheckDuplicateServiceImpl extends ServiceImpl<OcrCheckDuplicateM
Page<OcrPicture> pageVO = new Page<OcrPicture>(pageNo, pageSize); Page<OcrPicture> pageVO = new Page<OcrPicture>(pageNo, pageSize);
pageVO.setRecords(collect); pageVO.setRecords(collect);
pageVO.setTotal(records.size()); pageVO.setTotal(ocrCheckDuplicateResults.size());
return pageVO; return pageVO;
} }

@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import liquibase.pro.packaged.E;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@ -38,7 +39,9 @@ import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.awt.color.ColorSpace; import java.awt.color.ColorSpace;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.net.URL; import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
@ -665,7 +668,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
} }
@Override @Override
public int savePictures(List<OcrPicture> ocrPictureList) { public int savePictures(List<OcrPicture> ocrPictureList){
//1.字典数据 解析入库 //1.字典数据 解析入库
boolean b = dataDictionaryUtil.pictureDataDictionarySaveArray(ocrPictureList); boolean b = dataDictionaryUtil.pictureDataDictionarySaveArray(ocrPictureList);
@ -673,16 +676,26 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
//2.调整图片地址,补齐域名 //2.调整图片地址,补齐域名
for (OcrPicture picture : ocrPictureList) { for (OcrPicture picture : ocrPictureList) {
picture.setCreateTime(System.currentTimeMillis()); //获取创建时间戳 picture.setCreateTime(System.currentTimeMillis()); //获取创建时间戳
// picture.setImgurl(interfaceDomain + picture.getImgurl());
} }
boolean saveBatch = this.saveBatch(ocrPictureList); try {
//3.添加图片信息 boolean saveBatch = false;
if (saveBatch) { synchronized(lock) {
this.savePicturesInfo(ocrPictureList); // 同步的代码块
this.convertImage(ocrPictureList); saveBatch = this.saveBatch(ocrPictureList);
return ocrPictureList.size(); }
//3.添加图片信息
if (saveBatch) {
// this.savePicturesInfo(ocrPictureList);
this.convertImage(ocrPictureList);
return ocrPictureList.size();
}
log.error("存储图片失败:{}",JSONObject.toJSON(ocrPictureList));
}catch (Exception e){
log.error("存储图片异常:{}",e.getMessage());
} }
return 0; return 0;
} }
@ -690,7 +703,7 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
List<OcrPictureInfo> list = new ArrayList<>(); List<OcrPictureInfo> list = new ArrayList<>();
for (OcrPicture ocrPicture : ocrPictureList) { for (OcrPicture ocrPicture : ocrPictureList) {
if (StringUtils.isNotBlank(ocrPicture.getImgurl())) { if (StringUtils.isNotBlank(ocrPicture.getImgurl())) {
OcrPictureInfo imageInfo = getImageInfo(ocrPicture.getImgurl()); OcrPictureInfo imageInfo = getImageInfo(ocrPicture.getImgurl(),true);
if (ObjectUtil.isNotEmpty(imageInfo)) { if (ObjectUtil.isNotEmpty(imageInfo)) {
imageInfo.setPictureId(ocrPicture.getId()); imageInfo.setPictureId(ocrPicture.getId());
imageInfo.setImgName(ocrPicture.getImgname()); imageInfo.setImgName(ocrPicture.getImgname());
@ -701,18 +714,49 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
ocrPictureInfoService.saveBatch(list); ocrPictureInfoService.saveBatch(list);
} }
private OcrPictureInfo getImageInfo(String imageUrl) { /**
*
* @param ocrPicture
*/
@Override
public void savePicturesInfo(OcrPicture ocrPicture) {
boolean isConnection = true;
String url = ocrPicture.getImgurl();
if(!StringUtils.isEmpty(ocrPicture.getLocalpictrueurl())){
url = ocrPicture.getLocalpictrueurl();
isConnection = false;
}
OcrPictureInfo imageInfo = getImageInfo(url,isConnection);
imageInfo.setPictureId(ocrPicture.getId());
imageInfo.setImgName(ocrPicture.getImgname());
ocrPictureInfoService.save(imageInfo);
}
try { /**
// 创建URL对象 *
URL url = new URL(imageUrl); * @param imageUrl
// 打开连接 * @param isConnection url
URLConnection urlConnection = url.openConnection(); * @return
// 获取图片大小 */
Integer imageSize = urlConnection.getContentLength(); private OcrPictureInfo getImageInfo(String imageUrl,boolean isConnection) {
// 使用ImageIO读取图片 try {
BufferedImage image = ImageIO.read(url); BufferedImage image = null;
Integer imageSize = 0;
if(isConnection){
// 创建URL对象
URL url = new URL(imageUrl);
// 打开连接
URLConnection urlConnection = url.openConnection();
// 获取图片大小
imageSize = urlConnection.getContentLength();
// 使用ImageIO读取图片
image= ImageIO.read(url);
}else{
File file = new File(imageUrl);
image = ImageIO.read(file);
imageSize =(int)file.length();
}
if (image != null) { if (image != null) {
OcrPictureInfo info = new OcrPictureInfo(); OcrPictureInfo info = new OcrPictureInfo();
@ -751,12 +795,14 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
log.info("Cannot read image from URL."); log.info("Cannot read image from URL.");
return null; return null;
} }
} catch (IOException e) { } catch (Exception e) {
log.error("Error: " + e.getMessage()); log.error("Error: " + e.getMessage());
} }
return null; return null;
} }
private void convertImage(List<OcrPicture> list) { private void convertImage(List<OcrPicture> list) {
for (OcrPicture ocrPicture : list) { for (OcrPicture ocrPicture : list) {
PictureImgToLocalEntity entity = new PictureImgToLocalEntity(); PictureImgToLocalEntity entity = new PictureImgToLocalEntity();
@ -764,7 +810,22 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
entity.setImgUrl(ocrPicture.getImgurl()); entity.setImgUrl(ocrPicture.getImgurl());
String imgurl = ocrPicture.getImgurl(); String imgurl = ocrPicture.getImgurl();
entity.setLocalPath(localImagePath + imgurl.substring(imgurl.lastIndexOf("/"))); entity.setLocalPath(localImagePath + imgurl.substring(imgurl.lastIndexOf("/")));
TaskQueue.pictureImgToLocalPushData(entity);
boolean addedToQueue = false;
int count = 1;
while (!addedToQueue){
try {
addedToQueue = TaskQueue.pictureImgToLocalPushData(entity);
if(addedToQueue) {
break;
}
Thread.sleep(5000);
} catch (InterruptedException e) {
log.error("放入图片下载队列,等待休眠异常:{}",e.getMessage());
}
count++;
}
} }
} }

@ -2,6 +2,7 @@ package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.jyjz.flowable.common.ProcessConstant; import cn.jyjz.flowable.common.ProcessConstant;
import cn.jyjz.xiaoyao.common.base.util.StringUtils;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil; import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken; import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildDubiousFileMapper; import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildDubiousFileMapper;
@ -47,13 +48,14 @@ public class OcrTaskchildDubiousFileServiceImpl extends ServiceImpl<OcrTaskchild
* *
* @param pageNo * @param pageNo
* @param pageSize * @param pageSize
* @param orderbyname * @param orderByUptime
* @param orderBySimilarity
* @param userToken * @param userToken
* @param tenantId * @param tenantId
* @return * @return
*/ */
@Override @Override
public Page<OcrTaskChildPictureVo> dubiousfilelist(Integer pageNo, Integer pageSize, String orderbyname, UserToken userToken, String tenantId) { public Page<OcrTaskChildPictureVo> dubiousfilelist(Integer pageNo, Integer pageSize,String orderByUptime,String orderBySimilarity,UserToken userToken, String tenantId) {
Page<OcrTaskChildPictureVo> objectPage = new Page<>(Integer.valueOf(pageNo), Integer.valueOf(pageSize)); Page<OcrTaskChildPictureVo> objectPage = new Page<>(Integer.valueOf(pageNo), Integer.valueOf(pageSize));
@ -74,13 +76,41 @@ public class OcrTaskchildDubiousFileServiceImpl extends ServiceImpl<OcrTaskchild
List<OcrTaskChildPictureVo> taskChildPictures = ocrTaskchildPictureService.getDubiousfileList(new ArrayList<>(pictureIdList), userNodeType); List<OcrTaskChildPictureVo> taskChildPictures = ocrTaskchildPictureService.getDubiousfileList(new ArrayList<>(pictureIdList), userNodeType);
if (CollUtil.isNotEmpty(taskChildPictures)) { if (CollUtil.isNotEmpty(taskChildPictures)) {
//按时间字段排序
if ("desc".equals(orderbyname)) { Comparator<OcrTaskChildPictureVo> comparator = null;
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSubmitDateTimestamp).reversed());
} else { // 判断 orderByUptime 是否不为空
taskChildPictures.sort(Comparator.comparing(OcrTaskChildPictureVo::getSubmitDateTimestamp)); if (orderByUptime != null && StringUtils.isNotEmpty(orderByUptime)) {
if ("asc".equals(orderByUptime)) {
comparator = Comparator.comparing(OcrTaskChildPictureVo::getSubmitDateTimestamp);
} else if ("desc".equals(orderByUptime)) {
comparator = Comparator.comparing(OcrTaskChildPictureVo::getSubmitDateTimestamp).reversed();
}
}
// 判断 orderBysimilarity 是否不为空
if (orderBySimilarity != null && StringUtils.isNotEmpty(orderBySimilarity)) {
Comparator<OcrTaskChildPictureVo> similarityComparator = null;
if ("asc".equals(orderBySimilarity)) {
similarityComparator = Comparator.comparing(OcrTaskChildPictureVo::getSimilarityScore);
} else if ("desc".equals(orderBySimilarity)) {
similarityComparator = Comparator.comparing(OcrTaskChildPictureVo::getSimilarityScore).reversed();
}
// 如果 orderByUptime 和 orderBysimilarity 都不为空,则先按照 orderBysimilarity 排序
if (comparator != null) {
comparator = comparator.thenComparing(similarityComparator);
} else {
comparator = similarityComparator;
}
}
// 进行排序
if (comparator != null) {
taskChildPictures.sort(comparator);
} }
List<OcrTaskChildPictureVo> records = taskChildPictures.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList()); List<OcrTaskChildPictureVo> records = taskChildPictures.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
objectPage.setRecords(records); objectPage.setRecords(records);
objectPage.setTotal(taskChildPictures.size()); objectPage.setTotal(taskChildPictures.size());

@ -2,6 +2,7 @@ package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.hutool.core.map.MapBuilder; import cn.hutool.core.map.MapBuilder;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import cn.jyjz.flowable.common.ProcessConstant; import cn.jyjz.flowable.common.ProcessConstant;
import cn.jyjz.flowable.common.SystemConstantsOa; import cn.jyjz.flowable.common.SystemConstantsOa;
import cn.jyjz.flowable.domain.vo.FlowModelVO; import cn.jyjz.flowable.domain.vo.FlowModelVO;
@ -18,10 +19,12 @@ import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.dataobject.Userapprove; import cn.jyjz.xiaoyao.oa.from.dataobject.Userapprove;
import cn.jyjz.xiaoyao.oa.from.service.CategoryService; import cn.jyjz.xiaoyao.oa.from.service.CategoryService;
import cn.jyjz.xiaoyao.oa.from.service.UserapproveService; import cn.jyjz.xiaoyao.oa.from.service.UserapproveService;
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildPictureMybatisDao; import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildPictureMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.*; import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.dto.ApproveNodeDto; import cn.jyjz.xiaoyao.ocr.dto.ApproveNodeDto;
import cn.jyjz.xiaoyao.ocr.dto.FlowResultDto; import cn.jyjz.xiaoyao.ocr.dto.FlowResultDto;
import cn.jyjz.xiaoyao.ocr.dto.ResultDto;
import cn.jyjz.xiaoyao.ocr.dto.UserapproveDto; import cn.jyjz.xiaoyao.ocr.dto.UserapproveDto;
import cn.jyjz.xiaoyao.ocr.service.IOcrPictureDuplicateHisService; import cn.jyjz.xiaoyao.ocr.service.IOcrPictureDuplicateHisService;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureInfoService; import cn.jyjz.xiaoyao.ocr.service.OcrPictureInfoService;
@ -29,6 +32,7 @@ import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService; import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo; import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import cn.jyjz.xiaoyao.ocr.vo.PictureDetailVo; import cn.jyjz.xiaoyao.ocr.vo.PictureDetailVo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -42,6 +46,8 @@ import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.UserTask; import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl; import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
@ -60,6 +66,9 @@ import java.util.stream.Collectors;
@Service("ocrTaskchildPictureService") @Service("ocrTaskchildPictureService")
@Slf4j @Slf4j
public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchildPictureMybatisDao, OcrTaskchildPicture> implements OcrTaskchildPictureService { public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchildPictureMybatisDao, OcrTaskchildPicture> implements OcrTaskchildPictureService {
@Value("${ocr.api.wly.data-url}")
private String dataUrl;
@Resource @Resource
private OcrTaskchildPictureMybatisDao ocrtaskchildpicturemybatisdao; private OcrTaskchildPictureMybatisDao ocrtaskchildpicturemybatisdao;
@ -87,6 +96,9 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
@Resource @Resource
private IOcrPictureDuplicateHisService pictureDuplicateHisService; private IOcrPictureDuplicateHisService pictureDuplicateHisService;
@Resource
private PrevailCloudApi prevailCloudApi;
/** /**
* *
* *
@ -675,9 +687,21 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
String userNodeType = ProcessConstant.userNodeType.getOrDefault(userToken.getNodeType(), "一级审批"); String userNodeType = ProcessConstant.userNodeType.getOrDefault(userToken.getNodeType(), "一级审批");
JSONObject jsonObject = JSONObject.parseObject(duplicateHis.getCheckDuplicateResultHisJson()); JSONObject jsonObject = JSONObject.parseObject(duplicateHis.getCheckDuplicateResultHisJson());
Set<String> pictureIds = jsonObject.keySet(); Set<String> pictureIds = jsonObject.keySet();
List<OcrTaskChildPictureVo> taskChildPictures = this.getPictureHistoryList(new ArrayList<>(pictureIds), userNodeType); List<OcrTaskChildPictureVo> taskChildPicturesOld = this.getPictureHistoryList(new ArrayList<>(pictureIds), userNodeType);
List<OcrTaskChildPictureVo> taskChildPictures = new ArrayList<>();
for (OcrTaskChildPictureVo taskChildPicture : taskChildPicturesOld) {
if(taskChildPicture.getPictureId()!=null){
taskChildPictures.add(taskChildPicture);
}
}
for (OcrTaskChildPictureVo taskChildPicture : taskChildPictures) { for (OcrTaskChildPictureVo taskChildPicture : taskChildPictures) {
taskChildPicture.setSimilarityScore(Integer.parseInt(jsonObject.getString(taskChildPicture.getPictureId().toString()))); if(jsonObject.getString(taskChildPicture.getPictureId())!=null){
taskChildPicture.setSimilarityScore(Integer.parseInt(jsonObject.getString(taskChildPicture.getPictureId().toString())));
}else{
taskChildPicture.setSimilarityScore(1);
}
} }
if (orderValue.equals("similarityScore")) { if (orderValue.equals("similarityScore")) {
if ("desc".equals(orderType)) { if ("desc".equals(orderType)) {
@ -709,14 +733,14 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
} }
@Override @Override
public void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture, OcrPicture picture, FlowApprove flowApprove) { public void sendFlowTaskResult(OcrTaskchildPicture taskchildPicture, OcrPicture picture, FlowApprove flowApprove) throws Exception {
FlowResultDto flowResultDto = new FlowResultDto(); FlowResultDto flowResultDto = new FlowResultDto();
flowResultDto.setTenantNo(picture.getTenantId()); flowResultDto.setTenantNo(picture.getTenantId());
flowResultDto.setAccountNo(Long.parseLong(picture.getPictureid())); flowResultDto.setAccountNo(Long.parseLong(picture.getPictureid()));
flowResultDto.setTaskNo(Long.parseLong(picture.getRemark())); flowResultDto.setTaskNo(Long.parseLong(picture.getRemark()));
flowResultDto.setPictureMatchDegree(BigDecimal.valueOf(picture.getSimilarityscore())); flowResultDto.setPictureMatchDegree(BigDecimal.valueOf(picture.getSimilarityscore()));
flowResultDto.setIsPictureRepeat(Integer.valueOf(picture.getField14())); flowResultDto.setIsPictureRepeat(picture.getField14()==null?0:Integer.valueOf(picture.getField14()));
flowResultDto.setIsPictureRight(picture.getIztrueorfalse()); flowResultDto.setIsPictureRight(picture.getIztrueorfalse()==null?0:picture.getIztrueorfalse());
Integer resultStatus = Objects.equals(taskchildPicture.getStates(), SystemConstantsOa.OA_STATUS_TYPE_END) ? SystemConstantsOa.OCR_STATUS_SUCCESS : SystemConstantsOa.OCR_STATUS_FAILURE; Integer resultStatus = Objects.equals(taskchildPicture.getStates(), SystemConstantsOa.OA_STATUS_TYPE_END) ? SystemConstantsOa.OCR_STATUS_SUCCESS : SystemConstantsOa.OCR_STATUS_FAILURE;
flowResultDto.setApproveResult(resultStatus); flowResultDto.setApproveResult(resultStatus);
flowResultDto.setApproveRemark(flowApprove.getComment()); flowResultDto.setApproveRemark(flowApprove.getComment());
@ -729,9 +753,15 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
} }
} }
flowResultDto.setApproveDetailList(nodeList); flowResultDto.setApproveDetailList(nodeList);
ResultDto resultDto = new ResultDto();
resultDto.setStatus(HttpStatus.OK.value());
resultDto.setTimestamp(System.currentTimeMillis());
resultDto.setData(JSON.toJSONString(flowResultDto));
System.out.println(JSON.toJSONString(resultDto));
prevailCloudApi.sendFlowTaskResult(picture.getTenantId().toString(),JSON.toJSONString(resultDto));
} }
@Override @Override
public List<OcrTaskChildPictureVo> getDubiousfileList(List<String> pictureIds, String taskname) { public List<OcrTaskChildPictureVo> getDubiousfileList(List<String> pictureIds, String taskname) {
return ocrtaskchildpicturemybatisdao.getDubiousfileList(pictureIds, taskname); return ocrtaskchildpicturemybatisdao.getDubiousfileList(pictureIds, taskname);

@ -0,0 +1,79 @@
package cn.jyjz.xiaoyao.ocr.thread;
import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
@Slf4j
public class ImageDownloadMonitoring {
@Autowired
private OcrPictureService ocrPictureService;
private static Logger logger = LoggerFactory.getLogger(TaskQueue.class);
/**
*
*
* @return
*/
public boolean startImageDownloadMonitoring(String localImagePath) {
Runnable runnable = new Runnable() {
@SneakyThrows
@Override
public void run() {
OcrPictureService ocrPictureService = SpringUtils.getBean("ocrPictureService");
// while (true) {
logger.debug("图片下载监测中...");
// try {
// 查询数据库中local_picture_url字段为null的图片数据
LambdaQueryWrapper<OcrPicture> ocrPictureLambdaQueryWrapper = new LambdaQueryWrapper<>();
ocrPictureLambdaQueryWrapper.isNull(OcrPicture::getLocalpictrueurl);
List<OcrPicture> ocrPictureList = new ArrayList<>();
ocrPictureList = ocrPictureService.list(ocrPictureLambdaQueryWrapper);
logger.debug("待执行下载图片数量:{}",ocrPictureList.size());
for (OcrPicture pictureOne : ocrPictureList) {
// 创建 PictureImgToLocalEntity 对象并赋值
PictureImgToLocalEntity entity = new PictureImgToLocalEntity();
entity.setPictureId(pictureOne.getId());
entity.setImgUrl(pictureOne.getImgurl());
String imgurl = pictureOne.getImgurl();
entity.setLocalPath(localImagePath + imgurl.substring(imgurl.lastIndexOf("/")));
//本地调试下载地址
// entity.setLocalPath("D:\\server\\data\\images" + imgurl.substring(imgurl.lastIndexOf("/")));
// 将对象添加到下载图片队列中
boolean isAddedToQueue = false;
while (!isAddedToQueue) {
isAddedToQueue =TaskQueue.pictureImgToLocalPushData(entity);
if (!isAddedToQueue) {
logger.info("图片下载监测-添加队列失败,等待五秒后继续进行添加,图片id:{}",entity.getPictureId());
Thread.sleep(5000);
}
}
}
// // 等待一段时间再继续检查
// Thread.sleep(60000);
// } catch (Exception e) {
// logger.error("图片下载监测出错{}", e.getMessage());
// Thread.sleep(5000);
// }
// }
}
};
Thread thread = new Thread(runnable);
thread.start();
return true;
}
}

@ -1,5 +1,6 @@
package cn.jyjz.xiaoyao.ocr.thread; package cn.jyjz.xiaoyao.ocr.thread;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -12,10 +13,16 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class TaskRunner implements CommandLineRunner { public class TaskRunner implements CommandLineRunner {
@Value("${ocr.api.wly.localImagePath}")
private String localImagePath;
@Override @Override
public void run(String... args) throws Exception { public void run(String... args) throws Exception {
TaskThreadPool taskThreadPool = new TaskThreadPool(); TaskThreadPool taskThreadPool = new TaskThreadPool();
taskThreadPool.startPictureDisposePull(); taskThreadPool.startPictureDisposePull();
taskThreadPool.startPictureImgToLocalPull(); taskThreadPool.startPictureImgToLocalPull();
// ImageDownloadMonitoring imageDownloadMonitoring = new ImageDownloadMonitoring();
// imageDownloadMonitoring.startImageDownloadMonitoring(localImagePath);
} }
} }

@ -4,6 +4,7 @@ import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity; import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import cn.jyjz.xiaoyao.ocr.thread.tasks.PictureDisposeTask; import cn.jyjz.xiaoyao.ocr.thread.tasks.PictureDisposeTask;
import cn.jyjz.xiaoyao.ocr.thread.tasks.PictureImgToLocalTask; import cn.jyjz.xiaoyao.ocr.thread.tasks.PictureImgToLocalTask;
import liquibase.pro.packaged.E;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -21,6 +22,7 @@ public class TaskThreadPool {
private static Logger logger = LoggerFactory.getLogger(TaskQueue.class); private static Logger logger = LoggerFactory.getLogger(TaskQueue.class);
ExecutorService threadPool = null; ExecutorService threadPool = null;
ExecutorService threadPoolImg = null;
public TaskThreadPool() { public TaskThreadPool() {
if (threadPool == null) { if (threadPool == null) {
@ -32,6 +34,15 @@ public class TaskThreadPool {
new LinkedBlockingDeque<>(), new LinkedBlockingDeque<>(),
Executors.defaultThreadFactory(), Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy()); new ThreadPoolExecutor.DiscardOldestPolicy());
threadPoolImg = new ThreadPoolExecutor(
10,
40,
3,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy());
} }
} }
@ -45,8 +56,8 @@ public class TaskThreadPool {
@SneakyThrows @SneakyThrows
@Override @Override
public void run() { public void run() {
logger.debug("无量云接口数据处理消费线程检测中...");
while (true) { while (true) {
logger.debug("无量云接口数据处理消费线程检测中...,队列数量:{}",TaskQueue.pictureDisposeQueue.size());
PictureSourceResult pictureSourceResult = TaskQueue.pictureDisposePullData(); PictureSourceResult pictureSourceResult = TaskQueue.pictureDisposePullData();
if (pictureSourceResult != null) { if (pictureSourceResult != null) {
threadPool.execute(new PictureDisposeTask(pictureSourceResult)); threadPool.execute(new PictureDisposeTask(pictureSourceResult));
@ -71,13 +82,12 @@ public class TaskThreadPool {
@SneakyThrows @SneakyThrows
@Override @Override
public void run() { public void run() {
logger.debug("图片下载消费线程检测中...");
while (true) { while (true) {
logger.debug("图片下载消费线程检测中...,队列数量:{}",TaskQueue.pictureImgToLocalQueue.size());
try { try {
PictureImgToLocalEntity pictureImgToLocalEntity = TaskQueue.pictureImgToLocalPullData(); PictureImgToLocalEntity pictureImgToLocalEntity = TaskQueue.pictureImgToLocalPullData();
if (pictureImgToLocalEntity != null) { if (pictureImgToLocalEntity != null) {
threadPool.execute(new PictureImgToLocalTask(pictureImgToLocalEntity)); threadPoolImg.execute(new PictureImgToLocalTask(pictureImgToLocalEntity));
} else { } else {
Thread.sleep(5000); Thread.sleep(5000);
} }

@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.jyjz.xiaoyao.common.base.util.SpringUtils; import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture; import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService; import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity; import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import cn.jyjz.xiaoyao.ocr.util.DownloadImgUtil; import cn.jyjz.xiaoyao.ocr.util.DownloadImgUtil;
import cn.jyjz.xiaoyao.ocr.util.ImageUtils; import cn.jyjz.xiaoyao.ocr.util.ImageUtils;
@ -80,7 +81,22 @@ public class PictureImgToLocalTask implements Runnable {
// picture.setPhotoDateTimestamp(timestamp); // picture.setPhotoDateTimestamp(timestamp);
// } // }
ocrPictureService.updateById(picture); ocrPictureService.updateById(picture);
logger.info("图片本地化,回写数据完成!");
logger.info("开启获取图片信息操作!");
ocrPictureService.savePicturesInfo(picture);
logger.info("获取图片信息操作,结束!");
} }
}else{
//判断是否是第一次失败!
if(picture.getDownloadErrorCount()==null){
picture.setDownloadErrorCount(0);
}
//判断如果没超过5次则放回队列进行重试
if( picture.getDownloadErrorCount()!=null && picture.getDownloadErrorCount()<5){
TaskQueue.pictureImgToLocalPushData(pictureImgToLocal);
picture.setDownloadErrorCount(picture.getDownloadErrorCount()+1);
}
ocrPictureService.updateById(picture);
} }
} }

@ -5,6 +5,8 @@ import org.slf4j.LoggerFactory;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL; import java.net.URL;
/** /**
@ -32,8 +34,16 @@ public class DownloadImgUtil {
while ((n = in.read(buffer)) != -1) { while ((n = in.read(buffer)) != -1) {
out.write(buffer, 0, n); out.write(buffer, 0, n);
} }
out.flush();
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage()); logger.error("转储异常问题msg:{}",e.getMessage());
logger.error("转储异常问题json:{}",e.getStackTrace());
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String exceptionDetails = sw.toString();// 包含堆栈跟踪信息的字符串
logger.error("图片本地化,转储图片异常:{}",exceptionDetails);
return false; return false;
} }
return true; return true;

@ -236,7 +236,7 @@
<if test="pictureId != null and pictureId != ''"> <if test="pictureId != null and pictureId != ''">
and t1.picture_id = #{pictureId} and t1.picture_id = #{pictureId}
</if> </if>
ORDER BY t1.max_similarity desc,t1.similarity_group_order asc, t2.submit_date_timestamp DESC ORDER BY t1.max_similarity desc,t1.similarity_group_order asc, t2.submit_date_timestamp asc
LIMIT 1 LIMIT 1
</select> </select>

@ -482,6 +482,78 @@
</trim> </trim>
</where> </where>
</sql> </sql>
<sql id="Base_Where_Union_New">
<where>
<trim prefixOverrides="and|or">
<if test="izupuser != null">
${izupuser.rulesOp} tcp.FROMUSERID ${izupuser.dataOp} ${izupuser.likestar}
<!-- #{fromuserid.value}-->
<if test="izupuser.value instanceof java.util.List">
<foreach item="item" collection="izupuser.value" open="" separator="," close="">
#{item}
</foreach>
</if>
<if test="!izupuser.value instanceof java.util.List">
#{izupuser.value}
</if>
${izupuser.likeend}
</if>
<if test="iztaskrrom != null">
${iztaskrrom.rulesOp} tcp.FROMSOURCEID ${iztaskrrom.dataOp} ${iztaskrrom.likestar}
<!-- #{fromuserid.value}-->
<if test="iztaskrrom.value instanceof java.util.List">
<foreach item="item" collection="iztaskrrom.value" open="" separator="," close="">
#{item}
</foreach>
</if>
<if test="!iztaskrrom.value instanceof java.util.List">
#{iztaskrrom.value}
</if>
${iztaskrrom.likeend}
</if>
<if test="izproject != null">
${izproject.rulesOp} tcp.FROMPROJECTNAME ${izproject.dataOp} ${izproject.likestar}
<!-- #{fromuserid.value}-->
<if test="izproject.value instanceof java.util.List">
<foreach item="item" collection="izproject.value" open="" separator="," close="">
#{item}
</foreach>
</if>
<if test="!izproject.value instanceof java.util.List">
#{izproject.value}
</if>
${izproject.likeend}
</if>
<!-- <if test="izuptime != null">-->
<!-- ${izuptime.rulesOp} tcp.FROMUPTIME ${izuptime.dataOp} ${izuptime.likestar}#{izuptime.value}${izuptime.likeend}-->
<!-- </if>-->
<!-- <if test="izuptimeStart != null">-->
<!-- and tcp.FROMUPTIME &gt;= '${izuptimeStart.value}'-->
<!-- </if>-->
<!-- <if test="izuptimeEnd != null">-->
<!-- and tcp.FROMUPTIME &lt;= '${izuptimeEnd.value}'-->
<!-- </if>-->
<if test="izuptimeStart != null">
<!-- 如果 izuptimeStart.dataOp 的值为 "<",则使用 "or" 连接 -->
<choose>
<when test="izuptimeStart.rulesOp == 'or' || izuptimeEnd.rulesOp=='or'">
<if test="izuptimeEnd != null">
and (tcp.FROMUPTIME ${izuptimeStart.dataOp} '${izuptimeStart.value}' or tcp.FROMUPTIME ${izuptimeEnd.dataOp} '${izuptimeEnd.value}')
</if>
</when>
<otherwise>
<!-- 其他情况下仍然拼接 "and" 连接 -->
and tcp.FROMUPTIME ${izuptimeStart.dataOp} '${izuptimeStart.value}'
<if test="izuptimeEnd != null">
and tcp.FROMUPTIME ${izuptimeEnd.dataOp} '${izuptimeEnd.value}'
</if>
</otherwise>
</choose>
</if>
</trim>
</where>
</sql>
<select id="listFinal" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture" <select id="listFinal" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture"
parameterType="java.util.Map"> parameterType="java.util.Map">
select tcp.*, pic.field11 reporttime, pic.similarity_score similarityscore from ( select tcp.*, pic.field11 reporttime, pic.similarity_score similarityscore from (
@ -556,42 +628,58 @@
parameterType="java.util.Map"> parameterType="java.util.Map">
select tcp.* from ( select tcp.* from (
select tc.*, select tc.*,
uf.COMMENTHIS, uf.COMMENTHIS,
uf.TASKNAME as TASKNAMEHIS, uf.TASKNAME as TASKNAMEHIS,
uf.STATSHIS, uf.STATSHIS,
uf.TASKINDEX, uf.TASKINDEX,
uf.TASKNO, uf.TASKNO,
op.field6 as fromCustomerLevel, op.field6 as fromCustomerLevel,
op.releaseArea as fromCity op.releaseArea as fromCity
from ocr_taskchild_picture tc from ocr_taskchild_picture tc
LEFT JOIN OA_USERAPPROVE_T uf ON tc.ID = uf.ID LEFT JOIN OA_USERAPPROVE_T uf ON tc.ID = uf.ID
left join ocr_picture op on tc.PICTUREID = op.ID and op.suspiciousfile = 0 left join ocr_picture op on tc.PICTUREID = op.ID
where tc.ASSIGNEE = #{searchassignee} where tc.ASSIGNEE = #{searchassignee}
and tc.TENANTID = #{searchtenantid} and tc.TENANTID = #{searchtenantid}
and tc.STATES = 2 and tc.STATES = 2
and op.suspiciousfile = 0
<if test="izApprovalStatus != null ">
${izApprovalStatus.rulesOp}
(
#{izApprovalStatus.value} ${izApprovalStatus.dataOp} COALESCE(uf.STATSHIS, 1)
)
</if>
UNION UNION
select tc.*, select tc.*,
uf.COMMENTHIS, uf.COMMENTHIS,
uf.TASKNAME as TASKNAMEHIS, uf.TASKNAME as TASKNAMEHIS,
uf.STATSHIS, uf.STATSHIS,
uf.TASKINDEX, uf.TASKINDEX,
uf.TASKNO, uf.TASKNO,
op.field6 as fromCustomerLevel, op.field6 as fromCustomerLevel,
op.releaseArea as fromCity op.releaseArea as fromCity
from ocr_taskchild_picture tc, from ocr_taskchild_picture tc,
OA_USERAPPROVE_T uf, OA_USERAPPROVE_T uf,
ocr_picture op ocr_picture op
where tc.ID = uf.FORMID where tc.ID = uf.FORMID
and tc.PICTUREID = op.ID and tc.PICTUREID = op.ID
and op.suspiciousfile = 0 and op.suspiciousfile = 0
and tc.TENANTID = #{searchtenantid} and tc.TENANTID = #{searchtenantid}
<if test="thisLoginUserid != null"> <if test="thisLoginUserid != null">
and uf.USERID = #{thisLoginUserid} and uf.USERID = #{thisLoginUserid}
</if> </if>
<if test="izApprovalStatus != null ">
${izApprovalStatus.rulesOp}
(
#{izApprovalStatus.value} ${izApprovalStatus.dataOp} COALESCE(uf.STATSHIS, 1)
)
</if>
) as tcp ) as tcp
<include refid="Base_Where_union"> <include refid="Base_Where_union">
</include> </include>
<include refid="Base_Where_Union_New">
</include>
<if test="page != null"> <if test="page != null">
<if test="page.sortname != null"> <if test="page.sortname != null">
order by tcp.${page.sortname} ${page.sortorder} order by tcp.${page.sortname} ${page.sortorder}
@ -604,20 +692,28 @@
select tc.* select tc.*
from ocr_taskchild_picture tc from ocr_taskchild_picture tc
where tc.ASSIGNEE = #{searchassignee} where tc.ASSIGNEE = #{searchassignee}
and tc.TENANTID = #{searchtenantid} and tc.TENANTID = #{searchtenantid}
and tc.STATES = 2 and tc.STATES = 2
UNION UNION
select tc.* select tc.*
from ocr_taskchild_picture tc, from ocr_taskchild_picture tc,
OA_USERAPPROVE_T uf OA_USERAPPROVE_T uf
where tc.ID = uf.FORMID where tc.ID = uf.FORMID
and tc.TENANTID = #{searchtenantid} and tc.TENANTID = #{searchtenantid}
<if test="thisLoginUserid != null"> <if test="thisLoginUserid != null">
and uf.USERID = #{thisLoginUserid} and uf.USERID = #{thisLoginUserid}
</if> </if>
<if test="izApprovalStatus != null ">
${izApprovalStatus.rulesOp}
(
#{izApprovalStatus.value} ${izApprovalStatus.dataOp} COALESCE(uf.STATSHIS, 1)
)
</if>
) as tcp ) as tcp
<include refid="Base_Where_union"> <include refid="Base_Where_union">
</include> </include>
<include refid="Base_Where_Union_New">
</include>
</select> </select>
@ -784,7 +880,7 @@
and t1.picture_id != #{pictureId} and t1.picture_id != #{pictureId}
</if> </if>
<if test="oderName == 'similarityScore'"> <if test="oderName == 'similarityScore'">
order by t1.max_similarity ${oderType},t1.similarity_group_order asc,t2.submit_date_timestamp ${oderType} order by t1.max_similarity ${oderType},t1.similarity_group_order asc,t2.submit_date_timestamp asc
</if> </if>
<if test="oderName == 'createdate'"> <if test="oderName == 'createdate'">
order by t2.submit_date_timestamp ${oderType} order by t2.submit_date_timestamp ${oderType}

@ -282,6 +282,7 @@ ocr:
connectTimeout: 5000 #请求超时时间 毫秒 connectTimeout: 5000 #请求超时时间 毫秒
readTimeout: 60000 #接收超时时间 毫秒 readTimeout: 60000 #接收超时时间 毫秒
localImagePath: /server/data/images #图片本地存储地址 localImagePath: /server/data/images #图片本地存储地址
data-url: https://b-test.prevailcloud.com/pangu/jingwei/thirdclient/command/pb/approval/result
image: image:
similarityPath: http://47.93.59.251/ai/api/similarity/ similarityPath: http://47.93.59.251/ai/api/similarity/
classifyPath: http://47.93.59.251/api/classify/ classifyPath: http://47.93.59.251/api/classify/

@ -286,6 +286,7 @@ ocr:
connectTimeout: 5000 #请求超时时间 毫秒 connectTimeout: 5000 #请求超时时间 毫秒
readTimeout: 60000 #接收超时时间 毫秒 readTimeout: 60000 #接收超时时间 毫秒
localImagePath: /server/data/images #图片本地存储地址 localImagePath: /server/data/images #图片本地存储地址
data-url: https://b-test.prevailcloud.com/pangu/jingwei/thirdclient/command/pb/approval/result
image: image:
similarityPath: http://127.0.0.1:8000/api/similarity/ similarityPath: http://127.0.0.1:8000/api/similarity/
classifyPath: http://127.0.0.1:8000/api/classify/ classifyPath: http://127.0.0.1:8000/api/classify/

@ -1,3 +1,3 @@
spring: spring:
profiles: profiles:
active: dev active: pro

Loading…
Cancel
Save