Merge remote-tracking branch 'origin/test' into test

pull/146/head
guanzheng 1 year ago
commit dbff3d7f30

@ -128,6 +128,16 @@
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="col-sm-3 control-label is-required"> 默认任务图片:</label>
<div class="col-sm-9">
<input name="defaultPictureImg" id="defaultPictureImg" class="form-control" placeholder="默认任务图片" class="form-control" type="text" value="" >
</div>
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-sm-offset-5">

@ -0,0 +1,146 @@
<#include "/common/taglibs.html" />
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>查重模型日志</title>
<#include "/head/headlist.html" />
</head>
<body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight">
<div class="ibox ">
<div class="ibox-content">
<div class="ibox-content">
<form id="searcheuser" class="form-inline">
<!-- <div class="form-group">
<input name='search_callTime' id='search_callTime' class='form-control' placeholder='字段名称'/>
</div>-->
<div class="form-group">
<select class="form-control" name='callStatus' id='callStatus'>
<option value="1">成功</option>
<option value="2">失败</option>
<option value="3">异常</option>
</select>
</div>
<div class="form-group">
<a class="btn btn-primary btn-rounded btn-sm" onclick="refreshTable()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$('#searcheuser')[0].reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</div>
</form>
</div>
</div>
</div>
<div class="ibox-content">
<div class="row row-lg">
<div class="col-sm-12">
<div class="container-div">
<div class="btn-group-sm" id="_mybutton" role="group">
</div>
<br/>
</div>
</div>
<div class="col-sm-12 select-table table-striped" >
<table id="Post_list" ></table>
</div>
</div>
</div>
</div>
<#include "/head/footlist.html" />
</body>
</html>
<script type="text/javascript">
var _tableListPost;
var jsptoolbar = '';
var jspOperation = '';
jQuery(document).ready(function($){
parent.axgetXiaoyao("${ctx}/backstage/admin/user/toolsbarOperation?" + "resourceid=${resourceid}",null,true ,
function(data){
if(data.code == "OK"){
jsptoolbar = data.data.Jsptoolbar;
jspOperation = data.data.JspOperation;
$("#_mybutton").empty();
$(jsptoolbar).each(function (i, toolbar) {
if(toolbar.methodid != '104'){
$("#_mybutton").append('<button class="btn sbold ' + toolbar.img + '" onClick="' + toolbar.actionmethod + '(\'${resourceid}' + toolbar.methodid + '\')"> ' + ' <i class="fa ' + toolbar.methodkey + '"></i> ' + toolbar.text + '</button>&nbsp');
}
});
_tableListPost = $('#Post_list').bootstrapTable({
url: '${ctx}/ocr/picturelog/page',
pagination: true, //是否显示分页(*
pageNumber:1, //初始化加载第一页,默认第一页
pageSize: 10, //每页的记录行数(*
sidePagination: "server",
pageList: [10, 25, 50],
ajaxOptions:{
headers: {"logintoken": parent.getLoginToken()}
},
queryParams: function queryParams(params) {
return {
sortorder: params.order,
sortname: params.sort,
pagesize: params.limit,
start: (params.offset / params.limit) + 1,
callStatus: $("#callStatus").val(),
callTimeStart: params.callTimeStart,
callTimeEnd: params.callTimeEnd,
//search_callStatus:'{"value":"' + $("#search_callStatus").val() + '","op":"equal","type":"string"}',
//search_callTime:'{"value":"' + $("#search_callTime").val() + '","op":"equal","type":"string"}',
};
},
responseHandler:function(res){
return{"rows": res.data.records, "total": res.data.total};
},
columns: [
{checkbox: true},
{ width:100,valign: "middle",field:'callTime',title:'调用时间',sortable:true},
{ width:150,valign: "middle",field:'pictureUrl',title:'图片地址',sortable:true,
formatter: function(value,row,index){
/*if(undefined != row.pictureUrl && null != row.pictureUrl && "null" != row.pictureUrl ){
return '<img src="' + row.pictureUrl + '" style="width:34px;height: 50px;" onerror="noheadimg(this)">';
}else{
return row.pictureUrl;
}*/
return row.pictureUrl
}},
{ width:80,valign: "middle",field:'callStatus',title:'调用状态',sortable:true,
formatter:function(value,oData,index) {
var listOperation = "";
if(oData.callStatus == 1){
listOperation = "成功";
}
else if(oData.callStatus == 2) {
listOperation = "失败";
}
else if(oData.callStatus == 3) {
listOperation = "异常";
}
else{
listOperation = "成功";
}
return listOperation;
}
},
{ width:150,valign: "middle",field:'callMsg',title:'调用信息',sortable:true,}
]
});
}
}
);
});
function getIdSelections() {
return $.map(_tableListPost.bootstrapTable('getSelections'), function(row) {
return row.id
});
}
function refreshTable(sourceid){
_tableListPost.bootstrapTable('refreshOptions',{pageNumber:1});
}
</script>

