diff --git a/htmlweb/web/backstage/oa/ocr/frontconf/list.html b/htmlweb/web/backstage/oa/ocr/frontconf/list.html index 6bc550a..91701c3 100644 --- a/htmlweb/web/backstage/oa/ocr/frontconf/list.html +++ b/htmlweb/web/backstage/oa/ocr/frontconf/list.html @@ -128,6 +128,16 @@ +
+
+
+ +
+ +
+
+
+
diff --git a/htmlweb/web/backstage/oa/ocr/picturelog/list.html b/htmlweb/web/backstage/oa/ocr/picturelog/list.html new file mode 100644 index 0000000..a8dbdf8 --- /dev/null +++ b/htmlweb/web/backstage/oa/ocr/picturelog/list.html @@ -0,0 +1,146 @@ +<#include "/common/taglibs.html" /> + + + + + 查重模型日志 + + + +<#include "/head/headlist.html" /> + + +
+
+
+
+
+ +
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<#include "/head/footlist.html" /> + + + + diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/controller/FlowTaskController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/controller/FlowTaskController.java index b4d9dff..e065df2 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/controller/FlowTaskController.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/controller/FlowTaskController.java @@ -496,7 +496,7 @@ public class FlowTaskController extends BaseController { Map 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 result = flowTaskService.repetitionTaskList(pageNo, pageSize); + @RequestParam(name = "pageSize") Integer pageSize, + @RequestParam(value = "type",required = false,defaultValue = "1") Integer type) { + Page result = flowTaskService.repetitionTaskList(pageNo, pageSize,type); return ResultVoUtil.success(result); } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/listener/MulitiInstanceCompleteTask.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/listener/MulitiInstanceCompleteTask.java new file mode 100644 index 0000000..3e9f899 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/listener/MulitiInstanceCompleteTask.java @@ -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默认帮我们提供的流程实例的变量: + * 1、nrOfInstances:总的会签任务数量。如上面设置的3。 + * 2、nrOfActiveInstances:当前获取的会签任务数量,即还没有完成的。 + * 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; + } + } + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/listener/MulitiInstanceTaskListener.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/listener/MulitiInstanceTaskListener.java new file mode 100644 index 0000000..1cd5da0 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/listener/MulitiInstanceTaskListener.java @@ -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")); + } +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java index 56f229f..11e6a16 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/IFlowTaskService.java @@ -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 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 query, PageUtils pageUtils); + public void getFinalProcessInstances(Map query, PageUtils 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 getAssignee(UserTask userTask,String startUserId); /** * 查看当前执行人列表 * @@ -177,7 +193,7 @@ public interface IFlowTaskService { * * @return */ - ResultVo repetitionTask(); + ResultVo repetitionTask(Integer type); - Page repetitionTaskList(Integer pageNo, Integer pageSize); + Page repetitionTaskList(Integer pageNo, Integer pageSize,Integer type); } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java index 27a2d46..b2ace86 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowInstanceServiceImpl.java @@ -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 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 loginnames = flowTaskService.getAssignee(userTask,userName); + if(null != loginnames && !loginnames.isEmpty()){ + variables.put("persons",loginnames); + } + } + } + processInstance = runtimeService.startProcessInstanceById(procDefId, businessKey, variables); if (null != iFormCustomService) { diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java index 220f727..4150259 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/flowable/service/impl/FlowTaskServiceImpl.java @@ -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 flowElements = (List) 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 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 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 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 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 taskIds = taskList.stream().map(Task::getId).collect(Collectors.toList()); List 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 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 getAssignee(UserTask userTask, String loginname) { + if (null != userTask.getCandidateUsers() && userTask.getCandidateUsers().size() > 1) { + //获取候选用户集合 + List loginnames = userTask.getCandidateUsers(); + //顺序设置审批用户 + return loginnames; + } else { + //得到候选组 + List candidateGroups = userTask.getCandidateGroups(); + if (null != candidateGroups && !candidateGroups.isEmpty()) { + + + List listusers = new ArrayList<>(); + for (String groupid : candidateGroups) { + + + //排除不在同一个公司的人员 + List userdistionaryList = userdistionaryService.selectListByCandidateid(groupid, loginname); + + List 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 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 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 loginnames = userTask.getCandidateUsers(); + //顺序设置审批用户 + taskService.setAssignee(task.getId(), loginnames.get(taskIndex)); + } else { + //得到候选组 + List candidateGroups = userTask.getCandidateGroups(); + if (null != candidateGroups && !candidateGroups.isEmpty()) { + flowTaskCompleteVO = new FlowTaskCompleteVO(); + flowTaskCompleteVO.setTaskId(task.getId()); + + List listusers = new ArrayList<>(); + for (String groupid : candidateGroups) { + //获取发起人员信息 + HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(processInstanceId) + .singleResult(); + //发起人员登录账号 + String startUserId = hi.getStartUserId(); + + //排除不在同一个公司的人员 + List userdistionaryList = userdistionaryService.selectListByCandidateid(groupid, startUserId); + + List listuserid = userdistionaryList.stream().map(Userdistionary::getUserid).collect(Collectors.toList()); + listusers.addAll(this.userService.selectUserById(listuserid)); + } + + if (null != listusers && !listusers.isEmpty()) { + List loginnames = listusers.stream().map(User::getLoginname).collect(Collectors.toList()); - //得到候选组 - List 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 candidateUsers = userTask.getCandidateUsers(); + if (null != candidateUsers && !candidateUsers.isEmpty()) { + Random rand = new Random(); + taskService.claim(task.getId(), candidateUsers.get(rand.nextInt(candidateUsers.size()))); + } + + //得到候选组 + List 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 query, PageUtils pageUtils) { + public void getFinalProcessInstances(Map query, PageUtils 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 repeatedContentVoList = flowableccMybatisDao.repetitionTask(); + public ResultVo repetitionTask(Integer type) { + List repeatedContentVoList = flowableccMybatisDao.repetitionTask(type); List 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 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 list = ocrCheckDescribeHisService.list(new LambdaQueryWrapper().in(OcrCheckDescribeHis::getPictureId, pictureIds)); + Map> resultMap = new HashMap<>(); + if (!CollectionUtils.isEmpty(list)) { + resultMap = list.stream().collect(Collectors.groupingBy(OcrCheckDescribeHis::getPictureId)); + } + for (String pictureId : pictureIds) { + Set set = new HashSet<>(); + OcrCheckDescribeHis describeHis; + List 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 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 repetitionTaskList(Integer pageNo, Integer pageSize) { + public Page repetitionTaskList(Integer pageNo, Integer pageSize, Integer type) { Page page = new Page<>(pageNo, pageSize); - Page result = flowableccMybatisDao.repetitionTaskList(page); + Page result = flowableccMybatisDao.repetitionTaskList(page, type); return result; } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/dataDao/FlowableccMybatisDao.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/dataDao/FlowableccMybatisDao.java index 0529ae1..94d1b52 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/dataDao/FlowableccMybatisDao.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/dataDao/FlowableccMybatisDao.java @@ -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 { */ List selectUserByFromid(String fromid); - List repetitionTask(); + List repetitionTask(@Param("type") Integer type); - Page repetitionTaskList(Page page); + Page repetitionTaskList(Page page, @Param("type") Integer type); } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/UserFinalService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/UserFinalService.java index d08185f..eb19cb5 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/UserFinalService.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/UserFinalService.java @@ -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 { * @param formid 业务表单主键 * @return 成功返回true,否则返回false */ - public boolean save(String userid,String formid); + public boolean save(List userid, String formid); } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserFinalServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserFinalServiceImpl.java index 4e3ed1d..d276810 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserFinalServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/service/impl/UserFinalServiceImpl.java @@ -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 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 implements UserFinalService { + @Autowired + private UserFinalMybatisDao userFinalMybatisDao; + + @Override + public boolean save(List userid, String formid) { + //判断是否存在重复表单主键 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("FORMID", formid); + Long listcount = count(queryWrapper); + if (listcount.intValue() > 0) { + return true; + } + List 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); + } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedContentVo.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedContentVo.java index a1060bd..1e476e9 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedContentVo.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedContentVo.java @@ -21,6 +21,8 @@ public class RepeatedContentVo { private String imgUrl; + private String pictureIds; + private List repeatedTaskList; diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedTaskVo.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedTaskVo.java index 308a8e7..bb281c1 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedTaskVo.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/oa/from/vo/RepeatedTaskVo.java @@ -28,4 +28,6 @@ public class RepeatedTaskVo { private String fromTime; private String updateTime; + + private String pictureId; } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/PrevailCloudApi.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/PrevailCloudApi.java index 35da1e2..0adf75f 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/PrevailCloudApi.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/PrevailCloudApi.java @@ -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 getAllPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter); + + List getPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter); + } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/impl/PrevailCloudApiImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/impl/PrevailCloudApiImpl.java index ceea146..fc6cd96 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/impl/PrevailCloudApiImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/impl/PrevailCloudApiImpl.java @@ -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 pullPictureSource(PictureSourceParameter pictureSourceParameter) throws Exception { //1.检查api配置是否正常 - if(!apiConfig.checkConfig()){ + if (!apiConfig.checkConfig()) { return null; } //2.对象转map Map queryParam = BeanUtil.beanToMap(pictureSourceParameter); - Map queryParamStr = new HashMap<>(); + Map 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 resultData =JSONUtil.toBean(responseJsonStr,ResultData.class); + ResultData resultData = JSONUtil.toBean(responseJsonStr, ResultData.class); //解密请求数据 - if(resultData.getStatus()==100){ + if (resultData.getStatus() == 100) { //解析基础数据 String data = ApiHelper.decryptResponse(apiConfig.getAccessCode(), resultData); - ApiPage apiPage = JSONUtil.toBean(data,ApiPage.class); + ApiPage apiPage = JSONUtil.toBean(data, ApiPage.class); //解析数据结果为List - List listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()),PictureSourceResult.class); + List listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()), PictureSourceResult.class); ApiPage 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 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 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 resultData =JSONUtil.toBean(responseJsonStr,ResultData.class); - if(resultData.getStatus()==100){; + ResultData resultData = JSONUtil.toBean(responseJsonStr, ResultData.class); + if (resultData.getStatus() == 100) { + ; //解析基础数据 String data = ApiHelper.decryptResponse(apiConfig.getAccessCode(), resultData); - ApiPage apiPage = JSONUtil.toBean(data,ApiPage.class); + ApiPage apiPage = JSONUtil.toBean(data, ApiPage.class); System.out.println(apiPage); //解析数据结果为List // List listResult = JSONUtil.toList(JSONObject.toJSONString(apiPage.getRecords()),PictureSourceResult.class); @@ -191,7 +194,7 @@ public class PrevailCloudApiImpl implements PrevailCloudApi { ocrPictureLambdaQueryWrapper.isNull(OcrPicture::getLocalpictrueurl); List 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 getAllPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter) { + ApiPage apiPage = null; + List 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 getPictureSourceResultApiPage(PictureSourceParameter pictureSourceParameter) { + ApiPage apiPage = null; + try { + apiPage = this.pullPictureSource(pictureSourceParameter); + } catch (Exception e) { + e.printStackTrace(); + } + + return apiPage == null ? Lists.newArrayList() : apiPage.getRecords(); + } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/utils/ApiConfig.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/utils/ApiConfig.java index 9407bf5..b8d8484 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/utils/ApiConfig.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/api/utils/ApiConfig.java @@ -48,6 +48,11 @@ public class ApiConfig { private String localImagePath; + /** + * 默认图片 + */ + private String defaultPictureImg; + /** * 检查配置文件是否 正确注入 * @return diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/ApiTestController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/ApiTestController.java index cce9ccf..1918120 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/ApiTestController.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/ApiTestController.java @@ -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 departments = departmentMybatisDao.selectList(new QueryWrapper<>()); if (CollectionUtils.isEmpty(departments)) { @@ -152,10 +142,6 @@ public class ApiTestController { Map 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 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 resultList = getPictureSourceResultApiPage(dateTime, dateTime1, Integer.parseInt(pageNo), Integer.parseInt(pageSize), tenantNo, accountNo); + List resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter); if (CollectionUtils.isEmpty(resultList)) { continue; } @@ -185,11 +183,10 @@ public class ApiTestController { if (pictureSourceResult.getLivePhoto() == null) { List> livePhoto = new ArrayList<>(); Map 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 notAddedToQueueTaskIds = new ArrayList<>(); @@ -235,10 +230,6 @@ public class ApiTestController { Map 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 resultList = getPictureSourceResultApiPage(pictureSourceParameter, startInstant, endInstant, currentPage, tenantNo, accountNo); + List resultList = prevailCloudApi.getAllPictureSourceResultApiPage(pictureSourceParameter); if (CollectionUtils.isEmpty(resultList)) { continue; } @@ -346,45 +346,5 @@ public class ApiTestController { } return message; } - - private List 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 apiPage = null; - try { - apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter); - } catch (Exception e) { - e.printStackTrace(); - } - - return apiPage == null ? Lists.newArrayList() : apiPage.getRecords(); - } - - private List 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 apiPage = null; - try { - apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter); - } catch (Exception e) { - e.printStackTrace(); - } - - return apiPage == null ? Lists.newArrayList() : apiPage.getRecords(); - } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java index b78b826..79ae562 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureController.java @@ -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 page = new Page(pageNo, pageSize); - queryWrapper.orderByAsc("complete_similar_group_id"); IPage pageList = ocrPictureService.page(page, queryWrapper); List ocrPictures = pageList.getRecords(); List ocrPicturesNew = new ArrayList<>(); + + Map> completeSimilarGroupMap = ocrPictures.stream().filter(s->Objects.nonNull(s.getCompleteSimilarGroupId())).collect(Collectors.groupingBy(OcrPicture::getCompleteSimilarGroupId)); + for (OcrPicture ocrPictureOne : ocrPictures) { + filterScoreNoGroup(ocrPictureOne,completeSimilarGroupMap); LambdaQueryWrapper 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> 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); + } + } /** * 分页列表查询 * diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureLogController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureLogController.java new file mode 100644 index 0000000..38196fa --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureLogController.java @@ -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> 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 queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("call_status",callStatus); + ResultVo> resultVo = new ResultVo<>(); + ParamterPage paramterPage = new ParamterPage(); + paramterPage.setPagesize(pageSize); + paramterPage.setStart(start); + IPage ocrPictureLogIPage = ocrPictureLogService.selectSearchListPage(paramterPage, queryWrapper); + resultVo.setData(ocrPictureLogIPage); + resultVo.addOK("查询成功"); + return resultVo; + } + + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureLogHtmlController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureLogHtmlController.java new file mode 100644 index 0000000..b16d54e --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrPictureLogHtmlController.java @@ -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"; + } + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrTaskchildDubiousFileController.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrTaskchildDubiousFileController.java index 67f73bb..df14ebf 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrTaskchildDubiousFileController.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/controller/OcrTaskchildDubiousFileController.java @@ -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 oaUserApproveVoList = taskchildPictureMybatisDao.queryHistoricalTask(userToken.getUserid(),one.getId()); + if(CollUtil.isNotEmpty(oaUserApproveVoList)){ + return ResultVoUtil.error("该任务已审批,不能添加可疑文件!"); + } QueryWrapper filewrapper = new QueryWrapper<>(); filewrapper.eq("picture_id",asd).eq("userid",userToken.getUserid()); OcrTaskchildDubiousFile one1 = ocrTaskchildDubiousFileService.getOne(filewrapper); diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrCheckDescribeHisMapper.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrCheckDescribeHisMapper.java new file mode 100644 index 0000000..f6e6b5a --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrCheckDescribeHisMapper.java @@ -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 { +} \ No newline at end of file diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrPictureLogMapper.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrPictureLogMapper.java new file mode 100644 index 0000000..9bdd19a --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrPictureLogMapper.java @@ -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 { +} \ No newline at end of file diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrTaskchildPictureMybatisDao.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrTaskchildPictureMybatisDao.java index 8b295f3..aaae483 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrTaskchildPictureMybatisDao.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataDao/OcrTaskchildPictureMybatisDao.java @@ -47,6 +47,11 @@ public interface OcrTaskchildPictureMybatisDao extends BaseMapper queryApprovalNode(@Param("userId") String userId); + + /** + * 查询当前用户历史任务 + */ + public List queryHistoricalTask(@Param("userId") String userId, @Param("formId") Long formId); /** * 查询当前用户待审批任务 */ diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrCheckDescribeHis.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrCheckDescribeHis.java new file mode 100644 index 0000000..0e8a9e8 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrCheckDescribeHis.java @@ -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; + +} \ No newline at end of file diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrFrontConf.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrFrontConf.java index 05220d7..bfcaf6c 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrFrontConf.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrFrontConf.java @@ -58,4 +58,9 @@ public class OcrFrontConf implements java.io.Serializable { * 拉取租户信息 */ private String tenantSourceUrl; + + /** + * 默认图片 + */ + private String defaultPictureImg; } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java index 66c8a51..825399d 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPicture.java @@ -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; + diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPictureLog.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPictureLog.java new file mode 100644 index 0000000..54bd8bb --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrPictureLog.java @@ -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 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; + } + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPictureAppro.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPictureAppro.java index 2ad729e..c80e5c7 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPictureAppro.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/dataobject/OcrTaskchildPictureAppro.java @@ -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; diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrCheckDescribeHisService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrCheckDescribeHisService.java new file mode 100644 index 0000000..86d7886 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrCheckDescribeHisService.java @@ -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{ + + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureLogService.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureLogService.java new file mode 100644 index 0000000..b7c6dc1 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/OcrPictureLogService.java @@ -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 { + + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrCheckDescribeHisServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrCheckDescribeHisServiceImpl.java new file mode 100644 index 0000000..e64a52c --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrCheckDescribeHisServiceImpl.java @@ -0,0 +1,19 @@ +package cn.jyjz.xiaoyao.ocr.service.impl; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.jyjz.xiaoyao.ocr.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 implements OcrCheckDescribeHisService{ + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrFrontConfServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrFrontConfServiceImpl.java index 5d21de5..992b82c 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrFrontConfServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrFrontConfServiceImpl.java @@ -33,6 +33,7 @@ public class OcrFrontConfServiceImpl extends BaseServiceImpl implements OcrPictureLogService { + +} diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java index 189d4ea..10b69d0 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrPictureServiceImpl.java @@ -330,7 +330,11 @@ public class OcrPictureServiceImpl extends BaseServiceImpl().eq(OcrPictureInfo::getPictureId, ocrPicture.getId())); + ocrPicture.setPictureInfo(one); + if(ObjectUtil.isNotEmpty(one)){ + ocrPicture.getPictureInfo().setCreateTime(ocrPicture.getPhotoDateTimestamp()); + } return ocrPicture; } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrSearchHistoryServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrSearchHistoryServiceImpl.java index 94d6209..7351d5e 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrSearchHistoryServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrSearchHistoryServiceImpl.java @@ -86,10 +86,8 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl 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>>> list = new ArrayList<>(); Map>> 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 ocrTaskchildPictureApproList = new ArrayList<>(); //定义第一审批节点 String taskNodeOne = ""; + Integer taskNode = null; if (oaUserApproveVoList.size() > 0) { Map 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> iterator = formIdToVoMap.entrySet().iterator(); Map.Entry firstEntry = iterator.next(); - taskNodeOne = Integer.toString(firstEntry.getValue().getTaskNode()); + taskNodeOne = firstEntry.getValue().getTaskNode(); + if("100".equals(taskNodeOne)){ + taskNodeOne = "finale_judgment"; + } //获取已经审批的任务ID List formIdList = new ArrayList<>(formIdToVoMap.keySet()); //查询该用户第一节点所有待审任务列表 @@ -225,19 +233,31 @@ public class OcrSearchHistoryServiceImpl extends ServiceImpl ocrTaskchildPictureApproList = new ArrayList<>(); //定义第一审批节点 String taskNodeOne = ""; + Integer taskNode = null; if (oaUserApproveVoList.size() > 0) { Map 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> iterator = formIdToVoMap.entrySet().iterator(); Map.Entry firstEntry = iterator.next(); - taskNodeOne = Integer.toString(firstEntry.getValue().getTaskNode()); + taskNodeOne = firstEntry.getValue().getTaskNode(); + if("100".equals(taskNodeOne)){ + taskNodeOne = "finale_judgment"; + } //获取已经审批的任务ID List formIdList = new ArrayList<>(formIdToVoMap.keySet()); //查询该用户第一节点所有待审任务列表 diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java index d4bab45..420a998 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/service/impl/OcrTaskchildPictureServiceImpl.java @@ -439,6 +439,10 @@ public class OcrTaskchildPictureServiceImpl extends BaseServiceImpl 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(); } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureDisposeTask.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureDisposeTask.java index a01af1c..6d40aa3 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureDisposeTask.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/thread/tasks/PictureDisposeTask.java @@ -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()); //业务主体名称 diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PictureSourceTimerJob.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PictureSourceTimerJob.java index d758d45..85de326 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PictureSourceTimerJob.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PictureSourceTimerJob.java @@ -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 departments = departmentMybatisDao.selectList(new QueryWrapper<>()); @@ -78,29 +79,11 @@ public class PictureSourceTimerJob { Map departmentMap = Maps.newHashMapWithExpectedSize(departments.size()); for (Department department : departments) { - if (department.getDlevel() == 0) { - continue; - } - departmentMap.put(department.getId(), department); } List 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 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 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 apiPage = null; - try { - apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter); - } catch (Exception e) { - e.printStackTrace(); + private List pullData(List departments, Map departmentMap, PictureSourceParameter pictureSourceParameter) { + List 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 resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter); + if (CollectionUtils.isEmpty(resultList)) { + continue; + } + + totalList.addAll(resultList); } - return apiPage == null ? Lists.newArrayList() : apiPage.getRecords(); + return totalList; } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PullPictureDataJob.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PullPictureDataJob.java index c87043d..2a2bf79 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PullPictureDataJob.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/timerJob/PullPictureDataJob.java @@ -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 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 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 resultList = getPictureSourceResultApiPage(dateTime, dateTime1, pageNo, pageSize, tenantNo, accountNo); + List resultList = prevailCloudApi.getPictureSourceResultApiPage(pictureSourceParameter); if (CollectionUtils.isEmpty(resultList)) { continue; } @@ -94,26 +101,4 @@ public class PullPictureDataJob { } System.out.println("当前区间内图片总数:" + count + "条,可处理数据:" + size + "条"); } - - private List 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 apiPage = null; - try { - apiPage = prevailCloudApi.pullPictureSource(pictureSourceParameter); - } catch (Exception e) { - e.printStackTrace(); - } - - return apiPage == null ? Lists.newArrayList() : apiPage.getRecords(); - } } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/ImageClassUtil.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/ImageClassUtil.java index 9cc1346..0f2cc34 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/ImageClassUtil.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/ImageClassUtil.java @@ -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; } + } diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/SearchConfigEnum.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/SearchConfigEnum.java index 75eb0d6..2faf1e2 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/SearchConfigEnum.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/util/SearchConfigEnum.java @@ -35,7 +35,7 @@ public enum SearchConfigEnum { //提报人 UPUSERSEARCH("izupuser","upuserid"), //所属计划 - PLANSEARCH("izplan","planName"), + PLANSEARCH("izplan","planId"), //相似度 SIMISEARCH("izsimilarity","similarity_score"), //分类搜索 diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OaUserApproveVo.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OaUserApproveVo.java index 262def6..d5a1889 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OaUserApproveVo.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OaUserApproveVo.java @@ -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; diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrMsgVO.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrMsgVO.java index 7f68956..49acf11 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrMsgVO.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrMsgVO.java @@ -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 */ diff --git a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrTaskchildPictureApproVo.java b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrTaskchildPictureApproVo.java index 37f2a20..1e1e95a 100644 --- a/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrTaskchildPictureApproVo.java +++ b/jyjz-system/jyjz-system-oa/src/main/java/cn/jyjz/xiaoyao/ocr/vo/OcrTaskchildPictureApproVo.java @@ -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 diff --git a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/FlowableccMapper.xml b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/FlowableccMapper.xml index 9bab79b..ef1c1a7 100644 --- a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/FlowableccMapper.xml +++ b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/FlowableccMapper.xml @@ -35,6 +35,7 @@ + @@ -201,48 +202,58 @@ diff --git a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrCheckDescribeHisMapper.xml b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrCheckDescribeHisMapper.xml new file mode 100644 index 0000000..cfcb497 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrCheckDescribeHisMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + id, pictureId, checkResult, `describe` + + \ No newline at end of file diff --git a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/mapper/oa/OcrPictureInfoMapper.xml b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureInfoMapper.xml similarity index 100% rename from jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/mapper/oa/OcrPictureInfoMapper.xml rename to jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureInfoMapper.xml diff --git a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureLogMapper.xml b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureLogMapper.xml new file mode 100644 index 0000000..1b34b59 --- /dev/null +++ b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureLogMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureMapper.xml b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureMapper.xml index 7c9805c..d499b25 100644 --- a/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureMapper.xml +++ b/jyjz-system/jyjz-system-oa/src/main/resources/mapper/oa/OcrPictureMapper.xml @@ -227,7 +227,6 @@ - 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} + + AND name like "%"#{search}"%" + + AND tenant_id = #{tenantId} + AND is_delete = 0 + ORDER BY + create_time DESC + LIMIT 3 + + - 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 @@ and tcp.ISFINAIL = 1 and pic.suspiciousfile = 0 - - and tcp.ASSIGNEE ${thisLoginUserid.dataOp} ${thisLoginUserid.likestar}#{thisLoginUserid.value}${thisLoginUserid.likeend} + + and FIND_IN_SET(#{thisLoginUserid.value} + , tcp.ASSIGNEE) - - and (tcp.ASSIGNEE ${thisLoginUserid.dataOp} ${thisLoginUserid.likestar}#{thisLoginUserid.value}${thisLoginUserid.likeend} - or tcp.STATES = 5) + + and (FIND_IN_SET(#{thisLoginUserid.value} + , tcp.ASSIGNEE) + or tcp.STATES = 5) @@ -1009,13 +1024,20 @@ - - order by tcp.${page.sortname} ${page.sortorder} - - - ORDER BY CONVERT(pic.${page.sortname} USING gbk) COLLATE gbk_chinese_ci ${page.sortorder} - + + + ORDER BY tcp.${page.sortname} ${page.sortorder}, pic.similarity_score desc + + + ORDER BY CONVERT(pic.${page.sortname} USING gbk) COLLATE gbk_chinese_ci ${page.sortorder} + + + + ORDER BY pic.${page.sortname} ${page.sortorder} + + + limit ${page.start}, ${page.Pagesize} @@ -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