@ -496,7 +496,7 @@ public class FlowTaskController extends BaseController {
Map<String, Object> query = searchQuery.getQuery();
flowTaskService.getFinalProcessInstances(query, pageUtils);
flowTaskService.getFinalProcessInstances(query, pageUtils,user);
return ResultVoUtil.success(pageUtils);
}
@ -676,8 +676,8 @@ public class FlowTaskController extends BaseController {
})
@GetMapping("/repetitionTask")
@ResponseBody
public ResultVo repetitionTask() {
return flowTaskService.repetitionTask();
public ResultVo repetitionTask(@RequestParam(value = "type",required = false,defaultValue = "1") Integer type) {
return flowTaskService.repetitionTask(type);
}
/**
@ -692,8 +692,9 @@ public class FlowTaskController extends BaseController {
@GetMapping("/repetitionTaskList")
@ResponseBody
public ResultVo repetitionTaskList(@RequestParam(name = "pageNo") Integer pageNo,
@RequestParam(name = "pageSize") Integer pageSize) {
Page<OcrTaskchildPicture> result = flowTaskService.repetitionTaskList(pageNo, pageSize);
@RequestParam(name = "pageSize") Integer pageSize,
@RequestParam(value = "type",required = false,defaultValue = "1") Integer type) {
Page<OcrTaskchildPicture> result = flowTaskService.repetitionTaskList(pageNo, pageSize,type);
return ResultVoUtil.success(result);
}
}

@ -0,0 +1,53 @@
package cn.jyjz.flowable.listener;
import org.flowable.engine.delegate.DelegateExecution;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
*
* flowable
* 1nrOfInstances3
* 2nrOfActiveInstances
* 3 nrOfCompletedInstances
*
* flag
* return flag
*/
@Component("multilnstanceCompleteTask")
public class MulitiInstanceCompleteTask implements Serializable {
private Logger log = LoggerFactory.getLogger(MulitiInstanceCompleteTask.class);
/**
*
* @param execution
* @return
* false
* true
*/
public boolean completeTask(DelegateExecution execution) {
//当前获取的会签任务数量
int nrOfActiveInstances = (int) execution.getVariable("nrOfActiveInstances");
//总的会签任务数量
int nrOfInstances = (int) execution.getVariable("nrOfInstances");
//已经完成的会签任务数量
int nrOfCompletedInstances = (int) execution.getVariable("nrOfCompletedInstances");
log.info("总的会签任务数量:" + nrOfInstances
+ "当前获取的会签任务数量:" + nrOfActiveInstances
+ " - " + "已经完成的会签任务数量:" + nrOfInstances);
if(nrOfInstances >= nrOfCompletedInstances){
return true;
}else{
return false;
}
}
}

@ -0,0 +1,16 @@
package cn.jyjz.flowable.listener;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;
import java.io.Serializable;
@Component("mulitiInstanceTaskListener")
public class MulitiInstanceTaskListener implements Serializable {
public void completeListener(DelegateExecution execution){
// System.out.println("任务:"+execution.getId());
// System.out.println("persons:" + execution.getVariable("persons"));
// System.out.println("person" + execution.getVariable("person"));
}
}

@ -13,13 +13,11 @@ import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.task.api.Task;
@ -38,7 +36,18 @@ public interface IFlowTaskService {
Category viewForm(String processId, HttpServletRequest request);
Integer complete(FlowApprove approve, UserToken userToken, List<String> formIds);
/**
*
* @param processInstanceId
* @return
*/
public UserTask getNextTasks(String processInstanceId );
/**
*
* @param task
* @return
*/
public UserTask getNextTasks(Task task);
/**
* 退
@ -90,9 +99,10 @@ public interface IFlowTaskService {
*
* @param query
* @param pageUtils
* @param user
* @return
*/
public void getFinalProcessInstances(Map<String, Object> query, PageUtils<OcrTaskchildPicture> pageUtils);
public void getFinalProcessInstances(Map<String, Object> query, PageUtils<OcrTaskchildPicture> pageUtils, User user);
/**
@ -143,7 +153,13 @@ public interface IFlowTaskService {
* @param processInstanceId
*/
public FlowTaskCompleteVO updateNowTaskAssignee(String processInstanceId, String processDefinitionId,String deptid);
/**
*
* @param userTask
* @param startUserId
* @return
*/
public List<String> getAssignee(UserTask userTask,String startUserId);
/**
*
*
@ -177,7 +193,7 @@ public interface IFlowTaskService {
*
* @return
*/
ResultVo repetitionTask();
ResultVo repetitionTask(Integer type);
Page<OcrTaskchildPicture> repetitionTaskList(Integer pageNo, Integer pageSize);
Page<OcrTaskchildPicture> repetitionTaskList(Integer pageNo, Integer pageSize,Integer type);
}

@ -17,6 +17,8 @@ import cn.jyjz.xiaoyao.common.base.util.StringUtils;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.oa.from.service.UserViewapproeService;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.MultiInstanceLoopCharacteristics;
import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
@ -29,6 +31,7 @@ import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Slf4j
@Service
@ -84,6 +87,20 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
try {
variables.put("businessKey", businessKey);
//获取下一个节点
UserTask userTask = this.flowTaskService.getNextTasks(procDefId);
if(null != userTask){
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
// 会签节点
if (Objects.nonNull(multiInstance)) {
List<String> loginnames = flowTaskService.getAssignee(userTask,userName);
if(null != loginnames && !loginnames.isEmpty()){
variables.put("persons",loginnames);
}
}
}
processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables);
if (null != iFormCustomService) {
@ -156,6 +173,20 @@ public class FlowInstanceServiceImpl extends FlowServiceFactory implements IFlow
try {
variables.put("businessKey", businessKey);
//获取下一个节点
UserTask userTask = this.flowTaskService.getNextTasks(procDefId);
if(null != userTask){
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
// 会签节点
if (Objects.nonNull(multiInstance)) {
List<String> loginnames = flowTaskService.getAssignee(userTask,userName);
if(null != loginnames && !loginnames.isEmpty()){
variables.put("persons",loginnames);
}
}
}
processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables);
if (null != iFormCustomService) {

@ -16,8 +16,6 @@ import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.oa.from.dataDao.FlowableccMybatisDao;
import cn.jyjz.xiaoyao.oa.from.dataDao.IHisFlowableActinstDao;
import cn.jyjz.xiaoyao.oa.from.dataDao.IRunFlowableActinstDao;
import cn.jyjz.flowable.domain.dto.HistoricTaskInstanceDto;
import cn.jyjz.flowable.factory.FlowServiceFactory;
import cn.jyjz.flowable.service.IFlowTaskService;
@ -32,11 +30,11 @@ import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import cn.jyjz.xiaoyao.oa.from.dataobject.Flowablecc;
import cn.jyjz.xiaoyao.oa.from.dataobject.Userdistionary;
import cn.jyjz.xiaoyao.oa.from.service.*;
import cn.jyjz.xiaoyao.oa.from.vo.FlowUnionVo;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedContentVo;
import cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.service.*;
import cn.jyjz.xiaoyao.ocr.util.SearchParaFormatting;
@ -107,7 +105,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
@Resource
private DepartmentService departmentService;
@Resource
private IHisFlowableActinstDao hisFlowableActinstDao;
private OcrCheckDescribeHisService ocrCheckDescribeHisService;
@Resource
private OcrUsersearchService ocrUsersearchService;
@ -117,6 +115,8 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
@Resource
private IOcrMsgService ocrMsgService;
@Resource
private UserdistionaryService userdistionaryService;
@Override
public void myTodoTaskList(PageUtils vo, HttpServletRequest request) {
@ -434,6 +434,84 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
public UserTask getNextTasks(String processDefinitionId) {
//流程实例id
//String processInstanceId = "5b945750-81db-11e9-a576-1a73f8e23adc";
// 获取流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId)
.singleResult();
// 获取BpmnModel
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
// 获取所有的FlowElement包括开始事件、结束事件、用户任务等
List<FlowElement> flowElements = (List<FlowElement>) bpmnModel.getMainProcess().getFlowElements();
// 遍历FlowElement
for (FlowElement targetFlowElement : flowElements) {
//用户任务
if (targetFlowElement instanceof UserTask) {
UserTask userTask = (UserTask) targetFlowElement;
return userTask;
} else if (targetFlowElement instanceof ExclusiveGateway) {
setExclusiveGateway(targetFlowElement);
}
}
return null;
}
public UserTask getNextTasks(Task task) {
//获取流程发布Id信息
String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult().getProcessDefinitionId();
//获取bpm对象
BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId);
//传节点定义key 获取当前节点
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
//输出连线
List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
//遍历返回下一个节点信息
for (SequenceFlow outgoingFlow : outgoingFlows) {
//类型自己判断
FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
//用户任务
if (targetFlowElement instanceof UserTask) {
UserTask userTask = (UserTask) targetFlowElement;
return userTask;
} else if (targetFlowElement instanceof ExclusiveGateway) {
setExclusiveGateway(targetFlowElement);
}
}
return null;
}
private void setExclusiveGateway(FlowElement targetFlow) {
//排他网关,获取连线信息
List<SequenceFlow> targetFlows = ((ExclusiveGateway) targetFlow).getOutgoingFlows();
for (SequenceFlow sequenceFlow : targetFlows) {
//目标节点信息
FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement();
if (targetFlowElement instanceof UserTask) {
// do something
} else if (targetFlowElement instanceof EndEvent) {
// do something
} else if (targetFlowElement instanceof ServiceTask) {
// do something
} else if (targetFlowElement instanceof ExclusiveGateway) {
//递归寻找
setExclusiveGateway(targetFlowElement);
} else if (targetFlowElement instanceof SubProcess) {
// do something
}
}
}
/**
*
*/
@ -481,6 +559,20 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
*/
private void disposeSucceedTask(Task task, ProcessDefinition processDefinition, Map<String, Object> variables,
OcrTaskchildPicture model, String formId, UserToken userToken, FlowApprove approve, String deptid) throws Exception {
//获取下一个节点
UserTask userTask = this.getNextTasks(task);
if (null != userTask) {
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
// 会签节点
if (Objects.nonNull(multiInstance)) {
List<String> loginnames = this.getAssignee(userTask, model.getCreateuser());
if (null != loginnames && !loginnames.isEmpty()) {
variables.put("persons", loginnames);
}
}
}
//进入下一个节点
taskService.complete(task.getId(), variables);
updateAssignee(task.getProcessInstanceId(), task.getProcessDefinitionId(), processDefinition, deptid);
@ -491,16 +583,17 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
OcrTaskchildPicture childPicture = ocrTaskchildPictureService.getById(Long.parseLong(formId));
Task taskData = null;
if (null != taskList && !taskList.isEmpty()) {
taskData = taskList.get(0);
if (taskList.size() > 1) {
List<String> taskIds = taskList.stream().map(Task::getId).collect(Collectors.toList());
List<String> taskNames = taskList.stream().map(Task::getName).collect(Collectors.toList());
childPicture.setTaskId(String.join(",", taskIds));
childPicture.setTaskname(String.join(",", taskNames));
}else{
taskData = taskList.get(0);
} else {
childPicture.setTaskId(taskData.getId());
childPicture.setTaskname(taskData.getName());
}
taskData = taskList.get(0);
}
if (ObjectUtils.isEmpty(taskData)) {
model.setFinishtime(System.currentTimeMillis());
@ -512,8 +605,9 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
//判断节点上的描述字段是否伟finale_judgment,如果是,记录到终审表中,如果终审表已经存在,不再重复记录
if (StringUtils.isNotBlank(taskData.getDescription()) && taskData.getDescription().equals(SystemConstantsOa.OA_TASK_COMPLETE_FINALE_FORM)) {
childPicture.setIsFinal(1);
User user = userService.findByLoginname(formData.getAssignee());
userFinalService.save(user.getId().toString(), formId);
String[] split = formData.getAssignee().split(",");
List<cn.jyjz.xiaoyao.common.base.vo.User> userList = userTokenService.findByLoginNameList(split);
userFinalService.save(userList, formId);
}
this.sendMsg(childPicture, userToken);
@ -688,6 +782,49 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
return activeActivityIds;
}
/**
*
*
* @param userTask
* @param loginname
* @return
*/
public List<String> getAssignee(UserTask userTask, String loginname) {
if (null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1) {
//获取候选用户集合
List<String> loginnames = userTask.getCandidateUsers();
//顺序设置审批用户
return loginnames;
} else {
//得到候选组
List<String> candidateGroups = userTask.getCandidateGroups();
if (null != candidateGroups && !candidateGroups.isEmpty()) {
List<User> listusers = new ArrayList<>();
for (String groupid : candidateGroups) {
//排除不在同一个公司的人员
List<Userdistionary> userdistionaryList = userdistionaryService.selectListByCandidateid(groupid, loginname);
List<Long> listuserid = userdistionaryList.stream().map(Userdistionary::getUserid).collect(Collectors.toList());
if (null != listuserid && !listuserid.isEmpty()) {
listusers.addAll(this.userService.selectUserById(listuserid));
}
}
if (null != listusers && !listusers.isEmpty()) {
List<String> loginnames = listusers.stream().map(User::getLoginname).collect(Collectors.toList());
return loginnames;
}
}
}
return null;
}
/**
*
*
@ -703,6 +840,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
//记录审批人信息
StringBuffer assignee = new StringBuffer();
int taskIndex = 0;
for (Task task : taskList) {
//传节点定义key获取当前节点
@ -710,33 +848,75 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
if (flowElement instanceof UserTask && StringUtils.isBlank(task.getAssignee())) {
UserTask userTask = (UserTask) flowElement;
//如果审批不存在,需要在候选组中查询
if (StringUtils.isBlank(userTask.getAssignee())) {
//得到候选人
List<String> candidateUsers = userTask.getCandidateUsers();
if (null != candidateUsers && !candidateUsers.isEmpty()) {
Random rand = new Random();
taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size())));
}
MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics();
// 会签节点
if (Objects.nonNull(multiInstance)) {
if (null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1) {
//获取候选用户集合
List<String> loginnames = userTask.getCandidateUsers();
//顺序设置审批用户
taskService.setAssignee(task.getId(), loginnames.get(taskIndex));
} else {
//得到候选组
List<String> candidateGroups = userTask.getCandidateGroups();
if (null != candidateGroups && !candidateGroups.isEmpty()) {
flowTaskCompleteVO = new FlowTaskCompleteVO();
flowTaskCompleteVO.setTaskId(task.getId());
List<User> listusers = new ArrayList<>();
for (String groupid : candidateGroups) {
//获取发起人员信息
HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
//发起人员登录账号
String startUserId = hi.getStartUserId();
//排除不在同一个公司的人员
List<Userdistionary> userdistionaryList = userdistionaryService.selectListByCandidateid(groupid, startUserId);
List<Long> listuserid = userdistionaryList.stream().map(Userdistionary::getUserid).collect(Collectors.toList());
listusers.addAll(this.userService.selectUserById(listuserid));
}
if (null != listusers && !listusers.isEmpty()) {
List<String> loginnames = listusers.stream().map(User::getLoginname).collect(Collectors.toList());
//得到候选组
List<String> candidateGroups = userTask.getCandidateGroups();
if (null != candidateGroups && !candidateGroups.isEmpty()) {
String loginuser = null;
for (String groupid : candidateGroups) {
//获取发起人员信息
HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
//发起人员登录账号
String startUserId = hi.getStartUserId();
//通过候选组主键,查询审批人员信息,并自动拾取
loginuser = candidateuserService.getClaimUser(startUserId, groupid, deptid);
if (StringUtils.isNotBlank(loginuser)) {
taskService.claim(task.getId(), loginuser);
//顺序设置审批用户
taskService.setAssignee(task.getId(), loginnames.get(taskIndex));
}
}
}
taskIndex++;
} else {
//如果审批不存在,需要在候选组中查询
if (StringUtils.isBlank(userTask.getAssignee())) {
//得到候选人
List<String> candidateUsers = userTask.getCandidateUsers();
if (null != candidateUsers && !candidateUsers.isEmpty()) {
Random rand = new Random();
taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size())));
}
//得到候选组
List<String> candidateGroups = userTask.getCandidateGroups();
if (null != candidateGroups && !candidateGroups.isEmpty()) {
String loginuser = null;
for (String groupid : candidateGroups) {
//获取发起人员信息
HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
//发起人员登录账号
String startUserId = hi.getStartUserId();
//通过候选组主键,查询审批人员信息,并自动拾取
loginuser = candidateuserService.getClaimUser(startUserId, groupid, deptid);
if (StringUtils.isNotBlank(loginuser)) {
taskService.claim(task.getId(), loginuser);
}
}
}
}
}
@ -994,9 +1174,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
*
* @param query
* @param pageUtils
* @param user
* @return
*/
public void getFinalProcessInstances(Map<String, Object> query, PageUtils<OcrTaskchildPicture> pageUtils) {
public void getFinalProcessInstances(Map<String, Object> query, PageUtils<OcrTaskchildPicture> pageUtils, User user) {
ParamterPage paramterPage = new ParamterPage();
paramterPage.setStart((pageUtils.getCurrPage() - 1) * pageUtils.getPageSize());
paramterPage.setPagesize(pageUtils.getPageSize());
@ -1104,7 +1285,18 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
// taskchildPicture.setTransferRecords(historicTaskInstanceDtos);
// }
// }
for (OcrTaskchildPicture ocrTaskchildPicture : list) {
String assignee = ocrTaskchildPicture.getAssignee();
if (assignee.contains(",")) {
String[] split = assignee.split(",");
for (int i = 0; i < split.length; i++) {
if (user.getLoginname().equals(split[i])) {
String[] taskIds = ocrTaskchildPicture.getTaskId().split(",");
ocrTaskchildPicture.setTaskId(taskIds[i]);
}
}
}
}
pageUtils.setTotalCount(count.intValue());
pageUtils.setList(list);
}
@ -1191,7 +1383,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
for (FlowUnionVo flowUnionVo : list) {
if (flowUnionVo.getStates() != null) {
String stateText;
String stateText = "";
switch (flowUnionVo.getStates()) {
case 1:
stateText = "撤销";
@ -1200,13 +1392,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
stateText = "审批中";
break;
case 3:
stateText = "审批通过";
stateText = "通过";
break;
case 5:
stateText = "审批未通过";
break;
default:
stateText = "未知状态";
stateText = "不通过";
break;
}
// 将中文状态赋值给 flowUnionVo 的状态属性
@ -1372,13 +1561,24 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
//补充历史状态名称,检查补充节点信息
for (OcrTaskchildPictureAppro ocrTaskchildPictureAppro : list) {
String assignee = ocrTaskchildPictureAppro.getAssignee();
//审批节点 当前如果没有历史操作,则将当前节点赋值到历史审批节点中.
if (StringUtils.isBlank(ocrTaskchildPictureAppro.getTasknamehis())) {
ocrTaskchildPictureAppro.setTasknamehis(ocrTaskchildPictureAppro.getTaskname());
}else{
if (assignee.contains(",")) {
String[] split = assignee.split(",");
for (int i = 0; i < split.length; i++) {
if (user.getLoginname().equals(split[i])) {
String[] taskIds = ocrTaskchildPictureAppro.getTasknamehis().split(",");
ocrTaskchildPictureAppro.setTasknamehis(taskIds[i]);
}
}
}
}
if (ocrTaskchildPictureAppro.getStatshis() != null) {
String stateText;
String stateText = "";
switch (ocrTaskchildPictureAppro.getStatshis()) {
case 1:
stateText = "待审批";
@ -1389,9 +1589,6 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
case 3:
stateText = "不通过";
break;
default:
stateText = "未知状态";
break;
}
// 将中文状态赋值给 flowUnionVo 的状态属性
ocrTaskchildPictureAppro.setStatshisText(stateText);
@ -1424,7 +1621,7 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
ocrTaskchildPictureApproVo.setProjectName(one.getFromprojectname());//项目名称
ocrTaskchildPictureApproVo.setCustomerLevel(one.getFromCustomerLevel());//客户级别
ocrTaskchildPictureApproVo.setReleaseArea(one.getFromCity());//拜访城市
ocrTaskchildPictureApproVo.setTaskIndex(one.getTaskNodeIndex()==null?"1":one.getTaskNodeIndex());
ocrTaskchildPictureApproVo.setTaskIndex(one.getTaskNodeIndex() == null ? one.getTasknode() : one.getTaskNodeIndex());
listNew.add(ocrTaskchildPictureApproVo);
}
@ -1758,29 +1955,58 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
}
@Override
public ResultVo repetitionTask() {
List<RepeatedContentVo> repeatedContentVoList = flowableccMybatisDao.repetitionTask();
public ResultVo repetitionTask(Integer type) {
List<RepeatedContentVo> repeatedContentVoList = flowableccMybatisDao.repetitionTask(type);
List<String> formIdsToUpdate = new ArrayList<>();
if (repeatedContentVoList.size() > 0 && repeatedContentVoList.get(0).getRepeatedTaskList().size() > 0) {
String formIds = repeatedContentVoList.get(0).getRepeatedTaskList().get(0).getFormId();
String[] formIdsArray = formIds.split(",");
for (String formId : formIdsArray) {
formIdsToUpdate.add(formId.trim()); // 去除字符串首尾的空格并添加到集合中
if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(repeatedContentVoList)) {
List<OcrCheckDescribeHis> checkDescribeHis = new ArrayList<>();
for (RepeatedContentVo contentVo : repeatedContentVoList) {
if (org.apache.commons.lang3.StringUtils.isNotBlank(contentVo.getPictureIds())) {
String[] pictureIds = contentVo.getPictureIds().split(",");
formIdsToUpdate.addAll(Arrays.asList(pictureIds));
List<OcrCheckDescribeHis> list = ocrCheckDescribeHisService.list(new LambdaQueryWrapper<OcrCheckDescribeHis>().in(OcrCheckDescribeHis::getPictureId, pictureIds));
Map<String, List<OcrCheckDescribeHis>> resultMap = new HashMap<>();
if (!CollectionUtils.isEmpty(list)) {
resultMap = list.stream().collect(Collectors.groupingBy(OcrCheckDescribeHis::getPictureId));
}
for (String pictureId : pictureIds) {
Set<String> set = new HashSet<>();
OcrCheckDescribeHis describeHis;
List<OcrCheckDescribeHis> ocrCheckDescribeHis = resultMap.get(pictureId);
if (!CollectionUtils.isEmpty(ocrCheckDescribeHis)) {
describeHis = ocrCheckDescribeHis.get(0);
String[] split = describeHis.getCheckResult().split(",");
set.addAll(Arrays.asList(split));
} else {
describeHis = new OcrCheckDescribeHis();
}
set.addAll(Arrays.asList(pictureIds));
set.remove(pictureId);
describeHis.setDescribe(contentVo.getContent());
describeHis.setPictureId(pictureId);
describeHis.setCheckResult(String.join(",", set));
checkDescribeHis.add(describeHis);
}
}
}
ocrCheckDescribeHisService.saveOrUpdateBatch(checkDescribeHis);
UpdateWrapper<OcrTaskchildPicture> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("PICTUREID", formIdsToUpdate)
.eq("is_repeated_nodules", 0);
OcrTaskchildPicture updateEntity = new OcrTaskchildPicture();
updateEntity.setIsRepeatedNodules(1);
ocrTaskchildPictureService.update(updateEntity, updateWrapper);
}
return ResultVoUtil.success(repeatedContentVoList);
}
@Override
public Page<OcrTaskchildPicture> repetitionTaskList(Integer pageNo, Integer pageSize) {
public Page<OcrTaskchildPicture> repetitionTaskList(Integer pageNo, Integer pageSize, Integer type) {
Page<OcrTaskchildPicture> page = new Page<>(pageNo, pageSize);
Page<OcrTaskchildPicture> result = flowableccMybatisDao.repetitionTaskList(page);
Page<OcrTaskchildPicture> result = flowableccMybatisDao.repetitionTaskList(page, type);
return result;
}

@ -8,6 +8,7 @@ import cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@ -39,7 +40,7 @@ public interface FlowableccMybatisDao extends BaseMapper<Flowablecc> {
*/
List<UserDistionaryVo> selectUserByFromid(String fromid);
List<RepeatedContentVo> repetitionTask();
List<RepeatedContentVo> repetitionTask(@Param("type") Integer type);
Page<OcrTaskchildPicture> repetitionTaskList(Page<OcrTaskchildPicture> page);
Page<OcrTaskchildPicture> repetitionTaskList(Page<OcrTaskchildPicture> page, @Param("type") Integer type);
}

@ -1,7 +1,11 @@
package cn.jyjz.xiaoyao.oa.from.service;
import cn.jyjz.xiaoyao.common.base.vo.User;
import cn.jyjz.xiaoyao.oa.from.dataobject.UserFinal;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseService;
import java.util.List;
/**
*
*/
@ -13,5 +17,5 @@ public interface UserFinalService extends BaseService<UserFinal> {
* @param formid
* @return truefalse
*/
public boolean save(String userid,String formid);
public boolean save(List<User> userid, String formid);
}

@ -1,40 +1,44 @@
package cn.jyjz.xiaoyao.oa.from.service.impl;
import cn.jyjz.xiaoyao.common.base.vo.User;
import cn.jyjz.xiaoyao.oa.from.dataDao.UserFinalMybatisDao;
import cn.jyjz.xiaoyao.oa.from.dataobject.UserFinal;
import cn.jyjz.xiaoyao.oa.from.dataobject.Userapprove;
import cn.jyjz.xiaoyao.oa.from.service.UserFinalService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
*
*/
@Service
@Slf4j
public class UserFinalServiceImpl extends BaseServiceImpl<UserFinalMybatisDao, UserFinal> implements UserFinalService {
@Autowired
private UserFinalMybatisDao userFinalMybatisDao;
@Override
public boolean save(String userid, String formid) {
//判断是否存在重复表单主键
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("FORMID",formid);
Long listcount = count(queryWrapper);
if(listcount.intValue() > 0 ){
return true;
}
UserFinal userFinal = new UserFinal();
userFinal.setUserid(Long.parseLong(userid));
userFinal.setFormid(Long.parseLong(formid));
return this.save(userFinal);
}
public class UserFinalServiceImpl extends BaseServiceImpl<UserFinalMybatisDao, UserFinal> implements UserFinalService {
@Autowired
private UserFinalMybatisDao userFinalMybatisDao;
@Override
public boolean save(List<User> userid, String formid) {
//判断是否存在重复表单主键
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("FORMID", formid);
Long listcount = count(queryWrapper);
if (listcount.intValue() > 0) {
return true;
}
List<UserFinal> list = new ArrayList<>();
for (User user : userid) {
UserFinal userFinal = new UserFinal();
userFinal.setUserid(user.getId());
userFinal.setFormid(Long.parseLong(formid));
list.add(userFinal);
}
return this.saveBatch(list);
}
}

@ -21,6 +21,8 @@ public class RepeatedContentVo {
private String imgUrl;
private String pictureIds;
private List<RepeatedTaskVo> repeatedTaskList;

@ -28,4 +28,6 @@ public class RepeatedTaskVo {
private String fromTime;
private String updateTime;
private String pictureId;
}

@ -3,6 +3,9 @@ package cn.jyjz.xiaoyao.ocr.api;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
import org.apache.commons.compress.utils.Lists;
import java.util.List;
/**
* api
@ -33,4 +36,8 @@ public interface PrevailCloudApi {
*/
boolean startImageDownloadMonitoring(String localImagePath) throws Exception;
List<PictureSourceResult> getAllPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter);
List<PictureSourceResult> getPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter);
}

@ -6,7 +6,11 @@ import cn.jyjz.xiaoyao.common.base.util.SpringUtils;
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.api.utils.*;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiConfig;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiHelper;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
import cn.jyjz.xiaoyao.ocr.api.utils.RequestData;
import cn.jyjz.xiaoyao.ocr.api.utils.ResultData;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPicture;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
@ -16,16 +20,14 @@ import cn.jyjz.xiaoyao.ocr.util.httputil.HttpMethod;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import liquibase.pro.packaged.S;
import com.google.common.collect.Lists;
import lombok.SneakyThrows;
import org.apache.commons.collections.SequencedHashMap;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -73,17 +75,17 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
@Override
public ApiPage<PictureSourceResult> pullPictureSource(PictureSourceParameter pictureSourceParameter) throws Exception {
//1.检查api配置是否正常
if(!apiConfig.checkConfig()){
if (!apiConfig.checkConfig()) {
return null;
}
//2.对象转map
Map<String, Object> queryParam = BeanUtil.beanToMap(pictureSourceParameter);
Map<String,String> queryParamStr = new HashMap<>();
Map<String, String> queryParamStr = new HashMap<>();
//map值转string 注意对日期类型进行操作,加密包要求值全部为string
for (String key : queryParam.keySet()) {
if(queryParam.get(key)!=null){
queryParamStr.put(key,queryParam.get(key).toString());
if (queryParam.get(key) != null) {
queryParamStr.put(key, queryParam.get(key).toString());
}
}
@ -92,36 +94,36 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
String tenantNo = pictureSourceParameter.getTenantNo().toString();
String json = JSONObject.toJSONString(queryParam);
System.out.println(json);
RequestData requestData = ApiHelper.buildRequest(tenantNo, apiConfig.getAccessKey(), apiConfig.getAccessCode(),json);
RequestData requestData = ApiHelper.buildRequest(tenantNo, apiConfig.getAccessKey(), apiConfig.getAccessCode(), json);
//组装请求参数
String url = apiConfig.getInterfaceDomain()+pictureSourceUrl;
String url = apiConfig.getInterfaceDomain() + pictureSourceUrl;
String requestBodyJson = JSONObject.toJSONString(requestData);
// String requestBodyJson = "{\"accessKey\":\"7390F0221A1A73D8E13F8C8BB96F33B0\",\"data\":\"gzUtN5Mt24_fbDDMK3wLop8Tgu68xLCVy3Wzp9BcXnkxnCiPg_D2TNEXnQ68-Y-GhGYYcD7Iwg8juZTx1m5v4NkDvKvEwdvjQvZnMDTRYbqtHrwgVLAvUGotIMTckDY67yo2Ku52vWedjYpzzDseHwiIGVcIl-u1CljEbyjLzJzIf6oXfD7qKjOYnxKjfjp11k0IlvsPdS-mgNXTHcBei5jOFrYmZrE2y4v9bI5n1QE\",\"signature\":\"0bmIbhhybDcGeyX4ao5gSPZQeaY8G2JRh3nRt7NC7qw\",\"tenantCode\":\"1673196576094806016\",\"timestamp\":1711971774448}";
//入参
System.out.println("入参数据:"+requestBodyJson);
System.out.println("入参数据:" + requestBodyJson);
HttpParamers httpParamers = new HttpParamers(HttpMethod.POST);
httpParamers.setJsonParamer(requestBodyJson);
//发起请求
String responseJsonStr = HttpClient.doPost(url,httpParamers,null,apiConfig.getConnectTimeout(),apiConfig.getReadTimeout());
String responseJsonStr = HttpClient.doPost(url, httpParamers, null, apiConfig.getConnectTimeout(), apiConfig.getReadTimeout());
System.out.println(responseJsonStr);
ResultData<String> resultData =JSONUtil.toBean(responseJsonStr,ResultData.class);
ResultData<String> resultData = JSONUtil.toBean(responseJsonStr, ResultData.class);
//解密请求数据
if(resultData.getStatus()==100){
if (resultData.getStatus() == 100) {
//解析基础数据
String data = ApiHelper.decryptResponse(apiConfig.getAccessCode(), resultData);
ApiPage<String> apiPage = JSONUtil.toBean(data,ApiPage.class);
ApiPage<String> apiPage = JSONUtil.toBean(data, ApiPage.class);
//解析数据结果为List
List<PictureSourceResult> listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()),PictureSourceResult.class);
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;
}else{
logger.debug("请求图片接口数据失败,参数:{},返回值:{}",json,responseJsonStr);
} else {
logger.debug("请求图片接口数据失败,参数:{},返回值:{}", json, responseJsonStr);
}
return null;
@ -131,36 +133,37 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
public void sendFlowTaskResult(String tenantId, String data) throws Exception {
ResultData<String> stringResultData = ApiHelper.buildResponse(apiConfig.getAccessCode(), data);
// RequestData requestData = ApiHelper.buildRequest(tenantId, apiConfig.getAccessKey(), apiConfig.getAccessCode(),data);//组装请求参数
String url = apiConfig.getInterfaceDomain()+sendResultUrl;
String url = apiConfig.getInterfaceDomain() + sendResultUrl;
String requestBodyJson = JSONObject.toJSONString(stringResultData);
//入参
System.out.println("入参数据:"+requestBodyJson);
System.out.println("入参数据:" + requestBodyJson);
HttpParamers httpParamers = new HttpParamers(HttpMethod.POST);
httpParamers.setJsonParamer(requestBodyJson);
//发起请求
String responseJsonStr = HttpClient.doPost(url,httpParamers,null,apiConfig.getConnectTimeout(),apiConfig.getReadTimeout());
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);
queryParam.put("tenantNo", tenantNo);
String json = JSONObject.toJSONString(queryParam);
RequestData requestData = ApiHelper.buildRequest(tenantNo+"", apiConfig.getAccessKey(), apiConfig.getAccessCode(),json);
String url = apiConfig.getInterfaceDomain()+tenantSourceUrl;
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());
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){;
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);
ApiPage<String> apiPage = JSONUtil.toBean(data, ApiPage.class);
System.out.println(apiPage);
//解析数据结果为List
// List<PictureSourceResult> listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()),PictureSourceResult.class);
@ -191,7 +194,7 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
ocrPictureLambdaQueryWrapper.isNull(OcrPicture::getLocalpictrueurl);
List<OcrPicture> ocrPictureList = new ArrayList<>();
ocrPictureList = ocrPictureService.list(ocrPictureLambdaQueryWrapper);
logger.debug("待执行下载图片数量:{}",ocrPictureList.size());
logger.debug("待执行下载图片数量:{}", ocrPictureList.size());
for (OcrPicture pictureOne : ocrPictureList) {
// 创建 PictureImgToLocalEntity 对象并赋值
PictureImgToLocalEntity entity = new PictureImgToLocalEntity();
@ -204,9 +207,9 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
// 将对象添加到下载图片队列中
boolean isAddedToQueue = false;
while (!isAddedToQueue) {
isAddedToQueue =TaskQueue.pictureImgToLocalPushData(entity);
isAddedToQueue = TaskQueue.pictureImgToLocalPushData(entity);
if (!isAddedToQueue) {
logger.info("图片下载监测-添加队列失败,等待五秒后继续进行添加,图片id:{}",entity.getPictureId());
logger.info("图片下载监测-添加队列失败,等待五秒后继续进行添加,图片id:{}", entity.getPictureId());
Thread.sleep(5000);
}
}
@ -217,6 +220,43 @@ public class PrevailCloudApiImpl implements PrevailCloudApi {
thread.start();
return true;
}
@Override
public List<PictureSourceResult> getAllPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter) {
ApiPage<PictureSourceResult> apiPage = null;
List<PictureSourceResult> result = Lists.newArrayListWithCapacity(pictureSourceParameter.getPageSize());
try {
apiPage = this.pullPictureSource(pictureSourceParameter);
} catch (Exception e) {
e.printStackTrace();
}
if (apiPage == null || CollectionUtils.isEmpty(apiPage.getRecords())) {
return result;
}
result.addAll(apiPage.getRecords());
// 如果pageSize超过实际的数据量说明数据已经查完了
if (apiPage.getRecords().size() < pictureSourceParameter.getPageSize()) {
return result;
}
// 数据没查完就翻页
pictureSourceParameter.setPageNo(pictureSourceParameter.getPageNo() + 1);
result.addAll(this.getAllPictureSourceResultApiPage(pictureSourceParameter));
return result;
}
@Override
public List<PictureSourceResult> getPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter) {
ApiPage<PictureSourceResult> apiPage = null;
try {
apiPage = this.pullPictureSource(pictureSourceParameter);
} catch (Exception e) {
e.printStackTrace();
}
return apiPage == null ? Lists.newArrayList() : apiPage.getRecords();
}
}

@ -48,6 +48,11 @@ public class ApiConfig {
private String localImagePath;
/**
*
*/
private String defaultPictureImg;
/**
*
* @return

@ -134,16 +134,6 @@ public class ApiTestController {
if (StringUtils.isBlank(accountNoStr)) {
return "业务主体不能为空";
}
// Long tenantNo = Long.parseLong(request.getParameter("tenantNo"));
// Long accountNo = Long.parseLong(request.getParameter("accountNo"));
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
DateTime dateTime = DateUtil.parse(beginStr + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
// DateTime dateTime = DateUtil.parse("2024-03-31 07:00:000","yyyy-MM-dd HH:mm:ss");
Instant binstant = dateTime.toInstant();
DateTime dateTime1 = DateUtil.parse(endStr + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
// DateTime dateTime1 = DateUtil.parse("2024-03-31 09:00:00","yyyy-MM-dd HH:mm:ss");
Instant einstant = dateTime1.toInstant();
List<Department> departments = departmentMybatisDao.selectList(new QueryWrapper<>());
if (CollectionUtils.isEmpty(departments)) {
@ -152,10 +142,6 @@ public class ApiTestController {
Map<Long, Department> departmentMap = Maps.newHashMapWithExpectedSize(departments.size());
for (Department department : departments) {
if (department.getDlevel() == 0) {
continue;
}
departmentMap.put(department.getId(), department);
}
@ -163,6 +149,16 @@ public class ApiTestController {
return "业务主体数据为空";
}
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
DateTime dateTime = DateUtil.parse(beginStr + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
DateTime dateTime1 = DateUtil.parse(endStr + " 00:00:00", "yyyy-MM-dd HH:mm:ss");
Instant binstant = dateTime.toInstant();
Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant));
pictureSourceParameter.setEndTime(Date.from(einstant));
pictureSourceParameter.setPageNo(Integer.parseInt(pageNo));
pictureSourceParameter.setPageSize(Integer.parseInt(pageSize));
List<PictureSourceResult> totalList = Lists.newArrayList();
for (Department department : departments) {
if (!departmentMap.containsKey(department.getParentid())) {
@ -171,8 +167,10 @@ public class ApiTestController {
Long tenantNo = Long.valueOf(departmentMap.get(department.getParentid()).getDeptno());
Long accountNo = Long.valueOf(department.getDeptno());
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
List<PictureSourceResult> resultList = getPictureSourceResultApiPage(dateTime, dateTime1, Integer.parseInt(pageNo), Integer.parseInt(pageSize), tenantNo, accountNo);
List<PictureSourceResult> resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter);
if (CollectionUtils.isEmpty(resultList)) {
continue;
}
@ -185,11 +183,10 @@ public class ApiTestController {
if (pictureSourceResult.getLivePhoto() == null) {
List<Map<String, Object>> livePhoto = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("imgUrl", "http://47.93.59.251/api/image/default.png");
map.put("imgUrl", StringUtils.isEmpty(apiConfig.getDefaultPictureImg()) ? "http://47.93.59.251/api/image/default.png" : apiConfig.getDefaultPictureImg());
map.put("imgName", "default.png");
livePhoto.add(map);
pictureSourceResult.setLivePhoto(livePhoto);
// continue;
}
//将可以处理数据放入处理队列中
TaskQueue.pictureDisposePushData(pictureSourceResult);
@ -219,8 +216,6 @@ public class ApiTestController {
String pageSize = request.getParameter("pageSize");
String pageNo = request.getParameter("pageNo");
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
pictureSourceParameter.setPageSize(Integer.parseInt(pageSize));
List<String> notAddedToQueueTaskIds = new ArrayList<>();
@ -235,10 +230,6 @@ public class ApiTestController {
Map<Long, Department> departmentMap = Maps.newHashMapWithExpectedSize(departments.size());
for (Department department : departments) {
if (department.getDlevel() == 0) {
continue;
}
departmentMap.put(department.getId(), department);
}
@ -251,6 +242,10 @@ public class ApiTestController {
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");
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
pictureSourceParameter.setPageSize(Integer.parseInt(pageSize));
while (startDate.isBefore(endDate) || startDate.compareTo(endDate) == 0) {
int currentPage = Integer.parseInt(pageNo);
boolean hasNextPage = true;
@ -269,8 +264,13 @@ public class ApiTestController {
Long tenantNo = Long.valueOf(departmentMap.get(department.getParentid()).getDeptno());
Long accountNo = Long.valueOf(department.getDeptno());
pictureSourceParameter.setStartTime(Date.from(startInstant));
pictureSourceParameter.setEndTime(Date.from(endInstant));
pictureSourceParameter.setPageNo(currentPage);
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
List<PictureSourceResult> resultList = getPictureSourceResultApiPage(pictureSourceParameter, startInstant, endInstant, currentPage, tenantNo, accountNo);
List<PictureSourceResult> resultList = prevailCloudApi.getAllPictureSourceResultApiPage(pictureSourceParameter);
if (CollectionUtils.isEmpty(resultList)) {
continue;
}
@ -346,45 +346,5 @@ public class ApiTestController {
}
return message;
}
private List<PictureSourceResult> getPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter, Instant startInstant, Instant endInstant, Integer currentPage, Long tenantNo, Long accountNo) {
pictureSourceParameter.setStartTime(Date.from(startInstant));
pictureSourceParameter.setEndTime(Date.from(endInstant));
pictureSourceParameter.setPageNo(currentPage);
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
ApiPage<PictureSourceResult> apiPage = null;
try {
apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
} catch (Exception e) {
e.printStackTrace();
}
return apiPage == null ? Lists.newArrayList() : apiPage.getRecords();
}
private List<PictureSourceResult> getPictureSourceResultApiPage(DateTime dateTime, DateTime dateTime1, Integer pageNo, Integer pageSize, Long tenantNo, Long accountNo) {
//创建查询参数对象
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
Instant binstant = dateTime.toInstant();
Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant));
pictureSourceParameter.setEndTime(Date.from(einstant));
pictureSourceParameter.setPageNo(pageNo);
pictureSourceParameter.setPageSize(pageSize);
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
ApiPage<PictureSourceResult> apiPage = null;
try {
apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
} catch (Exception e) {
e.printStackTrace();
}
return apiPage == null ? Lists.newArrayList() : apiPage.getRecords();
}
}

@ -1,5 +1,6 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.hutool.core.util.ArrayUtil;
import cn.jyjz.xiaoyao.admin.service.LogService;
import cn.jyjz.xiaoyao.admin.service.UserService;
import cn.jyjz.xiaoyao.common.base.controller.BaseController;
@ -34,10 +35,8 @@ import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Api(tags = "ocr_图片管理")
@RestController
@ -274,10 +273,10 @@ public class OcrPictureController extends BaseController {
if (StringUtils.isNotBlank(ordertype)) {
if (ordertype.equals("asc")) {
queryWrapper.orderByAsc("similarity_score");
queryWrapper.orderByDesc("classificationid");
queryWrapper.orderByDesc("complete_similar_group_id");
} else {
queryWrapper.orderByDesc("similarity_score");
queryWrapper.orderByDesc("classificationid");
queryWrapper.orderByDesc("complete_similar_group_id");
}
}
@ -303,8 +302,13 @@ public class OcrPictureController extends BaseController {
//任务状态搜索
String iztaskstatus = req.getParameter("iztaskstatus");
if (StringUtils.isNotBlank(iztaskstatus)) {
Integer taskStatus = Integer.parseInt(iztaskstatus);
queryWrapper.apply("id IN (SELECT PICTUREID FROM ocr_taskchild_picture WHERE STATES = {0})", taskStatus);
if(iztaskstatus.indexOf("1")!=-1){
//包含未提交的情况
queryWrapper.apply("(id IN (SELECT PICTUREID FROM ocr_taskchild_picture WHERE STATES in ("+iztaskstatus+")) or similarity_score is null)");
}else{
queryWrapper.apply("id IN (SELECT PICTUREID FROM ocr_taskchild_picture WHERE STATES in ("+iztaskstatus+"))");
}
}
@ -322,11 +326,14 @@ public class OcrPictureController extends BaseController {
queryWrapper.eq("tenant_id", tenantId);
queryWrapper.isNotNull("local_pictrue_url");
Page<OcrPicture> page = new Page<OcrPicture>(pageNo, pageSize);
queryWrapper.orderByAsc("complete_similar_group_id");
IPage<OcrPicture> pageList = ocrPictureService.page(page, queryWrapper);
List<OcrPicture> ocrPictures = pageList.getRecords();
List<OcrPicture> ocrPicturesNew = new ArrayList<>();
Map<Long, List<OcrPicture>> completeSimilarGroupMap = ocrPictures.stream().filter(s->Objects.nonNull(s.getCompleteSimilarGroupId())).collect(Collectors.groupingBy(OcrPicture::getCompleteSimilarGroupId));
for (OcrPicture ocrPictureOne : ocrPictures) {
filterScoreNoGroup(ocrPictureOne,completeSimilarGroupMap);
LambdaQueryWrapper<OcrTaskchildPicture> ocrTaskchildPictureLambdaQueryWrapper = new LambdaQueryWrapper<>();
ocrTaskchildPictureLambdaQueryWrapper.eq(OcrTaskchildPicture::getPictureid, ocrPictureOne.getId());
OcrTaskchildPicture ocrTaskchildPicture = ocrTaskchildPictureService.getOne(ocrTaskchildPictureLambdaQueryWrapper);
@ -339,13 +346,10 @@ public class OcrPictureController extends BaseController {
ocrPictureOne.setField16("审批中");
break;
case 3:
ocrPictureOne.setField16("审批通过");
ocrPictureOne.setField16("通过");
break;
case 5:
ocrPictureOne.setField16("审批不通过");
break;
default:
ocrPictureOne.setField16("未知状态");
ocrPictureOne.setField16("不通过");
break;
}
ocrPictureOne.setStates(ocrTaskchildPicture.getStates());
@ -357,6 +361,13 @@ public class OcrPictureController extends BaseController {
return ResultVoUtil.success(pageList);
}
private void filterScoreNoGroup(OcrPicture ocrPictureOne,Map<Long, List<OcrPicture>> completeSimilarGroupMap){
//过滤阈值为100的但是没有对应分类的图片
if(Objects.nonNull(ocrPictureOne.getSimilarityscore())&&ocrPictureOne.getSimilarityscore()==100&&Objects.nonNull(ocrPictureOne.getCompleteSimilarGroupId())&&completeSimilarGroupMap.get(ocrPictureOne.getCompleteSimilarGroupId()).size()==1){
ocrPictureOne.setSimilarityscore(0);
ocrPictureOne.setIsRepeatHis(1);
}
}
/**
*
*

@ -0,0 +1,58 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.xiaoyao.admin.service.UserService;
import cn.jyjz.xiaoyao.common.base.controller.BaseController;
import cn.jyjz.xiaoyao.common.base.param.ParamterPage;
import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.mybatisplus.util.SearchQueryFormat;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrField;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureLog;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureLogService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("/ocr/picturelog")
public class OcrPictureLogController extends BaseController {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private OcrPictureLogService ocrPictureLogService;
@Autowired
private UserService userService;
/**
*
* @return
*/
@ApiOperation(value="根据评审类型查询字段列表", notes="根据评审类型查询字段列表")
@GetMapping(value = "/page")
public ResultVo<IPage<OcrPictureLog>> list(@RequestParam(name="start", defaultValue="1") Integer start,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
@RequestParam(name="callStatus", defaultValue="1") Integer callStatus,
HttpServletRequest request) {
QueryWrapper<OcrPictureLog> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("call_status",callStatus);
ResultVo<IPage<OcrPictureLog>> resultVo = new ResultVo<>();
ParamterPage paramterPage = new ParamterPage();
paramterPage.setPagesize(pageSize);
paramterPage.setStart(start);
IPage<OcrPictureLog> ocrPictureLogIPage = ocrPictureLogService.selectSearchListPage(paramterPage, queryWrapper);
resultVo.setData(ocrPictureLogIPage);
resultVo.addOK("查询成功");
return resultVo;
}
}

@ -0,0 +1,37 @@
package cn.jyjz.xiaoyao.ocr.controller;
import cn.jyjz.xiaoyao.admin.service.UserService;
import cn.jyjz.xiaoyao.common.base.controller.BaseController;
import cn.jyjz.xiaoyao.common.base.service.UserTokenService;
import cn.jyjz.xiaoyao.ocr.service.OcrConfigurationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/backstage/oa/picturelogHtml")
public class OcrPictureLogHtmlController extends BaseController{
private Logger log = LoggerFactory.getLogger(this.getClass());
/**
*
*mail.zhangyong@gmail.com
*2024-01-14 10:27:01
**/
@GetMapping("/toList")
public String toListOcrConfiguration(HttpServletResponse response,HttpServletRequest request){
String resourceid = request.getParameter("resourceid");
request.setAttribute("resourceid",resourceid);
return "/backstage/oa/ocr/picturelog/list";
}
}

@ -6,9 +6,11 @@ import cn.jyjz.xiaoyao.common.base.util.RequestBaseUtil;
import cn.jyjz.xiaoyao.common.base.vo.ResultVo;
import cn.jyjz.xiaoyao.common.base.vo.ResultVoUtil;
import cn.jyjz.xiaoyao.common.base.vo.UserToken;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrTaskchildPictureMybatisDao;
import cn.jyjz.xiaoyao.ocr.dataobject.*;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureService;
import cn.jyjz.xiaoyao.ocr.service.OcrTaskchildPictureService;
import cn.jyjz.xiaoyao.ocr.vo.OaUserApproveVo;
import cn.jyjz.xiaoyao.ocr.vo.OcrTaskChildPictureVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@ -25,6 +27,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import cn.jyjz.xiaoyao.ocr.service.IOcrTaskchildDubiousFileService;
@ -57,6 +61,9 @@ public class OcrTaskchildDubiousFileController {
@Autowired
OcrPictureService ocrpictureservice;
@Autowired
private OcrTaskchildPictureMybatisDao taskchildPictureMybatisDao;
/**
*
* @param request
@ -175,7 +182,10 @@ public class OcrTaskchildDubiousFileController {
if(one != null && !one.getAssignee().equals(userToken.getLoginname())){
return ResultVoUtil.error("勾选存在无权限审批的任务,不能添加可疑文件!");
}
List<OaUserApproveVo> oaUserApproveVoList = taskchildPictureMybatisDao.queryHistoricalTask(userToken.getUserid(),one.getId());
if(CollUtil.isNotEmpty(oaUserApproveVoList)){
return ResultVoUtil.error("该任务已审批,不能添加可疑文件!");
}
QueryWrapper<OcrTaskchildDubiousFile> filewrapper = new QueryWrapper<>();
filewrapper.eq("picture_id",asd).eq("userid",userToken.getUserid());
OcrTaskchildDubiousFile one1 = ocrTaskchildDubiousFileService.getOne(filewrapper);

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

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

@ -47,6 +47,11 @@ public interface OcrTaskchildPictureMybatisDao extends BaseMapper<OcrTaskchildPi
*
*/
public List<OaUserApproveVo> queryApprovalNode(@Param("userId") String userId);
/**
*
*/
public List<OaUserApproveVo> queryHistoricalTask(@Param("userId") String userId, @Param("formId") Long formId);
/**
*
*/

@ -0,0 +1,42 @@
package cn.jyjz.xiaoyao.ocr.dataobject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* ClassName $className$.java
* Description:
* Author scl.
* Date 2024/4/18 22:57
*/
@TableName(value = "ocr_check_describe_his")
@Data
public class OcrCheckDescribeHis {
/**
* id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* id
*/
@TableField(value = "pictureId")
private String pictureId;
/**
*
*/
@TableField(value = "checkResult")
private String checkResult;
/**
*
*/
@TableField(value = "`describe`")
private String describe;
}

@ -58,4 +58,9 @@ public class OcrFrontConf implements java.io.Serializable {
*
*/
private String tenantSourceUrl;
/**
*
*/
private String defaultPictureImg;
}

@ -350,6 +350,7 @@ public class OcrPicture implements BaseDto, java.io.Serializable {
@TableField(value = "is_repeat")
private Integer isRepeat;
@ApiModelProperty(value = "任务状态")
@TableField(exist = false)
private Integer states;
@ -380,6 +381,10 @@ public class OcrPicture implements BaseDto, java.io.Serializable {
@TableField(exist = false)
private String taskId;
@ApiModelProperty(value = "是否是历史重复一键查重图片墙检索结果阈值100无相同图片时使用")
@TableField(exist = false)
private Integer isRepeatHis;

@ -0,0 +1,93 @@
package cn.jyjz.xiaoyao.ocr.dataobject;
import cn.jyjz.xiaoyao.common.base.util.requestFormat.SearchQuery;
import cn.jyjz.xiaoyao.common.mybatisplus.dto.BaseDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.sql.Date;
import java.util.AbstractMap;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "字段信息", title = "字段信息")
@TableName(value = "ocr_picture_log")
public class OcrPictureLog implements BaseDto, Serializable {
private static final long serialVersionUID = 8088861709460050761L;
@Schema(description = "主键")
@TableId(value = "id",type = IdType.AUTO)
@TableField(value="id")
private Long id;
@Schema(description = "调用时间")
@TableField(value="call_time")
private String callTime;
@Schema(description = "图片地址")
@TableField(value="picture_url")
private String pictureUrl;
@Schema(description = "调用状态")
@TableField(value="call_status")
private String callStatus;
@Schema(description = "调用信息")
@TableField(value="call_msg")
private String callMsg;
@Schema(description = "创建人")
@TableField(value="create_by")
private String createBy;
@Schema(description = "创建时间")
@TableField(value="create_time")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
@Schema(description = "修改人")
@TableField(value="update_by")
private String updateBy;
@Schema(description = "修改时间")
@TableField(value="update_time")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date updateTime;
//保存当前登录用户的数据权限范围的搜索条件
@TableField(exist = false)
@JsonIgnore
private SearchQuery searchQueryrolesShowleave;
@TableField(exist = false)
@JsonIgnore
private final Map<String,String> query = Stream.of(
new AbstractMap.SimpleEntry<>("CALLTIME","call_time"),
new AbstractMap.SimpleEntry<>("REVIEWTYPE","call_status")
)
.collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));
@Override
public String getQueryFiled(String filedname){
String obj = null;
if(null != query && query.size() > 0){
obj = query.get(filedname);
}
return obj;
}
}

@ -178,6 +178,9 @@ public class OcrTaskchildPictureAppro implements java.io.Serializable {
@ApiModelProperty(value = "历史-节点编号")
private String taskno;
@ApiModelProperty(value = "当前所处-节点编号")
private String tasknode;
@ApiModelProperty(value = "项目对象")
private Category categoryDto;

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

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

@ -0,0 +1,19 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrCheckDescribeHisMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrCheckDescribeHis;
import cn.jyjz.xiaoyao.ocr.service.OcrCheckDescribeHisService;
/**
* ClassName $className$.java
* Description:
* Author scl.
* Date 2024/4/18 22:57
*/
@Service
public class OcrCheckDescribeHisServiceImpl extends ServiceImpl<OcrCheckDescribeHisMapper, OcrCheckDescribeHis> implements OcrCheckDescribeHisService{
}

@ -33,6 +33,7 @@ public class OcrFrontConfServiceImpl extends BaseServiceImpl<OcrFrontConfMapper,
apiConfig.setConnectTimeout(frontConf.getWlyConnectTimeout());
apiConfig.setReadTimeout(frontConf.getWlyReadTimeout());
apiConfig.setLocalImagePath(frontConf.getWlyLocalImagePath());
apiConfig.setDefaultPictureImg(frontConf.getDefaultPictureImg());
}
}
}

@ -0,0 +1,19 @@
package cn.jyjz.xiaoyao.ocr.service.impl;
import cn.jyjz.xiaoyao.common.mybatisplus.base.BaseServiceImpl;
import cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureLogMapper;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureLog;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* ClassName $className$.java
* Description:
* Author scl.
* Date 2024/3/22 07:09
*/
@Service
public class OcrPictureLogServiceImpl extends BaseServiceImpl<OcrPictureLogMapper, OcrPictureLog> implements OcrPictureLogService {
}

@ -330,7 +330,11 @@ public class OcrPictureServiceImpl extends BaseServiceImpl<OcrPictureMybatisDao,
@Override
public OcrPicture getPackagePictureInfo(String checkDuplicateId, String pictureId, UserToken userToken) {
OcrPicture ocrPicture = pictureMybatisDao.getPackagePictureInfo(checkDuplicateId,pictureId);
ocrPicture.getPictureInfo().setCreateTime(ocrPicture.getPhotoDateTimestamp());
OcrPictureInfo one = ocrPictureInfoService.getOne(new LambdaQueryWrapper<OcrPictureInfo>().eq(OcrPictureInfo::getPictureId, ocrPicture.getId()));
ocrPicture.setPictureInfo(one);
if(ObjectUtil.isNotEmpty(one)){
ocrPicture.getPictureInfo().setCreateTime(ocrPicture.getPhotoDateTimestamp());
}
return ocrPicture;
}

@ -86,10 +86,8 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMap
List<SFrontmenuT> frontmenuTList = isFrontmenuTService.queryUserMenuById(assignee);
if(CollUtil.isNotEmpty(frontmenuTList)){
for (SFrontmenuT sFrontmenuT : frontmenuTList) {
if(StringUtils.isNotBlank(search)){
if(sFrontmenuT.getResKey().equals(FrontMenuEnum.WORKSHEETMAIN.getResKey())){
strings1 = ocrsearchhistorymapper.selectsearch1(userId,search,tenantId);
}
if(sFrontmenuT.getResKey().equals(FrontMenuEnum.WORKSHEETMAIN.getResKey())){
strings1 = ocrsearchhistorymapper.selectsearch1(userId,search,tenantId);
}
if(sFrontmenuT.getResKey().equals(FrontMenuEnum.TASKMAIN.getResKey())){
strings2 = ocrsearchhistorymapper.selectsearch2(assignee,search,tenantId);
@ -102,9 +100,7 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMap
// List<Map<Object,List<Map<String,String>>>> list = new ArrayList<>();
Map<Object,List<Map<String,String>>> map=new HashMap<>();
if(StringUtils.isNotBlank(search)){
map.put("ai",strings1);
}
map.put("ai",strings1);
map.put("preliminary",strings2);
map.put("final",strings3);
// list.add(map);
@ -131,19 +127,31 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMap
List<OcrTaskchildPictureAppro> ocrTaskchildPictureApproList = new ArrayList<>();
//定义第一审批节点
String taskNodeOne = "";
Integer taskNode = null;
if (oaUserApproveVoList.size() > 0) {
Map<Long, OaUserApproveVo> formIdToVoMap = new HashMap<>();
for (OaUserApproveVo vo : oaUserApproveVoList) {
Long formId = vo.getFormId();
Integer taskNode = vo.getTaskNode();
if (!formIdToVoMap.containsKey(formId) || taskNode < formIdToVoMap.get(formId).getTaskNode()) {
String taskNodeStr = vo.getTaskNode();
if ("finale_judgment".equals(taskNodeStr)) {
// 如果taskNode字段是"finale_judgment"字符串,将其转换为一个很大的数字
vo.setTaskNode("100");
taskNode = 100;
} else {
// 否则将其转换为Integer类型
taskNode = Integer.parseInt(taskNodeStr);
}
if (!formIdToVoMap.containsKey(formId) || taskNode < Integer.parseInt(formIdToVoMap.get(formId).getTaskNode())) {
formIdToVoMap.put(formId, vo);
}
}
//获取该用户第一节点
Iterator<Map.Entry<Long, OaUserApproveVo>> iterator = formIdToVoMap.entrySet().iterator();
Map.Entry<Long, OaUserApproveVo> firstEntry = iterator.next();
taskNodeOne = Integer.toString(firstEntry.getValue().getTaskNode());
taskNodeOne = firstEntry.getValue().getTaskNode();
if("100".equals(taskNodeOne)){
taskNodeOne = "finale_judgment";
}
//获取已经审批的任务ID
List<Long> formIdList = new ArrayList<>(formIdToVoMap.keySet());
//查询该用户第一节点所有待审任务列表
@ -225,19 +233,31 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl<OcrSearchHistoryMap
List<OcrTaskchildPictureAppro> ocrTaskchildPictureApproList = new ArrayList<>();
//定义第一审批节点
String taskNodeOne = "";
Integer taskNode = null;
if (oaUserApproveVoList.size() > 0) {
Map<Long, OaUserApproveVo> formIdToVoMap = new HashMap<>();
for (OaUserApproveVo vo : oaUserApproveVoList) {
Long formId = vo.getFormId();
Integer taskNode = vo.getTaskNode();
if (!formIdToVoMap.containsKey(formId) || taskNode < formIdToVoMap.get(formId).getTaskNode()) {
String taskNodeStr = vo.getTaskNode();
if ("finale_judgment".equals(taskNodeStr)) {
// 如果taskNode字段是"finale_judgment"字符串,将其转换为一个很大的数字
vo.setTaskNode("100");
taskNode = 100;
} else {
// 否则将其转换为Integer类型
taskNode = Integer.parseInt(taskNodeStr);
}
if (!formIdToVoMap.containsKey(formId) || taskNode < Integer.parseInt(formIdToVoMap.get(formId).getTaskNode())) {
formIdToVoMap.put(formId, vo);
}
}
//获取该用户第一节点
Iterator<Map.Entry<Long, OaUserApproveVo>> iterator = formIdToVoMap.entrySet().iterator();
Map.Entry<Long, OaUserApproveVo> firstEntry = iterator.next();
taskNodeOne = Integer.toString(firstEntry.getValue().getTaskNode());
taskNodeOne = firstEntry.getValue().getTaskNode();
if("100".equals(taskNodeOne)){
taskNodeOne = "finale_judgment";
}
//获取已经审批的任务ID
List<Long> formIdList = new ArrayList<>(formIdToVoMap.keySet());
//查询该用户第一节点所有待审任务列表

@ -439,6 +439,10 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl<OcrTaskchild
ocrTaskchildPicture.setOcrPicture(ocrPicture);
//检查如果已经传了节点那就把taskNo改成传入的节点值。
if(StringUtils.isNotBlank(taskNode) && !"undefined".equals(taskNode)){
ocrTaskchildPicture.setTaskNode(taskNode);
}
return ocrTaskchildPicture;
}

@ -2,9 +2,9 @@ package cn.jyjz.xiaoyao.ocr.thread;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.thread.entity.PictureImgToLocalEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Sets;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
/**
@ -15,7 +15,6 @@ import java.util.concurrent.LinkedBlockingQueue;
* @date 2024/03/14 3:08
*/
public class TaskQueue {
private static Logger logger = LoggerFactory.getLogger(TaskQueue.class);
/**
*
@ -27,51 +26,61 @@ public class TaskQueue {
*/
public static LinkedBlockingQueue pictureImgToLocalQueue = new LinkedBlockingQueue();
public static volatile Set<String> resultSet = Sets.newConcurrentHashSet();
/**
* push
* @return
* push
*
* @param pictureSourceResult //三方拉取 获取到的图片对象
* @return
*/
public static boolean pictureDisposePushData(PictureSourceResult pictureSourceResult){
public static boolean pictureDisposePushData(PictureSourceResult pictureSourceResult) {
try {
Long taskId = pictureSourceResult.getTaskId();
if (resultSet.contains(String.valueOf(taskId))) {
return true;
}
resultSet.add(String.valueOf(taskId));
pictureDisposeQueue.put(pictureSourceResult);
} catch (InterruptedException e) {
logger.error("任务队列添加异常:{}",e.getMessage());
return false;
}
return true;
return true;
}
/**
*
*
*
* @return
*/
public static PictureSourceResult pictureDisposePullData(){
public static PictureSourceResult pictureDisposePullData() {
return (PictureSourceResult) pictureDisposeQueue.poll();
}
/**
* push
* @return
* push
*
* @param pictureImgToLocalEntity //图片下载对象
* @return
*/
public static boolean pictureImgToLocalPushData(PictureImgToLocalEntity pictureImgToLocalEntity){
public static boolean pictureImgToLocalPushData(PictureImgToLocalEntity pictureImgToLocalEntity) {
try {
pictureImgToLocalQueue.put(pictureImgToLocalEntity);
} catch (InterruptedException e) {
logger.error("图片下载任务队列添加异常:{}",e.getMessage());
return false;
}
return true;
return true;
}
/**
*
*
*
* @return
*/
public static PictureImgToLocalEntity pictureImgToLocalPullData(){
public static PictureImgToLocalEntity pictureImgToLocalPullData() {
return (PictureImgToLocalEntity) pictureImgToLocalQueue.poll();
}
}

@ -66,7 +66,10 @@ public class PictureDisposeTask implements Runnable{
// }
//不为空开始组装参数 入库
OcrPicture picture = new OcrPicture();
picture.setLocation(JSONObject.toJSONString(pictureSourceResult.getLocation()));
//定位信息
if(pictureSourceResult.getLocation()!=null){
picture.setLocation(JSONObject.toJSONString(pictureSourceResult.getLocation()));
}
//业务主体
picture.setTenantId(pictureSourceResult.getAccountNo());
//业务主体名称

@ -7,12 +7,11 @@ import cn.jyjz.xiaoyao.admin.dataobject.Department;
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -56,11 +55,8 @@ public class PictureSourceTimerJob {
//组装拉取参数
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
// pictureSourceParameter.setStartTime();
// pictureSourceParameter.setEndTime();
pictureSourceParameter.setPageNo(1);
pictureSourceParameter.setPageSize(200);
// pictureSourceParameter.setAccountNo();
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
@ -69,6 +65,11 @@ public class PictureSourceTimerJob {
String endDateStr = dateFormat.format(yesterday).split(" ")[0] + " 23:59:59"; // 结束时间为昨天的23点59分59秒
DateTime dateTime = DateUtil.parse(startDateStr, "yyyy-MM-dd HH:mm:ss");
DateTime dateTime1 = DateUtil.parse(endDateStr, "yyyy-MM-dd HH:mm:ss");
Instant binstant = dateTime.toInstant();
Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant));
pictureSourceParameter.setEndTime(Date.from(einstant));
//1.拉取数据
List<Department> departments = departmentMybatisDao.selectList(new QueryWrapper<>());
@ -78,29 +79,11 @@ public class PictureSourceTimerJob {
Map<Long, Department> departmentMap = Maps.newHashMapWithExpectedSize(departments.size());
for (Department department : departments) {
if (department.getDlevel() == 0) {
continue;
}
departmentMap.put(department.getId(), department);
}
List<PictureSourceResult> totalList = Lists.newArrayList();
for (Department department : departments) {
if (!departmentMap.containsKey(department.getParentid())) {
continue;
}
Long tenantNo = Long.valueOf(departmentMap.get(department.getParentid()).getDeptno());
Long accountNo = Long.valueOf(department.getDeptno());
List<PictureSourceResult> resultList = getPictureSourceResultApiPage(pictureSourceParameter, dateTime, dateTime1, tenantNo, accountNo);
if (CollectionUtils.isEmpty(resultList)) {
continue;
}
totalList.addAll(resultList);
}
totalList.addAll(this.pullData(departments, departmentMap, pictureSourceParameter));
int count = totalList.size();
int size = 0;
@ -115,22 +98,26 @@ public class PictureSourceTimerJob {
System.out.println("当前区间内图片总数:" + count + "条,可处理数据:" + size + "条");
}
private List<PictureSourceResult> getPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter, DateTime dateTime, DateTime dateTime1, Long tenantNo, Long accountNo) {
//创建查询参数对象
Instant binstant = dateTime.toInstant();
Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant));
pictureSourceParameter.setEndTime(Date.from(einstant));
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
ApiPage<PictureSourceResult> apiPage = null;
try {
apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
} catch (Exception e) {
e.printStackTrace();
private List<PictureSourceResult> pullData(List<Department> departments, Map<Long, Department> departmentMap, PictureSourceParameter pictureSourceParameter) {
List<PictureSourceResult> totalList = Lists.newArrayListWithCapacity(pictureSourceParameter.getPageSize());
for (Department department : departments) {
if (!departmentMap.containsKey(department.getParentid())) {
continue;
}
Long tenantNo = Long.valueOf(departmentMap.get(department.getParentid()).getDeptno());
Long accountNo = Long.valueOf(department.getDeptno());
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
List<PictureSourceResult> resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter);
if (CollectionUtils.isEmpty(resultList)) {
continue;
}
totalList.addAll(resultList);
}
return apiPage == null ? Lists.newArrayList() : apiPage.getRecords();
return totalList;
}
}

@ -7,7 +7,6 @@ import cn.jyjz.xiaoyao.admin.dataobject.Department;
import cn.jyjz.xiaoyao.ocr.api.PrevailCloudApi;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceParameter;
import cn.jyjz.xiaoyao.ocr.api.entity.PictureSourceResult;
import cn.jyjz.xiaoyao.ocr.api.utils.ApiPage;
import cn.jyjz.xiaoyao.ocr.thread.TaskQueue;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Maps;
@ -59,13 +58,19 @@ public class PullPictureDataJob {
Map<Long, Department> departmentMap = Maps.newHashMapWithExpectedSize(departments.size());
for (Department department : departments) {
if (department.getDlevel() == 0) {
continue;
}
departmentMap.put(department.getId(), department);
}
//创建查询参数对象
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
Instant binstant = dateTime.toInstant();
Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant));
pictureSourceParameter.setEndTime(Date.from(einstant));
pictureSourceParameter.setPageNo(pageNo);
pictureSourceParameter.setPageSize(pageSize);
List<PictureSourceResult> totalList = Lists.newArrayList();
for (Department department : departments) {
if (!departmentMap.containsKey(department.getParentid())) {
@ -74,8 +79,10 @@ public class PullPictureDataJob {
Long tenantNo = Long.valueOf(departmentMap.get(department.getParentid()).getDeptno());
Long accountNo = Long.valueOf(department.getDeptno());
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
List<PictureSourceResult> resultList = getPictureSourceResultApiPage(dateTime, dateTime1, pageNo, pageSize, tenantNo, accountNo);
List<PictureSourceResult> resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter);
if (CollectionUtils.isEmpty(resultList)) {
continue;
}
@ -94,26 +101,4 @@ public class PullPictureDataJob {
}
System.out.println("当前区间内图片总数:" + count + "条,可处理数据:" + size + "条");
}
private List<PictureSourceResult> getPictureSourceResultApiPage(DateTime dateTime, DateTime dateTime1, Integer pageNo, Integer pageSize, Long tenantNo, Long accountNo) {
//创建查询参数对象
PictureSourceParameter pictureSourceParameter = new PictureSourceParameter();
Instant binstant = dateTime.toInstant();
Instant einstant = dateTime1.toInstant();
pictureSourceParameter.setStartTime(Date.from(binstant));
pictureSourceParameter.setEndTime(Date.from(einstant));
pictureSourceParameter.setPageNo(pageNo);
pictureSourceParameter.setPageSize(pageSize);
pictureSourceParameter.setTenantNo(tenantNo);
pictureSourceParameter.setAccountNo(accountNo);
ApiPage<PictureSourceResult> apiPage = null;
try {
apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter);
} catch (Exception e) {
e.printStackTrace();
}
return apiPage == null ? Lists.newArrayList() : apiPage.getRecords();
}
}

@ -1,5 +1,10 @@
package cn.jyjz.xiaoyao.ocr.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.json.JSONUtil;
import cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureLog;
import cn.jyjz.xiaoyao.ocr.service.OcrPictureLogService;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpClient;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpHeader;
import cn.jyjz.xiaoyao.ocr.util.httputil.HttpParamers;
@ -10,6 +15,10 @@ import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import java.util.HashMap;
import java.util.Map;
public class ImageClassUtil {
private static Logger logger = LoggerFactory.getLogger(ImageClassUtil.class);
@ -80,14 +89,30 @@ public class ImageClassUtil {
paramersVi.setJsonParamer(jsonObjectVi.toJSONString());
HttpHeader headerVi = null;
String responseDataVi = "";
OcrPictureLog ocrPictureLog = new OcrPictureLog();
try {
responseDataVi = HttpClient.doService(serverurl, paramersVi, headerVi, 15000, 30000);
JSONObject jsonObjectSimi = JSON.parseObject(responseDataVi);
if (null != jsonObjectSimi && jsonObjectSimi.getString("code").equals("0") && jsonObjectSimi.get("data") != null && jsonObjectSimi.getJSONArray("data").size() > 0) {
ocrPictureLog.setCallStatus("1");
ocrPictureLog.setCallMsg("req:"+jsonObjectVi.toJSONString()+"\nrep:"+responseDataVi);
} else {
ocrPictureLog.setCallStatus("2");
ocrPictureLog.setCallMsg("req:"+jsonObjectVi.toJSONString()+"\nrep:"+responseDataVi);
}
} catch (Exception e) {
logger.error("classify={}",e);
return null;
logger.error("classify={}", e);
ocrPictureLog.setCallStatus("3");
ocrPictureLog.setCallMsg("req:"+jsonObjectVi.toJSONString()+"\nrep:"+responseDataVi+"Exception:"+e.getMessage());
} finally {
ApplicationContext applicationContext = SpringUtil.getApplicationContext();
OcrPictureLogService ocrPictureLogService = applicationContext.getBean(OcrPictureLogService.class);
ocrPictureLog.setCallTime(DateUtil.now());
ocrPictureLog.setPictureUrl(imgurl);
ocrPictureLogService.save(ocrPictureLog);
}
JSONObject jsonObject = JSON.parseObject(responseDataVi);
return jsonObject;
}
}

@ -35,7 +35,7 @@ public enum SearchConfigEnum {
//提报人
UPUSERSEARCH("izupuser","upuserid"),
//所属计划
PLANSEARCH("izplan","planName"),
PLANSEARCH("izplan","planId"),
//相似度
SIMISEARCH("izsimilarity","similarity_score"),
//分类搜索

@ -27,7 +27,7 @@ public class OaUserApproveVo implements Serializable {
private Long formId;
@Schema(description = "审批节点")
private Integer taskNode;
private String taskNode;
@Schema(description = "审批节点名称")
private String taskName;

@ -16,6 +16,22 @@ public class OcrMsgVO {
*/
private String id;
/**
*
*/
private String titile;
/**
* (1.2.)
*/
private Integer msgCategory;
/**
* (1.2. 3.)
*/
private Integer receiveUserType;
/**
* json
*/

@ -1,8 +1,6 @@
package cn.jyjz.xiaoyao.ocr.vo;
import cn.jyjz.flowable.domain.dto.HistoricTaskInstanceDto;
import cn.jyjz.xiaoyao.common.base.jsonDomain.DateSerializer;
import cn.jyjz.xiaoyao.oa.from.dataobject.Category;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
@ -12,9 +10,6 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@Data
@Builder

@ -35,6 +35,7 @@
<result column="content" property="content"/>
<result column="count" property="count"/>
<result column="imgUrl" property="imgUrl"/>
<result column="pictureIds" property="pictureIds"/>
<collection property="repeatedTaskList" ofType="cn.jyjz.xiaoyao.oa.from.vo.RepeatedTaskVo">
<result column="taskId" property="taskId"/>
<result column="formId" property="formId"/>
@ -201,48 +202,58 @@
</select>
<select id="repetitionTask" resultMap="resultMap">
SELECT t1.count,
t1.content,
t1.id,
t1.imgUrl,
t3.similarity_score similarityScore,
t2.STATES,
t3.remark fromTaskId,
t3.taskName,
t2.TASKNAME nodeName,
t2.FROMUPTIME fromTime,
t2.UPDATETIME updateTime,
t2.TASKID taskId,
(
SELECT GROUP_CONCAT(t4.ID)
FROM ocr_picture t4
WHERE t4.field8 = t1.content
AND t4.ID IN (
SELECT child.PICTUREID
FROM oa_userfinal_t final
LEFT JOIN ocr_taskchild_picture child ON final.FORMID = child.ID
)
) AS formId
from (select count(field8) count, field8 content, ID id, imgUrl
FROM ocr_picture
where ID in (select child.PICTUREID from oa_userfinal_t final left join ocr_taskchild_picture child on final.FORMID = child.ID)
GROUP BY field8
HAVING count(field8) > 1) t1
LEFT JOIN ocr_taskchild_picture t2 ON t1.ID = t2.PICTUREID
LEFT JOIN ocr_picture t3 on t1.id = t3.ID
SELECT t1.count,
t1.content,
t1.id,
t1.imgUrl,
t3.similarity_score similarityScore,
t2.STATES,
t3.remark fromTaskId,
t3.taskName,
t2.TASKNAME nodeName,
t2.FROMUPTIME fromTime,
t2.UPDATETIME updateTime,
t2.TASKID taskId,
t2.ID as formId,
t1.pictureIds
from (select count(field8) count, field8 content, ID id, GROUP_CONCAT(id) pictureIds, imgUrl
FROM ocr_picture
where
<if test="type == 0">
ID in (select PICTUREID from ocr_taskchild_picture where ISFINAIL = 1)
</if>
<if test="type == 1">
ID in (select PICTUREID from ocr_taskchild_picture where ISFINAIL = 1)
</if>
GROUP BY field8
HAVING count(field8) > 1) t1
LEFT JOIN ocr_taskchild_picture t2 ON t1.ID = t2.PICTUREID
LEFT JOIN ocr_picture t3 on t1.id = t3.ID
</select>
<select id="repetitionTaskList" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture">
SELECT t2.*,t3.similarity_score similarityScore
FROM oa_userfinal_t t1
LEFT JOIN ocr_taskchild_picture t2 ON t2.ID = t1.FORMID
SELECT t2.*, t3.similarity_score similarityScore
FROM ocr_taskchild_picture t2
LEFT JOIN ocr_picture t3 ON t2.PICTUREID = t3.ID
WHERE t3.field8 IN (SELECT t3.field8
FROM oa_userfinal_t t1
LEFT JOIN
ocr_taskchild_picture t2 on t1.FORMID = t2.ID
WHERE
<if test="type == 0">
t2.ISFINAIL = 1
</if>
<if test="type == 1">
t2.ISFINAIL = 1
</if>
and t3.field8 IN (SELECT t3.field8
FROM ocr_taskchild_picture t2
LEFT JOIN ocr_picture t3 on t2.PICTUREID = t3.ID
GROUP BY t3.field8
HAVING count(t3.field8) > 1)
where
<if test="type == 0">
t2.ISFINAIL = 1
</if>
<if test="type == 1">
t2.ISFINAIL = 1
</if>
GROUP BY t3.field8
HAVING count(t3.field8) > 1)
</select>
</mapper>

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.jyjz.xiaoyao.ocr.dataDao.OcrCheckDescribeHisMapper">
<resultMap id="BaseResultMap" type="cn.jyjz.xiaoyao.ocr.dataobject.OcrCheckDescribeHis">
<!--@mbg.generated-->
<!--@Table ocr_check_describe_his-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="pictureId" jdbcType="BIGINT" property="pictureid" />
<result column="checkResult" jdbcType="LONGVARCHAR" property="checkresult" />
<result column="describe" jdbcType="VARCHAR" property="describe" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, pictureId, checkResult, `describe`
</sql>
</mapper>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.jyjz.xiaoyao.ocr.dataDao.OcrPictureLogMapper">
<resultMap id="BaseResultMap" type="cn.jyjz.xiaoyao.ocr.dataobject.OcrPictureLog">
<id column="ID" property="id" jdbcType="BIGINT"/>
<result column="create_by" property="createBy" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="BIGINT"/>
<result column="update_by" property="updateBy" jdbcType="VARCHAR"/>
<result column="update_time" property="updateTime" jdbcType="BIGINT"/>
<result column="call_time" property="callTime" jdbcType="VARCHAR"/>
<result column="picture_url" property="pictureUrl" jdbcType="VARCHAR"/>
<result column="call_status" property="callStatus" jdbcType="VARCHAR"/>
<result column="call_msg" property="callMsg" jdbcType="VARCHAR"/>
</resultMap>
</mapper>

@ -227,7 +227,6 @@
<select id="getPackagePictureInfo" resultMap="BaseResultMap">
SELECT t2.*,
t3.*,
t4.STATES,
t4.TASKID,
t4.ID taskchildId,
@ -240,7 +239,6 @@
1) AS historyStates
FROM ocr_check_duplicate_result t1
LEFT JOIN ocr_picture t2 ON t1.picture_id = t2.ID
left join ocr_picture_info t3 on t2.ID = t3.picture_id
left join ocr_taskchild_picture t4 on t2.ID = t4.PICTUREID
where t1.check_duplicate_id = #{packageId}
and t2.suspiciousfile = 0

@ -18,7 +18,20 @@
<select id="selectsearch1" resultType="map">
<!-- SELECT ID as id,packagename as name FROM ocr_packagetask WHERE create_by=#{userid} AND packagename like "%"#{search}"%"-->
SELECT id,name FROM ocr_task_package WHERE create_by=#{userid} AND name like "%"#{search}"%" AND tenant_id = #{tenantId} AND is_delete = 0
SELECT
id,name
FROM
ocr_task_package
WHERE
create_by=#{userid}
<if test="search != null and search != ''">
AND name like "%"#{search}"%"
</if>
AND tenant_id = #{tenantId}
AND is_delete = 0
ORDER BY
create_time DESC
LIMIT 3
</select>
<select id="selectsearch2" resultType="map">
@ -29,8 +42,7 @@
LEFT JOIN ocr_picture img ON r.PICTUREID = img.ID
WHERE
r.ASSIGNEE = #{userid} AND
r.STATES IN ('1','2') AND
r.TASKNAME IN ( '一级审批', '二级审批' )
r.TASKNODE != 'finale_judgment'
<if test="search != null and search != ''">
AND (r.FROMTASKNAME LIKE "%"#{search}"%"
OR img.field1 LIKE "%"#{search}"%"
@ -49,8 +61,7 @@
LEFT JOIN ocr_picture img ON r.PICTUREID = img.ID
WHERE
r.ASSIGNEE = #{userid} AND
r.STATES = '3' AND
r.TASKNAME = '最终审批'
r.TASKNODE = 'finale_judgment'
<if test="search != null and search != ''">
AND (r.FROMTASKNAME LIKE "%"#{search}"%"
OR img.field1 LIKE "%"#{search}"%"

@ -730,6 +730,17 @@
WHERE USERID = #{userId}
</select>
<select id="queryHistoricalTask" resultType="cn.jyjz.xiaoyao.ocr.vo.OaUserApproveVo">
SELECT ou.ID as id,
ou.USERID as userId,
ou.FORMID as formId,
ou.TASKINDEX as taskNode,
ou.TASKNAME as taskName,
ou.STATSHIS as statsHis
FROM oa_userapprove_t ou
WHERE USERID = #{userId} AND FORMID = #{formId}
</select>
<select id="queryExamineApprove" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPictureAppro">
select tc.*,
op.is_repeat,
@ -924,7 +935,6 @@
FROM ocr_check_duplicate_result t1
LEFT JOIN ocr_picture t2 ON t1.picture_id = t2.ID
LEFT JOIN ocr_taskchild_picture t3 ON t2.ID = t3.PICTUREID
left join ocr_picture_info t5 on t2.ID = t5.picture_id
WHERE t1.check_duplicate_id = #{checkDuplicateId}
and t2.suspiciousfile = 0
<if test="pictureId != null and pictureId != ''">
@ -984,8 +994,11 @@
<select id="listFinalTask" resultType="cn.jyjz.xiaoyao.ocr.dataobject.OcrTaskchildPicture"
parameterType="java.util.Map">
select tcp.*, pic.field11 reporttime, pic.similarity_score similarityscore,pic.server_thumbnail_url serverThumbnailUrl,
pic.imgUrl imgUrl
select tcp.*,
pic.field11 reporttime,
pic.similarity_score similarityscore,
pic.server_thumbnail_url serverThumbnailUrl,
pic.imgUrl imgUrl
from ocr_taskchild_picture tcp
left join ocr_picture pic
on tcp.PICTUREID = pic.ID
@ -993,12 +1006,14 @@
</include>
and tcp.ISFINAIL = 1
and pic.suspiciousfile = 0
<if test="thisLoginUserid != null and isFail ==null">
and tcp.ASSIGNEE ${thisLoginUserid.dataOp} ${thisLoginUserid.likestar}#{thisLoginUserid.value}${thisLoginUserid.likeend}
<if test="thisLoginUserid != null and isFail == null">
and FIND_IN_SET(#{thisLoginUserid.value}
, tcp.ASSIGNEE)
</if>
<if test="thisLoginUserid != null and isFail !=null">
and (tcp.ASSIGNEE ${thisLoginUserid.dataOp} ${thisLoginUserid.likestar}#{thisLoginUserid.value}${thisLoginUserid.likeend}
or tcp.STATES = 5)
<if test="thisLoginUserid != null and isFail != null">
and (FIND_IN_SET(#{thisLoginUserid.value}
, tcp.ASSIGNEE)
or tcp.STATES = 5)
</if>
<if test="fromuptimeStart != null">
@ -1009,13 +1024,20 @@
</if>
<if test="page != null">
<if test="page.sortname != null">
<if test="page.sortname == 'states'">
order by tcp.${page.sortname} ${page.sortorder}
</if>
<if test="page.sortname != 'states'">
ORDER BY CONVERT(pic.${page.sortname} USING gbk) COLLATE gbk_chinese_ci ${page.sortorder}
</if>
<choose>
<when test="page.sortname == 'states'">
ORDER BY tcp.${page.sortname} ${page.sortorder}, pic.similarity_score desc
</when>
<when test="page.sortname == 'field1'">
ORDER BY CONVERT(pic.${page.sortname} USING gbk) COLLATE gbk_chinese_ci ${page.sortorder}
</when>
<otherwise>
ORDER BY pic.${page.sortname} ${page.sortorder}
</otherwise>
</choose>
</if>
limit ${page.start}, ${page.Pagesize}
</if>
</select>
@ -1062,7 +1084,6 @@
LIMIT 1), 1) AS historyStates
from ocr_picture t2
LEFT JOIN ocr_taskchild_picture t3 ON t2.ID = t3.PICTUREID
left join ocr_picture_info t5 on t2.ID = t5.picture_id
WHERE t2.suspiciousfile = 0
and t2.ID in
<foreach collection="pictureIds" open="(" close=")" item="item" separator="," index="index">

Loading…
Cancel
Save